Add new API for setting/getting maximum multicast ttl value
[platform/upstream/gstreamer.git] / gst / rtsp-server / rtsp-media-factory.h
index d2b8ee9..46d7d55 100644 (file)
  *
  * You should have received a copy of the GNU Library General Public
  * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
  */
 
 #include <gst/gst.h>
 #include <gst/rtsp/gstrtspurl.h>
 
 #include "rtsp-media.h"
-#include "rtsp-auth.h"
+#include "rtsp-permissions.h"
+#include "rtsp-address-pool.h"
 
 #ifndef __GST_RTSP_MEDIA_FACTORY_H__
 #define __GST_RTSP_MEDIA_FACTORY_H__
@@ -40,35 +41,20 @@ G_BEGIN_DECLS
 
 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)))
+typedef struct _GstRTSPMediaFactoryPrivate GstRTSPMediaFactoryPrivate;
 
 /**
  * GstRTSPMediaFactory:
- * @lock: mutex protecting the datastructure.
- * @launch: the launch description
- * @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;
-  gchar        *multicast_group;
-
-  GMutex       *medias_lock;
-  GHashTable   *medias;
+  GObject            parent;
+
+  /*< private >*/
+  GstRTSPMediaFactoryPrivate *priv;
+  gpointer _gst_reserved[GST_PADDING];
 };
 
 /**
@@ -76,69 +62,203 @@ struct _GstRTSPMediaFactory {
  * @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
+ * @create_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
+ *       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
  *       #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.
+ *       function calls create_element to retrieve an element and then looks for
+ *       pay\%d to create the streams.
  * @create_pipeline: create a new pipeline or re-use an existing one and
  *       add the #GstRTSPMedia's element created by @construct to the pipeline.
+ * @configure: configure the media created with @construct. The default
+ *       implementation will configure the 'shared' property of the media.
+ * @media_constructed: signal emitted when a media was constructed
+ * @media_configure: signal emitted when a media should be configured
  *
  * The #GstRTSPMediaFactory class structure.
  */
 struct _GstRTSPMediaFactoryClass {
   GObjectClass  parent_class;
 
-  gchar *           (*gen_key)         (GstRTSPMediaFactory *factory, const GstRTSPUrl *url);
+  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);
+  GstElement *    (*create_element)     (GstRTSPMediaFactory *factory, const GstRTSPUrl *url);
+  GstRTSPMedia *  (*construct)          (GstRTSPMediaFactory *factory, const GstRTSPUrl *url);
+  GstElement *    (*create_pipeline)    (GstRTSPMediaFactory *factory, GstRTSPMedia *media);
+  void            (*configure)          (GstRTSPMediaFactory *factory, GstRTSPMedia *media);
 
   /* signals */
-  void             (*media_constructed)(GstRTSPMediaFactory *factory, GstRTSPMedia *media);
+  void            (*media_constructed)  (GstRTSPMediaFactory *factory, GstRTSPMedia *media);
+  void            (*media_configure)    (GstRTSPMediaFactory *factory, GstRTSPMedia *media);
+
+  /*< private >*/
+  gpointer         _gst_reserved[GST_PADDING_LARGE];
 };
 
+GST_RTSP_SERVER_API
 GType                 gst_rtsp_media_factory_get_type     (void);
 
 /* creating the factory */
+
+GST_RTSP_SERVER_API
 GstRTSPMediaFactory * gst_rtsp_media_factory_new          (void);
 
 /* configuring the factory */
-void                  gst_rtsp_media_factory_set_launch   (GstRTSPMediaFactory *factory,
-                                                           const gchar *launch);
-gchar *               gst_rtsp_media_factory_get_launch   (GstRTSPMediaFactory *factory);
 
