[gst-cvs] gst-rtsp-server: factory: connect to the unprepare signal

Wim Taymans wtay at kemper.freedesktop.org
Tue Apr 14 08:41:15 PDT 2009


Module: gst-rtsp-server
Branch: master
Commit: 35a5a709d35be34d411d1a5ac8aa0dd15585980e
URL:    http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/commit/?id=35a5a709d35be34d411d1a5ac8aa0dd15585980e

Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date:   Fri Apr  3 22:46:22 2009 +0200

factory: connect to the unprepare signal

Connect to the unprepare signal for non-reusable media so that we can remove
them from the cache.

---

 gst/rtsp-server/rtsp-media-factory.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/gst/rtsp-server/rtsp-media-factory.c b/gst/rtsp-server/rtsp-media-factory.c
index 02614e6..6eb8348 100644
--- a/gst/rtsp-server/rtsp-media-factory.c
+++ b/gst/rtsp-server/rtsp-media-factory.c
@@ -250,6 +250,21 @@ gst_rtsp_media_factory_is_shared (GstRTSPMediaFactory *factory)
   return result;
 }
 
+static gboolean
+compare_media (gpointer key, GstRTSPMedia *media1, GstRTSPMedia *media2)
+{
+  return (media1 == media2);
+}
+
+static void
+media_unprepared (GstRTSPMedia *media, GstRTSPMediaFactory *factory)
+{
+  g_mutex_lock (factory->medias_lock);
+  g_hash_table_foreach_remove (factory->medias, (GHRFunc) compare_media,
+       media);
+  g_mutex_unlock (factory->medias_lock);
+}
+
 /**
  * gst_rtsp_media_factory_construct:
  * @factory: a #GstRTSPMediaFactory
@@ -310,6 +325,12 @@ gst_rtsp_media_factory_construct (GstRTSPMediaFactory *factory, const GstRTSPUrl
         g_hash_table_insert (factory->medias, key, media);
         key = NULL;
       }
+      if (!gst_rtsp_media_is_reusable (media)) {
+	/* when not reusable, connect to the unprepare signal to remove the item
+	 * from our cache when it gets unprepared */
+	g_signal_connect (media, "unprepared", (GCallback) media_unprepared,
+			factory);
+      }
     }
   }
   g_mutex_unlock (factory->medias_lock);





More information about the Gstreamer-commits mailing list