summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/omx/OMXNodeInstance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/omx/OMXNodeInstance.cpp')
-rw-r--r--media/libstagefright/omx/OMXNodeInstance.cpp17
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);
}