Change pipeline creation for Video only session 67/119167/1
authorSeokHoon Lee <andy.shlee@samsung.com>
Thu, 16 Mar 2017 01:46:43 +0000 (10:46 +0900)
committerSeokHoon Lee <andy.shlee@samsung.com>
Thu, 16 Mar 2017 01:48:02 +0000 (10:48 +0900)
- make pipeline as a result of audio codec negotiation.

Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: I83ca1b20430602662080f97066bfac6ec9566f5b

packaging/libmm-wfd.spec
src/mm_wfd_sink_manager.c
src/mm_wfd_sink_priv.c

index 1b14906..e11447a 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-wfd
 Summary:    Multimedia Framework Wifi-Display Library
-Version:    0.2.219
+Version:    0.2.220
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
index 10ab7ed..4fbf50e 100644 (file)
@@ -112,11 +112,7 @@ __mm_wfd_sink_manager_thread(gpointer data)
 
                        switch (cmd) {
                        case WFD_SINK_MANAGER_CMD_LINK_A_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;
-                               }
+                               wfd_sink_debug("try to link audio decodebin.");
                                if (MM_ERROR_NONE != __mm_wfd_sink_link_audio_decodebin(wfd_sink)) {
                                        wfd_sink_error("failed to link audio decodebin.....");
                                        goto EXIT;
@@ -134,11 +130,7 @@ __mm_wfd_sink_manager_thread(gpointer data)
                                }
                                break;
                        case WFD_SINK_MANAGER_CMD_PREPARE_A_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;
-                               }
+                               wfd_sink_debug("try to prepare audio pipeline.");
                                if (MM_ERROR_NONE != __mm_wfd_sink_prepare_audio_pipeline(wfd_sink, NULL)) {
                                        wfd_sink_error("failed to prepare audio pipeline.....");
                                        goto EXIT;
@@ -156,11 +148,7 @@ __mm_wfd_sink_manager_thread(gpointer data)
                                }
                                break;
                        case WFD_SINK_MANAGER_CMD_UNPREPARE_A_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;
-                               }
+                               wfd_sink_debug("try to unprepare audio pipeline.");
                                if (MM_ERROR_NONE != __mm_wfd_sink_unprepare_audio_pipeline(wfd_sink)) {
                                        wfd_sink_error("failed to unprepare audio pipeline.....");
                                        goto EXIT;
index ffe770e..40ff1e2 100644 (file)
@@ -209,22 +209,21 @@ int _mm_wfd_sink_prepare(mm_wfd_sink_t *wfd_sink)
                        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 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 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;
        }
+
        /* set pipeline READY state */
        result = __mm_wfd_sink_set_pipeline_state(wfd_sink, GST_STATE_READY, TRUE);
        if (result < MM_ERROR_NONE) {
@@ -1780,6 +1779,12 @@ __mm_wfd_sink_unprepare_audio_pipeline(mm_wfd_sink_t *wfd_sink)
                                                                wfd_sink->pipeline,
                                                                MM_ERROR_WFD_NOT_INITIALIZED);
 
+       if (wfd_sink->stream_info.audio_stream_info.codec == MM_WFD_SINK_AUDIO_CODEC_NONE) {
+               wfd_sink_debug("Skip unprepare audio pipeline for none audio codec.");
+               wfd_sink_debug_fleave();
+               return MM_ERROR_NONE;
+       }
+
        wfd_sink_error("No-error:unprepare audio sink bin");
        PRINT_WFD_REF_COUNT(wfd_sink);
 
@@ -1970,6 +1975,12 @@ __mm_wfd_sink_prepare_audio_pipeline(mm_wfd_sink_t *wfd_sink, GstPad **pad)
                                                                wfd_sink->pipeline->mainbin[WFD_SINK_M_PIPE].gst,
                                                                MM_ERROR_WFD_NOT_INITIALIZED);
 
+       if (wfd_sink->stream_info.audio_stream_info.codec == MM_WFD_SINK_AUDIO_CODEC_NONE) {
+               wfd_sink_debug("Skip prepare audio pipeline for none audio codec");
+               wfd_sink_debug_fleave();
+               return MM_ERROR_NONE;
+       }
+
        /* check audio decodebin is linked */
        if (!wfd_sink->audio_decodebin_is_linked) {
                /* check audio decodebin is created */
@@ -2414,9 +2425,9 @@ __mm_wfd_sink_demux_pad_added(GstElement *demux, GstPad *pad, gpointer data)
                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");
+       //In case of none audio codec, we don't add audio pad
+       if (wfd_sink->stream_info.audio_stream_info.codec == MM_WFD_SINK_AUDIO_CODEC_NONE && name[0] == 'a') {
+               wfd_sink_error("Skip audio pad add for none audio codec");
                // Do nothing
                goto done;
        }
@@ -3008,12 +3019,10 @@ static int __mm_wfd_sink_create_pipeline(mm_wfd_sink_t *wfd_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");
-       }
+       /* 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_VIDEO_ONLY)) {
                /* create valve for video */
@@ -3121,6 +3130,12 @@ int __mm_wfd_sink_link_audio_decodebin(mm_wfd_sink_t *wfd_sink)
                return MM_ERROR_NONE;
        }
 
+       if (wfd_sink->stream_info.audio_stream_info.codec == MM_WFD_SINK_AUDIO_CODEC_NONE) {
+               wfd_sink_debug("Skip link audio decodebin for none audio codec.");
+               wfd_sink_debug_fleave();
+               return MM_ERROR_NONE;
+       }
+
        /* take audio decodebin */
        a_decodebin = wfd_sink->pipeline->a_decodebin;
 
@@ -3399,6 +3414,12 @@ int __mm_wfd_sink_create_audio_decodebin(mm_wfd_sink_t *wfd_sink)
                return MM_ERROR_NONE;
        }
 
+       if (wfd_sink->stream_info.audio_stream_info.codec == MM_WFD_SINK_AUDIO_CODEC_NONE) {
+               wfd_sink_debug("Skip create audio decodebin for none audio codec.");
+               wfd_sink_debug_fleave();
+               return MM_ERROR_NONE;
+       }
+
        /* check audio decodebin could be linked now */
        switch (wfd_sink->stream_info.audio_stream_info.codec) {
        case MM_WFD_SINK_AUDIO_CODEC_AAC:
@@ -3632,6 +3653,12 @@ int __mm_wfd_sink_create_audio_sinkbin(mm_wfd_sink_t *wfd_sink)
                return MM_ERROR_NONE;
        }
 
+       if (wfd_sink->stream_info.audio_stream_info.codec == MM_WFD_SINK_AUDIO_CODEC_NONE) {
+               wfd_sink_error("Skip create audio sink bin for non audio codec. %d", wfd_sink->stream_info.audio_stream_info.codec);
+               wfd_sink_debug_fleave();
+               return MM_ERROR_NONE;
+       }
+
        /* alloc handles */
        a_sinkbin = (MMWFDSinkGstElement *)g_malloc0(sizeof(MMWFDSinkGstElement) * WFD_SINK_A_S_NUM);
        if (!a_sinkbin) {