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