1ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen/*
2ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * Copyright (C) 2012 The Android Open Source Project
3ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen *
4ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * Licensed under the Apache License, Version 2.0 (the "License");
5ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * you may not use this file except in compliance with the License.
6ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * You may obtain a copy of the License at
7ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen *
8ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen *      http://www.apache.org/licenses/LICENSE-2.0
9ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen *
10ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * Unless required by applicable law or agreed to in writing, software
11ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * distributed under the License is distributed on an "AS IS" BASIS,
12ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * See the License for the specific language governing permissions and
14ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen * limitations under the License.
15ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen */
16ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
17ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen#ifndef SOFT_GSM_H_
18ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
19ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen#define SOFT_GSM_H_
20ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
21ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen#include "SimpleSoftOMXComponent.h"
22ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
23ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissenextern "C" {
24ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen#include "gsm.h"
25ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen}
26ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
27ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissennamespace android {
28ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
29ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissenstruct SoftGSM : public SimpleSoftOMXComponent {
30ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    SoftGSM(const char *name,
31ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen            const OMX_CALLBACKTYPE *callbacks,
32ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen            OMX_PTR appData,
33ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen            OMX_COMPONENTTYPE **component);
34ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
35ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissenprotected:
36ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    virtual ~SoftGSM();
37ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
38ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    virtual OMX_ERRORTYPE internalGetParameter(
39ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen            OMX_INDEXTYPE index, OMX_PTR params);
40ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
41ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    virtual OMX_ERRORTYPE internalSetParameter(
42ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen            OMX_INDEXTYPE index, const OMX_PTR params);
43ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
44ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    virtual void onQueueFilled(OMX_U32 portIndex);
45ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
46ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissenprivate:
47ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    enum {
48ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen        kNumBuffers = 4,
49ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen        kMaxNumSamplesPerFrame = 16384,
50ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    };
51ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
52ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    bool mSignalledError;
53ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    gsm mGsm;
54ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
55ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    void initPorts();
56ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
57ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    static int DecodeGSM(gsm handle, int16_t *out, uint8_t *in, size_t inSize);
58ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
59ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen    DISALLOW_EVIL_CONSTRUCTORS(SoftGSM);
60ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen};
61ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
62ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen}  // namespace android
63ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
64ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen#endif  // SOFT_GSM_H_
65ba933df89521d63f75ca66af12ce9d7ae9496b9eMarco Nelissen
66