ACodec.h revision d8cbe4a024ef54adf043b6ea31fa22271b8b2c51
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2010 The Android Open Source Project 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Unless required by applicable law or agreed to in writing, software 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * See the License for the specific language governing permissions and 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License. 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef A_CODEC_H_ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define A_CODEC_H_ 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <stdint.h> 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <android/native_window.h> 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <media/IOMX.h> 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <media/stagefright/foundation/AHierarchicalStateMachine.h> 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <media/stagefright/CodecBase.h> 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <media/stagefright/SkipCutBuffer.h> 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <OMX_Audio.h> 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define TRACK_BUFFER_TIMING 0 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace android { 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct ABuffer; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MemoryDealer; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ACodec : public AHierarchicalStateMachine, public CodecBase { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ACodec(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setNotificationMessage(const sp<AMessage> &msg); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void initiateSetup(const sp<AMessage> &msg); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void initiateAllocateComponent(const sp<AMessage> &msg); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void initiateConfigureComponent(const sp<AMessage> &msg); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void initiateCreateInputSurface(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void initiateStart(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void initiateShutdown(bool keepComponentAllocated = false); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void signalFlush(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void signalResume(); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void signalSetParameters(const sp<AMessage> &msg); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void signalEndOfInputStream(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void signalRequestIDRFrame(); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AHierarchicalStateMachine implements the message handling 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onMessageReceived(const sp<AMessage> &msg) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleMessage(msg); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct PortDescription : public CodecBase::PortDescription { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t countBuffers(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IOMX::buffer_id bufferIDAt(size_t index) const; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sp<ABuffer> bufferAt(size_t index) const; 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct ACodec; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Vector<IOMX::buffer_id> mBufferIDs; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Vector<sp<ABuffer> > mBuffers; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PortDescription(); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void addBuffer(IOMX::buffer_id id, const sp<ABuffer> &buffer); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)protected: 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ~ACodec(); 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)private: 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct BaseState; 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) struct UninitializedState; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct LoadedState; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct LoadedToIdleState; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct IdleToExecutingState; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct ExecutingState; 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct OutputPortSettingsChangedState; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ExecutingToIdleState; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct IdleToLoadedState; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct FlushingState; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct DeathNotifier; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) enum { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kWhatSetup = 'setu', 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kWhatOMXMessage = 'omx ', 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kWhatInputBufferFilled = 'inpF', 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kWhatOutputBufferDrained = 'outD', 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kWhatShutdown = 'shut', 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kWhatFlush = 'flus', 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kWhatResume = 'resm', 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kWhatDrainDeferredMessages = 'drai', 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kWhatAllocateComponent = 'allo', 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kWhatConfigureComponent = 'conf', 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kWhatCreateInputSurface = 'cisf', 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kWhatSignalEndOfInputStream = 'eois', 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kWhatStart = 'star', 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kWhatRequestIDRFrame = 'ridr', 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kWhatSetParameters = 'setP', 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kWhatSubmitOutputMetaDataBufferIfEOS = 'subm', 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kWhatOMXDied = 'OMXd', 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum { 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kPortIndexInput = 0, 11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kPortIndexOutput = 1 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) }; 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) enum { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagIsSecure = 1, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFlagPushBlankBuffersToNativeWindowOnShutdown = 2, 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct BufferInfo { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Status { 126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) OWNED_BY_US, 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) OWNED_BY_COMPONENT, 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OWNED_BY_UPSTREAM, 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OWNED_BY_DOWNSTREAM, 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OWNED_BY_NATIVE_WINDOW, 131424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IOMX::buffer_id mBufferID; 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Status mStatus; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned mDequeuedAt; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<ABuffer> mData; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<GraphicBuffer> mGraphicBuffer; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if TRACK_BUFFER_TIMING 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct BufferStats { 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t mEmptyBufferTimeUs; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t mFillBufferDoneTimeUs; 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyedVector<int64_t, BufferStats> mBufferStats; 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp<AMessage> mNotify; 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp<UninitializedState> mUninitializedState; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp<LoadedState> mLoadedState; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp<LoadedToIdleState> mLoadedToIdleState; 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<IdleToExecutingState> mIdleToExecutingState; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<ExecutingState> mExecutingState; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<ExecutingToIdleState> mExecutingToIdleState; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<IdleToLoadedState> mIdleToLoadedState; 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<FlushingState> mFlushingState; 161868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sp<SkipCutBuffer> mSkipCutBuffer; 162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AString mComponentName; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32_t mFlags; 165d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) uint32_t mQuirks; 166d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) sp<IOMX> mOMX; 167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) IOMX::node_id mNode; 168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) sp<MemoryDealer> mDealer[2]; 169d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 170d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) sp<ANativeWindow> mNativeWindow; 171d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) sp<AMessage> mInputFormat; 172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) sp<AMessage> mOutputFormat; 173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 17458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Vector<BufferInfo> mBuffers[2]; 175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool mPortEOS[2]; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t mInputEOSResult; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) List<sp<AMessage> > mDeferredQueue; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool mSentFormat; 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool mIsEncoder; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mUseMetadataOnEncoderOutput; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mShutdownInProgress; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mExplicitShutdown; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If "mKeepComponentAllocated" we only transition back to Loaded state 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and do not release the component instance. 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool mKeepComponentAllocated; 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int32_t mEncoderDelay; 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t mEncoderPadding; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mChannelMaskPresent; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t mChannelMask; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned mDequeueCounter; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mStoreMetaDataInOutputBuffers; 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t mMetaDataBuffersToSubmit; 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t mNumUndequeuedBuffers; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t mRepeatFrameDelayUs; 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t mMaxPtsGapUs; 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t mTimePerFrameUs; 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64_t mTimePerCaptureUs; 20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool mCreateInputBuffersSuspended; 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) status_t setCyclicIntraMacroblockRefresh(const sp<AMessage> &msg, int32_t mode); 20958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) status_t allocateBuffersOnPort(OMX_U32 portIndex); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t freeBuffersOnPort(OMX_U32 portIndex); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t freeBuffer(OMX_U32 portIndex, size_t i); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t configureOutputBuffersFromNativeWindow( 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OMX_U32 *nBufferCount, OMX_U32 *nBufferSize, 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OMX_U32 *nMinUndequeuedBuffers); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t allocateOutputMetaDataBuffers(); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t submitOutputMetaDataBuffer(); 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void signalSubmitOutputMetaDataBufferIfEOS_workaround(); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t allocateOutputBuffersFromNativeWindow(); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t cancelBufferToNativeWindow(BufferInfo *info); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t freeOutputBuffersNotOwnedByComponent(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BufferInfo *dequeueBufferFromNativeWindow(); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BufferInfo *findBufferByID( 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32_t portIndex, IOMX::buffer_id bufferID, 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ssize_t *index = NULL); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t setComponentRole(bool isEncoder, const char *mime); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t configureCodec(const char *mime, const sp<AMessage> &msg); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) status_t setVideoPortFormatType( 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OMX_U32 portIndex, 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OMX_VIDEO_CODINGTYPE compressionFormat, 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OMX_COLOR_FORMATTYPE colorFormat); 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status_t setSupportedOutputFormat(); 237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status_t setupVideoDecoder( 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char *mime, int32_t width, int32_t height); 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status_t setupVideoEncoder( 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char *mime, const sp<AMessage> &msg); 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status_t setVideoFormatOnPort( 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OMX_U32 portIndex, 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t width, int32_t height, 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OMX_VIDEO_CODINGTYPE compressionFormat); 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t setupAACCodec( 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool encoder, 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t numChannels, int32_t sampleRate, int32_t bitRate, 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t aacProfile, bool isADTS); 25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); 25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 25690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) status_t selectAudioPortFormat( 25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) status_t setupG711Codec(bool encoder, int32_t numChannels); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) status_t setupFlacCodec( 263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); 264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) status_t setupRawAudioFormat( 266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); 267424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 268424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) status_t setMinBufferSize(OMX_U32 portIndex, size_t size); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t setupMPEG4EncoderParameters(const sp<AMessage> &msg); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t setupH263EncoderParameters(const sp<AMessage> &msg); 272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) status_t setupAVCEncoderParameters(const sp<AMessage> &msg); 273f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) status_t setupHEVCEncoderParameters(const sp<AMessage> &msg); 274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) status_t setupVPXEncoderParameters(const sp<AMessage> &msg); 275f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 276f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) status_t verifySupportForProfileAndLevel(int32_t profile, int32_t level); 277f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 278f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) status_t configureBitrate( 279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); 280a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t setupErrorCorrectionParameters(); 282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t initNativeWindow(); 284a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t pushBlankBuffersToNativeWindow(); 286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns true iff all buffers on the given port have status 288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // OWNED_BY_US or OWNED_BY_NATIVE_WINDOW. 289a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool allYourBuffersAreBelongToUs(OMX_U32 portIndex); 290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool allYourBuffersAreBelongToUs(); 292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void waitUntilAllPossibleNativeWindowBuffersAreReturnedToUs(); 294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 295a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t countBuffersOwnedByComponent(OMX_U32 portIndex) const; 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t countBuffersOwnedByNativeWindow() const; 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 298a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void deferMessage(const sp<AMessage> &msg); 299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void processDeferredMessages(); 300a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 301a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void sendFormatChange(const sp<AMessage> &reply); 302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t getPortFormat(OMX_U32 portIndex, sp<AMessage> ¬ify); 303a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void signalError( 305a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OMX_ERRORTYPE error = OMX_ErrorUndefined, 306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t internalError = UNKNOWN_ERROR); 307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 308a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t requestIDRFrame(); 309a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t setParameters(const sp<AMessage> ¶ms); 310a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 311a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Send EOS on input stream. 312a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void onSignalEndOfInputStream(); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_EVIL_CONSTRUCTORS(ACodec); 315424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 316424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace android 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // A_CODEC_H_ 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)