diff --git a/sys/mediafoundation/gstmfsourcereader.cpp b/sys/mediafoundation/gstmfsourcereader.cpp index 3d6dd63c4e..78572f3c4c 100644 --- a/sys/mediafoundation/gstmfsourcereader.cpp +++ b/sys/mediafoundation/gstmfsourcereader.cpp @@ -74,6 +74,7 @@ struct _GstMFSourceReader /* protected by lock */ GstQueueArray *queue; + IMFActivate *activate; IMFMediaSource *source; IMFSourceReader *reader; @@ -307,6 +308,8 @@ gst_mf_source_reader_open (GstMFSourceReader * self, IMFActivate * activate) return FALSE; } + self->activate = activate; + activate->AddRef (); self->source = source.Detach (); self->reader = reader.Detach (); @@ -332,6 +335,12 @@ gst_mf_source_reader_close (GstMFSourceReader * self) { gst_clear_caps (&self->supported_caps); + if (self->activate) { + self->activate->ShutdownObject (); + self->activate->Release (); + self->activate = NULL; + } + if (self->media_types) { g_list_free_full (self->media_types, (GDestroyNotify) gst_mf_stream_media_type_free); diff --git a/sys/mediafoundation/gstmftransform.cpp b/sys/mediafoundation/gstmftransform.cpp index c6424535eb..10b0c2f5ae 100644 --- a/sys/mediafoundation/gstmftransform.cpp +++ b/sys/mediafoundation/gstmftransform.cpp @@ -1040,6 +1040,11 @@ gst_mf_transform_close (GstMFTransform * object) gst_mf_transform_flush (object); + /* Otherwise IMFTransform will be alive even after we release the IMFTransform + * below */ + if (object->activate) + object->activate->ShutdownObject (); + if (object->callback_object) { object->callback_object->Release (); object->callback_object = nullptr;