ACodec.h revision 78b01639c08fe5e7e9c1be5e9dc5de560f1383f9
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2010 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef A_CODEC_H_ 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define A_CODEC_H_ 20d84e1ce0b535128f03416145554fb405f9fade3eJeff Sharkey 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 22d84e1ce0b535128f03416145554fb405f9fade3eJeff Sharkey#include <android/native_window.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IOMX.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/stagefright/foundation/AHierarchicalStateMachine.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/stagefright/CodecBase.h> 26cfd91e7852bac3f9775cf3d05eedaade070cfecdMark Salyzyn#include <media/stagefright/SkipCutBuffer.h> 27ad8fd282dde705ad090b2ecdc5b363df399230abBrad Fitzpatrick#include <OMX_Audio.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 292c5da313dd72c284fbc2c11839f8a452ab5ce574Brad Fitzpatrick#define TRACK_BUFFER_TIMING 0 308f26b323d8f78c6a183e74c464864ef7da457267Brad Fitzpatrick 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 330795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopianstruct ABuffer; 340795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopianstruct MemoryDealer; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct DescribeColorFormatParams; 362c5da313dd72c284fbc2c11839f8a452ab5ce574Brad Fitzpatrick 370b41448506610f73302cc631677823fd8b865ea5Christopher Tatestruct ACodec : public AHierarchicalStateMachine, public CodecBase { 380b41448506610f73302cc631677823fd8b865ea5Christopher Tate ACodec(); 3944bc18664985e845a2299f20b6392d378fad8b4dColin Cross 400795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian virtual void setNotificationMessage(const sp<AMessage> &msg); 410795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian 420795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian void initiateSetup(const sp<AMessage> &msg); 435348c014129b766d621ef82a6e42007009ffc310Brad Fitzpatrick 440bde66a837542e5bd901d8b8e47c5bd7c4c99fe4Jeff Brown virtual void initiateAllocateComponent(const sp<AMessage> &msg); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void initiateConfigureComponent(const sp<AMessage> &msg); 46ac5e350e567c7a257ced37dd4e8ca0f4c95f7e81Christopher Tate virtual void initiateCreateInputSurface(); 47ac5e350e567c7a257ced37dd4e8ca0f4c95f7e81Christopher Tate virtual void initiateStart(); 48ac5e350e567c7a257ced37dd4e8ca0f4c95f7e81Christopher Tate virtual void initiateShutdown(bool keepComponentAllocated = false); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void signalFlush(); 5171f2cf116aab893e224056c38ab146bd1538dd3eSteve Block virtual void signalResume(); 5271f2cf116aab893e224056c38ab146bd1538dd3eSteve Block 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void signalSetParameters(const sp<AMessage> &msg); 5479dd31f73d8ca4432d6f83bef1221cc3e93e932cChristopher Tate virtual void signalEndOfInputStream(); 5579dd31f73d8ca4432d6f83bef1221cc3e93e932cChristopher Tate virtual void signalRequestIDRFrame(); 565baa3a62a97544669fba6d65a11c07f252e654ddSteve Block 5779dd31f73d8ca4432d6f83bef1221cc3e93e932cChristopher Tate // AHierarchicalStateMachine implements the message handling 5871f2cf116aab893e224056c38ab146bd1538dd3eSteve Block virtual void onMessageReceived(const sp<AMessage> &msg) { 5979dd31f73d8ca4432d6f83bef1221cc3e93e932cChristopher Tate handleMessage(msg); 6079dd31f73d8ca4432d6f83bef1221cc3e93e932cChristopher Tate } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct PortDescription : public CodecBase::PortDescription { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t countBuffers(); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IOMX::buffer_id bufferIDAt(size_t index) const; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<ABuffer> bufferAt(size_t index) const; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend struct ACodec; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<IOMX::buffer_id> mBufferIDs; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<sp<ABuffer> > mBuffers; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PortDescription(); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addBuffer(IOMX::buffer_id id, const sp<ABuffer> &buffer); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool isFlexibleColorFormat( 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<IOMX> &omx, IOMX::node_id node, 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t colorFormat, OMX_U32 *flexibleEquivalent); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Returns 0 if configuration is not supported. NOTE: this is treated by 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // some OMX components as auto level, and by others as invalid level. 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int /* OMX_VIDEO_AVCLEVELTYPE */ getAVCLevelFor( 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int width, int height, int rate, int bitrate, 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OMX_VIDEO_AVCPROFILETYPE profile = OMX_VIDEO_AVCProfileBaseline); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected: 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~ACodec(); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct BaseState; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct UninitializedState; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct LoadedState; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct LoadedToIdleState; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct IdleToExecutingState; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct ExecutingState; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct OutputPortSettingsChangedState; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct ExecutingToIdleState; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct IdleToLoadedState; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct FlushingState; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct DeathNotifier; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatSetup = 'setu', 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatOMXMessage = 'omx ', 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatInputBufferFilled = 'inpF', 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatOutputBufferDrained = 'outD', 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatShutdown = 'shut', 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatFlush = 'flus', 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatResume = 'resm', 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatDrainDeferredMessages = 'drai', 114bd8b6f25bb48daea4aeb0c7463661c8e69baece0Christopher Tate kWhatAllocateComponent = 'allo', 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatConfigureComponent = 'conf', 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatCreateInputSurface = 'cisf', 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatSignalEndOfInputStream = 'eois', 1180d4a792e8d5ebfd182acc8db7cd9b40f3bc51640Christopher Tate kWhatStart = 'star', 1190d4a792e8d5ebfd182acc8db7cd9b40f3bc51640Christopher Tate kWhatRequestIDRFrame = 'ridr', 1200d4a792e8d5ebfd182acc8db7cd9b40f3bc51640Christopher Tate kWhatSetParameters = 'setP', 1210d4a792e8d5ebfd182acc8db7cd9b40f3bc51640Christopher Tate kWhatSubmitOutputMetaDataBufferIfEOS = 'subm', 1220d4a792e8d5ebfd182acc8db7cd9b40f3bc51640Christopher Tate kWhatOMXDied = 'OMXd', 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kWhatReleaseCodecInstance = 'relC', 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kPortIndexInput = 0, 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kPortIndexOutput = 1 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kFlagIsSecure = 1, 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kFlagPushBlankBuffersToNativeWindowOnShutdown = 2, 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kFlagIsGrallocUsageProtected = 4, 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct BufferInfo { 138727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick enum Status { 139727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick OWNED_BY_US, 140727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick OWNED_BY_COMPONENT, 141727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick OWNED_BY_UPSTREAM, 142727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick OWNED_BY_DOWNSTREAM, 143727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick OWNED_BY_NATIVE_WINDOW, 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IOMX::buffer_id mBufferID; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Status mStatus; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned mDequeuedAt; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<ABuffer> mData; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<GraphicBuffer> mGraphicBuffer; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if TRACK_BUFFER_TIMING 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct BufferStats { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t mEmptyBufferTimeUs; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t mFillBufferDoneTimeUs; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyedVector<int64_t, BufferStats> mBufferStats; 16171f2cf116aab893e224056c38ab146bd1538dd3eSteve Block#endif 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AMessage> mNotify; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<UninitializedState> mUninitializedState; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<LoadedState> mLoadedState; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<LoadedToIdleState> mLoadedToIdleState; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IdleToExecutingState> mIdleToExecutingState; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<ExecutingState> mExecutingState; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<ExecutingToIdleState> mExecutingToIdleState; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IdleToLoadedState> mIdleToLoadedState; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<FlushingState> mFlushingState; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<SkipCutBuffer> mSkipCutBuffer; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AString mComponentName; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mFlags; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mQuirks; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IOMX> mOMX; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IOMX::node_id mNode; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MemoryDealer> mDealer[2]; 182d1a7fca1451bf4ab7f9b704c0bace180095c2237Mathieu Chartier 183d1a7fca1451bf4ab7f9b704c0bace180095c2237Mathieu Chartier sp<ANativeWindow> mNativeWindow; 184d1a7fca1451bf4ab7f9b704c0bace180095c2237Mathieu Chartier sp<AMessage> mInputFormat; 185d1a7fca1451bf4ab7f9b704c0bace180095c2237Mathieu Chartier sp<AMessage> mOutputFormat; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AMessage> mBaseOutputFormat; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Vector<BufferInfo> mBuffers[2]; 1893762c311729fe9f3af085c14c5c1fb471d994c03Steve Block bool mPortEOS[2]; 1903762c311729fe9f3af085c14c5c1fb471d994c03Steve Block status_t mInputEOSResult; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<sp<AMessage> > mDeferredQueue; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mSentFormat; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mIsEncoder; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mUseMetadataOnEncoderOutput; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mShutdownInProgress; 1988564c8da817a845353d213acd8636b76f567b234Steve Block bool mExplicitShutdown; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If "mKeepComponentAllocated" we only transition back to Loaded state 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // and do not release the component instance. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mKeepComponentAllocated; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mEncoderDelay; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mEncoderPadding; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mRotationDegrees; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mChannelMaskPresent; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mChannelMask; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned mDequeueCounter; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mStoreMetaDataInOutputBuffers; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mMetaDataBuffersToSubmit; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mNumUndequeuedBuffers; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t mRepeatFrameDelayUs; 2163762c311729fe9f3af085c14c5c1fb471d994c03Steve Block int64_t mMaxPtsGapUs; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t mTimePerFrameUs; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t mTimePerCaptureUs; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mCreateInputBuffersSuspended; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mTunneled; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setCyclicIntraMacroblockRefresh(const sp<AMessage> &msg, int32_t mode); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t allocateBuffersOnPort(OMX_U32 portIndex); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t freeBuffersOnPort(OMX_U32 portIndex); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t freeBuffer(OMX_U32 portIndex, size_t i); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t configureOutputBuffersFromNativeWindow( 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OMX_U32 *nBufferCount, OMX_U32 *nBufferSize, 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OMX_U32 *nMinUndequeuedBuffers); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t allocateOutputMetaDataBuffers(); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t submitOutputMetaDataBuffer(); 23571f2cf116aab893e224056c38ab146bd1538dd3eSteve Block void signalSubmitOutputMetaDataBufferIfEOS_workaround(); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t allocateOutputBuffersFromNativeWindow(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t cancelBufferToNativeWindow(BufferInfo *info); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t freeOutputBuffersNotOwnedByComponent(); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BufferInfo *dequeueBufferFromNativeWindow(); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BufferInfo *findBufferByID( 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t portIndex, IOMX::buffer_id bufferID, 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t *index = NULL); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setComponentRole(bool isEncoder, const char *mime); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t configureCodec(const char *mime, const sp<AMessage> &msg); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t configureTunneledVideoPlayback(int32_t audioHwSync, 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<ANativeWindow> &nativeWindow); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setVideoPortFormatType( 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OMX_U32 portIndex, 25371f2cf116aab893e224056c38ab146bd1538dd3eSteve Block OMX_VIDEO_CODINGTYPE compressionFormat, 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OMX_COLOR_FORMATTYPE colorFormat); 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setSupportedOutputFormat(); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setupVideoDecoder( 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char *mime, const sp<AMessage> &msg); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setupVideoEncoder( 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char *mime, const sp<AMessage> &msg); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26471f2cf116aab893e224056c38ab146bd1538dd3eSteve Block status_t setVideoFormatOnPort( 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OMX_U32 portIndex, 266727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick int32_t width, int32_t height, 267ce92b0d070c4967914698b4e257c203d7121c972Dianne Hackborn OMX_VIDEO_CODINGTYPE compressionFormat, float frameRate = -1.0); 268727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef struct drcParams { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t drcCut; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t drcBoost; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t heavyCompression; 2738ab665dda40ab10e60fc69392022171f454af530Ashok Bhat int32_t targetRefLevel; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t encodedTargetLevel; 275727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick } drcParams_t; 2769013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert 2779013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert status_t setupAACCodec( 2789013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert bool encoder, 2799013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert int32_t numChannels, int32_t sampleRate, int32_t bitRate, 2809013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert int32_t aacProfile, bool isADTS, int32_t sbrMode, 2819013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert int32_t maxOutputChannelCount, const drcParams_t& drc, 2829013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert int32_t pcmLimiterEnable); 2839013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert 2849013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); 2859013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert 286ce92b0d070c4967914698b4e257c203d7121c972Dianne Hackborn status_t setupEAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); 287ce92b0d070c4967914698b4e257c203d7121c972Dianne Hackborn 288ce92b0d070c4967914698b4e257c203d7121c972Dianne Hackborn status_t selectAudioPortFormat( 289ce92b0d070c4967914698b4e257c203d7121c972Dianne Hackborn OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); 290ce92b0d070c4967914698b4e257c203d7121c972Dianne Hackborn 291727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); 292727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick status_t setupG711Codec(bool encoder, int32_t numChannels); 293727de40c6bc7c6521a0542ea9def5d5c7b1c5e06Brad Fitzpatrick 2949013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert status_t setupFlacCodec( 2959013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); 2969013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert 2979013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert status_t setupRawAudioFormat( 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); 2999013ccd9fcf3ac317e122aff08cb27cdac2b95feBjorn Bringert 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setMinBufferSize(OMX_U32 portIndex, size_t size); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 302a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn status_t setupMPEG4EncoderParameters(const sp<AMessage> &msg); 303a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn status_t setupH263EncoderParameters(const sp<AMessage> &msg); 304a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn status_t setupAVCEncoderParameters(const sp<AMessage> &msg); 305a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn status_t setupHEVCEncoderParameters(const sp<AMessage> &msg); 306a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn status_t setupVPXEncoderParameters(const sp<AMessage> &msg); 307a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t verifySupportForProfileAndLevel(int32_t profile, int32_t level); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t configureBitrate( 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setupErrorCorrectionParameters(); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t initNativeWindow(); 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t pushBlankBuffersToNativeWindow(); 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Returns true iff all buffers on the given port have status 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // OWNED_BY_US or OWNED_BY_NATIVE_WINDOW. 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool allYourBuffersAreBelongToUs(OMX_U32 portIndex); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool allYourBuffersAreBelongToUs(); 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void waitUntilAllPossibleNativeWindowBuffersAreReturnedToUs(); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t countBuffersOwnedByComponent(OMX_U32 portIndex) const; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t countBuffersOwnedByNativeWindow() const; 3290b41448506610f73302cc631677823fd8b865ea5Christopher Tate 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void deferMessage(const sp<AMessage> &msg); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void processDeferredMessages(); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void sendFormatChange(const sp<AMessage> &reply); 3340b41448506610f73302cc631677823fd8b865ea5Christopher Tate status_t getPortFormat(OMX_U32 portIndex, sp<AMessage> ¬ify); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 336cfd91e7852bac3f9775cf3d05eedaade070cfecdMark Salyzyn void signalError( 3370b41448506610f73302cc631677823fd8b865ea5Christopher Tate OMX_ERRORTYPE error = OMX_ErrorUndefined, 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t internalError = UNKNOWN_ERROR); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool describeDefaultColorFormat(DescribeColorFormatParams &describeParams); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool describeColorFormat( 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<IOMX> &omx, IOMX::node_id node, 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DescribeColorFormatParams &describeParams); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t requestIDRFrame(); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setParameters(const sp<AMessage> ¶ms); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Send EOS on input stream. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onSignalEndOfInputStream(); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISALLOW_EVIL_CONSTRUCTORS(ACodec); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} // namespace android 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3560b41448506610f73302cc631677823fd8b865ea5Christopher Tate#endif // A_CODEC_H_ 3570b41448506610f73302cc631677823fd8b865ea5Christopher Tate