diff options
author | Rachad <rachad@google.com> | 2014-10-07 02:08:10 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-07 02:08:10 +0000 |
commit | 292cf155f105915f896877a7be83e46bdf4275d2 (patch) | |
tree | 4c741c08a58bb602824d7e6bd97623e4c95df36a /media/libstagefright | |
parent | 6160044825b0686e59c11ddbcaf56c8086da4022 (diff) | |
parent | 584c14c370f141685b7e8963a13ed91584383ca1 (diff) | |
download | frameworks_av-292cf155f105915f896877a7be83e46bdf4275d2.zip frameworks_av-292cf155f105915f896877a7be83e46bdf4275d2.tar.gz frameworks_av-292cf155f105915f896877a7be83e46bdf4275d2.tar.bz2 |
am 584c14c3: Merge "stagefright: do not allocate output buffers for tunneled playback" into lmp-dev
* commit '584c14c370f141685b7e8963a13ed91584383ca1':
stagefright: do not allocate output buffers for tunneled playback
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/ACodec.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 868385b..e5c16ea 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -421,7 +421,8 @@ ACodec::ACodec() mMaxPtsGapUs(-1ll), mTimePerFrameUs(-1ll), mTimePerCaptureUs(-1ll), - mCreateInputBuffersSuspended(false) { + mCreateInputBuffersSuspended(false), + mTunneled(false) { mUninitializedState = new UninitializedState(this); mLoadedState = new LoadedState(this); mLoadedToIdleState = new LoadedToIdleState(this); @@ -697,6 +698,21 @@ status_t ACodec::configureOutputBuffersFromNativeWindow( return err; } + // Exits here for tunneled video playback codecs -- i.e. skips native window + // buffer allocation step as this is managed by the tunneled OMX omponent + // itself and explicitly sets def.nBufferCountActual to 0. + if (mTunneled) { + ALOGV("Tunneled Playback: skipping native window buffer allocation."); + def.nBufferCountActual = 0; + err = mOMX->setParameter( + mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); + + *minUndequeuedBuffers = 0; + *bufferCount = 0; + *bufferSize = 0; + return err; + } + *minUndequeuedBuffers = 0; err = mNativeWindow->query( mNativeWindow.get(), NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS, @@ -904,6 +920,13 @@ ACodec::BufferInfo *ACodec::dequeueBufferFromNativeWindow() { ANativeWindowBuffer *buf; int fenceFd = -1; CHECK(mNativeWindow.get() != NULL); + + if (mTunneled) { + ALOGW("dequeueBufferFromNativeWindow() should not be called in tunnel" + " video playback mode mode!"); + return NULL; + } + if (native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf) != 0) { ALOGE("dequeueBuffer failed."); return NULL; @@ -1245,6 +1268,7 @@ status_t ACodec::configureCodec( if (msg->findInt32("feature-tunneled-playback", &tunneled) && tunneled != 0) { ALOGI("Configuring TUNNELED video playback."); + mTunneled = true; int32_t audioHwSync = 0; if (!msg->findInt32("audio-hw-sync", &audioHwSync)) { @@ -1259,6 +1283,9 @@ status_t ACodec::configureCodec( inputFormat->setInt32("adaptive-playback", true); } else { + ALOGV("Configuring CPU controlled video playback."); + mTunneled = false; + // Always try to enable dynamic output buffers on native surface err = mOMX->storeMetaDataInBuffers( mNode, kPortIndexOutput, OMX_TRUE); |