Add coupling mode for secondary sink. 15/205315/7 accepted/tizen/unified/20190508.111106 submit/tizen/20190507.101459
authorHyunsoo Park <hance.park@samsung.com>
Thu, 2 May 2019 07:50:15 +0000 (16:50 +0900)
committerHyunsoo Park <hance.park@samsung.com>
Tue, 7 May 2019 10:11:43 +0000 (19:11 +0900)
For coupling between primary and secondary sink,
it should be checked whether teardown message is sent for coupling or not.

[Version] 1.0.0-73

Change-Id: I3d8ebf508d16cbb444eed48909f4a8c03b9b4cb0
Signed-off-by: Hyunsoo Park <hance.park@samsung.com>
packaging/gst-plugins-tizen.spec
wfdmanager/wfdbase/gstwfdbasesrc.c
wfdmanager/wfdbase/gstwfdsinkmessage.c
wfdmanager/wfdbase/gstwfdsinkmessage.h

index e71694e..14e7b1a 100644 (file)
@@ -5,7 +5,7 @@
 Name:       gst-plugins-tizen
 Version:    1.0.0
 Summary:    GStreamer tizen plugins (common)
-Release:    72
+Release:    73
 Group:      Multimedia/Framework
 Url:        http://gstreamer.freedesktop.org/
 License:    LGPL-2.1+
index c450387..2d4a4b3 100644 (file)
@@ -135,7 +135,6 @@ enum
 #define DEFAULT_PORT_RANGE       NULL
 #define DEFAULT_USER_AGENT       "TIZEN-WFD-SINK"
 #define DEFAULT_COUPLED_SINK_IP  "0.0.0.0"
-#define SECONDARY_SINK_IP "192.168.0.10"
 
 #define SOCKET_TCP_KEEPIDLE 5
 #define SOCKET_TCP_KEEPINTVL 2
@@ -159,14 +158,15 @@ enum
 };
 
 /* commands we send to out loop to notify it of events */
-#define WFD_CMD_OPEN   (1 << 0)
-#define WFD_CMD_PLAY   (1 << 1)
-#define WFD_CMD_PAUSE  (1 << 2)
-#define WFD_CMD_CLOSE  (1 << 3)
-#define WFD_CMD_WAIT   (1 << 4)
-#define WFD_CMD_REQUEST        (1 << 5)
-#define WFD_CMD_LOOP   (1 << 6)
-#define WFD_CMD_ALL         ((WFD_CMD_LOOP << 1) - 1)
+#define WFD_CMD_OPEN           (1 << 0)
+#define WFD_CMD_PLAY           (1 << 1)
+#define WFD_CMD_PAUSE          (1 << 2)
+#define WFD_CMD_CLOSE          (1 << 3)
+#define WFD_CMD_WAIT           (1 << 4)
+#define WFD_CMD_REQUEST        (1 << 5)
+#define WFD_CMD_CLOSE_COUPLING (1 << 6)
+#define WFD_CMD_LOOP           (1 << 7)
+#define WFD_CMD_ALL            ((WFD_CMD_LOOP << 1) - 1)
 
 #define GST_ELEMENT_PROGRESS(el, type, code, text)      \
 G_STMT_START {                                          \
@@ -1771,7 +1771,6 @@ gst_wfd_base_src_handle_request (GstWFDBaseSrc * src, GstRTSPMessage * request)
         wfd_res = gst_wfd_message_set_coupled_sink (wfd_msg,
              coupled_sink_status,
              gst_structure_get_string (priv->wfd_coupled_sink, "coupled_sink_address"));
-
         if (wfd_res != GST_WFD_OK) {
           GST_ERROR ("gst_wfd_message_set_coupled_sink is failed");
           goto message_config_error;
@@ -1922,7 +1921,6 @@ gst_wfd_base_src_handle_request (GstWFDBaseSrc * src, GstRTSPMessage * request)
       if (wfd_msg->trigger_method) {
         GstWFDTrigger trigger = GST_WFD_TRIGGER_UNKNOWN;
 
-
         wfd_res = gst_wfd_message_get_trigger_type (wfd_msg, &trigger);
         if (wfd_res != GST_WFD_OK)
           goto message_config_error;
@@ -1943,6 +1941,12 @@ gst_wfd_base_src_handle_request (GstWFDBaseSrc * src, GstRTSPMessage * request)
           case GST_WFD_TRIGGER_TEARDOWN:
             gst_wfd_base_src_loop_send_cmd (src, WFD_CMD_CLOSE, WFD_CMD_ALL);
             break;
+          case GST_WFD_TRIGGER_TEARDOWN_COUPLING:
+            gst_structure_set (src->priv->wfd_coupled_sink,
+              "coupled_sink_address", G_TYPE_STRING, gst_rtsp_connection_get_ip (src->priv->conninfo.connection),
+              NULL);
+            gst_wfd_base_src_loop_send_cmd (src, WFD_CMD_CLOSE_COUPLING, WFD_CMD_ALL);
+            break;
           case GST_WFD_TRIGGER_SETUP:
             if (!gst_wfd_base_src_setup (src))
               goto setup_failed;
@@ -2290,6 +2294,9 @@ gst_wfd_base_src_loop_start_cmd (GstWFDBaseSrc * src, gint cmd)
     case WFD_CMD_CLOSE:
       GST_ELEMENT_PROGRESS (src, START, "close", ("Closing Stream"));
       break;
+    case WFD_CMD_CLOSE_COUPLING:
+      GST_ELEMENT_PROGRESS (src, START, "coupling", ("Closing Stream for Coupling"));
+      break;
     default:
       break;
   }
@@ -2313,6 +2320,9 @@ gst_wfd_base_src_loop_complete_cmd (GstWFDBaseSrc * src, gint cmd)
     case WFD_CMD_CLOSE:
       GST_ELEMENT_PROGRESS (src, COMPLETE, "close", ("Closed Stream"));
       break;
+    case WFD_CMD_CLOSE_COUPLING:
+      GST_ELEMENT_PROGRESS (src, COMPLETE, "coupling", (gst_structure_get_string (src->priv->wfd_coupled_sink, "coupled_sink_address")));
+      break;
     default:
       break;
   }
@@ -2336,6 +2346,9 @@ gst_wfd_base_src_loop_cancel_cmd (GstWFDBaseSrc * src, gint cmd)
     case WFD_CMD_CLOSE:
       GST_ELEMENT_PROGRESS (src, CANCELED, "close", ("Close canceled"));
       break;
+    case WFD_CMD_CLOSE_COUPLING:
+      GST_ELEMENT_PROGRESS (src, CANCELED, "coupling", ("Coupling canceled"));
+      break;
     default:
       break;
   }
@@ -2359,6 +2372,9 @@ gst_wfd_base_src_loop_error_cmd (GstWFDBaseSrc * src, gint cmd)
     case WFD_CMD_CLOSE:
       GST_ELEMENT_PROGRESS (src, ERROR, "close", ("Close failed"));
       break;
+    case WFD_CMD_CLOSE_COUPLING:
+      GST_ELEMENT_PROGRESS (src, ERROR, "coupling", ("Coupling failed"));
+      break;
     default:
       break;
   }
@@ -3648,8 +3664,6 @@ gst_wfd_base_src_thread (GstWFDBaseSrc * src)
   else
     priv->pending_cmd = WFD_CMD_WAIT;
 
-  GST_DEBUG_OBJECT (src, "got command %s", _cmd_to_string (cmd));
-
   /* we got the message command, so ensure communication is possible again */
   gst_wfd_base_src_connection_flush (src, FALSE);
 
@@ -3667,6 +3681,7 @@ gst_wfd_base_src_thread (GstWFDBaseSrc * src)
       res = gst_wfd_base_src_pause (src);
       break;
     case WFD_CMD_CLOSE:
+    case WFD_CMD_CLOSE_COUPLING:
       res = gst_wfd_base_src_close (src, FALSE);
       break;
     case WFD_CMD_LOOP:
