12ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen/*
22ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * Copyright (C) 2012 The Android Open Source Project
32ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen *
42ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License");
52ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * you may not use this file except in compliance with the License.
62ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * You may obtain a copy of the License at
72ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen *
82ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen *      http://www.apache.org/licenses/LICENSE-2.0
92ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen *
102ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * Unless required by applicable law or agreed to in writing, software
112ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS,
122ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * See the License for the specific language governing permissions and
142ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen * limitations under the License.
152ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen */
162ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
172ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen#ifndef SOFT_GSM_H_
182ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
192ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen#define SOFT_GSM_H_
202ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
21255735a38b9d5c3755c7b819bdc8fdaf4357d860Pawin Vongmasa#include <media/stagefright/omx/SimpleSoftOMXComponent.h>
222ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
232ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissenextern "C" {
242ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen#include "gsm.h"
252ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen}
262ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
272ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissennamespace android {
282ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
292ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissenstruct SoftGSM : public SimpleSoftOMXComponent {
302ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    SoftGSM(const char *name,
312ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen            const OMX_CALLBACKTYPE *callbacks,
322ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen            OMX_PTR appData,
332ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen            OMX_COMPONENTTYPE **component);
342ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
352ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissenprotected:
362ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    virtual ~SoftGSM();
372ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
382ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    virtual OMX_ERRORTYPE internalGetParameter(
392ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen            OMX_INDEXTYPE index, OMX_PTR params);
402ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
412ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    virtual OMX_ERRORTYPE internalSetParameter(
422ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen            OMX_INDEXTYPE index, const OMX_PTR params);
432ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
442ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    virtual void onQueueFilled(OMX_U32 portIndex);
452ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
46cafe4d8511d4e8185d177b367c1f0b764f9a1789Marco Nelissen    virtual void onPortFlushCompleted(OMX_U32 portIndex);
47cafe4d8511d4e8185d177b367c1f0b764f9a1789Marco Nelissen    virtual void onReset();
48cafe4d8511d4e8185d177b367c1f0b764f9a1789Marco Nelissen
492ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissenprivate:
502ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    enum {
512ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen        kNumBuffers = 4,
522ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen        kMaxNumSamplesPerFrame = 16384,
532ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    };
542ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
552ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    bool mSignalledError;
562ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    gsm mGsm;
572ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
582ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    void initPorts();
592ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
602ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    static int DecodeGSM(gsm handle, int16_t *out, uint8_t *in, size_t inSize);
612ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
622ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen    DISALLOW_EVIL_CONSTRUCTORS(SoftGSM);
632ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen};
642ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
652ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen}  // namespace android
662ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
672ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen#endif  // SOFT_GSM_H_
682ed5cf016c1b45426ae25ab105e02ff4bb992f28Marco Nelissen
69