ACodec.h revision ed5554fb1c837f6b1008d3910018c979c57da502
16315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr/* 2462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao * Copyright (C) 2010 The Android Open Source Project 3462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao * 4462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 59ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * you may not use this file except in compliance with the License. 69ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao * You may obtain a copy of the License at 7462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao * 86315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr * http://www.apache.org/licenses/LICENSE-2.0 96315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr * 106315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr * Unless required by applicable law or agreed to in writing, software 116315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr * distributed under the License is distributed on an "AS IS" BASIS, 126315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr * See the License for the specific language governing permissions and 146315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr * limitations under the License. 159ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao */ 169ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 17462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#ifndef A_CODEC_H_ 189ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#define A_CODEC_H_ 20462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include <stdint.h> 22462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <android/native_window.h> 239ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include <media/IOMX.h> 249ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include <media/stagefright/foundation/AHierarchicalStateMachine.h> 25462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <media/stagefright/CodecBase.h> 269ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include <media/stagefright/SkipCutBuffer.h> 279ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include <OMX_Audio.h> 28462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#define TRACK_BUFFER_TIMING 0 30462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaonamespace android { 329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaostruct ABuffer; 349ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaostruct MemoryDealer; 35462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaostruct DescribeColorFormatParams; 369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaostruct ACodec : public AHierarchicalStateMachine, public CodecBase { 389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ACodec(); 399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 40462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao virtual void setNotificationMessage(const sp<AMessage> &msg); 419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao void initiateSetup(const sp<AMessage> &msg); 43462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 449ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void initiateAllocateComponent(const sp<AMessage> &msg); 459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void initiateConfigureComponent(const sp<AMessage> &msg); 46462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao virtual void initiateCreateInputSurface(); 479ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void initiateStart(); 48462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao virtual void initiateShutdown(bool keepComponentAllocated = false); 49462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 509ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void signalFlush(); 519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void signalResume(); 5291a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao 539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void signalSetParameters(const sp<AMessage> &msg); 549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void signalEndOfInputStream(); 559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void signalRequestIDRFrame(); 569ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // AHierarchicalStateMachine implements the message handling 589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void onMessageReceived(const sp<AMessage> &msg) { 599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao handleMessage(msg); 609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct PortDescription : public CodecBase::PortDescription { 6391a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao size_t countBuffers(); 649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao IOMX::buffer_id bufferIDAt(size_t index) const; 659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<ABuffer> bufferAt(size_t index) const; 669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao private: 689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao friend struct ACodec; 6992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 7092b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang Vector<IOMX::buffer_id> mBufferIDs; 7192b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang Vector<sp<ABuffer> > mBuffers; 729ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 7392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang PortDescription(); 7492b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang void addBuffer(IOMX::buffer_id id, const sp<ABuffer> &buffer); 759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 7692b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 7792b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang }; 7892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static bool isFlexibleColorFormat( 809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const sp<IOMX> &omx, IOMX::node_id node, 819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao uint32_t colorFormat, bool usingNativeBuffers, OMX_U32 *flexibleEquivalent); 829ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 839ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Returns 0 if configuration is not supported. NOTE: this is treated by 849ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // some OMX components as auto level, and by others as invalid level. 859ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static int /* OMX_VIDEO_AVCLEVELTYPE */ getAVCLevelFor( 869ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int width, int height, int rate, int bitrate, 879ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OMX_VIDEO_AVCPROFILETYPE profile = OMX_VIDEO_AVCProfileBaseline); 889ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 899ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoprotected: 909ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual ~ACodec(); 919ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 929ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoprivate: 93462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao struct BaseState; 94462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao struct UninitializedState; 959ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct LoadedState; 969ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct LoadedToIdleState; 979ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct IdleToExecutingState; 989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct ExecutingState; 999ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct OutputPortSettingsChangedState; 1009ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct ExecutingToIdleState; 1019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct IdleToLoadedState; 1029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct FlushingState; 1039ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao struct DeathNotifier; 1049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1059ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao enum { 1069ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatSetup = 'setu', 10791a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao kWhatOMXMessage = 'omx ', 10891a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao kWhatInputBufferFilled = 'inpF', 1099ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatOutputBufferDrained = 'outD', 1109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatShutdown = 'shut', 1119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatFlush = 'flus', 1129ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatResume = 'resm', 1139ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatDrainDeferredMessages = 'drai', 1149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatAllocateComponent = 'allo', 1159ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatConfigureComponent = 'conf', 1169ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatCreateInputSurface = 'cisf', 1179ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatSignalEndOfInputStream = 'eois', 1189ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatStart = 'star', 1199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatRequestIDRFrame = 'ridr', 1209ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatSetParameters = 'setP', 1219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatSubmitOutputMetaDataBufferIfEOS = 'subm', 1229ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatOMXDied = 'OMXd', 1239ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kWhatReleaseCodecInstance = 'relC', 1249ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao }; 1259ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1269ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao enum { 1279ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kPortIndexInput = 0, 1289ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kPortIndexOutput = 1 1299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao }; 1309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao enum { 1329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kFlagIsSecure = 1, 1339ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kFlagPushBlankBuffersToNativeWindowOnShutdown = 2, 1349ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao kFlagIsGrallocUsageProtected = 4, 1359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao }; 1369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 137462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao struct BufferInfo { 1389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao enum Status { 1399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OWNED_BY_US, 1409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OWNED_BY_COMPONENT, 141462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao OWNED_BY_UPSTREAM, 1429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OWNED_BY_DOWNSTREAM, 143462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao OWNED_BY_NATIVE_WINDOW, 144462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao }; 14592b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 14692b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang IOMX::buffer_id mBufferID; 14792b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang Status mStatus; 14892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang unsigned mDequeuedAt; 14992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 15092b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang sp<ABuffer> mData; 15192b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang sp<GraphicBuffer> mGraphicBuffer; 15292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang }; 15392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 15492b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang#if TRACK_BUFFER_TIMING 15592b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang struct BufferStats { 15692b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang int64_t mEmptyBufferTimeUs; 15792b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang int64_t mFillBufferDoneTimeUs; 15892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang }; 15992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 1609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao KeyedVector<int64_t, BufferStats> mBufferStats; 1619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#endif 1629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<AMessage> mNotify; 1649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<UninitializedState> mUninitializedState; 1669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<LoadedState> mLoadedState; 167324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao sp<LoadedToIdleState> mLoadedToIdleState; 1689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<IdleToExecutingState> mIdleToExecutingState; 1699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<ExecutingState> mExecutingState; 1709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState; 171324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao sp<ExecutingToIdleState> mExecutingToIdleState; 1729ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<IdleToLoadedState> mIdleToLoadedState; 173324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao sp<FlushingState> mFlushingState; 174324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao sp<SkipCutBuffer> mSkipCutBuffer; 1759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1766315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr AString mComponentName; 17791a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao uint32_t mFlags; 1789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao uint32_t mQuirks; 1799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<IOMX> mOMX; 1809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao IOMX::node_id mNode; 1819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<MemoryDealer> mDealer[2]; 1829ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1839ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<ANativeWindow> mNativeWindow; 1849ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<AMessage> mInputFormat; 1859ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<AMessage> mOutputFormat; 1869ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao sp<AMessage> mBaseOutputFormat; 1879ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 18891a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao Vector<BufferInfo> mBuffers[2]; 1899ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool mPortEOS[2]; 1909ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t mInputEOSResult; 1919ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1929ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao List<sp<AMessage> > mDeferredQueue; 1939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 19491a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao bool mSentFormat; 19591a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao bool mIsEncoder; 19691a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao bool mUseMetadataOnEncoderOutput; 1979ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool mShutdownInProgress; 1989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool mExplicitShutdown; 1999ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2009ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // If "mKeepComponentAllocated" we only transition back to Loaded state 2019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // and do not release the component instance. 2029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool mKeepComponentAllocated; 2039ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int32_t mEncoderDelay; 2059ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int32_t mEncoderPadding; 2069ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int32_t mRotationDegrees; 2079ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2089ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool mChannelMaskPresent; 2099ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int32_t mChannelMask; 2109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao unsigned mDequeueCounter; 2119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool mStoreMetaDataInOutputBuffers; 2129ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int32_t mMetaDataBuffersToSubmit; 2139ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao size_t mNumUndequeuedBuffers; 2149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2159ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int64_t mRepeatFrameDelayUs; 2169ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int64_t mMaxPtsGapUs; 217462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao float mMaxFps; 218462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 2199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int64_t mTimePerFrameUs; 2209ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int64_t mTimePerCaptureUs; 2219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2229ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool mCreateInputBuffersSuspended; 2236315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr 2246315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr bool mTunneled; 2259ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2269ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setCyclicIntraMacroblockRefresh(const sp<AMessage> &msg, int32_t mode); 2279ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t allocateBuffersOnPort(OMX_U32 portIndex); 2289ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t freeBuffersOnPort(OMX_U32 portIndex); 2299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t freeBuffer(OMX_U32 portIndex, size_t i); 2309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t configureOutputBuffersFromNativeWindow( 2329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OMX_U32 *nBufferCount, OMX_U32 *nBufferSize, 2339ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OMX_U32 *nMinUndequeuedBuffers); 2349ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t allocateOutputMetaDataBuffers(); 2359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t submitOutputMetaDataBuffer(); 236462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao void signalSubmitOutputMetaDataBufferIfEOS_workaround(); 2379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t allocateOutputBuffersFromNativeWindow(); 2389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t cancelBufferToNativeWindow(BufferInfo *info); 2399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t freeOutputBuffersNotOwnedByComponent(); 2409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao BufferInfo *dequeueBufferFromNativeWindow(); 24192b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 24292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang BufferInfo *findBufferByID( 24392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang uint32_t portIndex, IOMX::buffer_id bufferID, 24492b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang ssize_t *index = NULL); 2459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2466315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr status_t setComponentRole(bool isEncoder, const char *mime); 2476315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr status_t configureCodec(const char *mime, const sp<AMessage> &msg); 2489ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t configureTunneledVideoPlayback(int32_t audioHwSync, 2509ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const sp<ANativeWindow> &nativeWindow); 2519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2529ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setVideoPortFormatType( 2539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OMX_U32 portIndex, 254462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao OMX_VIDEO_CODINGTYPE compressionFormat, 2559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OMX_COLOR_FORMATTYPE colorFormat, 256462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao bool usingNativeBuffers = false); 257462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 2589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setSupportedOutputFormat(bool getLegacyFlexibleFormat); 2599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupVideoDecoder( 2616315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr const char *mime, const sp<AMessage> &msg, bool usingNativeBuffers); 2626315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr 2639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupVideoEncoder( 2649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const char *mime, const sp<AMessage> &msg); 26591a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao 26691a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao status_t setVideoFormatOnPort( 26791a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao OMX_U32 portIndex, 26891a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao int32_t width, int32_t height, 26991a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao OMX_VIDEO_CODINGTYPE compressionFormat, float frameRate = -1.0); 27091a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao 27191a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao typedef struct drcParams { 27291a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao int32_t drcCut; 27391a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao int32_t drcBoost; 27491a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao int32_t heavyCompression; 27591a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao int32_t targetRefLevel; 27691a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao int32_t encodedTargetLevel; 2779ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } drcParams_t; 2789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupAACCodec( 2809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool encoder, 2819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int32_t numChannels, int32_t sampleRate, int32_t bitRate, 28292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang int32_t aacProfile, bool isADTS, int32_t sbrMode, 28392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang int32_t maxOutputChannelCount, const drcParams_t& drc, 28492b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang int32_t pcmLimiterEnable); 2859ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2866315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); 2876315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr 2886315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr status_t setupEAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); 2896315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr 2906315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr status_t selectAudioPortFormat( 2916315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); 2929ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); 2949ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupG711Codec(bool encoder, int32_t sampleRate, int32_t numChannels); 2959ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2969ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupFlacCodec( 2979ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); 2989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2999ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupRawAudioFormat( 3009ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); 3019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 3029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setPriority(int32_t priority); 3039ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setOperatingRate(float rateFloat, bool isVideo); 3049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 3059ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setMinBufferSize(OMX_U32 portIndex, size_t size); 3069ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 3079ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupMPEG4EncoderParameters(const sp<AMessage> &msg); 3089ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupH263EncoderParameters(const sp<AMessage> &msg); 3099ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupAVCEncoderParameters(const sp<AMessage> &msg); 3109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupHEVCEncoderParameters(const sp<AMessage> &msg); 3119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t setupVPXEncoderParameters(const sp<AMessage> &msg); 3129ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 31391a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao status_t verifySupportForProfileAndLevel(int32_t profile, int32_t level); 3149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 31591a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao status_t configureBitrate( 3169ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); 31791a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao 318462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao status_t setupErrorCorrectionParameters(); 3199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 3209ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t initNativeWindow(); 32191a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao 3229ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao status_t pushBlankBuffersToNativeWindow(); 3239ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 32491a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao // Returns true iff all buffers on the given port have status 3259ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // OWNED_BY_US or OWNED_BY_NATIVE_WINDOW. 32691a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao bool allYourBuffersAreBelongToUs(OMX_U32 portIndex); 32791a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao 32891a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao bool allYourBuffersAreBelongToUs(); 3299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 3309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao void waitUntilAllPossibleNativeWindowBuffersAreReturnedToUs(); 33191a3783ce1f4eb9ad6e9c1ecdbd27f3d6dc58634Shih-wei Liao 3329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao size_t countBuffersOwnedByComponent(OMX_U32 portIndex) const; 3339ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao size_t countBuffersOwnedByNativeWindow() const; 33492b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 33592b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang void deferMessage(const sp<AMessage> &msg); 33692b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang void processDeferredMessages(); 33792b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 33892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang void sendFormatChange(const sp<AMessage> &reply); 33992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang status_t getPortFormat(OMX_U32 portIndex, sp<AMessage> ¬ify); 34092b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 34192b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang void signalError( 34292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang OMX_ERRORTYPE error = OMX_ErrorUndefined, 34392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang status_t internalError = UNKNOWN_ERROR); 34492b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 34592b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang static bool describeDefaultColorFormat(DescribeColorFormatParams &describeParams); 34692b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang static bool describeColorFormat( 34792b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang const sp<IOMX> &omx, IOMX::node_id node, 34892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang DescribeColorFormatParams &describeParams); 34992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 35092b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang status_t requestIDRFrame(); 35192b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang status_t setParameters(const sp<AMessage> ¶ms); 35292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang 3539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Send EOS on input stream. 3549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao void onSignalEndOfInputStream(); 3556315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr 3569ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao DISALLOW_EVIL_CONSTRUCTORS(ACodec); 3579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}; 358462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 3599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace android 360462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 361462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#endif // A_CODEC_H_ 3629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao