ACodec.h revision 7e7013392e302a28364df1dcee79b82ad90978b4
1a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/* 2a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall * Copyright (C) 2010 The Android Open Source Project 304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * 404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * Licensed under the Apache License, Version 2.0 (the "License"); 504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * you may not use this file except in compliance with the License. 604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * You may obtain a copy of the License at 704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * 804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * http://www.apache.org/licenses/LICENSE-2.0 904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * 1004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * Unless required by applicable law or agreed to in writing, software 1104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * distributed under the License is distributed on an "AS IS" BASIS, 1204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * See the License for the specific language governing permissions and 1404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * limitations under the License. 1504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall */ 1604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#ifndef A_CODEC_H_ 1804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#define A_CODEC_H_ 2004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <stdint.h> 2204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <android/native_window.h> 2304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <media/IOMX.h> 2404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <media/stagefright/foundation/AHierarchicalStateMachine.h> 2504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <media/stagefright/SkipCutBuffer.h> 2604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <OMX_Audio.h> 2704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#define TRACK_BUFFER_TIMING 0 2904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallnamespace android { 3104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct ABuffer; 3304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct MemoryDealer; 3404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct ACodec : public AHierarchicalStateMachine { 3604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall enum { 3704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatFillThisBuffer = 'fill', 3804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatDrainThisBuffer = 'drai', 3904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatEOS = 'eos ', 4004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatShutdownCompleted = 'scom', 4104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatFlushCompleted = 'fcom', 4204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatOutputFormatChanged = 'outC', 4304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatError = 'erro', 44a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall kWhatComponentAllocated = 'cAll', 455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatComponentConfigured = 'cCon', 465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatInputSurfaceCreated = 'isfc', 47a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall kWhatSignaledInputEOS = 'seos', 48a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall kWhatBuffersAllocated = 'allc', 4904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatOMXDied = 'OMXd', 5004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall }; 5104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 5204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall ACodec(); 5304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 54a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall void setNotificationMessage(const sp<AMessage> &msg); 55a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall void initiateSetup(const sp<AMessage> &msg); 5604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void signalFlush(); 57a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall void signalResume(); 5804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void initiateShutdown(bool keepComponentAllocated = false); 59a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall 6004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void signalSetParameters(const sp<AMessage> &msg); 6104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void signalEndOfInputStream(); 625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 63a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall void initiateAllocateComponent(const sp<AMessage> &msg); 645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall void initiateConfigureComponent(const sp<AMessage> &msg); 655ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall void initiateCreateInputSurface(); 6604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void initiateStart(); 6704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 6804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void signalRequestIDRFrame(); 6904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 7004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall struct PortDescription : public RefBase { 71a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall size_t countBuffers(); 7204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall IOMX::buffer_id bufferIDAt(size_t index) const; 7304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall sp<ABuffer> bufferAt(size_t index) const; 7404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 7504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall private: 7604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall friend struct ACodec; 7704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 7804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall Vector<IOMX::buffer_id> mBufferIDs; 7904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall Vector<sp<ABuffer> > mBuffers; 8004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 8104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall PortDescription(); 8204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void addBuffer(IOMX::buffer_id id, const sp<ABuffer> &buffer); 8304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 8404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 8504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall }; 8604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 8704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallprotected: 8804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall virtual ~ACodec(); 8904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 9004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallprivate: 9104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall struct BaseState; 9204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall struct UninitializedState; 9304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall struct LoadedState; 945ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct LoadedToIdleState; 955ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct IdleToExecutingState; 965ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct ExecutingState; 975ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct OutputPortSettingsChangedState; 985ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct ExecutingToIdleState; 995ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct IdleToLoadedState; 1005ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct FlushingState; 1015ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct DeathNotifier; 1025ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1035ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall enum { 1045ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatSetup = 'setu', 1055ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatOMXMessage = 'omx ', 1065ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatInputBufferFilled = 'inpF', 1075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatOutputBufferDrained = 'outD', 1085ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatShutdown = 'shut', 1095ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatFlush = 'flus', 11004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatResume = 'resm', 11104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatDrainDeferredMessages = 'drai', 11204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall kWhatAllocateComponent = 'allo', 113a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall kWhatConfigureComponent = 'conf', 114a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall kWhatCreateInputSurface = 'cisf', 115a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall kWhatSignalEndOfInputStream = 'eois', 116a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall kWhatStart = 'star', 117a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall kWhatRequestIDRFrame = 'ridr', 1185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kWhatSetParameters = 'setP', 1195ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall }; 12004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall enum { 1225ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kPortIndexInput = 0, 1235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kPortIndexOutput = 1 1245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall }; 125606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall 126606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall enum { 1275ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall kFlagIsSecure = 1, 12804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall }; 1295ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 13004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall struct BufferInfo { 13104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall enum Status { 13204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OWNED_BY_US, 13304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OWNED_BY_COMPONENT, 13404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OWNED_BY_UPSTREAM, 13504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OWNED_BY_DOWNSTREAM, 13604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OWNED_BY_NATIVE_WINDOW, 13704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall }; 1385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1395ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall IOMX::buffer_id mBufferID; 1405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall Status mStatus; 1415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1425ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<ABuffer> mData; 143fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall sp<GraphicBuffer> mGraphicBuffer; 1445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall }; 1455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall#if TRACK_BUFFER_TIMING 1475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall struct BufferStats { 1485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall int64_t mEmptyBufferTimeUs; 1495ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall int64_t mFillBufferDoneTimeUs; 1505ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall }; 1515ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall KeyedVector<int64_t, BufferStats> mBufferStats; 1535ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall#endif 1545ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1555ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<AMessage> mNotify; 1565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1575ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<UninitializedState> mUninitializedState; 1585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<LoadedState> mLoadedState; 1595ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<LoadedToIdleState> mLoadedToIdleState; 1605ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<IdleToExecutingState> mIdleToExecutingState; 1615ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<ExecutingState> mExecutingState; 1625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState; 1635ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<ExecutingToIdleState> mExecutingToIdleState; 1645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<IdleToLoadedState> mIdleToLoadedState; 1655ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<FlushingState> mFlushingState; 1665ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<SkipCutBuffer> mSkipCutBuffer; 1675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall AString mComponentName; 1695ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall uint32_t mFlags; 1705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall uint32_t mQuirks; 1715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<IOMX> mOMX; 1725ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall IOMX::node_id mNode; 1735ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<MemoryDealer> mDealer[2]; 1745ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall sp<ANativeWindow> mNativeWindow; 1765ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall Vector<BufferInfo> mBuffers[2]; 1785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall bool mPortEOS[2]; 1795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall status_t mInputEOSResult; 1805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 181fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall List<sp<AMessage> > mDeferredQueue; 18203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 18303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall bool mSentFormat; 18403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall bool mIsEncoder; 185a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall 18604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall bool mShutdownInProgress; 187a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall 188a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall // If "mKeepComponentAllocated" we only transition back to Loaded state 18904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall // and do not release the component instance. 19004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall bool mKeepComponentAllocated; 19104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 19204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall int32_t mEncoderDelay; 19303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall int32_t mEncoderPadding; 19403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 19503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall bool mChannelMaskPresent; 19603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall int32_t mChannelMask; 19703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 19803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall status_t setCyclicIntraMacroblockRefresh(const sp<AMessage> &msg, int32_t mode); 19903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall status_t allocateBuffersOnPort(OMX_U32 portIndex); 20003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall status_t freeBuffersOnPort(OMX_U32 portIndex); 20103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall status_t freeBuffer(OMX_U32 portIndex, size_t i); 20203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 20303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall status_t allocateOutputBuffersFromNativeWindow(); 20403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall status_t cancelBufferToNativeWindow(BufferInfo *info); 20503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall status_t freeOutputBuffersNotOwnedByComponent(); 20603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall BufferInfo *dequeueBufferFromNativeWindow(); 20703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 20803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall BufferInfo *findBufferByID( 20903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall uint32_t portIndex, IOMX::buffer_id bufferID, 21003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall ssize_t *index = NULL); 21104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 21204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setComponentRole(bool isEncoder, const char *mime); 21304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t configureCodec(const char *mime, const sp<AMessage> &msg); 21404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 21504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setVideoPortFormatType( 21604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_U32 portIndex, 21704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_VIDEO_CODINGTYPE compressionFormat, 21804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_COLOR_FORMATTYPE colorFormat); 21904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 22004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setSupportedOutputFormat(); 22104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 22204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupVideoDecoder( 22304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall const char *mime, int32_t width, int32_t height); 22404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 22504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupVideoEncoder( 22604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall const char *mime, const sp<AMessage> &msg); 22704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 22804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setVideoFormatOnPort( 22904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_U32 portIndex, 23004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall int32_t width, int32_t height, 23104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_VIDEO_CODINGTYPE compressionFormat); 23204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 23304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupAACCodec( 23404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall bool encoder, 23504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall int32_t numChannels, int32_t sampleRate, int32_t bitRate, 23604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall int32_t aacProfile, bool isADTS); 23704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 23804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t selectAudioPortFormat( 23904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); 24004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 24104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); 24204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupG711Codec(bool encoder, int32_t numChannels); 24304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 24404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupFlacCodec( 24504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); 24604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 24704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupRawAudioFormat( 24804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); 24904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 25004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setMinBufferSize(OMX_U32 portIndex, size_t size); 25104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 25204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupMPEG4EncoderParameters(const sp<AMessage> &msg); 25304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupH263EncoderParameters(const sp<AMessage> &msg); 25404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupAVCEncoderParameters(const sp<AMessage> &msg); 25504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 25604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t verifySupportForProfileAndLevel(int32_t profile, int32_t level); 25704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 25804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t configureBitrate( 25904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); 26004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 26104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setupErrorCorrectionParameters(); 26204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 26304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t initNativeWindow(); 26404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 26504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t pushBlankBuffersToNativeWindow(); 26604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 26704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall // Returns true iff all buffers on the given port have status 26804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall // OWNED_BY_US or OWNED_BY_NATIVE_WINDOW. 26904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall bool allYourBuffersAreBelongToUs(OMX_U32 portIndex); 27004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 27104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall bool allYourBuffersAreBelongToUs(); 27204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 27304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void waitUntilAllPossibleNativeWindowBuffersAreReturnedToUs(); 27404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 27504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall size_t countBuffersOwnedByComponent(OMX_U32 portIndex) const; 27604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall size_t countBuffersOwnedByNativeWindow() const; 27704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 27804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void deferMessage(const sp<AMessage> &msg); 27904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void processDeferredMessages(); 28004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 28104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void sendFormatChange(); 28204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 28304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void signalError( 28404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall OMX_ERRORTYPE error = OMX_ErrorUndefined, 28504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t internalError = UNKNOWN_ERROR); 28604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 28704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t requestIDRFrame(); 28804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall status_t setParameters(const sp<AMessage> ¶ms); 28904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 29004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall // Send EOS on input stream. 29104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall void onSignalEndOfInputStream(); 29204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 29304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall DISALLOW_EVIL_CONSTRUCTORS(ACodec); 29404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}; 29504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 29604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} // namespace android 29704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 29804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#endif // A_CODEC_H_ 29904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall