switch (cmd) {
case WFD_SINK_MANAGER_CMD_LINK_A_DECODEBIN:
- wfd_sink_debug("try to link audio decodebin.");
+ wfd_sink_debug("try to link audio decodebin. session mode = %d", wfd_sink->ini.sink_session_mode);
+ if (wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_VIDEO_ONLY) {
+ wfd_sink_debug("Video only mode skip link audio decodebin.");
+ break;
+ }
if (MM_ERROR_NONE != __mm_wfd_sink_link_audio_decodebin(wfd_sink)) {
wfd_sink_error("failed to link audio decodebin.....");
goto EXIT;
}
break;
case WFD_SINK_MANAGER_CMD_PREPARE_A_PIPELINE:
- wfd_sink_debug("try to prepare audio pipeline.");
+ wfd_sink_debug("try to prepare audio pipeline. session mode = %d", wfd_sink->ini.sink_session_mode);
+ if (wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_VIDEO_ONLY) {
+ wfd_sink_debug("Video only mode skip prepare video pipeline.");
+ break;
+ }
if (MM_ERROR_NONE != __mm_wfd_sink_prepare_audio_pipeline(wfd_sink, NULL)) {
wfd_sink_error("failed to prepare audio pipeline.....");
goto EXIT;
}
break;
case WFD_SINK_MANAGER_CMD_UNPREPARE_A_PIPELINE:
- wfd_sink_debug("try to unprepare audio pipeline.");
+ wfd_sink_debug("try to unprepare audio pipeline. session mode = %d", wfd_sink->ini.sink_session_mode);
+ if (wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_VIDEO_ONLY) {
+ wfd_sink_debug("Video only mode skip unprepare audio pipeline.");
+ break;
+ }
if (MM_ERROR_NONE != __mm_wfd_sink_unprepare_audio_pipeline(wfd_sink)) {
wfd_sink_error("failed to unprepare audio pipeline.....");
goto EXIT;
}
wfd_sink_info("Current session mode : %d", wfd_sink->ini.sink_session_mode);
- if(wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_VIDEO_ONLY)) {
+ if (wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_VIDEO_ONLY)) {
/* create video decodebin */
result = __mm_wfd_sink_create_video_decodebin(wfd_sink);
if (result < MM_ERROR_NONE) {
goto fail_to_create;
}
}
+ wfd_sink_info("Current session mode : %d", wfd_sink->ini.sink_session_mode);
+ if (wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_AUDIO_ONLY)) {
+ /* create audio decodebin */
+ result = __mm_wfd_sink_create_audio_decodebin(wfd_sink);
+ if (result < MM_ERROR_NONE) {
+ wfd_sink_error("fail to create audio decodebin : %d", result);
+ goto fail_to_create;
+ }
- /* create audio decodebin */
- result = __mm_wfd_sink_create_audio_decodebin(wfd_sink);
- if (result < MM_ERROR_NONE) {
- wfd_sink_error("fail to create audio decodebin : %d", result);
- goto fail_to_create;
- }
-
- /* create audio sinkbin */
- result = __mm_wfd_sink_create_audio_sinkbin(wfd_sink);
- if (result < MM_ERROR_NONE) {
- wfd_sink_error("fail to create audio sinkbin : %d", result);
- goto fail_to_create;
+ /* create audio sinkbin */
+ result = __mm_wfd_sink_create_audio_sinkbin(wfd_sink);
+ if (result < MM_ERROR_NONE) {
+ wfd_sink_error("fail to create audio sinkbin : %d", result);
+ goto fail_to_create;
+ }
}
-
/* set pipeline READY state */
result = __mm_wfd_sink_set_pipeline_state(wfd_sink, GST_STATE_READY, TRUE);
if (result < MM_ERROR_NONE) {
wfd_sink->pipeline->mainbin[WFD_SINK_M_PIPE].gst);
name = gst_pad_get_name(pad);
- if(name == NULL) {
+ if (name == NULL) {
wfd_sink_error("fail to get pad");
goto ERROR;
}
wfd_sink_debug("Mux pad added, session mode = %d, name[0] = %c", wfd_sink->ini.sink_session_mode, name[0]);
- if((wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_AUDIO_ONLY) && name[0] == 'v') {
+
+ //In case of 'audio-only-mirroring', we don't add video pad
+ if ((wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_AUDIO_ONLY) && name[0] == 'v') {
wfd_sink_error("Skip video pad add in audio only mode");
// Do nothing
goto done;
}
+ //In case of 'video-only-mirroring', we don't add audio pad
+ if ((wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_VIDEO_ONLY) && name[0] == 'a') {
+ wfd_sink_error("Skip audio pad add in video only mode");
+ // Do nothing
+ goto done;
+ }
+
pipeline = wfd_sink->pipeline->mainbin[WFD_SINK_M_PIPE].gst;
/* take srcpad from demuxer added pad */
gchar *video_format;
wfd_sink_debug_fenter();
-
wfd_sink_return_if_fail(str && GST_IS_STRUCTURE(str));
wfd_sink_return_if_fail(wfd_sink);
wfd_sink_error("invalid audio format(%s)...", audio_format);
is_valid_audio_format = FALSE;
}
-
if (is_valid_audio_format == TRUE) {
if (gst_structure_has_field(str, "audio_rate"))
gst_structure_get_int(str, "audio_rate", &stream_info->audio_stream_info.sample_rate);
stream_info->audio_stream_info.bitwidth);
}
}
-
if (gst_structure_has_field(str, "video_format")) {
is_valid_video_format = TRUE;
video_format = g_strdup(gst_structure_get_string(str, "video_format"));
}
}
- /* create valve for audio */
- MMWFDSINK_CREATE_ELEMENT(mainbin, WFD_SINK_M_A_VALVE, "valve", "audio_valve", FALSE);
- MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_A_VALVE].gst, "src");
- MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_A_VALVE].gst, "sink");
+ if (wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_AUDIO_ONLY)) {
+ /* create valve for audio */
+ MMWFDSINK_CREATE_ELEMENT(mainbin, WFD_SINK_M_A_VALVE, "valve", "audio_valve", FALSE);
+ MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_A_VALVE].gst, "src");
+ MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_A_VALVE].gst, "sink");
+ }
- wfd_sink_error("Current session mode : %d", wfd_sink->ini.sink_session_mode);
- if(wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_VIDEO_ONLY)) {
+ if (wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_VIDEO_ONLY)) {
/* create valve for video */
MMWFDSINK_CREATE_ELEMENT(mainbin, WFD_SINK_M_V_VALVE, "valve", "video_valve", FALSE);
MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_V_VALVE].gst, "src");
wfd_sink_info("check display visible attribute: %d", visible);
if (FALSE == visible) {
- wfd_sink_info ("skipped to prepare video sink. display_visible is FALSE.");
+ wfd_sink_info("skipped to prepare video sink. display_visible is FALSE.");
g_object_set(G_OBJECT(video_sink), "visible", visible, NULL);
return MM_ERROR_NONE;
}