From: Jinkun Jang Date: Fri, 15 Mar 2013 16:15:39 +0000 (+0900) Subject: merge with master X-Git-Tag: 2.1b_release~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d9470f7324d52684e6bd67c7dc0e2b2c3f173cc5;p=framework%2Fmultimedia%2Fgst-rtsp-server-wfd.git merge with master --- diff --git a/src/include/rtsp-client.h b/src/include/rtsp-client.h index f0951c9..9496dcb 100755 --- a/src/include/rtsp-client.h +++ b/src/include/rtsp-client.h @@ -263,6 +263,7 @@ gboolean gst_rtsp_client_negotiate (GstRTSPClient * client); gboolean gst_rtsp_client_start (GstRTSPClient * client); gboolean gst_rtsp_client_pause (GstRTSPClient * client); gboolean gst_rtsp_client_resume (GstRTSPClient * client); +gboolean gst_rtsp_client_standby (GstRTSPClient * client); gboolean gst_rtsp_client_stop (GstRTSPClient * client); void gst_rtsp_client_set_params (GstRTSPClient *client, int videosrc_type, gint session_mode, int videobitrate, gchar *infile); G_END_DECLS diff --git a/src/include/rtsp-server.h b/src/include/rtsp-server.h index 7f37e2a..f9c201a 100755 --- a/src/include/rtsp-server.h +++ b/src/include/rtsp-server.h @@ -148,6 +148,7 @@ gboolean gst_rtsp_server_negotiate_client (GstRTSPServer * server, GstRTSPClient gboolean gst_rtsp_server_start_client (GstRTSPServer * server, GstRTSPClient *client); gboolean gst_rtsp_server_pause_client (GstRTSPServer * server, GstRTSPClient *client); gboolean gst_rtsp_server_resume_client (GstRTSPServer * server, GstRTSPClient *client); +gboolean gst_rtsp_server_standby_client (GstRTSPServer * server, GstRTSPClient *client); gboolean gst_rtsp_server_stop_client (GstRTSPServer * server, GstRTSPClient *client); void gst_rtsp_server_set_client_params (GstRTSPServer * server, GstRTSPClient *client, int videosrc_type, gint session_mode, int videobitrate, gchar *infile); G_END_DECLS diff --git a/src/rtsp-client.c b/src/rtsp-client.c index d263bdc..187fb54 100755 --- a/src/rtsp-client.c +++ b/src/rtsp-client.c @@ -3790,6 +3790,86 @@ handle_M5_message (GstRTSPClient * client, WFDTrigger trigger_type) } /** +* handle_M12_message: +* @client: client object +* +* Handles M12 WFD message. +* This API will send M5 SETUP trigger message using SET_PARAMETER to WFDSink to intimate that client request SETUP now. +* +* Returns: a #GstRTSPResult. +*/ +static GstRTSPResult +handle_M12_message (GstRTSPClient * client) +{ + GstRTSPResult res = GST_RTSP_OK; + GstRTSPMessage request = { 0 }; + GstRTSPMessage response = { 0 }; + GstRTSPUrl *url = NULL; + gchar *url_str = NULL; + GstRTSPSession *session = NULL; + GstRTSPSessionMedia *media; + GstRTSPStatusCode code; + + url = gst_rtsp_connection_get_url (client->connection); + if (url == NULL) { + GST_ERROR_OBJECT (client, "Failed to get connection URL"); + return GST_RTSP_ERROR; + } + + url_str = gst_rtsp_url_get_request_uri (url); + if (url_str == NULL) { + GST_ERROR_OBJECT (client, "Failed to get connection URL"); + return GST_RTSP_ERROR; + } + + /* prepare the request for M12 message */ + res = prepare_request (client, &request, GST_RTSP_SET_PARAMETER, url_str, WFD_MESSAGE_12, WFD_TRIGGER_UNKNOWN); + if (GST_RTSP_OK != res) { + GST_ERROR_OBJECT (client, "Failed to prepare M12 request....\n"); + return res; + } + + GST_DEBUG_OBJECT (client, "Sending SET_PARAMETER request message (M12)..."); + + // TODO: need to add session i.e. 2nd variable + if (client->sessionid) { + session = gst_rtsp_session_pool_find (client->session_pool, client->sessionid); + GST_INFO_OBJECT (client, "session = %p & sessionid = %s", session, session->sessionid); + } + send_request (client, session, &request); + + /* Wait for the M12 response from WFDSink */ + res = gst_rtsp_connection_receive (client->connection, &response, NULL); + if (GST_RTSP_OK != res) { + GST_ERROR ("Failed to received response....\n"); + return FALSE; + } + + if (gst_debug_category_get_threshold (rtsp_client_debug) >= GST_LEVEL_LOG) { + gst_rtsp_message_dump (&response); + } + if (!(session = gst_rtsp_session_pool_find (client->session_pool, client->sessionID))) + { + GST_ERROR_OBJECT (client, "Failed to handle B1 message..."); + return FALSE; + } + GST_DEBUG ("sessid = %s", client->sessionID); + + media = session->medias->data; + + /* unlink the all TCP callbacks */ + unlink_session_streams (client, session, media); + + /* then pause sending */ + gst_rtsp_session_media_set_state (media, GST_STATE_PAUSED); + + /* the state is now READY */ + media->state = GST_RTSP_STATE_READY; + + return res; + +} +/** * gst_rtsp_client_negotiate: * @client: client object * @@ -3901,6 +3981,19 @@ gst_rtsp_client_resume (GstRTSPClient * client) } gboolean +gst_rtsp_client_standby(GstRTSPClient * client) +{ + GstRTSPResult res = GST_RTSP_OK; + res = handle_M12_message (client); + if (GST_RTSP_OK != res) { + GST_ERROR_OBJECT (client, "Failed to handle M12 message..."); + return FALSE; + } + + return TRUE; +} + +gboolean gst_rtsp_client_stop (GstRTSPClient * client) { GstRTSPResult res = GST_RTSP_OK; diff --git a/src/rtsp-server.c b/src/rtsp-server.c index 6c49403..47c0b62 100755 --- a/src/rtsp-server.c +++ b/src/rtsp-server.c @@ -1303,6 +1303,17 @@ gst_rtsp_server_resume_client (GstRTSPServer * server, GstRTSPClient *client) return TRUE; } +gboolean +gst_rtsp_server_standby_client (GstRTSPServer * server, GstRTSPClient *client) +{ + GST_DEBUG_OBJECT (server, "Client = %p", client); + if (!gst_rtsp_client_standby(client)) { + GST_ERROR ("Failed to standby client..."); + return FALSE; + } + return TRUE; +} + gboolean gst_rtsp_server_stop_client (GstRTSPServer * server, GstRTSPClient *client)