diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index cd1d264a..cd94e0c2 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -110,6 +110,10 @@ Mpp::~Mpp () void Mpp::clear() { + // MUST: release listener here + if (mFrameGroup) + mpp_buffer_group_set_listener((MppBufferGroupImpl *)mFrameGroup, NULL); + if (mThreadCodec) mThreadCodec->stop(); if (mThreadHal) diff --git a/mpp/mpp_buffer_impl.cpp b/mpp/mpp_buffer_impl.cpp index 2f28a0dc..1a91a296 100644 --- a/mpp/mpp_buffer_impl.cpp +++ b/mpp/mpp_buffer_impl.cpp @@ -433,6 +433,7 @@ MPP_RET mpp_buffer_group_set_listener(MppBufferGroupImpl *p, void *listener) return MPP_ERR_NULL_PTR; } + Mutex::Autolock auto_lock(&service.mLock); p->listener = listener; return MPP_OK;