Add AL-FEC feature
[platform/upstream/gst-rtsp-server.git] / gst / rtsp-server / rtsp-server-wfd.c
index 8e14f97..0fa2cd5 100644 (file)
@@ -1,5 +1,5 @@
 /* GStreamer
- * Copyright (C) 2008 Wim Taymans <wim.taymans at gmail.com>
+ * Copyright (C) 2015 Samsung Electronics Hyunjun Ko <zzoon.ko@samsung.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -57,6 +57,7 @@
 
 #include "rtsp-server-wfd.h"
 #include "rtsp-client-wfd.h"
+#include "rtsp-client-ext.h"
 
 #define GST_RTSP_WFD_SERVER_GET_PRIVATE(obj)  \
        (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_RTSP_WFD_SERVER, GstRTSPWFDServerPrivate))
@@ -71,7 +72,9 @@ struct _GstRTSPWFDServerPrivate
 
   /* the clients that are connected */
   GList *clients;
+  guint64 native_resolution;
   guint64 supported_resolution;
+  guint8 audio_codec;
 };
 
 G_DEFINE_TYPE (GstRTSPWFDServer, gst_rtsp_wfd_server, GST_TYPE_RTSP_SERVER);
@@ -117,8 +120,12 @@ gst_rtsp_wfd_server_init (GstRTSPWFDServer * server)
 {
   GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE (server);
 
+  g_return_if_fail (priv != NULL);
+
   server->priv = priv;
+  server->priv->native_resolution = 0;
   server->priv->supported_resolution = 1;
+  server->priv->audio_codec = 2;
   GST_INFO_OBJECT (server, "New server is initialized");
 }
 
@@ -188,6 +195,8 @@ client_connected_wfd (GstRTSPServer * server, GstRTSPClient * client)
 {
   GST_INFO_OBJECT (server, "Client is connected");
 
+  gst_rtsp_wfd_client_set_host_address (GST_RTSP_WFD_CLIENT_CAST (client),
+      gst_rtsp_server_get_address (server));
   g_idle_add (_start_wfd, client);
   return;
 }
@@ -200,12 +209,15 @@ create_client_wfd (GstRTSPServer * server)
   GstRTSPSessionPool *session_pool = NULL;
   GstRTSPMountPoints *mount_points = NULL;
   GstRTSPAuth *auth = NULL;
-  GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE(server);
+  GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE (server);
+
+  g_return_val_if_fail (priv != NULL, NULL);
 
   GST_INFO_OBJECT (server, "New Client is being created");
 
   /* a new client connected, create a session to handle the client. */
-  client = gst_rtsp_wfd_client_new ();
+  //client = gst_rtsp_wfd_client_new();
+  client = (GstRTSPWFDClient *) gst_rtsp_ext_client_new ();
 
   thread_pool = gst_rtsp_server_get_thread_pool (server);
   session_pool = gst_rtsp_server_get_session_pool (server);
@@ -225,7 +237,12 @@ create_client_wfd (GstRTSPServer * server)
   gst_rtsp_client_set_thread_pool (GST_RTSP_CLIENT_CAST (client), thread_pool);
 
   gst_rtsp_wfd_client_set_video_supported_resolution (client,
-        priv->supported_resolution);
+      priv->supported_resolution);
+
+  gst_rtsp_wfd_client_set_video_native_resolution (client,
+      priv->native_resolution);
+
+  gst_rtsp_wfd_client_set_audio_codec (client, priv->audio_codec);
 
   GST_RTSP_WFD_SERVER_UNLOCK (server);
 
@@ -265,12 +282,14 @@ gst_rtsp_wfd_server_trigger_request (GstRTSPServer * server,
 }
 
 GstRTSPResult
-gst_rtsp_wfd_server_set_supported_reso(GstRTSPWFDServer *server, guint64 supported_reso)
+gst_rtsp_wfd_server_set_supported_reso (GstRTSPWFDServer * server,
+    guint64 supported_reso)
 {
   GstRTSPResult res = GST_RTSP_OK;
-  GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE(server);
+  GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE (server);
 
   g_return_val_if_fail (GST_IS_RTSP_WFD_SERVER (server), GST_RTSP_ERROR);
+  g_return_val_if_fail (priv != NULL, GST_RTSP_ERROR);
 
   GST_RTSP_WFD_SERVER_LOCK (server);
 
@@ -279,3 +298,39 @@ gst_rtsp_wfd_server_set_supported_reso(GstRTSPWFDServer *server, guint64 support
   GST_RTSP_WFD_SERVER_UNLOCK (server);
   return res;
 }
+
+GstRTSPResult
+gst_rtsp_wfd_server_set_video_native_reso (GstRTSPWFDServer * server,
+    guint64 native_reso)
+{
+  GstRTSPResult res = GST_RTSP_OK;
+  GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE (server);
+
+  g_return_val_if_fail (GST_IS_RTSP_WFD_SERVER (server), GST_RTSP_ERROR);
+  g_return_val_if_fail (priv != NULL, GST_RTSP_ERROR);
+
+  GST_RTSP_WFD_SERVER_LOCK (server);
+
+  priv->native_resolution = native_reso;
+
+  GST_RTSP_WFD_SERVER_UNLOCK (server);
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_wfd_server_set_audio_codec (GstRTSPWFDServer * server,
+    guint8 audio_codec)
+{
+  GstRTSPResult res = GST_RTSP_OK;
+  GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE (server);
+
+  g_return_val_if_fail (GST_IS_RTSP_WFD_SERVER (server), GST_RTSP_ERROR);
+  g_return_val_if_fail (priv != NULL, GST_RTSP_ERROR);
+
+  GST_RTSP_WFD_SERVER_LOCK (server);
+
+  priv->audio_codec = audio_codec;
+
+  GST_RTSP_WFD_SERVER_UNLOCK (server);
+  return res;
+}