Expand wfd2_audio_codec to meet wfd r2 standard 80/202380/5 accepted/tizen/unified/20190401.224936 submit/tizen/20190401.014745
authorSeokHoon LEE <andy.shlee@samsung.com>
Thu, 28 Mar 2019 00:36:35 +0000 (09:36 +0900)
committerSeokHoon LEE <andy.shlee@samsung.com>
Thu, 28 Mar 2019 09:30:35 +0000 (18:30 +0900)
- direct_audio_codec changed to wfd2_audio_codec
  to meet wfd2 r2 standard
- able to negotiate with wfd2_audio_codec.

Change-Id: Ic91bd0a085cb2a1255d7891b71db03437216fee7
Signed-off-by: SeokHoon LEE <andy.shlee@samsung.com>
gst/rtsp-server/gstwfdmessage.c [changed mode: 0644->0755]
gst/rtsp-server/gstwfdmessage.h [changed mode: 0644->0755]
gst/rtsp-server/rtsp-client-wfd.c [changed mode: 0644->0755]
packaging/gst-rtsp-server.spec

old mode 100644 (file)
new mode 100755 (executable)
index b1df3da..8796ce3
@@ -257,17 +257,17 @@ gst_wfd_message_uninit (GstWFDMessage * msg)
     FREE_STRING (msg->video_formats);
   }
 
-  if (msg->direct_audio_codecs) {
+  if (msg->wfd2_audio_codecs) {
     guint i = 0;
-    if (msg->direct_audio_codecs->list) {
-      for (; i < msg->direct_audio_codecs->count; i++) {
-        FREE_STRING(msg->direct_audio_codecs->list[i].audio_format);
-        msg->direct_audio_codecs->list[i].modes = 0;
-        msg->direct_audio_codecs->list[i].latency = 0;
+    if (msg->wfd2_audio_codecs->list) {
+      for (; i < msg->wfd2_audio_codecs->count; i++) {
+        FREE_STRING(msg->wfd2_audio_codecs->list[i].audio_format);
+        msg->wfd2_audio_codecs->list[i].modes = 0;
+        msg->wfd2_audio_codecs->list[i].latency = 0;
       }
-      FREE_STRING(msg->direct_audio_codecs->list);
+      FREE_STRING(msg->wfd2_audio_codecs->list);
     }
-    FREE_STRING(msg->direct_audio_codecs);
+    FREE_STRING(msg->wfd2_audio_codecs);
   }
 
   if (msg->direct_video_formats) {
@@ -547,19 +547,19 @@ gst_wfd_parse_attribute (gchar * buffer, GstWFDMessage * msg)
       }
     }
   } else if (!g_strcmp0 (attr, GST_STRING_WFD2_AUDIO_CODECS)) {
-    msg->direct_audio_codecs = g_new0 (GstWFD2AudioCodeclist, 1);
+    msg->wfd2_audio_codecs = g_new0 (GstWFD2AudioCodeclist, 1);
     if (strlen (v)) {
       guint i = 0;
-      msg->direct_audio_codecs->count = strlen (v) / 16;
-      msg->direct_audio_codecs->list =
-          g_new0 (GstWFDAudioCodec, msg->direct_audio_codecs->count);
-      for (; i < msg->direct_audio_codecs->count; i++) {
+      msg->wfd2_audio_codecs->count = strlen (v) / 16;
+      msg->wfd2_audio_codecs->list =
+          g_new0 (GstWFDAudioCodec, msg->wfd2_audio_codecs->count);
+      for (; i < msg->wfd2_audio_codecs->count; i++) {
         WFD_SKIP_SPACE (v);
-        WFD_READ_STRING (msg->direct_audio_codecs->list[i].audio_format);
+        WFD_READ_STRING (msg->wfd2_audio_codecs->list[i].audio_format);
         WFD_SKIP_SPACE (v);
-        WFD_READ_UINT32 (msg->direct_audio_codecs->list[i].modes);
+        WFD_READ_UINT32 (msg->wfd2_audio_codecs->list[i].modes);
         WFD_SKIP_SPACE (v);
-        WFD_READ_UINT32 (msg->direct_audio_codecs->list[i].latency);
+        WFD_READ_UINT32 (msg->wfd2_audio_codecs->list[i].latency);
         WFD_SKIP_COMMA (v);
       }
     }
@@ -1040,19 +1040,19 @@ gst_wfd_message_as_text (const GstWFDMessage * msg)
     g_string_append_printf (lines, "\r\n");
   }
 
-  /* list of direct audio codecs */
-  if (msg->direct_audio_codecs) {
+  /* list of wfd2 audio codecs */
+  if (msg->wfd2_audio_codecs) {
     g_string_append_printf (lines, GST_STRING_WFD2_AUDIO_CODECS);
-    if (msg->direct_audio_codecs->list) {
+    if (msg->wfd2_audio_codecs->list) {
       g_string_append_printf (lines, ":");
-      for (i = 0; i < msg->direct_audio_codecs->count; i++) {
+      for (i = 0; i < msg->wfd2_audio_codecs->count; i++) {
         g_string_append_printf (lines, " %s",
-            msg->direct_audio_codecs->list[i].audio_format);
+            msg->wfd2_audio_codecs->list[i].audio_format);
         g_string_append_printf (lines, " %08x",
-            msg->direct_audio_codecs->list[i].modes);
+            msg->wfd2_audio_codecs->list[i].modes);
         g_string_append_printf (lines, " %02x",
-            msg->direct_audio_codecs->list[i].latency);
-        if ((i + 1) < msg->direct_audio_codecs->count)
+            msg->wfd2_audio_codecs->list[i].latency);
+        if ((i + 1) < msg->wfd2_audio_codecs->count)
           g_string_append_printf (lines, ",");
       }
     }
@@ -1361,8 +1361,8 @@ gst_wfd_message_param_names_as_text (const GstWFDMessage * msg)
     g_string_append_printf (lines, GST_STRING_WFD_VIDEO_FORMATS);
     g_string_append_printf (lines, "\r\n");
   }
-  /* list of direct audio codecs */
-  if (msg->direct_audio_codecs) {
+  /* list of wfd2 audio codecs */
+  if (msg->wfd2_audio_codecs) {
     g_string_append_printf (lines, GST_STRING_WFD2_AUDIO_CODECS);
     g_string_append_printf (lines, "\r\n");
   }
@@ -1563,40 +1563,58 @@ gst_wfd_message_dump (const GstWFDMessage * msg)
     }
   }
 
-  if (msg->direct_audio_codecs) {
+  if (msg->wfd2_audio_codecs) {
     guint i = 0;
-    g_print ("Audio supported formats for direct streaming : \n");
-    for (; i < msg->direct_audio_codecs->count; i++) {
-      g_print ("Codec: %s\n", msg->direct_audio_codecs->list[i].audio_format);
-      if (!strcmp (msg->direct_audio_codecs->list[i].audio_format, "LPCM")) {
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_FREQ_44100)
+    g_print ("Audio supported codecs for R2 : \n");
+    for (; i < msg->wfd2_audio_codecs->count; i++) {
+      g_print ("Codec: %s\n", msg->wfd2_audio_codecs->list[i].audio_format);
+      if (!strcmp (msg->wfd2_audio_codecs->list[i].audio_format, "LPCM")) {
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_FREQ_44100)
           g_print ("   Freq: %d\n", 44100);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_FREQ_48000)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_FREQ_48000)
           g_print ("   Freq: %d\n", 48000);
         g_print ("     Channels: %d\n", 2);
       }
-      if (!strcmp (msg->direct_audio_codecs->list[i].audio_format, "AAC")) {
+      if (!strcmp (msg->wfd2_audio_codecs->list[i].audio_format, "AAC")) {
         g_print ("     Freq: %d\n", 48000);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_CHANNEL_2)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_2)
           g_print ("   Channels: %d\n", 2);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_CHANNEL_4)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_4)
           g_print ("   Channels: %d\n", 4);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_CHANNEL_6)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_6)
           g_print ("   Channels: %d\n", 6);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_CHANNEL_8)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_8)
           g_print ("   Channels: %d\n", 8);
       }
