diff options
Diffstat (limited to 'media/libstagefright/omx/OMXNodeInstance.cpp')
-rw-r--r-- | media/libstagefright/omx/OMXNodeInstance.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index 288710e..4eb6417 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp @@ -78,7 +78,8 @@ OMXNodeInstance::OMXNodeInstance( : mOwner(owner), mNodeID(NULL), mHandle(NULL), - mObserver(observer) { + mObserver(observer), + mDying(false) { } OMXNodeInstance::~OMXNodeInstance() { @@ -114,6 +115,11 @@ status_t OMXNodeInstance::freeNode(OMXMaster *master) { // for components that don't do this themselves on a call to // "FreeHandle". + // The code below may trigger some more events to be dispatched + // by the OMX component - we want to ignore them as our client + // does not expect them. + mDying = true; + OMX_STATETYPE state; CHECK_EQ(OMX_GetState(mHandle, &state), OMX_ErrorNone); switch (state) { @@ -406,6 +412,9 @@ OMX_ERRORTYPE OMXNodeInstance::OnEvent( OMX_IN OMX_U32 nData2, OMX_IN OMX_PTR pEventData) { OMXNodeInstance *instance = static_cast<OMXNodeInstance *>(pAppData); + if (instance->mDying) { + return OMX_ErrorNone; + } return instance->owner()->OnEvent( instance->nodeID(), eEvent, nData1, nData2, pEventData); } @@ -416,6 +425,9 @@ OMX_ERRORTYPE OMXNodeInstance::OnEmptyBufferDone( OMX_IN OMX_PTR pAppData, OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) { OMXNodeInstance *instance = static_cast<OMXNodeInstance *>(pAppData); + if (instance->mDying) { + return OMX_ErrorNone; + } return instance->owner()->OnEmptyBufferDone(instance->nodeID(), pBuffer); } @@ -425,6 +437,9 @@ OMX_ERRORTYPE OMXNodeInstance::OnFillBufferDone( OMX_IN OMX_PTR pAppData, OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) { OMXNodeInstance *instance = static_cast<OMXNodeInstance *>(pAppData); + if (instance->mDying) { + return OMX_ErrorNone; + } return instance->owner()->OnFillBufferDone(instance->nodeID(), pBuffer); } |