diff options
-rw-r--r-- | media/libstagefright/ACodec.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index b2f1746..c4743a1 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -3472,11 +3472,14 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent( mCodec->signalError(OMX_ErrorUndefined, err); - // This is technically not correct, since we were unable - // to allocate output buffers and therefore the output port - // remains disabled. It is necessary however to allow us - // to shutdown the codec properly. - mCodec->changeState(mCodec->mExecutingState); + // This is technically not correct, but appears to be + // the only way to free the component instance. + // Controlled transitioning from excecuting->idle + // and idle->loaded seem impossible probably because + // the output port never finishes re-enabling. + mCodec->mShutdownInProgress = true; + mCodec->mKeepComponentAllocated = false; + mCodec->changeState(mCodec->mLoadedState); } return true; |