MediaCodec.h revision 92cd05b8f2e994aabcdda5d7454c96a707dc9579
14c2d66379753e2b7680811726424026b9e54b18aFelipe Leme/* 24c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * Copyright 2012, The Android Open Source Project 34c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * 44c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * Licensed under the Apache License, Version 2.0 (the "License"); 54c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * you may not use this file except in compliance with the License. 64c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * You may obtain a copy of the License at 74c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * 84c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * http://www.apache.org/licenses/LICENSE-2.0 94c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * 104c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * Unless required by applicable law or agreed to in writing, software 114c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * distributed under the License is distributed on an "AS IS" BASIS, 124c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * See the License for the specific language governing permissions and 144c2d66379753e2b7680811726424026b9e54b18aFelipe Leme * limitations under the License. 154c2d66379753e2b7680811726424026b9e54b18aFelipe Leme */ 164c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 1775876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme#ifndef MEDIA_CODEC_H_ 1875876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme 1975876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme#define MEDIA_CODEC_H_ 20f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme 2175876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme#include <gui/IGraphicBufferProducer.h> 2275876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme#include <media/hardware/CryptoAPI.h> 234c2d66379753e2b7680811726424026b9e54b18aFelipe Leme#include <media/stagefright/foundation/AHandler.h> 244c2d66379753e2b7680811726424026b9e54b18aFelipe Leme#include <utils/Vector.h> 254c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 264c2d66379753e2b7680811726424026b9e54b18aFelipe Lemenamespace android { 274c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2846b85da716a32f285fe1222e9978beacc8697d09Felipe Lemestruct ABuffer; 294c2d66379753e2b7680811726424026b9e54b18aFelipe Lemestruct AMessage; 30fd8affa8840d2d9f7f320201521a702919c677ffFelipe Lemestruct AString; 31fd8affa8840d2d9f7f320201521a702919c677ffFelipe Lemestruct CodecBase; 324c2d66379753e2b7680811726424026b9e54b18aFelipe Lemestruct ICrypto; 33fd8affa8840d2d9f7f320201521a702919c677ffFelipe Lemestruct SoftwareRenderer; 344c2d66379753e2b7680811726424026b9e54b18aFelipe Lemestruct Surface; 354c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 36d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Lemestruct MediaCodec : public AHandler { 37d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme enum ConfigureFlags { 38fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme CONFIGURE_FLAG_ENCODE = 1, 394c2d66379753e2b7680811726424026b9e54b18aFelipe Leme }; 4047e9be2d71c5eca9002e289c98e8bbc20dffc073Felipe Leme 4147e9be2d71c5eca9002e289c98e8bbc20dffc073Felipe Leme enum BufferFlags { 4247e9be2d71c5eca9002e289c98e8bbc20dffc073Felipe Leme BUFFER_FLAG_SYNCFRAME = 1, 43d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme BUFFER_FLAG_CODECCONFIG = 2, 444c2d66379753e2b7680811726424026b9e54b18aFelipe Leme BUFFER_FLAG_EOS = 4, 4546b85da716a32f285fe1222e9978beacc8697d09Felipe Leme }; 46009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme 474c2d66379753e2b7680811726424026b9e54b18aFelipe Leme static sp<MediaCodec> CreateByType( 48009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme const sp<ALooper> &looper, const char *mime, bool encoder); 494c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 504c2d66379753e2b7680811726424026b9e54b18aFelipe Leme static sp<MediaCodec> CreateByComponentName( 514c2d66379753e2b7680811726424026b9e54b18aFelipe Leme const sp<ALooper> &looper, const char *name); 524c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 534c2d66379753e2b7680811726424026b9e54b18aFelipe Leme status_t configure( 544c2d66379753e2b7680811726424026b9e54b18aFelipe Leme const sp<AMessage> &format, 554c2d66379753e2b7680811726424026b9e54b18aFelipe Leme const sp<Surface> &nativeWindow, 564c2d66379753e2b7680811726424026b9e54b18aFelipe Leme const sp<ICrypto> &crypto, 5775876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme uint32_t flags); 5875876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme 5975876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer); 6075876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme 6175876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme status_t start(); 6275876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme 6375876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme // Returns to a state in which the component remains allocated but 6475876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme // unconfigured. 6575876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme status_t stop(); 6646b85da716a32f285fe1222e9978beacc8697d09Felipe Leme 6746b85da716a32f285fe1222e9978beacc8697d09Felipe Leme // Client MUST call release before releasing final reference to this 687447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme // object. 697447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t release(); 7046b85da716a32f285fe1222e9978beacc8697d09Felipe Leme 7146b85da716a32f285fe1222e9978beacc8697d09Felipe Leme status_t flush(); 7246b85da716a32f285fe1222e9978beacc8697d09Felipe Leme 73f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme status_t queueInputBuffer( 7446b85da716a32f285fe1222e9978beacc8697d09Felipe Leme size_t index, 7546b85da716a32f285fe1222e9978beacc8697d09Felipe Leme size_t offset, 76f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme size_t size, 77f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme int64_t presentationTimeUs, 7846b85da716a32f285fe1222e9978beacc8697d09Felipe Leme uint32_t flags, 7946b85da716a32f285fe1222e9978beacc8697d09Felipe Leme AString *errorDetailMsg = NULL); 80f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme 81f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme status_t queueSecureInputBuffer( 82f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme size_t index, 83f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme size_t offset, 84f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme const CryptoPlugin::SubSample *subSamples, 85f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme size_t numSubSamples, 8646b85da716a32f285fe1222e9978beacc8697d09Felipe Leme const uint8_t key[16], 8746b85da716a32f285fe1222e9978beacc8697d09Felipe Leme const uint8_t iv[16], 88f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme CryptoPlugin::Mode mode, 89f029297f673ae06d219bd727a318a48b885db6fdFelipe Leme int64_t presentationTimeUs, 9046b85da716a32f285fe1222e9978beacc8697d09Felipe Leme uint32_t flags, 9146b85da716a32f285fe1222e9978beacc8697d09Felipe Leme AString *errorDetailMsg = NULL); 9246b85da716a32f285fe1222e9978beacc8697d09Felipe Leme 9346b85da716a32f285fe1222e9978beacc8697d09Felipe Leme status_t dequeueInputBuffer(size_t *index, int64_t timeoutUs = 0ll); 947447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 957447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t dequeueOutputBuffer( 967447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme size_t *index, 977447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme size_t *offset, 987447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme size_t *size, 997447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme int64_t *presentationTimeUs, 1007447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme uint32_t *flags, 1017447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme int64_t timeoutUs = 0ll); 1027447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 1037447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t renderOutputBufferAndRelease(size_t index, int64_t timestampNs); 1047447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t renderOutputBufferAndRelease(size_t index); 1057447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t releaseOutputBuffer(size_t index); 1067447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 1077447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t signalEndOfInputStream(); 1087447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 1097447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t getOutputFormat(sp<AMessage> *format) const; 1107447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t getInputFormat(sp<AMessage> *format) const; 1117447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 1127447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t getInputBuffers(Vector<sp<ABuffer> > *buffers) const; 1137447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t getOutputBuffers(Vector<sp<ABuffer> > *buffers) const; 1147447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 1157447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme status_t requestIDRFrame(); 1167447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 11746b85da716a32f285fe1222e9978beacc8697d09Felipe Leme // Notification will be posted once there "is something to do", i.e. 1187447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme // an input/output buffer has become available, a format change is 11946b85da716a32f285fe1222e9978beacc8697d09Felipe Leme // pending, an error is pending. 12046b85da716a32f285fe1222e9978beacc8697d09Felipe Leme void requestActivityNotification(const sp<AMessage> ¬ify); 12146b85da716a32f285fe1222e9978beacc8697d09Felipe Leme 12246b85da716a32f285fe1222e9978beacc8697d09Felipe Leme status_t getName(AString *componentName) const; 12346b85da716a32f285fe1222e9978beacc8697d09Felipe Leme 12446b85da716a32f285fe1222e9978beacc8697d09Felipe Leme status_t setParameters(const sp<AMessage> ¶ms); 12546b85da716a32f285fe1222e9978beacc8697d09Felipe Leme 12646b85da716a32f285fe1222e9978beacc8697d09Felipe Lemeprotected: 12746b85da716a32f285fe1222e9978beacc8697d09Felipe Leme virtual ~MediaCodec(); 12846b85da716a32f285fe1222e9978beacc8697d09Felipe Leme virtual void onMessageReceived(const sp<AMessage> &msg); 1297447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 1307447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Lemeprivate: 13146b85da716a32f285fe1222e9978beacc8697d09Felipe Leme enum State { 13246b85da716a32f285fe1222e9978beacc8697d09Felipe Leme UNINITIALIZED, 1337447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme INITIALIZING, 1347447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme INITIALIZED, 1357447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme CONFIGURING, 1367447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme CONFIGURED, 1374c2d66379753e2b7680811726424026b9e54b18aFelipe Leme STARTING, 1384c2d66379753e2b7680811726424026b9e54b18aFelipe Leme STARTED, 13946b85da716a32f285fe1222e9978beacc8697d09Felipe Leme FLUSHING, 1404c2d66379753e2b7680811726424026b9e54b18aFelipe Leme STOPPING, 141d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme RELEASING, 1427447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme }; 1439a523aed06ef962f67385ac88191b08dc91059f4Felipe Leme 144009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme enum { 1454c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kPortIndexInput = 0, 1464c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kPortIndexOutput = 1, 1474c2d66379753e2b7680811726424026b9e54b18aFelipe Leme }; 1489a523aed06ef962f67385ac88191b08dc91059f4Felipe Leme 1494c2d66379753e2b7680811726424026b9e54b18aFelipe Leme enum { 1504c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kWhatInit = 'init', 1514c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kWhatConfigure = 'conf', 1529a523aed06ef962f67385ac88191b08dc91059f4Felipe Leme kWhatCreateInputSurface = 'cisf', 1534c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kWhatStart = 'strt', 1544c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kWhatStop = 'stop', 1554c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kWhatRelease = 'rele', 1564c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kWhatDequeueInputBuffer = 'deqI', 1574c2d66379753e2b7680811726424026b9e54b18aFelipe Leme kWhatQueueInputBuffer = 'queI', 158cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatDequeueOutputBuffer = 'deqO', 159cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatReleaseOutputBuffer = 'relO', 160cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatSignalEndOfInputStream = 'eois', 161cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatGetBuffers = 'getB', 162cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatFlush = 'flus', 163cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatGetOutputFormat = 'getO', 164cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatGetInputFormat = 'getI', 165cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatDequeueInputTimedOut = 'dITO', 166cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatDequeueOutputTimedOut = 'dOTO', 167cef0298e2540e6ad8c2728e6fcc007247c68aac0Felipe Leme kWhatCodecNotify = 'codc', 168009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme kWhatRequestIDRFrame = 'ridr', 1697447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme kWhatRequestActivityNotification = 'racN', 170009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme kWhatGetName = 'getN', 171009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme kWhatSetParameters = 'setP', 1727447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme }; 1737447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 1747447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme enum { 175009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme kFlagIsSoftwareCodec = 1, 176009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme kFlagOutputFormatChanged = 2, 1777447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme kFlagOutputBuffersChanged = 4, 1787447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme kFlagStickyError = 8, 179d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme kFlagDequeueInputPending = 16, 1807447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme kFlagDequeueOutputPending = 32, 181d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme kFlagIsSecure = 64, 182009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme kFlagSawMediaServerDie = 128, 1839a523aed06ef962f67385ac88191b08dc91059f4Felipe Leme kFlagIsEncoder = 256, 184009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme kFlagGatherCodecSpecificData = 512, 1857447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme }; 186d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme 187d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme struct BufferInfo { 188009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme uint32_t mBufferID; 189009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme sp<ABuffer> mData; 190009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme sp<ABuffer> mEncryptedData; 19175876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme sp<AMessage> mNotify; 19275876a2c0649b8cde36329ca0a1dc6e349af6493Felipe Leme bool mOwnedByClient; 193009ecbbd3fcfd06735b0102f0342fc7e60166d9bFelipe Leme }; 194d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme 195d80e6b6109c52d57ebba675c1f97fcb2ca1d93c5Felipe Leme State mState; 1964c2d66379753e2b7680811726424026b9e54b18aFelipe Leme sp<ALooper> mLooper; 1974c2d66379753e2b7680811726424026b9e54b18aFelipe Leme sp<ALooper> mCodecLooper; 1984c2d66379753e2b7680811726424026b9e54b18aFelipe Leme sp<CodecBase> mCodec; 199fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme AString mComponentName; 2004c2d66379753e2b7680811726424026b9e54b18aFelipe Leme uint32_t mReplyID; 2014c2d66379753e2b7680811726424026b9e54b18aFelipe Leme uint32_t mFlags; 2024c2d66379753e2b7680811726424026b9e54b18aFelipe Leme sp<Surface> mNativeWindow; 2034c2d66379753e2b7680811726424026b9e54b18aFelipe Leme SoftwareRenderer *mSoftRenderer; 2044c2d66379753e2b7680811726424026b9e54b18aFelipe Leme sp<AMessage> mOutputFormat; 2054c2d66379753e2b7680811726424026b9e54b18aFelipe Leme sp<AMessage> mInputFormat; 2064c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2077447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme List<size_t> mAvailPortBuffers[2]; 2084c2d66379753e2b7680811726424026b9e54b18aFelipe Leme Vector<BufferInfo> mPortBuffers[2]; 2094c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2104c2d66379753e2b7680811726424026b9e54b18aFelipe Leme int32_t mDequeueInputTimeoutGeneration; 2114c2d66379753e2b7680811726424026b9e54b18aFelipe Leme uint32_t mDequeueInputReplyID; 2124c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2137447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme int32_t mDequeueOutputTimeoutGeneration; 2144c2d66379753e2b7680811726424026b9e54b18aFelipe Leme uint32_t mDequeueOutputReplyID; 2154c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 216fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme sp<ICrypto> mCrypto; 2177447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 2184c2d66379753e2b7680811726424026b9e54b18aFelipe Leme List<sp<ABuffer> > mCSD; 2194c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2204c2d66379753e2b7680811726424026b9e54b18aFelipe Leme sp<AMessage> mActivityNotify; 221fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme 2224c2d66379753e2b7680811726424026b9e54b18aFelipe Leme bool mHaveInputSurface; 2237447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 224fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme MediaCodec(const sp<ALooper> &looper); 225fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme 226fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme static status_t PostAndAwaitResponse( 227fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme const sp<AMessage> &msg, sp<AMessage> *response); 228fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme 229fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme status_t init(const char *name, bool nameIsType, bool encoder); 2307447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 231fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme void setState(State newState); 2324c2d66379753e2b7680811726424026b9e54b18aFelipe Leme void returnBuffersToCodec(); 233fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme void returnBuffersToCodecOnPort(int32_t portIndex); 2344c2d66379753e2b7680811726424026b9e54b18aFelipe Leme size_t updateBuffers(int32_t portIndex, const sp<AMessage> &msg); 2354c2d66379753e2b7680811726424026b9e54b18aFelipe Leme status_t onQueueInputBuffer(const sp<AMessage> &msg); 2364c2d66379753e2b7680811726424026b9e54b18aFelipe Leme status_t onReleaseOutputBuffer(const sp<AMessage> &msg); 2377447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme ssize_t dequeuePortBuffer(int32_t portIndex); 2384c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2394c2d66379753e2b7680811726424026b9e54b18aFelipe Leme bool handleDequeueInputBuffer(uint32_t replyID, bool newRequest = false); 2404c2d66379753e2b7680811726424026b9e54b18aFelipe Leme bool handleDequeueOutputBuffer(uint32_t replyID, bool newRequest = false); 2414c2d66379753e2b7680811726424026b9e54b18aFelipe Leme void cancelPendingDequeueOperations(); 242fd8affa8840d2d9f7f320201521a702919c677ffFelipe Leme 2437447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme void extractCSD(const sp<AMessage> &format); 2444c2d66379753e2b7680811726424026b9e54b18aFelipe Leme status_t queueCSDInputBuffer(size_t bufferIndex); 2454c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2464c2d66379753e2b7680811726424026b9e54b18aFelipe Leme status_t setNativeWindow( 2474c2d66379753e2b7680811726424026b9e54b18aFelipe Leme const sp<Surface> &surface); 2484c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2494c2d66379753e2b7680811726424026b9e54b18aFelipe Leme void postActivityNotificationIfPossible(); 2507447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 2514c2d66379753e2b7680811726424026b9e54b18aFelipe Leme status_t onSetParameters(const sp<AMessage> ¶ms); 2527447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme 2534c2d66379753e2b7680811726424026b9e54b18aFelipe Leme status_t amendOutputFormatWithCodecSpecificData(const sp<ABuffer> &buffer); 2544c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2554c2d66379753e2b7680811726424026b9e54b18aFelipe Leme DISALLOW_EVIL_CONSTRUCTORS(MediaCodec); 2564c2d66379753e2b7680811726424026b9e54b18aFelipe Leme}; 2574c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2584c2d66379753e2b7680811726424026b9e54b18aFelipe Leme} // namespace android 2594c2d66379753e2b7680811726424026b9e54b18aFelipe Leme 2607447d7c3d74b28f1a071b1d3503212cc8ad08d68Felipe Leme#endif // MEDIA_CODEC_H_ 2614c2d66379753e2b7680811726424026b9e54b18aFelipe Leme