@@ -3690,8 +3705,10 @@ gst_wfd_base_src_thread (GstWFDBaseSrc * src)
   GST_OBJECT_UNLOCK (src);
 
   if (cmd == WFD_CMD_PLAY || cmd == WFD_CMD_PAUSE
-      || cmd == WFD_CMD_CLOSE || cmd == WFD_CMD_OPEN)
-    gst_wfd_base_src_loop_end_cmd (src, cmd, res);
+      || cmd == WFD_CMD_CLOSE || cmd == WFD_CMD_OPEN
+      || cmd == WFD_CMD_CLOSE_COUPLING){
+        gst_wfd_base_src_loop_end_cmd (src, cmd, res);
+  }
 }
 
 static gboolean
@@ -4626,6 +4643,8 @@ _cmd_to_string (guint cmd)
       return "PAUSE";
     case WFD_CMD_CLOSE:
       return "CLOSE";
+    case WFD_CMD_CLOSE_COUPLING:
+      return "Close for Coupling";
     case WFD_CMD_WAIT:
       return "WAIT";
     case WFD_CMD_LOOP:
index c365368..fd3244d 100644 (file)
@@ -2208,6 +2208,8 @@ GstWFDResult gst_wfd_message_set_trigger_type(GstWFDMessage *msg, GstWFDTrigger
     msg->trigger_method->wfd_trigger_method = g_strdup(GST_STRING_WFD_PAUSE);
   else if (trigger == GST_WFD_TRIGGER_TEARDOWN)
     msg->trigger_method->wfd_trigger_method = g_strdup(GST_STRING_WFD_TEARDOWN);
+  else if (trigger == GST_WFD_TRIGGER_TEARDOWN_COUPLING)
+    msg->trigger_method->wfd_trigger_method = g_strdup(GST_STRING_WFD_TEARDOWN_COUPLING);
   else if (trigger == GST_WFD_TRIGGER_PLAY)
     msg->trigger_method->wfd_trigger_method = g_strdup(GST_STRING_WFD_PLAY);
   else
@@ -2224,6 +2226,8 @@ GstWFDResult gst_wfd_message_get_trigger_type(GstWFDMessage *msg, GstWFDTrigger
     *trigger = GST_WFD_TRIGGER_PAUSE;
   else if (!g_strcmp0(msg->trigger_method->wfd_trigger_method, GST_STRING_WFD_TEARDOWN))
     *trigger = GST_WFD_TRIGGER_TEARDOWN;
+  else if (!g_strcmp0(msg->trigger_method->wfd_trigger_method, GST_STRING_WFD_TEARDOWN_COUPLING))
+    *trigger = GST_WFD_TRIGGER_TEARDOWN_COUPLING;
   else if (!g_strcmp0(msg->trigger_method->wfd_trigger_method, GST_STRING_WFD_PLAY))
     *trigger = GST_WFD_TRIGGER_PLAY;
   else {
index 3e07a47..3ff452f 100644 (file)
@@ -91,6 +91,7 @@ G_BEGIN_DECLS
 #define GST_STRING_WFD_SETUP                      "SETUP"
 #define GST_STRING_WFD_PAUSE                      "PAUSE"
 #define GST_STRING_WFD_TEARDOWN                   "TEARDOWN"
+#define GST_STRING_WFD_TEARDOWN_COUPLING          "TEARDOWN_COUPLING"
 #define GST_STRING_WFD_PLAY                       "PLAY"
 #define GST_STRING_WFD_RTP                        "RTP"
 #define GST_STRING_WFD_RDT                        "RDT"
@@ -275,6 +276,7 @@ typedef enum {
   GST_WFD_TRIGGER_SETUP,
   GST_WFD_TRIGGER_PAUSE,
   GST_WFD_TRIGGER_TEARDOWN,
+  GST_WFD_TRIGGER_TEARDOWN_COUPLING,
   GST_WFD_TRIGGER_PLAY
 } GstWFDTrigger;