Do not need to take care video prepare/unprepare.
Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: I4c33ab53a0d11e62fcd01d768f64faa3c9d92ca4
Name: libmm-wfd
Summary: Multimedia Framework Wifi-Display Library
-Version: 0.2.215
+Version: 0.2.216
Release: 0
Group: System/Libraries
License: Apache-2.0
#ifndef _MM_WFD_SINK_WFD_ENUM_H_
#define _MM_WFD_SINK_WFD_ENUM_H_
+typedef enum {
+ WFD_SESSION_MODE_MIXED = 0,
+ WFD_SESSION_MODE_VIDEO_ONLY,
+ WFD_SESSION_MODE_AUDIO_ONLY
+} WFDSinkSessionMOde;
+
typedef enum {
WFD_AUDIO_UNKNOWN = 0,
WFD_AUDIO_LPCM = (1 << 0),
gboolean enable_retransmission;
gboolean enable_reset_basetime;
gchar user_agent[WFD_SINK_INI_MAX_STRLEN];
+ gint sink_session_mode;
/* debug */
gboolean generate_dot;
#define DEFAULT_AUDIO_SINK_ASYNC FALSE
#define DEFAULT_VIDEO_SINK_ASYNC FALSE
#define DEFAULT_USER_AGENT "TIZEN3_0/WFD-SINK"
+#define DEFAULT_SINK_SESSION_MODE WFD_SESSION_MODE_MIXED
/* Debug */
#define DEFAULT_GENERATE_DOT FALSE
ini->audio_sink_async = iniparser_getboolean(dict, "general:audio sink async", DEFAULT_AUDIO_SINK_ASYNC);
ini->video_sink_async = iniparser_getboolean(dict, "general:video sink async", DEFAULT_VIDEO_SINK_ASYNC);
MM_WFD_SINK_INI_GET_STRING(dict, ini->user_agent, "general:user agent", DEFAULT_USER_AGENT);
+ ini->sink_session_mode = iniparser_getint(dict, "general:sink session mode", DEFAULT_SINK_SESSION_MODE);
/* debug */
ini->generate_dot = iniparser_getboolean(dict, "debug:generate dot", DEFAULT_GENERATE_DOT);
ini->video_sink_max_lateness = DEFAULT_VIDEO_SINK_MAX_LATENESS;
ini->sink_ts_offset = DEFAULT_SINK_TS_OFFSET;
strncpy(ini->user_agent, DEFAULT_USER_AGENT, WFD_SINK_INI_MAX_STRLEN - 1);
+ ini->sink_session_mode = DEFAULT_SINK_SESSION_MODE;
/* debug */
ini->generate_dot = DEFAULT_GENERATE_DOT;
wfd_sink_debug("audio_sink_async : %d", ini->audio_sink_async);
wfd_sink_debug("video_sink_async : %d", ini->video_sink_async);
wfd_sink_debug("user_agent : %s\n", ini->user_agent);
+ wfd_sink_debug("sink_session_mode : %d", ini->sink_session_mode);
/* debug */
wfd_sink_debug("generate_dot : %d", ini->generate_dot);
#include "mm_wfd_sink_manager.h"
-
+#include "mm_wfd_sink_enum.h"
static gpointer __mm_wfd_sink_manager_thread(gpointer data);
}
break;
case WFD_SINK_MANAGER_CMD_LINK_V_DECODEBIN:
- wfd_sink_debug("try to link video decodebin.");
+ wfd_sink_debug("try to link video decodebin. session mode = %d", wfd_sink->ini.sink_session_mode);
+ if (wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_AUDIO_ONLY) {
+ wfd_sink_debug("Audio only mode skip link video decodebin.");
+ break;
+ }
if (MM_ERROR_NONE != __mm_wfd_sink_link_video_decodebin(wfd_sink)) {
wfd_sink_error("failed to link video decodebin.....");
goto EXIT;
}
break;
case WFD_SINK_MANAGER_CMD_PREPARE_V_PIPELINE:
- wfd_sink_debug("try to prepare video pipeline.");
+ wfd_sink_debug("try to prepare video pipeline. session mode = %d", wfd_sink->ini.sink_session_mode);
+ if (wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_AUDIO_ONLY) {
+ wfd_sink_debug("Audio only mode skip prepare video pipeline.");
+ break;
+ }
if (MM_ERROR_NONE != __mm_wfd_sink_prepare_video_pipeline(wfd_sink, NULL)) {
wfd_sink_error("failed to prepare video pipeline.....");
goto EXIT;
}
break;
case WFD_SINK_MANAGER_CMD_UNPREPARE_V_PIPELINE:
- wfd_sink_debug("try to unprepare video pipeline.");
+ wfd_sink_debug("try to unprepare video pipeline. session mode = %d", wfd_sink->ini.sink_session_mode);
+ if (wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_AUDIO_ONLY) {
+ wfd_sink_debug("Audio only mode skip unprepare video pipeline.");
+ break;
+ }
if (MM_ERROR_NONE != __mm_wfd_sink_unprepare_video_pipeline(wfd_sink)) {
wfd_sink_error("failed to unprepare video pipeline.....");
goto EXIT;
goto fail_to_create;
}
- /* create video decodebin */
- result = __mm_wfd_sink_create_video_decodebin(wfd_sink);
- if (result < MM_ERROR_NONE) {
- wfd_sink_error("failed to create video decodebin %d", result);
- 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_sink->ini.sink_session_mode == WFD_SESSION_MODE_VIDEO_ONLY) {
+ /* create video decodebin */
+ result = __mm_wfd_sink_create_video_decodebin(wfd_sink);
+ if (result < MM_ERROR_NONE) {
+ wfd_sink_error("failed to create video decodebin %d", result);
+ goto fail_to_create;
+ }
- /* create video sinkbin */
- result = __mm_wfd_sink_create_video_sinkbin(wfd_sink);
- if (result < MM_ERROR_NONE) {
- wfd_sink_error("failed to create video sinkbin %d", result);
- goto fail_to_create;
+ /* create video sinkbin */
+ result = __mm_wfd_sink_create_video_sinkbin(wfd_sink);
+ if (result < MM_ERROR_NONE) {
+ wfd_sink_error("failed to create video sinkbin %d", result);
+ goto fail_to_create;
+ }
}
/* create audio decodebin */
wfd_sink->pipeline->mainbin &&
wfd_sink->pipeline->mainbin[WFD_SINK_M_PIPE].gst);
+ 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') {
+ wfd_sink_error("Skip video pad add in audio only mode");
+ // Do nothing
+ goto done;
+ }
+
pipeline = wfd_sink->pipeline->mainbin[WFD_SINK_M_PIPE].gst;
/* take srcpad from demuxer added pad */
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 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");
- MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_V_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_sink->ini.sink_session_mode == 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");
+ MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_V_VALVE].gst, "sink");
+ }
/* adding created elements to pipeline */
if (!__mm_wfd_sink_gst_element_add_bucket_to_bin(GST_BIN_CAST(mainbin[WFD_SINK_M_PIPE].gst), element_bucket, FALSE)) {