1bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian/* 2bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * Copyright (C) 2014 The Android Open Source Project 3bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * 4bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * Licensed under the Apache License, Version 2.0 (the "License"); 5bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * you may not use this file except in compliance with the License. 6bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * You may obtain a copy of the License at 7bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * 8bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * http://www.apache.org/licenses/LICENSE-2.0 9bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * 10bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * Unless required by applicable law or agreed to in writing, software 11bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * distributed under the License is distributed on an "AS IS" BASIS, 12bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * See the License for the specific language governing permissions and 14bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * limitations under the License. 15bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian */ 16bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 17bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian/* 18bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * The Opus specification is part of IETF RFC 6716: 19bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian * http://tools.ietf.org/html/rfc6716 20bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian */ 21bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 22bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian#ifndef SOFT_OPUS_H_ 23bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 24bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian#define SOFT_OPUS_H_ 25bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 26bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian#include "SimpleSoftOMXComponent.h" 27bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 28bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanianstruct OpusMSDecoder; 29bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 30bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramaniannamespace android { 31bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 32bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanianstruct OpusHeader { 33bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int channels; 34bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int skip_samples; 35bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int channel_mapping; 36bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int num_streams; 37bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int num_coupled; 38bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int16_t gain_db; 39bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian uint8_t stream_map[8]; 40bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian}; 41bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 42bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanianstruct SoftOpus : public SimpleSoftOMXComponent { 43bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian SoftOpus(const char *name, 44bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian const OMX_CALLBACKTYPE *callbacks, 45bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian OMX_PTR appData, 46bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian OMX_COMPONENTTYPE **component); 47bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 48bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanianprotected: 49bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian virtual ~SoftOpus(); 50bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 51bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian virtual OMX_ERRORTYPE internalGetParameter( 52bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian OMX_INDEXTYPE index, OMX_PTR params); 53bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 54bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian virtual OMX_ERRORTYPE internalSetParameter( 55bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian OMX_INDEXTYPE index, const OMX_PTR params); 56bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 57bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian virtual void onQueueFilled(OMX_U32 portIndex); 58bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian virtual void onPortFlushCompleted(OMX_U32 portIndex); 59bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian virtual void onPortEnableCompleted(OMX_U32 portIndex, bool enabled); 60bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian virtual void onReset(); 61bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 62bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanianprivate: 63bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian enum { 64bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kNumBuffers = 4, 65bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kMaxNumSamplesPerBuffer = 960 * 6 66bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian }; 67bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 68bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian size_t mInputBufferCount; 69bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 70bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian OpusMSDecoder *mDecoder; 71bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian OpusHeader *mHeader; 72bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 73bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int64_t mCodecDelay; 74bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int64_t mSeekPreRoll; 75bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int64_t mSamplesToDiscard; 76bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int64_t mAnchorTimeUs; 77bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian int64_t mNumFramesOutput; 78bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 79bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian enum { 80bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian NONE, 81bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian AWAITING_DISABLED, 82bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian AWAITING_ENABLED 83bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian } mOutputPortSettingsChange; 84bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 85bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian void initPorts(); 86bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian status_t initDecoder(); 87bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian bool isConfigured() const; 88bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 89bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian DISALLOW_EVIL_CONSTRUCTORS(SoftOpus); 90bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian}; 91bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 92bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian} // namespace android 93bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian 94bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian#endif // SOFT_OPUS_H_ 95