Reapply "Codec2Client: use IProducerListener for Codec2 hidl1.2"
This reverts commit c7c9a060755459340d838e5622e97f388e6e7391.
Change-Id: Iaadc5dc47562b435d09b33ad675729beb76b62cb
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.cpp b/media/codec2/sfplugin/CCodecBufferChannel.cpp
index 0db3eec..514d622 100644
--- a/media/codec2/sfplugin/CCodecBufferChannel.cpp
+++ b/media/codec2/sfplugin/CCodecBufferChannel.cpp
@@ -1131,7 +1131,14 @@
}
void CCodecBufferChannel::onBufferReleasedFromOutputSurface(uint32_t generation) {
- mComponent->onBufferReleasedFromOutputSurface(generation);
+ // Note: Since this is called asynchronously from IProducerListener not
+ // knowing the internal state of CCodec/CCodecBufferChannel,
+ // prevent mComponent from being destroyed by holding the shared reference
+ // during this interface being executed.
+ std::shared_ptr<Codec2Client::Component> comp = mComponent;
+ if (comp) {
+ comp->onBufferReleasedFromOutputSurface(generation);
+ }
}
status_t CCodecBufferChannel::discardBuffer(const sp<MediaCodecBuffer> &buffer) {