ACodec.h revision 7cd58537932ef6f481f68be0b9c597a89cebdfec
113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/* 213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Copyright (C) 2010 The Android Open Source Project 313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * you may not use this file except in compliance with the License. 613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * You may obtain a copy of the License at 713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 1013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 1113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 1213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * See the License for the specific language governing permissions and 1413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * limitations under the License. 1513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi */ 1613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 174ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#ifndef A_CODEC_H_ 184ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 194ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#define A_CODEC_H_ 204ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 214ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#include <stdint.h> 224ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#include <android/native_window.h> 2313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi#include <media/IOMX.h> 2413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi#include <media/stagefright/foundation/AHierarchicalStateMachine.h> 254ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#include <media/stagefright/SkipCutBuffer.h> 264ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#include <OMX_Audio.h> 274ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 284ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#define TRACK_BUFFER_TIMING 0 294ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 304ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivinamespace android { 314ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 323610785fa93586ce84a27a27530feb77b8035229Glenn Kastenstruct ABuffer; 333610785fa93586ce84a27a27530feb77b8035229Glenn Kastenstruct MemoryDealer; 345933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 355933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kastenstruct ACodec : public AHierarchicalStateMachine { 365933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten enum { 375933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten kWhatFillThisBuffer = 'fill', 385933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten kWhatDrainThisBuffer = 'drai', 395933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten kWhatEOS = 'eos ', 404ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi kWhatShutdownCompleted = 'scom', 4113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatFlushCompleted = 'fcom', 4213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatOutputFormatChanged = 'outC', 43e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatError = 'erro', 4413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatComponentAllocated = 'cAll', 4513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatComponentConfigured = 'cCon', 4613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatInputSurfaceCreated = 'isfc', 4713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatSignaledInputEOS = 'seos', 4813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatBuffersAllocated = 'allc', 494ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi }; 504ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 514ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi ACodec(); 524ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 53fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten void setNotificationMessage(const sp<AMessage> &msg); 54fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten void initiateSetup(const sp<AMessage> &msg); 555933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten void signalFlush(); 565e4d65e369f28746767aba11b618dee314bb8197Glenn Kasten void signalResume(); 5713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi void initiateShutdown(bool keepComponentAllocated = false); 5813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 594ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi void signalSetParameters(const sp<AMessage> &msg); 6013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi void signalEndOfInputStream(); 6113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 6213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi void initiateAllocateComponent(const sp<AMessage> &msg); 63c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten void initiateConfigureComponent(const sp<AMessage> &msg); 64e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi void initiateCreateInputSurface(); 6513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi void initiateStart(); 66833251ab9e5e59a6ea5ac325122cf3abdf7cd944Glenn Kasten 67833251ab9e5e59a6ea5ac325122cf3abdf7cd944Glenn Kasten void signalRequestIDRFrame(); 6813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 69c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten struct PortDescription : public RefBase { 7013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi size_t countBuffers(); 71c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten IOMX::buffer_id bufferIDAt(size_t index) const; 72c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten sp<ABuffer> bufferAt(size_t index) const; 73a9f22e6f5f53e90daa779e38b22f88e4faa35c95Glenn Kasten 74c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten private: 75c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten friend struct ACodec; 76c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten 7713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi Vector<IOMX::buffer_id> mBufferIDs; 78c4374bd42cd7eadda841a6b089234becb4f6c508Glenn Kasten Vector<sp<ABuffer> > mBuffers; 795933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 8070c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi PortDescription(); 81e21f91df7afb1175ddb5b0045ebb0d5338df2535Andy McFadden void addBuffer(IOMX::buffer_id id, const sp<ABuffer> &buffer); 8235ac702ee1ad91e5c8748c12450222d50b366a52Glenn Kasten 83fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 843610785fa93586ce84a27a27530feb77b8035229Glenn Kasten }; 853610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 8637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Triviprotected: 8791145ef159d3e165a461cbd76341ff8ed3d72baeJean-Michel Trivi virtual ~ACodec(); 8891145ef159d3e165a461cbd76341ff8ed3d72baeJean-Michel Trivi 895933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kastenprivate: 905933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten struct BaseState; 915933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten struct UninitializedState; 9213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct LoadedState; 931fa5c3206d06bbebdea2dc92f378ce6b8a211e23Glenn Kasten struct LoadedToIdleState; 9437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi struct IdleToExecutingState; 9513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct ExecutingState; 9613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct OutputPortSettingsChangedState; 9713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct ExecutingToIdleState; 9813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct IdleToLoadedState; 9913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct FlushingState; 1004ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1014ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi enum { 10213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kWhatSetup = 'setu', 103e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatOMXMessage = 'omx ', 104e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatInputBufferFilled = 'inpF', 105e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatOutputBufferDrained = 'outD', 106e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatShutdown = 'shut', 107e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatFlush = 'flus', 108e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatResume = 'resm', 109e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatDrainDeferredMessages = 'drai', 110e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten kWhatAllocateComponent = 'allo', 1114ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi kWhatConfigureComponent = 'conf', 1124ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi kWhatCreateInputSurface = 'cisf', 1133610785fa93586ce84a27a27530feb77b8035229Glenn Kasten kWhatSignalEndOfInputStream = 'eois', 1143610785fa93586ce84a27a27530feb77b8035229Glenn Kasten kWhatStart = 'star', 1155933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten kWhatRequestIDRFrame = 'ridr', 1165933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten kWhatSetParameters = 'setP', 1175933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten }; 1185933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 1195933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten enum { 1205933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten kPortIndexInput = 0, 1215933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten kPortIndexOutput = 1 1225933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten }; 12313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi enum { 12513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi kFlagIsSecure = 1, 12637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi }; 12737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 12813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct BufferInfo { 12913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi enum Status { 13013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OWNED_BY_US, 13113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OWNED_BY_COMPONENT, 13213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OWNED_BY_UPSTREAM, 13313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OWNED_BY_DOWNSTREAM, 13413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OWNED_BY_NATIVE_WINDOW, 13513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi }; 13613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi IOMX::buffer_id mBufferID; 13813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi Status mStatus; 13937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 1404ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<ABuffer> mData; 1414ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<GraphicBuffer> mGraphicBuffer; 1424ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi }; 1433610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 1443610785fa93586ce84a27a27530feb77b8035229Glenn Kasten#if TRACK_BUFFER_TIMING 1455933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten struct BufferStats { 1465933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten int64_t mEmptyBufferTimeUs; 1474ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi int64_t mFillBufferDoneTimeUs; 1484ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi }; 1494ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1504ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi KeyedVector<int64_t, BufferStats> mBufferStats; 1514ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#endif 1524ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1534ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> mNotify; 1544ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1554ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<UninitializedState> mUninitializedState; 15613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<LoadedState> mLoadedState; 15713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<LoadedToIdleState> mLoadedToIdleState; 15813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<IdleToExecutingState> mIdleToExecutingState; 15913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<ExecutingState> mExecutingState; 160e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState; 161e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi sp<ExecutingToIdleState> mExecutingToIdleState; 16213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<IdleToLoadedState> mIdleToLoadedState; 16349935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten sp<FlushingState> mFlushingState; 16413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<SkipCutBuffer> mSkipCutBuffer; 16549935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten 16649935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten AString mComponentName; 16749935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten uint32_t mFlags; 16849935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten uint32_t mQuirks; 169f6445d330c05ccc57d1adcc6ee05735a33f78881Glenn Kasten sp<IOMX> mOMX; 1709f07ea788f57654acf29d1321b40162e41eb122bGlenn Kasten IOMX::node_id mNode; 17149935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten sp<MemoryDealer> mDealer[2]; 17213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 17313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<ANativeWindow> mNativeWindow; 174e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten 17513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi Vector<BufferInfo> mBuffers[2]; 17613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi bool mPortEOS[2]; 17713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi status_t mInputEOSResult; 17813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 179167a2af67dcc0d20e6e3e995a23a0567715e0ee1Glenn Kasten List<sp<AMessage> > mDeferredQueue; 18013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 181e2e8fa36bd7448b59fbcdf141e0b6d21e5401d91Glenn Kasten bool mSentFormat; 18237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi bool mIsEncoder; 1831fa5c3206d06bbebdea2dc92f378ce6b8a211e23Glenn Kasten 1841fa5c3206d06bbebdea2dc92f378ce6b8a211e23Glenn Kasten bool mShutdownInProgress; 1854ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 18691145ef159d3e165a461cbd76341ff8ed3d72baeJean-Michel Trivi // If "mKeepComponentAllocated" we only transition back to Loaded state 1874ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi // and do not release the component instance. 1884ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi bool mKeepComponentAllocated; 1894ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1904ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi int32_t mEncoderDelay; 1914ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi int32_t mEncoderPadding; 1924ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1937349b2e742b2cedc6d149fac62ed661ad7d47decGlenn Kasten bool mChannelMaskPresent; 1947349b2e742b2cedc6d149fac62ed661ad7d47decGlenn Kasten int32_t mChannelMask; 1957349b2e742b2cedc6d149fac62ed661ad7d47decGlenn Kasten 1967349b2e742b2cedc6d149fac62ed661ad7d47decGlenn Kasten status_t setCyclicIntraMacroblockRefresh(const sp<AMessage> &msg, int32_t mode); 19791145ef159d3e165a461cbd76341ff8ed3d72baeJean-Michel Trivi status_t allocateBuffersOnPort(OMX_U32 portIndex); 19891145ef159d3e165a461cbd76341ff8ed3d72baeJean-Michel Trivi status_t freeBuffersOnPort(OMX_U32 portIndex); 19991145ef159d3e165a461cbd76341ff8ed3d72baeJean-Michel Trivi status_t freeBuffer(OMX_U32 portIndex, size_t i); 2007349b2e742b2cedc6d149fac62ed661ad7d47decGlenn Kasten 2017349b2e742b2cedc6d149fac62ed661ad7d47decGlenn Kasten status_t allocateOutputBuffersFromNativeWindow(); 20213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi status_t cancelBufferToNativeWindow(BufferInfo *info); 2035933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten status_t freeOutputBuffersNotOwnedByComponent(); 2045933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten BufferInfo *dequeueBufferFromNativeWindow(); 2055933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 2065933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten BufferInfo *findBufferByID( 2075933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten uint32_t portIndex, IOMX::buffer_id bufferID, 2085933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten ssize_t *index = NULL); 2095933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 2105933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten status_t setComponentRole(bool isEncoder, const char *mime); 2115933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten status_t configureCodec(const char *mime, const sp<AMessage> &msg); 2125933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 2135933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten status_t setVideoPortFormatType( 2145933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten OMX_U32 portIndex, 2155933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten OMX_VIDEO_CODINGTYPE compressionFormat, 2165933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten OMX_COLOR_FORMATTYPE colorFormat); 2175933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 2185933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten status_t setSupportedOutputFormat(); 2195933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 2205933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten status_t setupVideoDecoder( 2215933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten const char *mime, int32_t width, int32_t height); 2225933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 2235933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten status_t setupVideoEncoder( 2245933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten const char *mime, const sp<AMessage> &msg); 2255933f3d5e532aaac31ce0e6551c59f0197c0ae3cGlenn Kasten 22613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi status_t setVideoFormatOnPort( 22713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OMX_U32 portIndex, 22813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi int32_t width, int32_t height, 22913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OMX_VIDEO_CODINGTYPE compressionFormat); 2304ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 23199b927751677abfb60a388d65dfeed1fed1db12cGlenn Kasten status_t setupAACCodec( 23299b927751677abfb60a388d65dfeed1fed1db12cGlenn Kasten bool encoder, 23399b927751677abfb60a388d65dfeed1fed1db12cGlenn Kasten int32_t numChannels, int32_t sampleRate, int32_t bitRate, 2344ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi int32_t aacProfile, bool isADTS); 235 236 status_t selectAudioPortFormat( 237 OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); 238 239 status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); 240 status_t setupG711Codec(bool encoder, int32_t numChannels); 241 242 status_t setupFlacCodec( 243 bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); 244 245 status_t setupRawAudioFormat( 246 OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); 247 248 status_t setMinBufferSize(OMX_U32 portIndex, size_t size); 249 250 status_t setupMPEG4EncoderParameters(const sp<AMessage> &msg); 251 status_t setupH263EncoderParameters(const sp<AMessage> &msg); 252 status_t setupAVCEncoderParameters(const sp<AMessage> &msg); 253 254 status_t verifySupportForProfileAndLevel(int32_t profile, int32_t level); 255 256 status_t configureBitrate( 257 int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); 258 259 status_t setupErrorCorrectionParameters(); 260 261 status_t initNativeWindow(); 262 263 status_t pushBlankBuffersToNativeWindow(); 264 265 // Returns true iff all buffers on the given port have status OWNED_BY_US. 266 bool allYourBuffersAreBelongToUs(OMX_U32 portIndex); 267 268 bool allYourBuffersAreBelongToUs(); 269 270 size_t countBuffersOwnedByComponent(OMX_U32 portIndex) const; 271 272 void deferMessage(const sp<AMessage> &msg); 273 void processDeferredMessages(); 274 275 void sendFormatChange(); 276 277 void signalError( 278 OMX_ERRORTYPE error = OMX_ErrorUndefined, 279 status_t internalError = UNKNOWN_ERROR); 280 281 status_t requestIDRFrame(); 282 status_t setParameters(const sp<AMessage> ¶ms); 283 284 DISALLOW_EVIL_CONSTRUCTORS(ACodec); 285}; 286 287} // namespace android 288 289#endif // A_CODEC_H_ 290