MediaCodec.h revision 8b1be2ca7cee71a4920d5d31fdcbad2b1d4ca49d
15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright 2012, The Android Open Source Project 35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Licensed under the Apache License, Version 2.0 (the "License"); 55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * you may not use this file except in compliance with the License. 65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * You may obtain a copy of the License at 75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * http://www.apache.org/licenses/LICENSE-2.0 95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Unless required by applicable law or agreed to in writing, software 115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * distributed under the License is distributed on an "AS IS" BASIS, 125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * See the License for the specific language governing permissions and 145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * limitations under the License. 155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef MEDIA_CODEC_H_ 185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MEDIA_CODEC_H_ 205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <gui/IGraphicBufferProducer.h> 225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <media/hardware/CryptoAPI.h> 235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <media/stagefright/foundation/AHandler.h> 245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <utils/Vector.h> 255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnernamespace android { 275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct ABuffer; 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct ACodec; 305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct AMessage; 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct AString; 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct ICrypto; 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct SoftwareRenderer; 345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct Surface; 355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct MediaCodec : public AHandler { 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner enum ConfigureFlags { 385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONFIGURE_FLAG_ENCODE = 1, 395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner }; 405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner enum BufferFlags { 425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BUFFER_FLAG_SYNCFRAME = 1, 435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BUFFER_FLAG_CODECCONFIG = 2, 445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BUFFER_FLAG_EOS = 4, 455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner }; 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner static sp<MediaCodec> CreateByType( 485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const sp<ALooper> &looper, const char *mime, bool encoder); 495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner static sp<MediaCodec> CreateByComponentName( 515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const sp<ALooper> &looper, const char *name); 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t configure( 545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const sp<AMessage> &format, 555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const sp<Surface> &nativeWindow, 565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const sp<ICrypto> &crypto, 575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t flags); 585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer); 605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t start(); 625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // Returns to a state in which the component remains allocated but 645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // unconfigured. 655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t stop(); 665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // Client MUST call release before releasing final reference to this 685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // object. 695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t release(); 705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t flush(); 725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t queueInputBuffer( 745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t index, 755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t offset, 765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t size, 775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int64_t presentationTimeUs, 785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t flags, 795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AString *errorDetailMsg = NULL); 805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t queueSecureInputBuffer( 825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t index, 835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t offset, 845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const CryptoPlugin::SubSample *subSamples, 855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t numSubSamples, 865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const uint8_t key[16], 875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const uint8_t iv[16], 885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CryptoPlugin::Mode mode, 895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int64_t presentationTimeUs, 905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t flags, 915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AString *errorDetailMsg = NULL); 925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t dequeueInputBuffer(size_t *index, int64_t timeoutUs = 0ll); 945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t dequeueOutputBuffer( 965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t *index, 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t *offset, 985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t *size, 995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int64_t *presentationTimeUs, 1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t *flags, 1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int64_t timeoutUs = 0ll); 1025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t renderOutputBufferAndRelease(size_t index); 1045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t releaseOutputBuffer(size_t index); 1055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t signalEndOfInputStream(); 1075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t getOutputFormat(sp<AMessage> *format) const; 1095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t getInputBuffers(Vector<sp<ABuffer> > *buffers) const; 1115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t getOutputBuffers(Vector<sp<ABuffer> > *buffers) const; 1125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t requestIDRFrame(); 1145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // Notification will be posted once there "is something to do", i.e. 1165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // an input/output buffer has become available, a format change is 1175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // pending, an error is pending. 1185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void requestActivityNotification(const sp<AMessage> ¬ify); 1195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t getName(AString *componentName) const; 1215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t setParameters(const sp<AMessage> ¶ms); 1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerprotected: 1255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner virtual ~MediaCodec(); 1265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner virtual void onMessageReceived(const sp<AMessage> &msg); 1275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerprivate: 1295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner enum State { 1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UNINITIALIZED, 1315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner INITIALIZING, 1325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner INITIALIZED, 1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONFIGURING, 1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONFIGURED, 1355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner STARTING, 1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner STARTED, 1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner FLUSHING, 1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner STOPPING, 1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner RELEASING, 1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner }; 1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner enum { 1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kPortIndexInput = 0, 1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kPortIndexOutput = 1, 1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner }; 1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner enum { 1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatInit = 'init', 1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatConfigure = 'conf', 1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatCreateInputSurface = 'cisf', 1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatStart = 'strt', 1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatStop = 'stop', 1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatRelease = 'rele', 1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatDequeueInputBuffer = 'deqI', 1555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatQueueInputBuffer = 'queI', 1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatDequeueOutputBuffer = 'deqO', 1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatReleaseOutputBuffer = 'relO', 1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatSignalEndOfInputStream = 'eois', 1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatGetBuffers = 'getB', 1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatFlush = 'flus', 1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatGetOutputFormat = 'getO', 1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatDequeueInputTimedOut = 'dITO', 1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatDequeueOutputTimedOut = 'dOTO', 1645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatCodecNotify = 'codc', 1655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatRequestIDRFrame = 'ridr', 1665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatRequestActivityNotification = 'racN', 1675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatGetName = 'getN', 1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kWhatSetParameters = 'setP', 1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner }; 1705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner enum { 1725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagIsSoftwareCodec = 1, 1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagOutputFormatChanged = 2, 1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagOutputBuffersChanged = 4, 1755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagStickyError = 8, 1765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagDequeueInputPending = 16, 1775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagDequeueOutputPending = 32, 1785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagIsSecure = 64, 1795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagSawMediaServerDie = 128, 1805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagIsEncoder = 256, 1815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner kFlagGatherCodecSpecificData = 512, 1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner }; 1835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct BufferInfo { 1855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t mBufferID; 1865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<ABuffer> mData; 1875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<ABuffer> mEncryptedData; 1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<AMessage> mNotify; 1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bool mOwnedByClient; 1905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner }; 1915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner State mState; 1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<ALooper> mLooper; 1945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<ALooper> mCodecLooper; 1955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<ACodec> mCodec; 1965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AString mComponentName; 1975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t mReplyID; 1985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t mFlags; 1995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<Surface> mNativeWindow; 2005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SoftwareRenderer *mSoftRenderer; 2015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<AMessage> mOutputFormat; 2025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner List<size_t> mAvailPortBuffers[2]; 2045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner Vector<BufferInfo> mPortBuffers[2]; 2055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int32_t mDequeueInputTimeoutGeneration; 2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t mDequeueInputReplyID; 2085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int32_t mDequeueOutputTimeoutGeneration; 2105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t mDequeueOutputReplyID; 2115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<ICrypto> mCrypto; 2135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner List<sp<ABuffer> > mCSD; 2155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner sp<AMessage> mActivityNotify; 2175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bool mHaveInputSurface; 2195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MediaCodec(const sp<ALooper> &looper); 2215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner static status_t PostAndAwaitResponse( 2235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const sp<AMessage> &msg, sp<AMessage> *response); 2245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t init(const char *name, bool nameIsType, bool encoder); 2265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void setState(State newState); 2285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void returnBuffersToCodec(); 2295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void returnBuffersToCodecOnPort(int32_t portIndex); 2305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner size_t updateBuffers(int32_t portIndex, const sp<AMessage> &msg); 2315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t onQueueInputBuffer(const sp<AMessage> &msg); 2325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t onReleaseOutputBuffer(const sp<AMessage> &msg); 2335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ssize_t dequeuePortBuffer(int32_t portIndex); 2345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bool handleDequeueInputBuffer(uint32_t replyID, bool newRequest = false); 2365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bool handleDequeueOutputBuffer(uint32_t replyID, bool newRequest = false); 2375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void cancelPendingDequeueOperations(); 2385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void extractCSD(const sp<AMessage> &format); 2405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t queueCSDInputBuffer(size_t bufferIndex); 2415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t setNativeWindow( 2435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const sp<Surface> &surface); 2445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void postActivityNotificationIfPossible(); 2465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t onSetParameters(const sp<AMessage> ¶ms); 2485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner status_t amendOutputFormatWithCodecSpecificData(const sp<ABuffer> &buffer); 2505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner DISALLOW_EVIL_CONSTRUCTORS(MediaCodec); 2525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 2535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} // namespace android 2555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif // MEDIA_CODEC_H_ 2575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner