diff options
author | Seungha Yang <seungha@centricular.com> | 2021-03-16 17:56:51 +0900 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2021-03-16 09:47:41 +0000 |
commit | 1d6cdbdc90459fe95e953ee45afa2f8fb8d544b1 (patch) | |
tree | fdc8b9323fdf72f022d9ae20cd2fe9556331c979 /sys | |
parent | 58e451325b4dbccefaca0326b6109aad97a84c98 (diff) | |
download | gstreamer-plugins-bad-1d6cdbdc90459fe95e953ee45afa2f8fb8d544b1.tar.gz |
mediafoundation: Fix resource leak
IMFActivate would hold its internal objects unless user call ShutdownObject(),
even if we release the IMFActivate. Here internal objects may
include Direct3D objects, such as texture, device handle for example.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2087>
Diffstat (limited to 'sys')
-rw-r--r-- | sys/mediafoundation/gstmfsourcereader.cpp | 9 | ||||
-rw-r--r-- | sys/mediafoundation/gstmftransform.cpp | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/sys/mediafoundation/gstmfsourcereader.cpp b/sys/mediafoundation/gstmfsourcereader.cpp index 3d6dd63c4..78572f3c4 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 c6424535e..10b0c2f5a 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; |