-      if (!strcmp (msg->direct_audio_codecs->list[i].audio_format, "AC3")) {
+      if (!strcmp (msg->wfd2_audio_codecs->list[i].audio_format, "AC3")) {
         g_print ("     Freq: %d\n", 48000);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_CHANNEL_2)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_2)
           g_print ("   Channels: %d\n", 2);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_CHANNEL_4)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_4)
           g_print ("   Channels: %d\n", 4);
-        if (msg->direct_audio_codecs->list[i].modes & GST_WFD_CHANNEL_6)
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_6)
+          g_print ("   Channels: %d\n", 6);
+      }
+      if (!strcmp (msg->wfd2_audio_codecs->list[i].audio_format, "CTA")) {
+        g_print ("     Freq: %d\n", 48000);
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_2)
+          g_print ("   Channels: %d\n", 2);
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_4)
+          g_print ("   Channels: %d\n", 4);
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_6)
+          g_print ("   Channels: %d\n", 6);
+      }
+      if (!strcmp (msg->wfd2_audio_codecs->list[i].audio_format, "AAC-ELDv2")) {
+        g_print ("     Freq: %d\n", 48000);
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_2)
+          g_print ("   Channels: %d\n", 2);
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_4)
+          g_print ("   Channels: %d\n", 4);
+        if (msg->wfd2_audio_codecs->list[i].modes & GST_WFD_CHANNEL_6)
           g_print ("   Channels: %d\n", 6);
       }
       g_print ("       Bitwidth: %d\n", 16);
-      g_print ("       Latency: %d\n", msg->direct_audio_codecs->list[i].latency);
+      g_print ("       Latency: %d\n", msg->wfd2_audio_codecs->list[i].latency);
     }
   }
 
@@ -2138,42 +2156,52 @@ gst_wfd_message_get_preferred_video_format (GstWFDMessage * msg,
 }
 
 GstWFDResult
-gst_wfd_message_set_supported_direct_audio_format (GstWFDMessage * msg,
+gst_wfd_message_set_supported_wfd2_audio_codec (GstWFDMessage * msg,
     GstWFDAudioFormats a_codec,
     guint a_freq, guint a_channels, guint a_bitwidth, guint32 a_latency)
 {
   guint temp = a_codec;
   guint i = 0;
-  guint pcm = 0, aac = 0, ac3 = 0;
+  guint pcm = 0, aac = 0, ac3 = 0, cta = 0, aac_eldv2 = 0;
 
   g_return_val_if_fail (msg != NULL, GST_WFD_EINVAL);
 
-  if (!msg->direct_audio_codecs)
-    msg->direct_audio_codecs = g_new0 (GstWFD2AudioCodeclist, 1);
+  if (!msg->wfd2_audio_codecs)
+    msg->wfd2_audio_codecs = g_new0 (GstWFD2AudioCodeclist, 1);
 
   if (a_codec != GST_WFD_AUDIO_UNKNOWN) {
     while (temp) {
-      msg->direct_audio_codecs->count++;
+      msg->wfd2_audio_codecs->count++;
       temp >>= 1;
     }
-    msg->direct_audio_codecs->list =
-        g_new0 (GstWFDAudioCodec, msg->direct_audio_codecs->count);
-    for (; i < msg->direct_audio_codecs->count; i++) {
+    msg->wfd2_audio_codecs->list =
+        g_new0 (GstWFDAudioCodec, msg->wfd2_audio_codecs->count);
+    for (; i < msg->wfd2_audio_codecs->count; i++) {
       if ((a_codec & GST_WFD_AUDIO_LPCM) && (!pcm)) {
-        msg->direct_audio_codecs->list[i].audio_format = g_strdup ("LPCM");
-        msg->direct_audio_codecs->list[i].modes = a_freq;
-        msg->direct_audio_codecs->list[i].latency = a_latency;
+        msg->wfd2_audio_codecs->list[i].audio_format = g_strdup ("LPCM");
+        msg->wfd2_audio_codecs->list[i].modes = a_freq;
+        msg->wfd2_audio_codecs->list[i].latency = a_latency;
         pcm = 1;
       } else if ((a_codec & GST_WFD_AUDIO_AAC) && (!aac)) {
-        msg->direct_audio_codecs->list[i].audio_format = g_strdup ("AAC");
-        msg->direct_audio_codecs->list[i].modes = a_channels;
-        msg->direct_audio_codecs->list[i].latency = a_latency;
+        msg->wfd2_audio_codecs->list[i].audio_format = g_strdup ("AAC");
+        msg->wfd2_audio_codecs->list[i].modes = a_channels;
+        msg->wfd2_audio_codecs->list[i].latency = a_latency;
         aac = 1;
       } else if ((a_codec & GST_WFD_AUDIO_AC3) && (!ac3)) {
-        msg->direct_audio_codecs->list[i].audio_format = g_strdup ("AC3");
-        msg->direct_audio_codecs->list[i].modes = a_channels;
-        msg->direct_audio_codecs->list[i].latency = a_latency;
+        msg->wfd2_audio_codecs->list[i].audio_format = g_strdup ("AC3");
+        msg->wfd2_audio_codecs->list[i].modes = a_channels;
+        msg->wfd2_audio_codecs->list[i].latency = a_latency;
         ac3 = 1;
+      } else if ((a_codec & GST_WFD_AUDIO_CTA) && (!cta)) {
+        msg->wfd2_audio_codecs->list[i].audio_format = g_strdup ("CTA");
+        msg->wfd2_audio_codecs->list[i].modes = a_channels;
+        msg->wfd2_audio_codecs->list[i].latency = a_latency;
+        cta = 1;
+      } else if ((a_codec & GST_WFD_AUDIO_AAC_ELDV2) && (!aac_eldv2)) {
+        msg->wfd2_audio_codecs->list[i].audio_format = g_strdup ("AAC-ELDv2");
+        msg->wfd2_audio_codecs->list[i].modes = a_channels;
+        msg->wfd2_audio_codecs->list[i].latency = a_latency;
+        aac_eldv2 = 1;
       }
     }
   }
@@ -2181,93 +2209,125 @@ gst_wfd_message_set_supported_direct_audio_format (GstWFDMessage * msg,
 }
 
 GstWFDResult
-gst_wfd_message_set_preferred_direct_audio_format (GstWFDMessage * msg,
+gst_wfd_message_set_preferred_wfd2_audio_codec (GstWFDMessage * msg,
     GstWFDAudioFormats a_codec,
     GstWFDAudioFreq a_freq,
     GstWFDAudioChannels a_channels, guint a_bitwidth, guint32 a_latency)
 {
   g_return_val_if_fail (msg != NULL, GST_WFD_EINVAL);
 
-  if (!msg->direct_audio_codecs)
-    msg->direct_audio_codecs = g_new0 (GstWFD2AudioCodeclist, 1);
+  if (!msg->wfd2_audio_codecs)
+    msg->wfd2_audio_codecs = g_new0 (GstWFD2AudioCodeclist, 1);
 
-  msg->direct_audio_codecs->list = g_new0 (GstWFDAudioCodec, 1);
-  msg->direct_audio_codecs->count = 1;
+  msg->wfd2_audio_codecs->list = g_new0 (GstWFDAudioCodec, 1);
+  msg->wfd2_audio_codecs->count = 1;
   if (a_codec == GST_WFD_AUDIO_LPCM) {
-    msg->direct_audio_codecs->list->audio_format = g_strdup ("LPCM");
-    msg->direct_audio_codecs->list->modes = a_freq;
-    msg->direct_audio_codecs->list->latency = a_latency;
+    msg->wfd2_audio_codecs->list->audio_format = g_strdup ("LPCM");
+    msg->wfd2_audio_codecs->list->modes = a_freq;
+    msg->wfd2_audio_codecs->list->latency = a_latency;
   } else if (a_codec == GST_WFD_AUDIO_AAC) {
-    msg->direct_audio_codecs->list->audio_format = g_strdup ("AAC");
-    msg->direct_audio_codecs->list->modes = a_channels;
-    msg->direct_audio_codecs->list->latency = a_latency;
+    msg->wfd2_audio_codecs->list->audio_format = g_strdup ("AAC");
+    msg->wfd2_audio_codecs->list->modes = a_channels;
+    msg->wfd2_audio_codecs->list->latency = a_latency;
   } else if (a_codec == GST_WFD_AUDIO_AC3) {
-    msg->direct_audio_codecs->list->audio_format = g_strdup ("AC3");
-    msg->direct_audio_codecs->list->modes = a_channels;
-    msg->direct_audio_codecs->list->latency = a_latency;
+    msg->wfd2_audio_codecs->list->audio_format = g_strdup ("AC3");
+    msg->wfd2_audio_codecs->list->modes = a_channels;
+    msg->wfd2_audio_codecs->list->latency = a_latency;
+  } else if (a_codec == GST_WFD_AUDIO_CTA) {
+    msg->wfd2_audio_codecs->list->audio_format = g_strdup ("CTA");
+    msg->wfd2_audio_codecs->list->modes = a_channels;
+    msg->wfd2_audio_codecs->list->latency = a_latency;
+  } else if (a_codec == GST_WFD_AUDIO_AAC_ELDV2) {
+    msg->wfd2_audio_codecs->list->audio_format = g_strdup ("AAC-ELDv2");
+    msg->wfd2_audio_codecs->list->modes = a_channels;
+    msg->wfd2_audio_codecs->list->latency = a_latency;
   }
   return GST_WFD_OK;
 }
 
 GstWFDResult
-gst_wfd_message_get_supported_direct_audio_format (GstWFDMessage * msg,
+gst_wfd_message_get_supported_wfd2_audio_codec (GstWFDMessage * msg,
     guint * a_codec,
     guint * a_freq, guint * a_channels, guint * a_bitwidth, guint32 * a_latency)
 {
   guint i = 0;
   g_return_val_if_fail (msg != NULL, GST_WFD_EINVAL);
-  g_return_val_if_fail (msg->direct_audio_codecs != NULL, GST_WFD_EINVAL);
+  g_return_val_if_fail (msg->wfd2_audio_codecs != NULL, GST_WFD_EINVAL);
 
-  for (; i < msg->direct_audio_codecs->count; i++) {
-    if (!g_strcmp0 (msg->direct_audio_codecs->list[i].audio_format, "LPCM")) {
+  for (; i < msg->wfd2_audio_codecs->count; i++) {
+    if (!g_strcmp0 (msg->wfd2_audio_codecs->list[i].audio_format, "LPCM")) {
       *a_codec |= GST_WFD_AUDIO_LPCM;
-      *a_freq |= msg->direct_audio_codecs->list[i].modes;
+      *a_freq |= msg->wfd2_audio_codecs->list[i].modes;
       *a_channels |= GST_WFD_CHANNEL_2;
       *a_bitwidth = 16;
-      *a_latency = msg->direct_audio_codecs->list[i].latency;
-    } else if (!g_strcmp0 (msg->direct_audio_codecs->list[i].audio_format, "AAC")) {
+      *a_latency = msg->wfd2_audio_codecs->list[i].latency;
+    } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list[i].audio_format, "AAC")) {
       *a_codec |= GST_WFD_AUDIO_AAC;
       *a_freq |= GST_WFD_FREQ_48000;
-      *a_channels |= msg->direct_audio_codecs->list[i].modes;
+      *a_channels |= msg->wfd2_audio_codecs->list[i].modes;
       *a_bitwidth = 16;
-      *a_latency = msg->direct_audio_codecs->list[i].latency;
-    } else if (!g_strcmp0 (msg->direct_audio_codecs->list[i].audio_format, "AC3")) {
+      *a_latency = msg->wfd2_audio_codecs->list[i].latency;
+    } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list[i].audio_format, "AC3")) {
       *a_codec |= GST_WFD_AUDIO_AC3;
       *a_freq |= GST_WFD_FREQ_48000;
-      *a_channels |= msg->direct_audio_codecs->list[i].modes;
+      *a_channels |= msg->wfd2_audio_codecs->list[i].modes;
+      *a_bitwidth = 16;
+      *a_latency = msg->wfd2_audio_codecs->list[i].latency;
+    } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list[i].audio_format, "CTA")) {
+      *a_codec |= GST_WFD_AUDIO_CTA;
+      *a_freq |= GST_WFD_FREQ_48000;
+      *a_channels |= msg->wfd2_audio_codecs->list[i].modes;
+      *a_bitwidth = 16;
+      *a_latency = msg->wfd2_audio_codecs->list[i].latency;
+    } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list[i].audio_format, "AAC-ELDv2")) {
+      *a_codec |= GST_WFD_AUDIO_AAC_ELDV2;
+      *a_freq |= GST_WFD_FREQ_48000;
+      *a_channels |= msg->wfd2_audio_codecs->list[i].modes;
       *a_bitwidth = 16;
-      *a_latency = msg->direct_audio_codecs->list[i].latency;
+      *a_latency = msg->wfd2_audio_codecs->list[i].latency;
     }
   }
   return GST_WFD_OK;
 }
 
 GstWFDResult
-gst_wfd_message_get_preferred_direct_audio_format (GstWFDMessage * msg,
+gst_wfd_message_get_preferred_wfd2_audio_codec (GstWFDMessage * msg,
     GstWFDAudioFormats * a_codec,
     GstWFDAudioFreq * a_freq,
     GstWFDAudioChannels * a_channels, guint * a_bitwidth, guint32 * a_latency)
 {
   g_return_val_if_fail (msg != NULL, GST_WFD_EINVAL);
 
-  if (!g_strcmp0 (msg->direct_audio_codecs->list->audio_format, "LPCM")) {
+  if (!g_strcmp0 (msg->wfd2_audio_codecs->list->audio_format, "LPCM")) {
     *a_codec = GST_WFD_AUDIO_LPCM;
-    *a_freq = msg->direct_audio_codecs->list->modes;
+    *a_freq = msg->wfd2_audio_codecs->list->modes;
     *a_channels = GST_WFD_CHANNEL_2;
     *a_bitwidth = 16;
-    *a_latency = msg->direct_audio_codecs->list->latency;
-  } else if (!g_strcmp0 (msg->direct_audio_codecs->list->audio_format, "AAC")) {
+    *a_latency = msg->wfd2_audio_codecs->list->latency;
+  } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list->audio_format, "AAC")) {
     *a_codec = GST_WFD_AUDIO_AAC;
     *a_freq = GST_WFD_FREQ_48000;
-    *a_channels = msg->direct_audio_codecs->list->modes;
+    *a_channels = msg->wfd2_audio_codecs->list->modes;
     *a_bitwidth = 16;
-    *a_latency = msg->direct_audio_codecs->list->latency;
-  } else if (!g_strcmp0 (msg->direct_audio_codecs->list->audio_format, "AC3")) {
+    *a_latency = msg->wfd2_audio_codecs->list->latency;
+  } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list->audio_format, "AC3")) {
     *a_codec = GST_WFD_AUDIO_AC3;
     *a_freq = GST_WFD_FREQ_48000;
-    *a_channels = msg->direct_audio_codecs->list->modes;
+    *a_channels = msg->wfd2_audio_codecs->list->modes;
+    *a_bitwidth = 16;
+    *a_latency = msg->wfd2_audio_codecs->list->latency;
+  } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list->audio_format, "CTA")) {
+    *a_codec = GST_WFD_AUDIO_CTA;
+    *a_freq = GST_WFD_FREQ_48000;
+    *a_channels = msg->wfd2_audio_codecs->list->modes;
+    *a_bitwidth = 16;
+    *a_latency = msg->wfd2_audio_codecs->list->latency;
+  } else if (!g_strcmp0 (msg->wfd2_audio_codecs->list->audio_format, "AAC-ELDv2")) {
+    *a_codec = GST_WFD_AUDIO_AAC_ELDV2;
+    *a_freq = GST_WFD_FREQ_48000;
+    *a_channels = msg->wfd2_audio_codecs->list->modes;
     *a_bitwidth = 16;
-    *a_latency = msg->direct_audio_codecs->list->latency;
+    *a_latency = msg->wfd2_audio_codecs->list->latency;
   }
   return GST_WFD_OK;
 }
old mode 100644 (file)
new mode 100755 (executable)
index 166e725..b5dd372
@@ -89,10 +89,12 @@ typedef enum {
 
 
 typedef enum {
-  GST_WFD_AUDIO_UNKNOWN        = 0,
-  GST_WFD_AUDIO_LPCM           = (1 << 0),
-  GST_WFD_AUDIO_AAC            = (1 << 1),
-  GST_WFD_AUDIO_AC3            = (1 << 2)
+  GST_WFD_AUDIO_UNKNOWN   = 0,
+  GST_WFD_AUDIO_LPCM      = (1 << 0),
+  GST_WFD_AUDIO_AAC       = (1 << 1),
+  GST_WFD_AUDIO_AC3       = (1 << 2),
+  GST_WFD_AUDIO_CTA       = (1 << 3),
+  GST_WFD_AUDIO_AAC_ELDV2 = (1 << 4)
 } GstWFDAudioFormats;
 
 typedef enum {
@@ -487,7 +489,7 @@ typedef struct {
 typedef struct {
   GstWFDAudioCodeclist *audio_codecs;
   GstWFDVideoCodeclist *video_formats;
-  GstWFD2AudioCodeclist *direct_audio_codecs;
+  GstWFD2AudioCodeclist *wfd2_audio_codecs;
   GstWFD2VideoCodeclist *direct_video_formats;
   GstWFD3DFormats *video_3d_formats;
   GstWFDContentProtection *content_protection;
@@ -618,25 +620,25 @@ GstWFDResult gst_wfd_message_get_preferred_video_format(GstWFDMessage *msg,
                                         guint32 *slice_enc_params,
                                         guint *frame_rate_control);
 
-GstWFDResult gst_wfd_message_set_supported_direct_audio_format(GstWFDMessage *msg,
+GstWFDResult gst_wfd_message_set_supported_wfd2_audio_codec(GstWFDMessage *msg,
                                         GstWFDAudioFormats a_codec,
                                         guint a_freq, guint a_channels,
                                         guint a_bitwidth, guint32 a_latency);
 
-GstWFDResult gst_wfd_message_set_preferred_direct_audio_format(GstWFDMessage *msg,
+GstWFDResult gst_wfd_message_set_preferred_wfd2_audio_codec(GstWFDMessage *msg,
                                         GstWFDAudioFormats a_codec,
                                         GstWFDAudioFreq a_freq,
                                         GstWFDAudioChannels a_channels,
                                         guint a_bitwidth, guint32 a_latency);
 
-GstWFDResult gst_wfd_message_get_supported_direct_audio_format (GstWFDMessage *msg,
+GstWFDResult gst_wfd_message_get_supported_wfd2_audio_codec (GstWFDMessage *msg,
                                         guint *a_codec,
                                         guint *a_freq,
                                         guint *a_channels,
                                         guint *a_bitwidth,
                                         guint32 *a_latency);
 
-GstWFDResult gst_wfd_message_get_preferred_direct_audio_format (GstWFDMessage *msg,
+GstWFDResult gst_wfd_message_get_preferred_wfd2_audio_codec (GstWFDMessage *msg,
                                         GstWFDAudioFormats *a_codec,
                                         GstWFDAudioFreq *a_freq,
                                         GstWFDAudioChannels *a_channels,
old mode 100644 (file)
new mode 100755 (executable)
index ee6195a..d1a05a7
@@ -177,6 +177,7 @@ struct _GstRTSPWFDClientPrivate
   GMutex tcp_send_lock;
 
   /* enable or disable R2 features */
+  gboolean wfd2_mode;
   gint wfd2_supported;
 };
 
@@ -1519,11 +1520,22 @@ handle_wfd_response (GstRTSPClient * client, GstRTSPContext * ctx)
 
       wfd_res = gst_wfd_message_parse_buffer (data, size, msg);
 
-      GST_DEBUG_OBJECT (client, "M3 response server side message body: %s",
+      GST_ERROR_OBJECT (client, "M3 response server side message body: %s",
           gst_wfd_message_as_text (msg));
 
       /* Get the audio formats supported by WFDSink */
-      if (msg->audio_codecs && msg->audio_codecs->count > 0) {
+      if (msg->wfd2_audio_codecs && msg->wfd2_audio_codecs->count > 0) {
+        priv->wfd2_mode = TRUE;
+        wfd_res =
+            gst_wfd_message_get_supported_wfd2_audio_codec (msg, &priv->caCodec,
+            &priv->cFreq, &priv->cChanels, &priv->cBitwidth, &priv->caLatency);
+        if (wfd_res != GST_WFD_OK) {
+          GST_WARNING_OBJECT (client,
+              "Failed to get wfd support audio formats...");
+          goto error;
+        }
+      } else if (msg->audio_codecs && msg->audio_codecs->count > 0) {
+        priv->wfd2_mode = FALSE;
         wfd_res =
             gst_wfd_message_get_supported_audio_format (msg, &priv->caCodec,
             &priv->cFreq, &priv->cChanels, &priv->cBitwidth, &priv->caLatency);
@@ -2148,7 +2160,7 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type,
     if (priv->wfd2_supported == 1) {
       /* set the supported audio formats by the WFD server for direct streaming */
       wfd_res =
-          gst_wfd_message_set_supported_direct_audio_format (msg, GST_WFD_AUDIO_UNKNOWN,
+          gst_wfd_message_set_supported_wfd2_audio_codec (msg, GST_WFD_AUDIO_UNKNOWN,
           GST_WFD_FREQ_UNKNOWN, GST_WFD_CHANNEL_UNKNOWN, 0, 0);
       if (wfd_res != GST_WFD_OK) {
         GST_ERROR_OBJECT (client,
@@ -2323,24 +2335,21 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type,
         taudiochannels = GST_WFD_CHANNEL_2;
       priv->cChanels = taudiochannels;
     }
-    wfd_res =
+
+    if(priv->wfd2_mode)
+      wfd_res =
+        gst_wfd_message_set_preferred_wfd2_audio_codec (msg, taudiocodec, taudiofreq,
+        taudiochannels, priv->cBitwidth, priv->caLatency);
+    else
+      wfd_res =
         gst_wfd_message_set_preferred_audio_format (msg, taudiocodec, taudiofreq,
         taudiochannels, priv->cBitwidth, priv->caLatency);
+
     if (wfd_res != GST_WFD_OK) {
       GST_ERROR_OBJECT (priv, "Failed to set preffered audio formats...");
       goto error;
     }
 
-    if (priv->direct_streaming_supported) {
-      wfd_res =
-        gst_wfd_message_set_preferred_direct_audio_format (msg, taudiocodec, taudiofreq,
-            taudiochannels, priv->cBitwidth, priv->caLatency);
-      if (wfd_res != GST_WFD_OK) {
-        GST_ERROR_OBJECT (priv, "Failed to set preffered audio formats for direct streaming...");
-        goto error;
-      }
-    }
-
     /* Set the preffered video formats */
     tvideocodec = wfd_get_preferred_video_codec (priv->video_codec, priv->cvCodec);
     GST_INFO_OBJECT (priv, "Set the video formats. source codec %d, sink codec %d, Negotiated code %d",
@@ -2527,7 +2536,7 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type,
     priv->cChanels = taudiochannels;
 
     wfd_res =
-      gst_wfd_message_set_preferred_direct_audio_format (msg,
+      gst_wfd_message_set_preferred_wfd2_audio_codec (msg,
           priv->direct_detected_audio_codec, taudiofreq,
           taudiochannels, priv->cBitwidth, priv->caLatency);
     if (wfd_res != GST_WFD_OK) {
index 2a53781..f197fa8 100644 (file)
@@ -1,7 +1,7 @@
 Name:       gst-rtsp-server
 Summary:    Multimedia Framework Library
 Version:    1.12.2
-Release:    9
+Release:    10
 Url:        http://gstreamer.freedesktop.org/
 Group:      System/Libraries
 License:    LGPL-2.0+