Add AL-FEC feature
[platform/upstream/gst-rtsp-server.git] / gst / rtsp-server / rtsp-media.h
index 6b4922b..0050add 100644 (file)
@@ -18,8 +18,7 @@
  */
 
 #include <gst/gst.h>
-#include <gst/rtsp/gstrtsprange.h>
-#include <gst/rtsp/gstrtspurl.h>
+#include <gst/rtsp/rtsp.h>
 #include <gst/net/gstnet.h>
 
 #ifndef __GST_RTSP_MEDIA_H__
@@ -77,6 +76,21 @@ typedef enum {
   GST_RTSP_SUSPEND_MODE_RESET  = 2
 } GstRTSPSuspendMode;
 
+/**
+ * GstRTSPTransportMode:
+ * @GST_RTSP_TRANSPORT_MODE_PLAY: Transport supports PLAY mode
+ * @GST_RTSP_TRANSPORT_MODE_RECORD: Transport supports RECORD mode
+ *
+ * The supported modes of the media.
+ */
+typedef enum {
+  GST_RTSP_TRANSPORT_MODE_PLAY    = 1,
+  GST_RTSP_TRANSPORT_MODE_RECORD  = 2,
+} GstRTSPTransportMode;
+
+#define GST_TYPE_RTSP_TRANSPORT_MODE (gst_rtsp_transport_mode_get_type())
+GType gst_rtsp_transport_mode_get_type (void);
+
 #define GST_TYPE_RTSP_SUSPEND_MODE (gst_rtsp_suspend_mode_get_type())
 GType gst_rtsp_suspend_mode_get_type (void);
 
@@ -128,6 +142,7 @@ struct _GstRTSPMediaClass {
   /* vmethods */
   gboolean        (*handle_message)  (GstRTSPMedia *media, GstMessage *message);
   gboolean        (*prepare)         (GstRTSPMedia *media, GstRTSPThread *thread);
+  gboolean        (*start_preroll)   (GstRTSPMedia *media);
   gboolean        (*unprepare)       (GstRTSPMedia *media);
   gboolean        (*suspend)         (GstRTSPMedia *media);
   gboolean        (*unsuspend)       (GstRTSPMedia *media);
@@ -138,6 +153,7 @@ struct _GstRTSPMediaClass {
   GstElement *    (*create_rtpbin)   (GstRTSPMedia *media);
   gboolean        (*setup_rtpbin)    (GstRTSPMedia *media, GstElement *rtpbin);
   gboolean        (*setup_sdp)       (GstRTSPMedia *media, GstSDPMessage *sdp, GstSDPInfo *info);
+  gboolean        (*start_prepare)   (GstRTSPMedia *media);
 
   /* signals */
   void            (*new_stream)      (GstRTSPMedia *media, GstRTSPStream * stream);
@@ -151,6 +167,8 @@ struct _GstRTSPMediaClass {
 
   gboolean        (*handle_sdp)      (GstRTSPMedia *media, GstSDPMessage *sdp);
 
+  void            (*preparing)       (GstRTSPMedia *media, GstRTSPStream * stream, guint idx);
+  void            (*unpreparing)     (GstRTSPMedia *media, GstRTSPStream * stream, guint idx);
   /*< private >*/
   gpointer         _gst_reserved[GST_PADDING_LARGE-1];
 };
@@ -172,8 +190,8 @@ GstRTSPPermissions *  gst_rtsp_media_get_permissions  (GstRTSPMedia *media);
 void                  gst_rtsp_media_set_shared       (GstRTSPMedia *media, gboolean shared);
 gboolean              gst_rtsp_media_is_shared        (GstRTSPMedia *media);
 
-void                  gst_rtsp_media_set_record       (GstRTSPMedia *media, gboolean record);
-gboolean              gst_rtsp_media_is_record        (GstRTSPMedia *media);
+void                  gst_rtsp_media_set_transport_mode  (GstRTSPMedia *media, GstRTSPTransportMode mode);
+GstRTSPTransportMode  gst_rtsp_media_get_transport_mode  (GstRTSPMedia *media);
 
 void                  gst_rtsp_media_set_reusable     (GstRTSPMedia *media, gboolean reusable);
 gboolean              gst_rtsp_media_is_reusable      (GstRTSPMedia *media);
@@ -196,6 +214,9 @@ guint                 gst_rtsp_media_get_buffer_size  (GstRTSPMedia *media);
 void                  gst_rtsp_media_set_retransmission_time  (GstRTSPMedia *media, GstClockTime time);
 GstClockTime          gst_rtsp_media_get_retransmission_time  (GstRTSPMedia *media);
 
+void                  gst_rtsp_media_set_latency      (GstRTSPMedia *media, guint latency);
+guint                 gst_rtsp_media_get_latency      (GstRTSPMedia *media);
+
 void                  gst_rtsp_media_use_time_provider (GstRTSPMedia *media, gboolean time_provider);
 gboolean              gst_rtsp_media_is_time_provider  (GstRTSPMedia *media);
 GstNetTimeProvider *  gst_rtsp_media_get_time_provider (GstRTSPMedia *media,
@@ -221,7 +242,7 @@ gboolean              gst_rtsp_media_handle_sdp (GstRTSPMedia * media, GstSDPMes
 void                  gst_rtsp_media_collect_streams  (GstRTSPMedia *media);
 GstRTSPStream *       gst_rtsp_media_create_stream    (GstRTSPMedia *media,
                                                        GstElement *payloader,
-                                                       GstPad *srcpad);
+                                                       GstPad *pad);
 
 /* dealing with the media */
 GstClock *            gst_rtsp_media_get_clock        (GstRTSPMedia *media);
@@ -240,6 +261,11 @@ gboolean              gst_rtsp_media_set_state        (GstRTSPMedia *media, GstS
                                                        GPtrArray *transports);
 void                  gst_rtsp_media_set_pipeline_state (GstRTSPMedia * media,
                                                          GstState state);
+GstStateChangeReturn  gst_rtsp_media_set_target_state (GstRTSPMedia * media, GstState state, gboolean do_state);
+void                 gst_rtsp_media_set_status (GstRTSPMedia * media, GstRTSPMediaStatus status);
+
+GstElement *          gst_rtsp_media_get_pipeline     (GstRTSPMedia * media);
+GstElement *          gst_rtsp_media_get_rtpbin       (GstRTSPMedia * media);
 
 G_END_DECLS