-void                  gst_rtsp_media_factory_set_shared   (GstRTSPMediaFactory *factory,
-                                                           gboolean shared);
-gboolean              gst_rtsp_media_factory_is_shared    (GstRTSPMediaFactory *factory);
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_launch       (GstRTSPMediaFactory *factory,
+                                                               const gchar *launch);
+
+GST_RTSP_SERVER_API
+gchar *               gst_rtsp_media_factory_get_launch       (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_permissions  (GstRTSPMediaFactory *factory,
+                                                               GstRTSPPermissions *permissions);
+
+GST_RTSP_SERVER_API
+GstRTSPPermissions *  gst_rtsp_media_factory_get_permissions  (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_add_role         (GstRTSPMediaFactory *factory,
+                                                               const gchar *role,
+                                                               const gchar *fieldname, ...);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_add_role_from_structure (GstRTSPMediaFactory * factory,
+                                                               GstStructure *structure);
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_shared       (GstRTSPMediaFactory *factory,
+                                                               gboolean shared);
+
+GST_RTSP_SERVER_API
+gboolean              gst_rtsp_media_factory_is_shared        (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_stop_on_disconnect       (GstRTSPMediaFactory *factory,
+                                                                           gboolean stop_on_disconnect);
+
+GST_RTSP_SERVER_API
+gboolean              gst_rtsp_media_factory_is_stop_on_disonnect        (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_suspend_mode (GstRTSPMediaFactory *factory,
+                                                               GstRTSPSuspendMode mode);
+
+GST_RTSP_SERVER_API
+GstRTSPSuspendMode    gst_rtsp_media_factory_get_suspend_mode (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_eos_shutdown (GstRTSPMediaFactory *factory,
+                                                               gboolean eos_shutdown);
+
+GST_RTSP_SERVER_API
+gboolean              gst_rtsp_media_factory_is_eos_shutdown  (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_profiles     (GstRTSPMediaFactory *factory,
+                                                               GstRTSPProfile profiles);
+
+GST_RTSP_SERVER_API
+GstRTSPProfile        gst_rtsp_media_factory_get_profiles     (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);
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_protocols    (GstRTSPMediaFactory *factory,
+                                                               GstRTSPLowerTrans protocols);
 
-void                  gst_rtsp_media_factory_set_auth     (GstRTSPMediaFactory *factory, GstRTSPAuth *auth);
-GstRTSPAuth *         gst_rtsp_media_factory_get_auth     (GstRTSPMediaFactory *factory);
+GST_RTSP_SERVER_API
+GstRTSPLowerTrans     gst_rtsp_media_factory_get_protocols    (GstRTSPMediaFactory *factory);
 
-void                  gst_rtsp_media_factory_set_buffer_size    (GstRTSPMediaFactory * factory, guint size);
-guint                 gst_rtsp_media_factory_get_buffer_size    (GstRTSPMediaFactory * factory);
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_address_pool (GstRTSPMediaFactory * factory,
+                                                               GstRTSPAddressPool * pool);
 
-void                  gst_rtsp_media_factory_set_multicast_group (GstRTSPMediaFactory * factory, const gchar *mc);
-gchar *               gst_rtsp_media_factory_get_multicast_group (GstRTSPMediaFactory * factory);
+GST_RTSP_SERVER_API
+GstRTSPAddressPool *  gst_rtsp_media_factory_get_address_pool (GstRTSPMediaFactory * factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_multicast_iface (GstRTSPMediaFactory *factory, const gchar *multicast_iface);
+
+GST_RTSP_SERVER_API
+gchar *               gst_rtsp_media_factory_get_multicast_iface (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_buffer_size  (GstRTSPMediaFactory * factory,
+                                                               guint size);
+
+GST_RTSP_SERVER_API
+guint                 gst_rtsp_media_factory_get_buffer_size  (GstRTSPMediaFactory * factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_retransmission_time (GstRTSPMediaFactory * factory,
+                                                                      GstClockTime time);
+
+GST_RTSP_SERVER_API
+GstClockTime          gst_rtsp_media_factory_get_retransmission_time (GstRTSPMediaFactory * factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_do_retransmission (GstRTSPMediaFactory * factory,
+                                                                    gboolean do_retransmission);
+
+GST_RTSP_SERVER_API
+gboolean              gst_rtsp_media_factory_get_do_retransmission (GstRTSPMediaFactory * factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_latency      (GstRTSPMediaFactory * factory,
+                                                               guint                 latency);
+
+GST_RTSP_SERVER_API
+guint                 gst_rtsp_media_factory_get_latency      (GstRTSPMediaFactory * factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_transport_mode (GstRTSPMediaFactory *factory,
+                                                                 GstRTSPTransportMode mode);
+
+GST_RTSP_SERVER_API
+GstRTSPTransportMode  gst_rtsp_media_factory_get_transport_mode (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_media_gtype  (GstRTSPMediaFactory * factory,
+                                                               GType media_gtype);
+
+GST_RTSP_SERVER_API
+GType                 gst_rtsp_media_factory_get_media_gtype  (GstRTSPMediaFactory * factory);
+
+GST_RTSP_SERVER_API
+void                  gst_rtsp_media_factory_set_clock        (GstRTSPMediaFactory *factory,
+                                                               GstClock * clock);
+
+GST_RTSP_SERVER_API
+GstClock *            gst_rtsp_media_factory_get_clock        (GstRTSPMediaFactory *factory);
+
+GST_RTSP_SERVER_API
+void                    gst_rtsp_media_factory_set_publish_clock_mode (GstRTSPMediaFactory * factory, GstRTSPPublishClockMode mode);
+
+GST_RTSP_SERVER_API
+GstRTSPPublishClockMode gst_rtsp_media_factory_get_publish_clock_mode (GstRTSPMediaFactory * factory);
+
+GST_RTSP_SERVER_API
+gboolean                gst_rtsp_media_factory_set_max_mcast_ttl (GstRTSPMediaFactory * factory,
+                                                                  guint                 ttl);
+
+GST_RTSP_SERVER_API
+guint                 gst_rtsp_media_factory_get_max_mcast_ttl (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);
+GST_RTSP_SERVER_API
+GstRTSPMedia *        gst_rtsp_media_factory_construct        (GstRTSPMediaFactory *factory,
+                                                               const GstRTSPUrl *url);
+
+GST_RTSP_SERVER_API
+GstElement *          gst_rtsp_media_factory_create_element   (GstRTSPMediaFactory *factory,
+                                                               const GstRTSPUrl *url);
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstRTSPMediaFactory, gst_object_unref)
+#endif
 
 G_END_DECLS