code integration 58/72158/2 accepted/tizen/3.0/common/20161114.110646 accepted/tizen/3.0/ivi/20161011.044134 accepted/tizen/3.0/mobile/20161015.033158 accepted/tizen/3.0/tv/20161016.004642 accepted/tizen/common/20160603.150938 accepted/tizen/ivi/20160606.121118 accepted/tizen/mobile/20160606.120800 accepted/tizen/tv/20160606.120943 submit/tizen/20160603.021103 submit/tizen/20160603.061849 submit/tizen_3.0_common/20161104.104000 submit/tizen_3.0_ivi/20161010.000002 submit/tizen_3.0_mobile/20161015.000002 submit/tizen_3.0_tv/20161015.000002
authorSeokHoon Lee <andy.shlee@samsung.com>
Tue, 31 May 2016 05:01:52 +0000 (14:01 +0900)
committerSeokHoon Lee <andy.shlee@samsung.com>
Tue, 31 May 2016 05:24:52 +0000 (14:24 +0900)
 - add RTCP_STATS signal
 - midification for create socket code
 - add gst_rtsp_client_set_watch_flushing function

Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: I0ce3273d9399f580f4035e9c6d752ccdb120a970

gst/rtsp-server/gstwfdmessage.h [changed mode: 0755->0644]
gst/rtsp-server/rtsp-client.c
gst/rtsp-server/rtsp-client.h
gst/rtsp-server/rtsp-server.c
gst/rtsp-server/rtsp-server.h
gst/rtsp-server/rtsp-stream.c

old mode 100755 (executable)
new mode 100644 (file)
index 4f3212d..a600537 100644 (file)
@@ -3944,3 +3944,26 @@ restart:
 
   return result;
 }
+
+/**
+ * gst_rtsp_client_set_watch_flushing:
+ * @client: a #GstRTSPClient
+ * @val: a boolean value
+ *
+ * sets watch flushing to @val on watch to accet/ignore new messages.
+ */
+void
+gst_rtsp_client_set_watch_flushing (GstRTSPClient * client, gboolean val)
+{
+  GstRTSPClientPrivate *priv = NULL;
+  g_return_if_fail (GST_IS_RTSP_CLIENT (client));
+
+  priv = GST_RTSP_CLIENT_GET_PRIVATE (client);
+
+  /* make sure we unblock/block the backlog and accept/don't accept new messages on the watch */
+  if (priv->watch != NULL)
+  {
+     GST_INFO("Set watch flushing as %d", val);
+     gst_rtsp_watch_set_flushing (priv->watch, val);
+  }
+}
index 13fa2d1..2e6bbf7 100644 (file)
@@ -171,6 +171,7 @@ GstRTSPResult         gst_rtsp_client_handle_message    (GstRTSPClient *client,
 GstRTSPResult         gst_rtsp_client_send_message      (GstRTSPClient * client,
                                                          GstRTSPSession *session,
                                                          GstRTSPMessage *message);
+void                  gst_rtsp_client_set_watch_flushing (GstRTSPClient * client, gboolean val);
 /**
  * GstRTSPClientSessionFilterFunc:
  * @client: a #GstRTSPClient object
index 45ae9db..144cb3a 100644 (file)
@@ -230,6 +230,7 @@ gst_rtsp_server_class_init (GstRTSPServerClass * klass)
       GST_TYPE_RTSP_CLIENT);
 
   klass->create_client = default_create_client;
+  klass->create_socket = gst_rtsp_server_create_socket;
 
   GST_DEBUG_CATEGORY_INIT (rtsp_server_debug, "rtspserver", 0, "GstRTSPServer");
 }
@@ -1256,14 +1257,18 @@ gst_rtsp_server_create_source (GstRTSPServer * server,
     GCancellable * cancellable, GError ** error)
 {
   GstRTSPServerPrivate *priv;
-  GSocket *socket, *old;
+  GstRTSPServerClass *klass;
+  GSocket *socket = NULL, *old;
   GSource *source;
 
   g_return_val_if_fail (GST_IS_RTSP_SERVER (server), NULL);
 
   priv = server->priv;
+  klass = GST_RTSP_SERVER_GET_CLASS (server);
+
+  if (klass->create_socket)
+    socket = klass->create_socket (server, NULL, error);
 
-  socket = gst_rtsp_server_create_socket (server, NULL, error);
   if (socket == NULL)
     goto no_socket;
 
index 9a6f9d4..4cb0495 100644 (file)
@@ -85,6 +85,7 @@ struct _GstRTSPServerClass {
   GObjectClass  parent_class;
 
   GstRTSPClient * (*create_client)      (GstRTSPServer *server);
+  GSocket * (*create_socket)      (GstRTSPServer * server,  GCancellable * cancellable, GError ** error);
 
   /* signals */
   void            (*client_connected)   (GstRTSPServer *server, GstRTSPClient *client);
index a015346..ce2f5a4 100644 (file)
@@ -184,6 +184,7 @@ enum
 {
   SIGNAL_NEW_RTP_ENCODER,
   SIGNAL_NEW_RTCP_ENCODER,
+  SIGNAL_RTCP_STATS,
   SIGNAL_LAST
 };
 
@@ -241,6 +242,11 @@ gst_rtsp_stream_class_init (GstRTSPStreamClass * klass)
       G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
       G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
 
+  gst_rtsp_stream_signals[SIGNAL_RTCP_STATS] =
+      g_signal_new ("rtcp-statistics", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
+      G_TYPE_NONE, 1, GST_TYPE_STRUCTURE);
+
   GST_DEBUG_CATEGORY_INIT (rtsp_stream_debug, "rtspstream", 0, "GstRTSPStream");
 
   ssrc_stream_map_key = g_quark_from_static_string ("GstRTSPServer.stream");
@@ -1594,6 +1600,8 @@ check_transport (GObject * source, GstRTSPStream * stream)
 
       dump_structure (stats);
 
+      g_signal_emit (stream, gst_rtsp_stream_signals[SIGNAL_RTCP_STATS], 0, stats);
+
       rtcp_from = gst_structure_get_string (stats, "rtcp-from");
       if ((trans = find_transport (stream, rtcp_from))) {
         GST_INFO ("%p: found transport %p for source  %p", stream, trans,
@@ -1643,6 +1651,8 @@ on_ssrc_active (GObject * session, GObject * source, GstRTSPStream * stream)
     GstStructure *stats;
     g_object_get (source, "stats", &stats, NULL);
     if (stats) {
+      g_signal_emit (stream, gst_rtsp_stream_signals[SIGNAL_RTCP_STATS], 0, stats);
+
       dump_structure (stats);
       gst_structure_free (stats);
     }