#include <gst/rtsp/gstrtspurl.h>
#include "rtsp-media.h"
+#include "rtsp-auth.h"
#ifndef __GST_RTSP_MEDIA_FACTORY_H__
#define __GST_RTSP_MEDIA_FACTORY_H__
typedef struct _GstRTSPMediaFactory GstRTSPMediaFactory;
typedef struct _GstRTSPMediaFactoryClass GstRTSPMediaFactoryClass;
+#define GST_RTSP_MEDIA_FACTORY_GET_LOCK(f) (GST_RTSP_MEDIA_FACTORY_CAST(f)->lock)
+#define GST_RTSP_MEDIA_FACTORY_LOCK(f) (g_mutex_lock(GST_RTSP_MEDIA_FACTORY_GET_LOCK(f)))
+#define GST_RTSP_MEDIA_FACTORY_UNLOCK(f) (g_mutex_unlock(GST_RTSP_MEDIA_FACTORY_GET_LOCK(f)))
+
/**
* GstRTSPMediaFactory:
+ * @lock: mutex protecting the datastructure.
* @launch: the launch description
- * @streams: the array of #GstRTSPMediaStream objects for this media.
+ * @shared: if media from this factory can be shared between clients
+ * @media_lock: mutex protecting the medias.
+ * @media: hashtable of shared media
*
* The definition and logic for constructing the pipeline for a media. The media
* can contain multiple streams like audio and video.
struct _GstRTSPMediaFactory {
GObject parent;
+ GMutex *lock;
gchar *launch;
+ gboolean shared;
+ gboolean eos_shutdown;
+ GstRTSPAuth *auth;
+ guint buffer_size;
+
+ GMutex *medias_lock;
+ GHashTable *medias;
};
/**
* GstRTSPMediaFactoryClass:
+ * @gen_key: convert @url to a key for caching shared #GstRTSPMedia objects.
+ * The default implementation of this function will use the complete URL
+ * including the query parameters to return a key.
+ * @get_element: Construct and return a #GstElement that is a #GstBin containing
+ * the elements to use for streaming the media. The bin should contain
+ * payloaders pay%d for each stream. The default implementation of this
+ * function returns the bin created from the launch parameter.
* @construct: the vmethod that will be called when the factory has to create the
- * #GstRTSPMediaBin for @location.
+ * #GstRTSPMedia for @url. The default implementation of this
+ * function calls get_element to retrieve an element and then looks for
+ * pay%d to create the streams.
+ * @configure: configure the media created with @construct. The default
+ * implementation will configure the 'shared' property of the media.
+ * @create_pipeline: create a new pipeline or re-use an existing one and
+ * add the #GstRTSPMedia's element created by @construct to the pipeline.
*
- * the #GstRTSPMediaFactory class structure.
+ * The #GstRTSPMediaFactory class structure.
*/
struct _GstRTSPMediaFactoryClass {
GObjectClass parent_class;
- GstRTSPMediaBin * (*construct) (GstRTSPMediaFactory *factory, const gchar *location);
+ gchar * (*gen_key) (GstRTSPMediaFactory *factory, const GstRTSPUrl *url);
+
+ GstElement * (*get_element) (GstRTSPMediaFactory *factory, const GstRTSPUrl *url);
+ GstRTSPMedia * (*construct) (GstRTSPMediaFactory *factory, const GstRTSPUrl *url);
+ void (*configure) (GstRTSPMediaFactory *factory, GstRTSPMedia *media);
+ GstElement * (*create_pipeline) (GstRTSPMediaFactory *factory, GstRTSPMedia *media);
+
+ /* signals */
+ void (*media_constructed)(GstRTSPMediaFactory *factory, GstRTSPMedia *media);
};
GType gst_rtsp_media_factory_get_type (void);
-/* configuring the factory */
+/* creating the factory */
GstRTSPMediaFactory * gst_rtsp_media_factory_new (void);
-void gst_rtsp_media_factory_set_launch (GstRTSPMediaFactory *factory, const gchar *launch);
+/* configuring the factory */
+void gst_rtsp_media_factory_set_launch (GstRTSPMediaFactory *factory,
+ const gchar *launch);
gchar * gst_rtsp_media_factory_get_launch (GstRTSPMediaFactory *factory);
-/* creating the media bin from the factory */
-GstRTSPMediaBin * gst_rtsp_media_factory_construct (GstRTSPMediaFactory *factory, const gchar *location);
+void gst_rtsp_media_factory_set_shared (GstRTSPMediaFactory *factory,
+ gboolean shared);
+gboolean gst_rtsp_media_factory_is_shared (GstRTSPMediaFactory *factory);
+
+void gst_rtsp_media_factory_set_eos_shutdown (GstRTSPMediaFactory *factory,
+ gboolean eos_shutdown);
+gboolean gst_rtsp_media_factory_is_eos_shutdown (GstRTSPMediaFactory *factory);
+
+void gst_rtsp_media_factory_set_auth (GstRTSPMediaFactory *factory, GstRTSPAuth *auth);
+GstRTSPAuth * gst_rtsp_media_factory_get_auth (GstRTSPMediaFactory *factory);
+
+void gst_rtsp_media_factory_set_buffer_size (GstRTSPMediaFactory * factory, guint size);
+guint gst_rtsp_media_factory_get_buffer_size (GstRTSPMediaFactory * factory);
+
+
+/* creating the media from the factory and a url */
+GstRTSPMedia * gst_rtsp_media_factory_construct (GstRTSPMediaFactory *factory,
+ const GstRTSPUrl *url);
+
+void gst_rtsp_media_factory_collect_streams (GstRTSPMediaFactory *factory,
+ const GstRTSPUrl *url,
+ GstRTSPMedia *media);
G_END_DECLS