MediaCodec.h revision fc7fca77caa12993dd938d5ff43797d781291027
15778822d86b0337407514b9372562b86edfa91cdAndreas Huber/* 25778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Copyright 2012, The Android Open Source Project 35778822d86b0337407514b9372562b86edfa91cdAndreas Huber * 45778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 55778822d86b0337407514b9372562b86edfa91cdAndreas Huber * you may not use this file except in compliance with the License. 65778822d86b0337407514b9372562b86edfa91cdAndreas Huber * You may obtain a copy of the License at 75778822d86b0337407514b9372562b86edfa91cdAndreas Huber * 85778822d86b0337407514b9372562b86edfa91cdAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 95778822d86b0337407514b9372562b86edfa91cdAndreas Huber * 105778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Unless required by applicable law or agreed to in writing, software 115778822d86b0337407514b9372562b86edfa91cdAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 125778822d86b0337407514b9372562b86edfa91cdAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135778822d86b0337407514b9372562b86edfa91cdAndreas Huber * See the License for the specific language governing permissions and 145778822d86b0337407514b9372562b86edfa91cdAndreas Huber * limitations under the License. 155778822d86b0337407514b9372562b86edfa91cdAndreas Huber */ 165778822d86b0337407514b9372562b86edfa91cdAndreas Huber 175778822d86b0337407514b9372562b86edfa91cdAndreas Huber#ifndef MEDIA_CODEC_H_ 185778822d86b0337407514b9372562b86edfa91cdAndreas Huber 195778822d86b0337407514b9372562b86edfa91cdAndreas Huber#define MEDIA_CODEC_H_ 205778822d86b0337407514b9372562b86edfa91cdAndreas Huber 218ba01021b573889802e67e029225a96f0dfa471aAndy McFadden#include <gui/IGraphicBufferProducer.h> 224b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber#include <media/hardware/CryptoAPI.h> 235778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <media/stagefright/foundation/AHandler.h> 245778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <utils/Vector.h> 255778822d86b0337407514b9372562b86edfa91cdAndreas Huber 265778822d86b0337407514b9372562b86edfa91cdAndreas Hubernamespace android { 275778822d86b0337407514b9372562b86edfa91cdAndreas Huber 285778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct ABuffer; 295778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct ACodec; 305778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct AMessage; 315b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huberstruct AString; 32ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huberstruct ICrypto; 335778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct SoftwareRenderer; 341a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopianstruct Surface; 355778822d86b0337407514b9372562b86edfa91cdAndreas Huber 365778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct MediaCodec : public AHandler { 375778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum ConfigureFlags { 385778822d86b0337407514b9372562b86edfa91cdAndreas Huber CONFIGURE_FLAG_ENCODE = 1, 395778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 405778822d86b0337407514b9372562b86edfa91cdAndreas Huber 415778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum BufferFlags { 425778822d86b0337407514b9372562b86edfa91cdAndreas Huber BUFFER_FLAG_SYNCFRAME = 1, 435778822d86b0337407514b9372562b86edfa91cdAndreas Huber BUFFER_FLAG_CODECCONFIG = 2, 445778822d86b0337407514b9372562b86edfa91cdAndreas Huber BUFFER_FLAG_EOS = 4, 455778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 465778822d86b0337407514b9372562b86edfa91cdAndreas Huber 475778822d86b0337407514b9372562b86edfa91cdAndreas Huber static sp<MediaCodec> CreateByType( 485778822d86b0337407514b9372562b86edfa91cdAndreas Huber const sp<ALooper> &looper, const char *mime, bool encoder); 495778822d86b0337407514b9372562b86edfa91cdAndreas Huber 505778822d86b0337407514b9372562b86edfa91cdAndreas Huber static sp<MediaCodec> CreateByComponentName( 515778822d86b0337407514b9372562b86edfa91cdAndreas Huber const sp<ALooper> &looper, const char *name); 525778822d86b0337407514b9372562b86edfa91cdAndreas Huber 535778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t configure( 545778822d86b0337407514b9372562b86edfa91cdAndreas Huber const sp<AMessage> &format, 551a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopian const sp<Surface> &nativeWindow, 561bd139a2a68690e80398b70b27ca59550fea0e65Andreas Huber const sp<ICrypto> &crypto, 575778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t flags); 585778822d86b0337407514b9372562b86edfa91cdAndreas Huber 597cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer); 607cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 615778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t start(); 62c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber 63c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber // Returns to a state in which the component remains allocated but 64c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber // unconfigured. 655778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t stop(); 665778822d86b0337407514b9372562b86edfa91cdAndreas Huber 67c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber // Client MUST call release before releasing final reference to this 68c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber // object. 69c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber status_t release(); 70c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber 715778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t flush(); 725778822d86b0337407514b9372562b86edfa91cdAndreas Huber 735778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t queueInputBuffer( 745778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t index, 755778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t offset, 765778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t size, 775778822d86b0337407514b9372562b86edfa91cdAndreas Huber int64_t presentationTimeUs, 785b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber uint32_t flags, 795b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber AString *errorDetailMsg = NULL); 805778822d86b0337407514b9372562b86edfa91cdAndreas Huber 814b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber status_t queueSecureInputBuffer( 824b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber size_t index, 834b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber size_t offset, 844b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber const CryptoPlugin::SubSample *subSamples, 854b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber size_t numSubSamples, 864b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber const uint8_t key[16], 874b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber const uint8_t iv[16], 884b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber CryptoPlugin::Mode mode, 894b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber int64_t presentationTimeUs, 905b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber uint32_t flags, 915b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber AString *errorDetailMsg = NULL); 924b75a9c8b93a90749bc5d22912ad0d96c12f4ecfAndreas Huber 935778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t dequeueInputBuffer(size_t *index, int64_t timeoutUs = 0ll); 945778822d86b0337407514b9372562b86edfa91cdAndreas Huber 955778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t dequeueOutputBuffer( 965778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t *index, 975778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t *offset, 985778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t *size, 995778822d86b0337407514b9372562b86edfa91cdAndreas Huber int64_t *presentationTimeUs, 1005778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t *flags, 1015778822d86b0337407514b9372562b86edfa91cdAndreas Huber int64_t timeoutUs = 0ll); 1025778822d86b0337407514b9372562b86edfa91cdAndreas Huber 103fc7fca77caa12993dd938d5ff43797d781291027Lajos Molnar status_t renderOutputBufferAndRelease(size_t index, int64_t timestampNs); 1045778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t renderOutputBufferAndRelease(size_t index); 1055778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t releaseOutputBuffer(size_t index); 1065778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1077cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden status_t signalEndOfInputStream(); 1087cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 1095778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t getOutputFormat(sp<AMessage> *format) const; 110e0381245dff04aa823a59aa8b85869eddab0f39fLajos Molnar status_t getInputFormat(sp<AMessage> *format) const; 1115778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1125778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t getInputBuffers(Vector<sp<ABuffer> > *buffers) const; 1135778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t getOutputBuffers(Vector<sp<ABuffer> > *buffers) const; 1145778822d86b0337407514b9372562b86edfa91cdAndreas Huber 115496238cc7551d414067dcbbb4fe3bd801f205f95Andreas Huber status_t requestIDRFrame(); 116496238cc7551d414067dcbbb4fe3bd801f205f95Andreas Huber 117575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber // Notification will be posted once there "is something to do", i.e. 118575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber // an input/output buffer has become available, a format change is 119575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber // pending, an error is pending. 120575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber void requestActivityNotification(const sp<AMessage> ¬ify); 121575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber 122717fd3d4328abf524978ce9c125ab8ae8d6bffadMartin Storsjo status_t getName(AString *componentName) const; 123717fd3d4328abf524978ce9c125ab8ae8d6bffadMartin Storsjo 124a2eb22c1de262aa3fa7c356537ac2fe165afdf3dAndreas Huber status_t setParameters(const sp<AMessage> ¶ms); 125a2eb22c1de262aa3fa7c356537ac2fe165afdf3dAndreas Huber 1265778822d86b0337407514b9372562b86edfa91cdAndreas Huberprotected: 1275778822d86b0337407514b9372562b86edfa91cdAndreas Huber virtual ~MediaCodec(); 1285778822d86b0337407514b9372562b86edfa91cdAndreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 1295778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1305778822d86b0337407514b9372562b86edfa91cdAndreas Huberprivate: 1315778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum State { 1325778822d86b0337407514b9372562b86edfa91cdAndreas Huber UNINITIALIZED, 1335778822d86b0337407514b9372562b86edfa91cdAndreas Huber INITIALIZING, 1345778822d86b0337407514b9372562b86edfa91cdAndreas Huber INITIALIZED, 1355778822d86b0337407514b9372562b86edfa91cdAndreas Huber CONFIGURING, 1365778822d86b0337407514b9372562b86edfa91cdAndreas Huber CONFIGURED, 1375778822d86b0337407514b9372562b86edfa91cdAndreas Huber STARTING, 1385778822d86b0337407514b9372562b86edfa91cdAndreas Huber STARTED, 1395778822d86b0337407514b9372562b86edfa91cdAndreas Huber FLUSHING, 1405778822d86b0337407514b9372562b86edfa91cdAndreas Huber STOPPING, 141c95c2ddcdfc974f42408a377fbe2de51b94a8c94Andreas Huber RELEASING, 1425778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 1435778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1445778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum { 1455778822d86b0337407514b9372562b86edfa91cdAndreas Huber kPortIndexInput = 0, 1465778822d86b0337407514b9372562b86edfa91cdAndreas Huber kPortIndexOutput = 1, 1475778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 1485778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1495778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum { 150575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatInit = 'init', 151575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatConfigure = 'conf', 1527cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden kWhatCreateInputSurface = 'cisf', 153575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatStart = 'strt', 154575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatStop = 'stop', 155575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatRelease = 'rele', 156575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatDequeueInputBuffer = 'deqI', 157575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatQueueInputBuffer = 'queI', 158575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatDequeueOutputBuffer = 'deqO', 159575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatReleaseOutputBuffer = 'relO', 1607cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden kWhatSignalEndOfInputStream = 'eois', 161575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatGetBuffers = 'getB', 162575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatFlush = 'flus', 163575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatGetOutputFormat = 'getO', 164e0381245dff04aa823a59aa8b85869eddab0f39fLajos Molnar kWhatGetInputFormat = 'getI', 165575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatDequeueInputTimedOut = 'dITO', 166575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatDequeueOutputTimedOut = 'dOTO', 167575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatCodecNotify = 'codc', 168575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatRequestIDRFrame = 'ridr', 169575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber kWhatRequestActivityNotification = 'racN', 170717fd3d4328abf524978ce9c125ab8ae8d6bffadMartin Storsjo kWhatGetName = 'getN', 171a2eb22c1de262aa3fa7c356537ac2fe165afdf3dAndreas Huber kWhatSetParameters = 'setP', 1725778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 1735778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1745778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum { 1755778822d86b0337407514b9372562b86edfa91cdAndreas Huber kFlagIsSoftwareCodec = 1, 1765778822d86b0337407514b9372562b86edfa91cdAndreas Huber kFlagOutputFormatChanged = 2, 1775778822d86b0337407514b9372562b86edfa91cdAndreas Huber kFlagOutputBuffersChanged = 4, 1785778822d86b0337407514b9372562b86edfa91cdAndreas Huber kFlagStickyError = 8, 1795778822d86b0337407514b9372562b86edfa91cdAndreas Huber kFlagDequeueInputPending = 16, 1805778822d86b0337407514b9372562b86edfa91cdAndreas Huber kFlagDequeueOutputPending = 32, 181ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber kFlagIsSecure = 64, 182aa7f97bb9c70176245ffb7ed0ce52bee6c1a57d7Andreas Huber kFlagSawMediaServerDie = 128, 183e96ee699aca0f711d41e6c0833e5de2341c4a36dAndreas Huber kFlagIsEncoder = 256, 184e96ee699aca0f711d41e6c0833e5de2341c4a36dAndreas Huber kFlagGatherCodecSpecificData = 512, 1855778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 1865778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1875778822d86b0337407514b9372562b86edfa91cdAndreas Huber struct BufferInfo { 1885778822d86b0337407514b9372562b86edfa91cdAndreas Huber void *mBufferID; 1895778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<ABuffer> mData; 190ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber sp<ABuffer> mEncryptedData; 1915778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<AMessage> mNotify; 1925778822d86b0337407514b9372562b86edfa91cdAndreas Huber bool mOwnedByClient; 1935778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 1945778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1955778822d86b0337407514b9372562b86edfa91cdAndreas Huber State mState; 1965778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<ALooper> mLooper; 1975778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<ALooper> mCodecLooper; 1985778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<ACodec> mCodec; 199717fd3d4328abf524978ce9c125ab8ae8d6bffadMartin Storsjo AString mComponentName; 2005778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t mReplyID; 2015778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t mFlags; 2021a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopian sp<Surface> mNativeWindow; 2035778822d86b0337407514b9372562b86edfa91cdAndreas Huber SoftwareRenderer *mSoftRenderer; 2045778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<AMessage> mOutputFormat; 205e0381245dff04aa823a59aa8b85869eddab0f39fLajos Molnar sp<AMessage> mInputFormat; 2065778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2075778822d86b0337407514b9372562b86edfa91cdAndreas Huber List<size_t> mAvailPortBuffers[2]; 2085778822d86b0337407514b9372562b86edfa91cdAndreas Huber Vector<BufferInfo> mPortBuffers[2]; 2095778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2105778822d86b0337407514b9372562b86edfa91cdAndreas Huber int32_t mDequeueInputTimeoutGeneration; 2115778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t mDequeueInputReplyID; 2125778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2135778822d86b0337407514b9372562b86edfa91cdAndreas Huber int32_t mDequeueOutputTimeoutGeneration; 2145778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t mDequeueOutputReplyID; 2155778822d86b0337407514b9372562b86edfa91cdAndreas Huber 216ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber sp<ICrypto> mCrypto; 217ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 2188ee516a515c70a492c395b67ce12e19e7d159804Andreas Huber List<sp<ABuffer> > mCSD; 2198ee516a515c70a492c395b67ce12e19e7d159804Andreas Huber 220575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber sp<AMessage> mActivityNotify; 221575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber 2226507d14c6d10f93d390de62b9eed267f9b544985Andy McFadden bool mHaveInputSurface; 2236507d14c6d10f93d390de62b9eed267f9b544985Andy McFadden 2245778822d86b0337407514b9372562b86edfa91cdAndreas Huber MediaCodec(const sp<ALooper> &looper); 2255778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2265778822d86b0337407514b9372562b86edfa91cdAndreas Huber static status_t PostAndAwaitResponse( 2275778822d86b0337407514b9372562b86edfa91cdAndreas Huber const sp<AMessage> &msg, sp<AMessage> *response); 2285778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2295778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t init(const char *name, bool nameIsType, bool encoder); 2305778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2315778822d86b0337407514b9372562b86edfa91cdAndreas Huber void setState(State newState); 2325778822d86b0337407514b9372562b86edfa91cdAndreas Huber void returnBuffersToCodec(); 2335778822d86b0337407514b9372562b86edfa91cdAndreas Huber void returnBuffersToCodecOnPort(int32_t portIndex); 2345778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t updateBuffers(int32_t portIndex, const sp<AMessage> &msg); 2355778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onQueueInputBuffer(const sp<AMessage> &msg); 2365778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onReleaseOutputBuffer(const sp<AMessage> &msg); 2375778822d86b0337407514b9372562b86edfa91cdAndreas Huber ssize_t dequeuePortBuffer(int32_t portIndex); 2385778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2395778822d86b0337407514b9372562b86edfa91cdAndreas Huber bool handleDequeueInputBuffer(uint32_t replyID, bool newRequest = false); 2405778822d86b0337407514b9372562b86edfa91cdAndreas Huber bool handleDequeueOutputBuffer(uint32_t replyID, bool newRequest = false); 2415778822d86b0337407514b9372562b86edfa91cdAndreas Huber void cancelPendingDequeueOperations(); 2425778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2438ee516a515c70a492c395b67ce12e19e7d159804Andreas Huber void extractCSD(const sp<AMessage> &format); 2448ee516a515c70a492c395b67ce12e19e7d159804Andreas Huber status_t queueCSDInputBuffer(size_t bufferIndex); 2458ee516a515c70a492c395b67ce12e19e7d159804Andreas Huber 2467541ff5d83a3e77cb533841a0326a241550b95d9Andreas Huber status_t setNativeWindow( 2471a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopian const sp<Surface> &surface); 2487541ff5d83a3e77cb533841a0326a241550b95d9Andreas Huber 249575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber void postActivityNotificationIfPossible(); 250575a5361fc970476cd7979638ee3ac00cc6e5024Andreas Huber 251a2eb22c1de262aa3fa7c356537ac2fe165afdf3dAndreas Huber status_t onSetParameters(const sp<AMessage> ¶ms); 252a2eb22c1de262aa3fa7c356537ac2fe165afdf3dAndreas Huber 253e96ee699aca0f711d41e6c0833e5de2341c4a36dAndreas Huber status_t amendOutputFormatWithCodecSpecificData(const sp<ABuffer> &buffer); 254e96ee699aca0f711d41e6c0833e5de2341c4a36dAndreas Huber 2555778822d86b0337407514b9372562b86edfa91cdAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(MediaCodec); 2565778822d86b0337407514b9372562b86edfa91cdAndreas Huber}; 2575778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2585778822d86b0337407514b9372562b86edfa91cdAndreas Huber} // namespace android 2595778822d86b0337407514b9372562b86edfa91cdAndreas Huber 2605778822d86b0337407514b9372562b86edfa91cdAndreas Huber#endif // MEDIA_CODEC_H_ 261