ACodec.h revision 89869f692c35d0ca914c7de4a1f5ff63c9920634
1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (C) 2010 The Android Open Source Project 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Licensed under the Apache License, Version 2.0 (the "License"); 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * you may not use this file except in compliance with the License. 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * You may obtain a copy of the License at 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * http://www.apache.org/licenses/LICENSE-2.0 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Unless required by applicable law or agreed to in writing, software 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * distributed under the License is distributed on an "AS IS" BASIS, 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * See the License for the specific language governing permissions and 143f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org * limitations under the License. 153f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org */ 16d4682361fd4d284657e4e33ca5f022cc8ea8f468andrew@webrtc.org 17d4682361fd4d284657e4e33ca5f022cc8ea8f468andrew@webrtc.org#ifndef A_CODEC_H_ 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#define A_CODEC_H_ 20856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org 21856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#include <stdint.h> 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <android/native_window.h> 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <media/IOMX.h> 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <media/stagefright/foundation/AHierarchicalStateMachine.h> 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <media/stagefright/CodecBase.h> 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <media/stagefright/SkipCutBuffer.h> 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <OMX_Audio.h> 28856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org 29856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#define TRACK_BUFFER_TIMING 0 306696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org 316696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.orgnamespace android { 326696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org 336696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.orgstruct ABuffer; 346696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.orgstruct MemoryDealer; 356696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.orgstruct DescribeColorFormatParams; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstruct ACodec : public AHierarchicalStateMachine, public CodecBase { 386696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org ACodec(); 396696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org 400486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org virtual void setNotificationMessage(const sp<AMessage> &msg); 410486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 420486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org void initiateSetup(const sp<AMessage> &msg); 436696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org 440486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org virtual void initiateAllocateComponent(const sp<AMessage> &msg); 456696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org virtual void initiateConfigureComponent(const sp<AMessage> &msg); 460486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org virtual void initiateCreateInputSurface(); 476696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org virtual void initiateStart(); 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void initiateShutdown(bool keepComponentAllocated = false); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void signalFlush(); 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void signalResume(); 520486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 530486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org virtual void signalSetParameters(const sp<AMessage> &msg); 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void signalEndOfInputStream(); 550486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org virtual void signalRequestIDRFrame(); 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // AHierarchicalStateMachine implements the message handling 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void onMessageReceived(const sp<AMessage> &msg) { 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org handleMessage(msg); 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct PortDescription : public CodecBase::PortDescription { 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t countBuffers(); 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org IOMX::buffer_id bufferIDAt(size_t index) const; 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<ABuffer> bufferAt(size_t index) const; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org friend struct ACodec; 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Vector<IOMX::buffer_id> mBufferIDs; 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Vector<sp<ABuffer> > mBuffers; 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PortDescription(); 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void addBuffer(IOMX::buffer_id id, const sp<ABuffer> &buffer); 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 790486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.orgprotected: 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~ACodec(); 810486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 830486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org struct BaseState; 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct UninitializedState; 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct LoadedState; 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct LoadedToIdleState; 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct IdleToExecutingState; 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct ExecutingState; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct OutputPortSettingsChangedState; 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct ExecutingToIdleState; 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct IdleToLoadedState; 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct FlushingState; 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct DeathNotifier; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum { 960ba496bf33feea212277927f212b4b02556c8f8btnakamura@webrtc.org kWhatSetup = 'setu', 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWhatOMXMessage = 'omx ', 980ba496bf33feea212277927f212b4b02556c8f8btnakamura@webrtc.org kWhatInputBufferFilled = 'inpF', 990ba496bf33feea212277927f212b4b02556c8f8btnakamura@webrtc.org kWhatOutputBufferDrained = 'outD', 1000ba496bf33feea212277927f212b4b02556c8f8btnakamura@webrtc.org kWhatShutdown = 'shut', 1010ba496bf33feea212277927f212b4b02556c8f8btnakamura@webrtc.org kWhatFlush = 'flus', 1020ba496bf33feea212277927f212b4b02556c8f8btnakamura@webrtc.org kWhatResume = 'resm', 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWhatDrainDeferredMessages = 'drai', 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWhatAllocateComponent = 'allo', 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWhatConfigureComponent = 'conf', 1060486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org kWhatCreateInputSurface = 'cisf', 1070486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org kWhatSignalEndOfInputStream = 'eois', 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWhatStart = 'star', 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWhatRequestIDRFrame = 'ridr', 1100486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org kWhatSetParameters = 'setP', 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWhatSubmitOutputMetaDataBufferIfEOS = 'subm', 1120ba496bf33feea212277927f212b4b02556c8f8btnakamura@webrtc.org kWhatOMXDied = 'OMXd', 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum { 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kPortIndexInput = 0, 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kPortIndexOutput = 1 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum { 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kFlagIsSecure = 1, 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kFlagPushBlankBuffersToNativeWindowOnShutdown = 2, 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct BufferInfo { 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum Status { 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OWNED_BY_US, 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OWNED_BY_COMPONENT, 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OWNED_BY_UPSTREAM, 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OWNED_BY_DOWNSTREAM, 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OWNED_BY_NATIVE_WINDOW, 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org IOMX::buffer_id mBufferID; 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Status mStatus; 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned mDequeuedAt; 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<ABuffer> mData; 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<GraphicBuffer> mGraphicBuffer; 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if TRACK_BUFFER_TIMING 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct BufferStats { 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int64_t mEmptyBufferTimeUs; 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int64_t mFillBufferDoneTimeUs; 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 147856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org KeyedVector<int64_t, BufferStats> mBufferStats; 149856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#endif 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org sp<AMessage> mNotify; 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<UninitializedState> mUninitializedState; 154856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org sp<LoadedState> mLoadedState; 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<LoadedToIdleState> mLoadedToIdleState; 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<IdleToExecutingState> mIdleToExecutingState; 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<ExecutingState> mExecutingState; 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState; 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<ExecutingToIdleState> mExecutingToIdleState; 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<IdleToLoadedState> mIdleToLoadedState; 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<FlushingState> mFlushingState; 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<SkipCutBuffer> mSkipCutBuffer; 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AString mComponentName; 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t mFlags; 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t mQuirks; 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<IOMX> mOMX; 168856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org IOMX::node_id mNode; 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<MemoryDealer> mDealer[2]; 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 171856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org sp<ANativeWindow> mNativeWindow; 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sp<AMessage> mInputFormat; 1730486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org sp<AMessage> mOutputFormat; 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 175856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org Vector<BufferInfo> mBuffers[2]; 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool mPortEOS[2]; 1770486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t mInputEOSResult; 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 179856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org List<sp<AMessage> > mDeferredQueue; 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1810486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org bool mSentFormat; 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool mIsEncoder; 183856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org bool mUseMetadataOnEncoderOutput; 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool mShutdownInProgress; 1850486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org bool mExplicitShutdown; 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // If "mKeepComponentAllocated" we only transition back to Loaded state 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // and do not release the component instance. 189856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org bool mKeepComponentAllocated; 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int32_t mEncoderDelay; 192856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org int32_t mEncoderPadding; 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int32_t mRotationDegrees; 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 195856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org bool mChannelMaskPresent; 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int32_t mChannelMask; 197856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org unsigned mDequeueCounter; 1980486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org bool mStoreMetaDataInOutputBuffers; 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int32_t mMetaDataBuffersToSubmit; 200856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org size_t mNumUndequeuedBuffers; 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 202856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org int64_t mRepeatFrameDelayUs; 2030486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org int64_t mMaxPtsGapUs; 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 205856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org int64_t mTimePerFrameUs; 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int64_t mTimePerCaptureUs; 207856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org 2080486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org bool mCreateInputBuffersSuspended; 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 210856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org status_t setCyclicIntraMacroblockRefresh(const sp<AMessage> &msg, int32_t mode); 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t allocateBuffersOnPort(OMX_U32 portIndex); 212856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org status_t freeBuffersOnPort(OMX_U32 portIndex); 2130486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t freeBuffer(OMX_U32 portIndex, size_t i); 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t configureOutputBuffersFromNativeWindow( 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OMX_U32 *nBufferCount, OMX_U32 *nBufferSize, 217856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org OMX_U32 *nMinUndequeuedBuffers); 2180486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t allocateOutputMetaDataBuffers(); 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t submitOutputMetaDataBuffer(); 220856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org void signalSubmitOutputMetaDataBufferIfEOS_workaround(); 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t allocateOutputBuffersFromNativeWindow(); 2220486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t cancelBufferToNativeWindow(BufferInfo *info); 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t freeOutputBuffersNotOwnedByComponent(); 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BufferInfo *dequeueBufferFromNativeWindow(); 2250486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2260486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org BufferInfo *findBufferByID( 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t portIndex, IOMX::buffer_id bufferID, 2280486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org ssize_t *index = NULL); 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2300486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setComponentRole(bool isEncoder, const char *mime); 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t configureCodec(const char *mime, const sp<AMessage> &msg); 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setVideoPortFormatType( 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OMX_U32 portIndex, 2350486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org OMX_VIDEO_CODINGTYPE compressionFormat, 2360486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org OMX_COLOR_FORMATTYPE colorFormat); 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2380486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setSupportedOutputFormat(); 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2400486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setupVideoDecoder( 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char *mime, const sp<AMessage> &msg); 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setupVideoEncoder( 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char *mime, const sp<AMessage> &msg); 2450486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2460486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setVideoFormatOnPort( 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OMX_U32 portIndex, 2480486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org int32_t width, int32_t height, 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OMX_VIDEO_CODINGTYPE compressionFormat); 2500486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setupAACCodec( 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool encoder, 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int32_t numChannels, int32_t sampleRate, int32_t bitRate, 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int32_t aacProfile, bool isADTS); 2550486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2560486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2580486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t selectAudioPortFormat( 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); 2600486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setupG711Codec(bool encoder, int32_t numChannels); 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setupFlacCodec( 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2670486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setupRawAudioFormat( 2680486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); 2690486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2700486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setMinBufferSize(OMX_U32 portIndex, size_t size); 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2720486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setupMPEG4EncoderParameters(const sp<AMessage> &msg); 273856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org status_t setupH263EncoderParameters(const sp<AMessage> &msg); 274856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org status_t setupAVCEncoderParameters(const sp<AMessage> &msg); 275856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org status_t setupHEVCEncoderParameters(const sp<AMessage> &msg); 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setupVPXEncoderParameters(const sp<AMessage> &msg); 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t verifySupportForProfileAndLevel(int32_t profile, int32_t level); 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t configureBitrate( 2810486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); 2820486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2830486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t setupErrorCorrectionParameters(); 2840486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2850486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t initNativeWindow(); 2860486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2870486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org status_t pushBlankBuffersToNativeWindow(); 2880486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2890486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org // Returns true iff all buffers on the given port have status 2900486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org // OWNED_BY_US or OWNED_BY_NATIVE_WINDOW. 2910486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org bool allYourBuffersAreBelongToUs(OMX_U32 portIndex); 2920486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2930486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org bool allYourBuffersAreBelongToUs(); 2940486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2950486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org void waitUntilAllPossibleNativeWindowBuffersAreReturnedToUs(); 2960486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 2970486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org size_t countBuffersOwnedByComponent(OMX_U32 portIndex) const; 2980486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org size_t countBuffersOwnedByNativeWindow() const; 2990486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org 3000486a10044b3af7e612e7e5c26051cc23bea12b1pbos@webrtc.org void deferMessage(const sp<AMessage> &msg); 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void processDeferredMessages(); 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void sendFormatChange(const sp<AMessage> &reply); 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t getPortFormat(OMX_U32 portIndex, sp<AMessage> ¬ify); 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void signalError( 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OMX_ERRORTYPE error = OMX_ErrorUndefined, 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t internalError = UNKNOWN_ERROR); 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static void describeDefaultColorFormat(DescribeColorFormatParams &describeParams); 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t requestIDRFrame(); 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status_t setParameters(const sp<AMessage> ¶ms); 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Send EOS on input stream. 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void onSignalEndOfInputStream(); 317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DISALLOW_EVIL_CONSTRUCTORS(ACodec); 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 3202a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org 3212a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org} // namespace android 3222a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org 3230329e591cd17957836fd295ae9b31f7d3a73e5e8fischman@webrtc.org#endif // A_CODEC_H_ 3242a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org