MediaCodec.h revision c5619c7a6dcc1137fde7520351ad5284e3e958ab
18225b7c95185dfbfe67da105df4402430784393cRobert Sesek/* 28225b7c95185dfbfe67da105df4402430784393cRobert Sesek * Copyright 2012, The Android Open Source Project 38225b7c95185dfbfe67da105df4402430784393cRobert Sesek * 48225b7c95185dfbfe67da105df4402430784393cRobert Sesek * Licensed under the Apache License, Version 2.0 (the "License"); 58225b7c95185dfbfe67da105df4402430784393cRobert Sesek * you may not use this file except in compliance with the License. 68225b7c95185dfbfe67da105df4402430784393cRobert Sesek * You may obtain a copy of the License at 78225b7c95185dfbfe67da105df4402430784393cRobert Sesek * 88225b7c95185dfbfe67da105df4402430784393cRobert Sesek * http://www.apache.org/licenses/LICENSE-2.0 98225b7c95185dfbfe67da105df4402430784393cRobert Sesek * 108225b7c95185dfbfe67da105df4402430784393cRobert Sesek * Unless required by applicable law or agreed to in writing, software 118225b7c95185dfbfe67da105df4402430784393cRobert Sesek * distributed under the License is distributed on an "AS IS" BASIS, 128225b7c95185dfbfe67da105df4402430784393cRobert Sesek * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138225b7c95185dfbfe67da105df4402430784393cRobert Sesek * See the License for the specific language governing permissions and 148225b7c95185dfbfe67da105df4402430784393cRobert Sesek * limitations under the License. 158225b7c95185dfbfe67da105df4402430784393cRobert Sesek */ 168225b7c95185dfbfe67da105df4402430784393cRobert Sesek 178225b7c95185dfbfe67da105df4402430784393cRobert Sesek#ifndef MEDIA_CODEC_H_ 188225b7c95185dfbfe67da105df4402430784393cRobert Sesek 198225b7c95185dfbfe67da105df4402430784393cRobert Sesek#define MEDIA_CODEC_H_ 208225b7c95185dfbfe67da105df4402430784393cRobert Sesek 218225b7c95185dfbfe67da105df4402430784393cRobert Sesek#include <gui/IGraphicBufferProducer.h> 228225b7c95185dfbfe67da105df4402430784393cRobert Sesek#include <media/hardware/CryptoAPI.h> 238225b7c95185dfbfe67da105df4402430784393cRobert Sesek#include <media/stagefright/foundation/AHandler.h> 248225b7c95185dfbfe67da105df4402430784393cRobert Sesek#include <utils/Vector.h> 258225b7c95185dfbfe67da105df4402430784393cRobert Sesek 268225b7c95185dfbfe67da105df4402430784393cRobert Seseknamespace android { 278225b7c95185dfbfe67da105df4402430784393cRobert Sesek 288225b7c95185dfbfe67da105df4402430784393cRobert Sesekstruct ABuffer; 293879ecc891bcfce91662db6d0823c96770058df5Narayan Kamathstruct AMessage; 30a352d2473a8bf5d5cb711ea5ef1591604e2bef94Narayan Kamathstruct AString; 313879ecc891bcfce91662db6d0823c96770058df5Narayan Kamathstruct CodecBase; 328225b7c95185dfbfe67da105df4402430784393cRobert Sesekstruct ICrypto; 338225b7c95185dfbfe67da105df4402430784393cRobert Sesekstruct SoftwareRenderer; 3454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesekstruct Surface; 358225b7c95185dfbfe67da105df4402430784393cRobert Sesek 368225b7c95185dfbfe67da105df4402430784393cRobert Sesekstruct MediaCodec : public AHandler { 378225b7c95185dfbfe67da105df4402430784393cRobert Sesek enum ConfigureFlags { 388225b7c95185dfbfe67da105df4402430784393cRobert Sesek CONFIGURE_FLAG_ENCODE = 1, 398225b7c95185dfbfe67da105df4402430784393cRobert Sesek }; 408225b7c95185dfbfe67da105df4402430784393cRobert Sesek 418225b7c95185dfbfe67da105df4402430784393cRobert Sesek enum BufferFlags { 428225b7c95185dfbfe67da105df4402430784393cRobert Sesek BUFFER_FLAG_SYNCFRAME = 1, 438225b7c95185dfbfe67da105df4402430784393cRobert Sesek BUFFER_FLAG_CODECCONFIG = 2, 448225b7c95185dfbfe67da105df4402430784393cRobert Sesek BUFFER_FLAG_EOS = 4, 458225b7c95185dfbfe67da105df4402430784393cRobert Sesek }; 468225b7c95185dfbfe67da105df4402430784393cRobert Sesek 478225b7c95185dfbfe67da105df4402430784393cRobert Sesek enum { 488225b7c95185dfbfe67da105df4402430784393cRobert Sesek CB_INPUT_AVAILABLE = 1, 498225b7c95185dfbfe67da105df4402430784393cRobert Sesek CB_OUTPUT_AVAILABLE = 2, 5054e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek CB_ERROR = 3, 5154e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek CB_OUTPUT_FORMAT_CHANGED = 4, 5254e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek }; 5354e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 5454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek static sp<MediaCodec> CreateByType( 5554e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek const sp<ALooper> &looper, const char *mime, bool encoder); 5654e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 5754e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek static sp<MediaCodec> CreateByComponentName( 5854e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek const sp<ALooper> &looper, const char *name); 5954e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 6054e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t configure( 6154e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek const sp<AMessage> &format, 6254e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek const sp<Surface> &nativeWindow, 6354e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek const sp<ICrypto> &crypto, 6454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek uint32_t flags); 6554e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 6654e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t setCallback(const sp<AMessage> &callback); 6754e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 6854e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer); 6954e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 703879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath status_t start(); 713879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath 723879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath // Returns to a state in which the component remains allocated but 733879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath // unconfigured. 7454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t stop(); 7554e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 7654e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek // Client MUST call release before releasing final reference to this 7754e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek // object. 7854e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t release(); 7954e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 8054e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t flush(); 8154e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 8254e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t queueInputBuffer( 8354e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek size_t index, 8454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek size_t offset, 853879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath size_t size, 863879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath int64_t presentationTimeUs, 873879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath uint32_t flags, 883879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath AString *errorDetailMsg = NULL); 893879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath 903879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath status_t queueSecureInputBuffer( 913879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath size_t index, 923879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath size_t offset, 933879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath const CryptoPlugin::SubSample *subSamples, 9454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek size_t numSubSamples, 9554e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek const uint8_t key[16], 9654e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek const uint8_t iv[16], 9754e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek CryptoPlugin::Mode mode, 983879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath int64_t presentationTimeUs, 993879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath uint32_t flags, 1003879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath AString *errorDetailMsg = NULL); 1013879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath 10254e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t dequeueInputBuffer(size_t *index, int64_t timeoutUs = 0ll); 10354e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 10454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t dequeueOutputBuffer( 10554e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek size_t *index, 10654e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek size_t *offset, 1073879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath size_t *size, 1083879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath int64_t *presentationTimeUs, 1093879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath uint32_t *flags, 11054e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek int64_t timeoutUs = 0ll); 11154e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 11254e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t renderOutputBufferAndRelease(size_t index, int64_t timestampNs); 11354e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t renderOutputBufferAndRelease(size_t index); 11454e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t releaseOutputBuffer(size_t index); 11554e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 11654e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t signalEndOfInputStream(); 11754e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 11854e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t getOutputFormat(sp<AMessage> *format) const; 11954e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t getInputFormat(sp<AMessage> *format) const; 12054e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek 12154e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t getInputBuffers(Vector<sp<ABuffer> > *buffers) const; 12254e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek status_t getOutputBuffers(Vector<sp<ABuffer> > *buffers) const; 1238225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1248225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t getOutputBuffer(size_t index, sp<ABuffer> *buffer); 1258225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t getOutputFormat(size_t index, sp<AMessage> *format); 1268225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t getInputBuffer(size_t index, sp<ABuffer> *buffer); 1278225b7c95185dfbfe67da105df4402430784393cRobert Sesek 12884b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath status_t requestIDRFrame(); 1298225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1308225b7c95185dfbfe67da105df4402430784393cRobert Sesek // Notification will be posted once there "is something to do", i.e. 1318225b7c95185dfbfe67da105df4402430784393cRobert Sesek // an input/output buffer has become available, a format change is 13254e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek // pending, an error is pending. 13354e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek void requestActivityNotification(const sp<AMessage> ¬ify); 1348225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1358225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t getName(AString *componentName) const; 1368225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1378225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t setParameters(const sp<AMessage> ¶ms); 1388225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1398225b7c95185dfbfe67da105df4402430784393cRobert Sesekprotected: 14054e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek virtual ~MediaCodec(); 14184b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath virtual void onMessageReceived(const sp<AMessage> &msg); 14284b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath 1438225b7c95185dfbfe67da105df4402430784393cRobert Sesekprivate: 1448225b7c95185dfbfe67da105df4402430784393cRobert Sesek enum State { 1458225b7c95185dfbfe67da105df4402430784393cRobert Sesek UNINITIALIZED, 1468225b7c95185dfbfe67da105df4402430784393cRobert Sesek INITIALIZING, 1478225b7c95185dfbfe67da105df4402430784393cRobert Sesek INITIALIZED, 1488225b7c95185dfbfe67da105df4402430784393cRobert Sesek CONFIGURING, 1498225b7c95185dfbfe67da105df4402430784393cRobert Sesek CONFIGURED, 1508225b7c95185dfbfe67da105df4402430784393cRobert Sesek STARTING, 1518225b7c95185dfbfe67da105df4402430784393cRobert Sesek STARTED, 1528225b7c95185dfbfe67da105df4402430784393cRobert Sesek FLUSHING, 1538225b7c95185dfbfe67da105df4402430784393cRobert Sesek STOPPING, 1548225b7c95185dfbfe67da105df4402430784393cRobert Sesek RELEASING, 1558225b7c95185dfbfe67da105df4402430784393cRobert Sesek }; 1568225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1578225b7c95185dfbfe67da105df4402430784393cRobert Sesek enum { 1588225b7c95185dfbfe67da105df4402430784393cRobert Sesek kPortIndexInput = 0, 1598225b7c95185dfbfe67da105df4402430784393cRobert Sesek kPortIndexOutput = 1, 16084b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath }; 1618225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1628225b7c95185dfbfe67da105df4402430784393cRobert Sesek enum { 1638225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatInit = 'init', 1648225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatConfigure = 'conf', 1653879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath kWhatCreateInputSurface = 'cisf', 1663879ecc891bcfce91662db6d0823c96770058df5Narayan Kamath kWhatStart = 'strt', 1678225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatStop = 'stop', 1688225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatRelease = 'rele', 1698225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatDequeueInputBuffer = 'deqI', 17054e387ddbe6a0462bc8e9e15c7c7b3463adfcb24Robert Sesek kWhatQueueInputBuffer = 'queI', 17184b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath kWhatDequeueOutputBuffer = 'deqO', 1728225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatReleaseOutputBuffer = 'relO', 1738225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatSignalEndOfInputStream = 'eois', 1748225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatGetBuffers = 'getB', 1758225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatFlush = 'flus', 1768225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatGetOutputFormat = 'getO', 1778225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatGetInputFormat = 'getI', 1788225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatDequeueInputTimedOut = 'dITO', 1798225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatDequeueOutputTimedOut = 'dOTO', 18084b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath kWhatCodecNotify = 'codc', 1818225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatRequestIDRFrame = 'ridr', 1828225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatRequestActivityNotification = 'racN', 1838225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatGetName = 'getN', 1848225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatSetParameters = 'setP', 1858225b7c95185dfbfe67da105df4402430784393cRobert Sesek kWhatSetCallback = 'setC', 1868225b7c95185dfbfe67da105df4402430784393cRobert Sesek }; 1878225b7c95185dfbfe67da105df4402430784393cRobert Sesek 1888225b7c95185dfbfe67da105df4402430784393cRobert Sesek enum { 1898225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagIsSoftwareCodec = 1, 1908225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagOutputFormatChanged = 2, 1918225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagOutputBuffersChanged = 4, 1928225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagStickyError = 8, 1938225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagDequeueInputPending = 16, 1948225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagDequeueOutputPending = 32, 1958225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagIsSecure = 64, 1968225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagSawMediaServerDie = 128, 1978225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagIsEncoder = 256, 19884b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath kFlagGatherCodecSpecificData = 512, 1998225b7c95185dfbfe67da105df4402430784393cRobert Sesek kFlagIsAsync = 1024, 2008225b7c95185dfbfe67da105df4402430784393cRobert Sesek }; 2018225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2028225b7c95185dfbfe67da105df4402430784393cRobert Sesek struct BufferInfo { 2038225b7c95185dfbfe67da105df4402430784393cRobert Sesek uint32_t mBufferID; 2048225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<ABuffer> mData; 2058225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<ABuffer> mEncryptedData; 2068225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<AMessage> mNotify; 2078225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<AMessage> mFormat; 2088225b7c95185dfbfe67da105df4402430784393cRobert Sesek bool mOwnedByClient; 2098225b7c95185dfbfe67da105df4402430784393cRobert Sesek }; 2108225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2118225b7c95185dfbfe67da105df4402430784393cRobert Sesek State mState; 2128225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<ALooper> mLooper; 2138225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<ALooper> mCodecLooper; 2148225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<CodecBase> mCodec; 2158225b7c95185dfbfe67da105df4402430784393cRobert Sesek AString mComponentName; 2168225b7c95185dfbfe67da105df4402430784393cRobert Sesek uint32_t mReplyID; 217a352d2473a8bf5d5cb711ea5ef1591604e2bef94Narayan Kamath uint32_t mFlags; 2188225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<Surface> mNativeWindow; 2198225b7c95185dfbfe67da105df4402430784393cRobert Sesek SoftwareRenderer *mSoftRenderer; 2208225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<AMessage> mOutputFormat; 2218225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<AMessage> mInputFormat; 2228225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<AMessage> mCallback; 2238225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2248225b7c95185dfbfe67da105df4402430784393cRobert Sesek // Used only to synchronize asynchronous getBufferAndFormat 2258225b7c95185dfbfe67da105df4402430784393cRobert Sesek // across all the other (synchronous) buffer state change 2268225b7c95185dfbfe67da105df4402430784393cRobert Sesek // operations, such as de/queueIn/OutputBuffer, start and 2278225b7c95185dfbfe67da105df4402430784393cRobert Sesek // stop/flush/reset/release. 2288225b7c95185dfbfe67da105df4402430784393cRobert Sesek Mutex mBufferLock; 2298225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2308225b7c95185dfbfe67da105df4402430784393cRobert Sesek List<size_t> mAvailPortBuffers[2]; 2318225b7c95185dfbfe67da105df4402430784393cRobert Sesek Vector<BufferInfo> mPortBuffers[2]; 2328225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2338225b7c95185dfbfe67da105df4402430784393cRobert Sesek int32_t mDequeueInputTimeoutGeneration; 2348225b7c95185dfbfe67da105df4402430784393cRobert Sesek uint32_t mDequeueInputReplyID; 23584b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath 2368225b7c95185dfbfe67da105df4402430784393cRobert Sesek int32_t mDequeueOutputTimeoutGeneration; 2378225b7c95185dfbfe67da105df4402430784393cRobert Sesek uint32_t mDequeueOutputReplyID; 2388225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2398225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<ICrypto> mCrypto; 2408225b7c95185dfbfe67da105df4402430784393cRobert Sesek 24184b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath List<sp<ABuffer> > mCSD; 2428225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2438225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<AMessage> mActivityNotify; 2448225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2458225b7c95185dfbfe67da105df4402430784393cRobert Sesek bool mHaveInputSurface; 2468225b7c95185dfbfe67da105df4402430784393cRobert Sesek 24784b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath MediaCodec(const sp<ALooper> &looper); 2488225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2498225b7c95185dfbfe67da105df4402430784393cRobert Sesek static status_t PostAndAwaitResponse( 2508225b7c95185dfbfe67da105df4402430784393cRobert Sesek const sp<AMessage> &msg, sp<AMessage> *response); 2518225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2528225b7c95185dfbfe67da105df4402430784393cRobert Sesek static void PostReplyWithError(int32_t replyID, int32_t err); 25384b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath 2548225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t init(const char *name, bool nameIsType, bool encoder); 2558225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2568225b7c95185dfbfe67da105df4402430784393cRobert Sesek void setState(State newState); 2578225b7c95185dfbfe67da105df4402430784393cRobert Sesek void returnBuffersToCodec(); 2588225b7c95185dfbfe67da105df4402430784393cRobert Sesek void returnBuffersToCodecOnPort(int32_t portIndex); 25984b55115354f3c2c9531f251f9d126bb7a06988dNarayan Kamath size_t updateBuffers(int32_t portIndex, const sp<AMessage> &msg); 2608225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t onQueueInputBuffer(const sp<AMessage> &msg); 2618225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t onReleaseOutputBuffer(const sp<AMessage> &msg); 2628225b7c95185dfbfe67da105df4402430784393cRobert Sesek ssize_t dequeuePortBuffer(int32_t portIndex); 2638225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2648225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t getBufferAndFormat( 2658225b7c95185dfbfe67da105df4402430784393cRobert Sesek size_t portIndex, size_t index, 2668225b7c95185dfbfe67da105df4402430784393cRobert Sesek sp<ABuffer> *buffer, sp<AMessage> *format); 2678225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2688225b7c95185dfbfe67da105df4402430784393cRobert Sesek bool handleDequeueInputBuffer(uint32_t replyID, bool newRequest = false); 2698225b7c95185dfbfe67da105df4402430784393cRobert Sesek bool handleDequeueOutputBuffer(uint32_t replyID, bool newRequest = false); 2708225b7c95185dfbfe67da105df4402430784393cRobert Sesek void cancelPendingDequeueOperations(); 2718225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2728225b7c95185dfbfe67da105df4402430784393cRobert Sesek void extractCSD(const sp<AMessage> &format); 2738225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t queueCSDInputBuffer(size_t bufferIndex); 2748225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2758225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t setNativeWindow( 2768225b7c95185dfbfe67da105df4402430784393cRobert Sesek const sp<Surface> &surface); 2778225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2788225b7c95185dfbfe67da105df4402430784393cRobert Sesek void postActivityNotificationIfPossible(); 2798225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2808225b7c95185dfbfe67da105df4402430784393cRobert Sesek void onInputBufferAvailable(); 2818225b7c95185dfbfe67da105df4402430784393cRobert Sesek void onOutputBufferAvailable(); 2828225b7c95185dfbfe67da105df4402430784393cRobert Sesek void onError(int32_t actionCode, status_t err); 2838225b7c95185dfbfe67da105df4402430784393cRobert Sesek void onOutputFormatChanged(); 2848225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2858225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t onSetParameters(const sp<AMessage> ¶ms); 2868225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2878225b7c95185dfbfe67da105df4402430784393cRobert Sesek status_t amendOutputFormatWithCodecSpecificData(const sp<ABuffer> &buffer); 2888225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2898225b7c95185dfbfe67da105df4402430784393cRobert Sesek DISALLOW_EVIL_CONSTRUCTORS(MediaCodec); 2908225b7c95185dfbfe67da105df4402430784393cRobert Sesek}; 2918225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2928225b7c95185dfbfe67da105df4402430784393cRobert Sesek} // namespace android 2938225b7c95185dfbfe67da105df4402430784393cRobert Sesek 2948225b7c95185dfbfe67da105df4402430784393cRobert Sesek#endif // MEDIA_CODEC_H_ 2958225b7c95185dfbfe67da105df4402430784393cRobert Sesek