I changed 'coupled-sink-ip' to both 'status' and 'address' paramters.
Because it is component of 'wfd-coupled-sink' spec. It will be combined into 'coupled-sink-cap' following spec.
Change-Id: I72928254fd36e626d0c0ce8169cb7c93e87b4736
Signed-off-by: Hyunsoo Park <hance.park@samsung.com>
MM_WFD_SINK_VIDEO_CODEC_H264 = 0x1b
} MMWFDSinkVideoCodec;
+typedef enum {
+ MM_WFD_SINK_UNKNOWN = -1,
+ MM_WFD_SINK_NOT_COUPLED = 0,
+ MM_WFD_SINK_COUPLED,
+ MM_WFD_SINK_TEARDOWN_COUPLING,
+ MM_WFD_SINK_RESERVED
+} MMWFDCoupledSinkStatus;
+
typedef void(*MMWFDMessageCallback)(int error_type, MMWFDSinkStateType state_type, void *user_data);
/**
* This function sets the coupled sink ip to sink\n
*
* @param wfd_sink_handle [in] Handle of wi-fi display sink
- * @param coupled_ip [in] Ip address which is coupled with primary sink. e.g secondary sink
+ * @param status [in] Status which present the status of a wi-fi display sink's coupling with another wi-fi display sink
+ * @param address [in] Mac address of coupled wi-fi display sink.
*
* @return This function returns zero on success, or negative value with error code.
*
*/
-int mm_wfd_sink_set_coupled_ip(MMHandleType wfd_sink_handle, char* coupled_ip);
+int mm_wfd_sink_set_coupled_sink(MMHandleType wfd_sink_handle, gint status, gchar* address);
#endif
/* hdcp parameter for reponse of M3 request */
WFDHDCPContentProtection wfd_content_protection;
- /* coupled sink ip address for reponse of R2 M3 request */
- gchar wfd_coupled_sink_ip[WFD_SINK_INI_MAX_STRLEN];
-
/* audio parameter for reponse of R2 M3 request */
WFD2AudioCodecs wfd2_audio_codecs;
MMHandleType extend_handle;
guint msg_callback_id;
- gchar *coupled_sink_ip;
+ guint coupled_sink_status;
+ gchar *coupled_sink_address;
} mm_wfd_sink_t;
return result;
}
-int mm_wfd_sink_set_coupled_ip(MMHandleType wfd_sink_handle, char* coupled_ip)
+int mm_wfd_sink_set_coupled_sink(MMHandleType wfd_sink_handle, gint status, gchar* address)
{
mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
int result = MM_ERROR_NONE;
wfd_sink_debug_fenter();
wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
- wfd_sink_return_val_if_fail(coupled_ip, MM_ERROR_WFD_INVALID_ARGUMENT);
+ wfd_sink_return_val_if_fail(status, MM_ERROR_WFD_INVALID_ARGUMENT);
+ wfd_sink_return_val_if_fail(address, MM_ERROR_WFD_INVALID_ARGUMENT);
+
+ if (status < MM_WFD_SINK_UNKNOWN || status > MM_WFD_SINK_TEARDOWN_COUPLING) {
+ wfd_sink_error("Wrong status is returned. status [%d]", status);
+ result = MM_ERROR_WFD_INVALID_ARGUMENT;
+ } else {
+ result = MM_ERROR_NONE;
+ }
MMWFDSINK_CMD_LOCK(wfd_sink);
- wfd_sink->coupled_sink_ip = (char *) g_malloc0(sizeof(char) * (WFD_SINK_INI_MAX_STRLEN - 1));
- strncpy(wfd_sink->coupled_sink_ip, coupled_ip, WFD_SINK_INI_MAX_STRLEN-1);
- wfd_sink_error("coupled_sink_ip in sink_t is [%s]", wfd_sink->coupled_sink_ip);
+ wfd_sink->coupled_sink_status = status;
+ wfd_sink->coupled_sink_address = g_strdup(address);
+ wfd_sink_debug("coupled_sink in sink_t is [%d, %s]", wfd_sink->coupled_sink_status, wfd_sink->coupled_sink_address);
MMWFDSINK_CMD_UNLOCK(wfd_sink);
wfd_sink_debug_fleave();
ini->wfd_content_protection.hdcp_content_protection = iniparser_getint(dict, "wfd hdcp content protection:hdcp content protection", DEFAULT_WFD_HDCP_CONTENT_PROTECTION);
ini->wfd_content_protection.hdcp_port_no = iniparser_getint(dict, "wfd hdcp content protection:hdcp port no", DEFAULT_WFD_HDCP_PORT_NO);
- /* coupled sink address */
- MM_WFD_SINK_INI_GET_STRING(dict, ini->wfd_coupled_sink_ip, "wfd coupled sink:coupled sink ip", DEFAULT_WFD_COUPLED_SINK);
-
/* video r2 parameter*/
ini->wfd2_video_formats.video_codec = iniparser_getint(dict, "wfd2 video formats:video codec", DEFAULT_WFD2_VIDEO_FORMATS_CODEC);
ini->wfd2_video_formats.video_native_resolution = iniparser_getint(dict, "wfd2 video formats:video native resolution", DEFAULT_WFD2_VIDEO_FORMATS_NATIVE_RESOLUTION);
ini->wfd_content_protection.hdcp_content_protection = DEFAULT_WFD_HDCP_CONTENT_PROTECTION;
ini->wfd_content_protection.hdcp_port_no = DEFAULT_WFD_HDCP_PORT_NO;
- /* coupled sink address */
- strncpy(ini->wfd_coupled_sink_ip, DEFAULT_WFD_COUPLED_SINK,WFD_SINK_INI_MAX_STRLEN - 1);
-
/* video r2 parameter*/
ini->wfd2_video_formats.video_codec = DEFAULT_WFD2_VIDEO_FORMATS_CODEC;
ini->wfd2_video_formats.video_native_resolution = DEFAULT_WFD2_VIDEO_FORMATS_NATIVE_RESOLUTION;
wfd_sink_debug("wfd_content_protection.hdcp_content_protection : %x", ini->wfd_content_protection.hdcp_content_protection);
wfd_sink_debug("wfd_content_protection.hdcp_port_no : %d", ini->wfd_content_protection.hdcp_port_no);
- /* coupled sink address */
- wfd_sink_debug("wfd_coupled_sink_ip : %s", ini->wfd_coupled_sink_ip);
-
/* video r2 parameter*/
wfd_sink_debug("wfd2_video_formats.video_codec : %x\n", ini->wfd2_video_formats.video_codec);
wfd_sink_debug("wfd2_video_formats.video_native_resolution : %x\n", ini->wfd2_video_formats.video_native_resolution);
/* Initialize video resolution */
new_wfd_sink->supportive_resolution = MM_WFD_SINK_RESOLUTION_UNKNOWN;
+ /*Initialize coulped sink information*/
+ new_wfd_sink->coupled_sink_address = NULL;
+ new_wfd_sink->coupled_sink_status = MM_WFD_SINK_NOT_COUPLED;
+
/* construct attributes */
new_wfd_sink->attrs = _mmwfd_construct_attribute((MMHandleType)new_wfd_sink);
if (!new_wfd_sink->attrs) {
GstStructure *wfd_content_protection = NULL;
GstStructure *wfd2_video_formats = NULL;
GstStructure *wfd2_audio_codecs = NULL;
+ GstStructure *wfd_coupled_sink= NULL;
gint hdcp_version = 0;
gint hdcp_port = 0;
guint64 CEA_resolution = 0;
g_object_set(G_OBJECT(wfdsrc), "latency", wfd_sink->ini.jitter_buffer_latency, NULL);
g_object_set(G_OBJECT(wfdsrc), "user-agent", wfd_sink->ini.user_agent, NULL);
g_object_set(G_OBJECT(wfdsrc), "dump-rtsp-message", wfd_sink->ini.dump_rtsp_message, NULL);
- g_object_set(G_OBJECT(wfdsrc), "coupled-sink-ip", wfd_sink->ini.wfd_coupled_sink_ip, NULL);
if (g_object_class_find_property(klass, "dump-rtp-data"))
g_object_set(G_OBJECT(wfdsrc), "dump-rtp-data", wfd_sink->ini.dump_rtp_data, NULL);
if (g_object_class_find_property(klass, "trace-first-buffer"))
gst_structure_free(wfd_video_formats);
wfd_video_formats = NULL;
}
+ /* set coupled sink information for Wi-Fi Display session negotiation */
+ wfd_coupled_sink = gst_structure_new("wfd_coupled_sink",
+ "coupled_sink_status", G_TYPE_INT, wfd_sink->coupled_sink_status,
+ "coupled_sink_address", G_TYPE_STRING, wfd_sink->coupled_sink_address,
+ NULL);
+ wfd_sink_debug("set wfd-coupled-sink status %d address %s", wfd_sink->coupled_sink_status, wfd_sink->coupled_sink_address);
+ if (wfd_coupled_sink) {
+ g_object_set(G_OBJECT(wfdsrc), "wfd-coupled-sink", wfd_coupled_sink, NULL);
+ gst_structure_free(wfd_coupled_sink);
+ wfd_coupled_sink = NULL;
+ }
/* set hdcp parameter for Wi-Fi Display session negotiation */
if (wfd_sink->ini.wfd_content_protection.enable_hdcp) {