From: Sangchul Lee Date: Tue, 9 Oct 2012 14:14:53 +0000 (+0900) Subject: 1. set filter-output-mode property of sound effect plugin to 0, only if sound path... X-Git-Tag: submit/tizen_2.1/20130424.232047~6^2~39 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f568d77ee9a9de6d5a9161bc4028b73eaad32c30;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git 1. set filter-output-mode property of sound effect plugin to 0, only if sound path is SPEAKER 2. add mm_player_change_videosink() for internal 3. fix bug of set state func Change-Id: I8d4c5976ce1f83e72c57732743f26a74c0cf7fb9 --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index e9cbe8b..9d0bdf9 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -1,8 +1,8 @@ Name: libmm-player Summary: Multimedia Framework Player Library -Version: 0.2.4 -Release: 1 +Version: 0.2.5 +Release: 0 Group: System/Libraries License: TBD Source0: %{name}-%{version}.tar.gz diff --git a/src/include/mm_player.h b/src/include/mm_player.h index 24a7afd..4200347 100755 --- a/src/include/mm_player.h +++ b/src/include/mm_player.h @@ -279,11 +279,6 @@ N/A - "display_overlay_ext" - data - N/A - - "display_rotation" int range diff --git a/src/include/mm_player_ini.h b/src/include/mm_player_ini.h index 46e5ad3..38d11e2 100755 --- a/src/include/mm_player_ini.h +++ b/src/include/mm_player_ini.h @@ -51,7 +51,6 @@ typedef struct __mm_player_ini { /* general */ gboolean use_decodebin; // @ - gint video_surface; gchar videosink_element_x[PLAYER_INI_MAX_STRLEN]; gchar videosink_element_evas[PLAYER_INI_MAX_STRLEN]; gchar videosink_element_fake[PLAYER_INI_MAX_STRLEN]; @@ -121,7 +120,6 @@ typedef struct __mm_player_ini #define DEFAULT_DELAY_BEFORE_REPEAT 50 /* msec */ #define DEFAULT_EOS_DELAY 150 /* msec */ #define DEFAULT_DRMSRC "drmsrc" -#define DEFAULT_VIDEO_SURFACE MM_DISPLAY_SURFACE_X #define DEFAULT_VIDEOSINK_X "xvimagesink" #define DEFAULT_VIDEOSINK_EVAS "evasimagesink" #define DEFAULT_VIDEOSINK_FAKE "fakesink" diff --git a/src/include/mm_player_internal.h b/src/include/mm_player_internal.h index 520a41c..ac3256a 100755 --- a/src/include/mm_player_internal.h +++ b/src/include/mm_player_internal.h @@ -286,6 +286,20 @@ int mm_player_set_buffer_seek_data_callback(MMHandleType player, mm_player_buffe */ int mm_player_push_buffer(MMHandleType player, unsigned char *buf, int size); +/** + * This function changes the previous videosink plugin for a new one + * + * @param player [in] Handle of player. + * @param display_surface_type [in] display surface type to set + * @param display_overlay [in] display overlay to set + * + * @return This function returns zero on success, or negative value with error + * code. + * @remark Not supported + * @see + * @since + */ +int mm_player_change_videosink(MMHandleType player, MMDisplaySurfaceType display_surface_type, void *display_overlay); /** @} diff --git a/src/include/mm_player_priv.h b/src/include/mm_player_priv.h index 2892dc3..7a7c269 100755 --- a/src/include/mm_player_priv.h +++ b/src/include/mm_player_priv.h @@ -190,7 +190,6 @@ enum VideoElementID MMPLAYER_V_CONV, MMPLAYER_V_SCALE, MMPLAYER_V_CAPS, - MMPLAYER_V_TEE, MMPLAYER_V_SINK, MMPLAYER_V_NUM }; @@ -459,7 +458,7 @@ typedef struct { /* gstreamer pipeline */ MMPlayerGstPipelineInfo *pipeline; gboolean pipeline_is_constructed; - + /* Buffering support cbs*/ mm_player_buffer_need_data_callback need_data_cb; mm_player_buffer_enough_data_callback enough_data_cb; diff --git a/src/include/mm_player_utils.h b/src/include/mm_player_utils.h index d46cd26..42a6eaa 100755 --- a/src/include/mm_player_utils.h +++ b/src/include/mm_player_utils.h @@ -79,6 +79,7 @@ do \ #define GST_ELEMENT_LINK_FILTERED gst_element_link_filtered #define GST_ELEMENT_LINK_MANY gst_element_link_many #define GST_ELEMENT_LINK gst_element_link +#define GST_ELEMENT_UNLINK gst_element_unlink #define GST_ELEMENT_LINK_PADS gst_element_link_pads #define GST_PAD_LINK gst_pad_link #endif diff --git a/src/mm_player.c b/src/mm_player.c index ed39087..1abea4c 100755 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -430,6 +430,17 @@ int mm_player_get_state(MMHandleType player, MMPlayerStateType *state) return result; } +/* NOTE : Not supported */ +int mm_player_change_videosink(MMHandleType player, MMDisplaySurfaceType display_surface_type, void *display_overlay) +{ + int result = MM_ERROR_NONE; + + debug_log("\n"); + + return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED); + + return MM_ERROR_NOT_SUPPORT_API; +} int mm_player_push_buffer(MMHandleType player, unsigned char *buf, int size) { diff --git a/src/mm_player_attrs.c b/src/mm_player_attrs.c index 1edd098..c1b691e 100755 --- a/src/mm_player_attrs.c +++ b/src/mm_player_attrs.c @@ -196,7 +196,7 @@ __mmplayer_apply_attribute(MMHandleType handle, const char *attribute_name) return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT); return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT); - attrs = MM_PLAYER_GET_ATTRS(handle);; + attrs = MM_PLAYER_GET_ATTRS(handle); player = MM_PLAYER_CAST(handle); if ( g_strrstr(attribute_name, "display") ) @@ -206,7 +206,7 @@ __mmplayer_apply_attribute(MMHandleType handle, const char *attribute_name) !player->pipeline->videobin || !player->pipeline->videobin[MMPLAYER_V_SINK].gst ) { - debug_warning("videosink element is not yet ready\n"); + debug_warning("videosink element is not yet ready"); /* * The attribute should be committed even though videobin is not created yet. * So, true should be returned here. @@ -217,7 +217,7 @@ __mmplayer_apply_attribute(MMHandleType handle, const char *attribute_name) if ( MM_ERROR_NONE != _mmplayer_update_video_param( player ) ) { - debug_error("failed to update video param\n"); + debug_error("failed to update video param"); return MM_ERROR_PLAYER_INTERNAL; } } @@ -672,15 +672,6 @@ _mmplayer_construct_attribute(MMHandleType handle) 0, 0 }, - { - "display_overlay_ext", - MM_ATTRS_TYPE_DATA, - MM_ATTRS_FLAG_RW, - (void *) NULL, - MM_ATTRS_VALID_TYPE_NONE, - 0, - 0 - }, { "display_zoom", MM_ATTRS_TYPE_INT, @@ -694,20 +685,11 @@ _mmplayer_construct_attribute(MMHandleType handle) "display_surface_type", MM_ATTRS_TYPE_INT, MM_ATTRS_FLAG_RW, - (void *) 0, + (void *) MM_DISPLAY_SURFACE_NULL, MM_ATTRS_VALID_TYPE_INT_RANGE, MM_DISPLAY_SURFACE_X, MM_DISPLAY_SURFACE_NULL }, - { - "display_surface_use_multi", - MM_ATTRS_TYPE_INT, - MM_ATTRS_FLAG_RW, - (void *) FALSE, - MM_ATTRS_VALID_TYPE_INT_RANGE, - FALSE, - TRUE - }, { "display_evas_surface_sink", MM_ATTRS_TYPE_STRING, diff --git a/src/mm_player_ini.c b/src/mm_player_ini.c index d6518b9..bc7f9f7 100755 --- a/src/mm_player_ini.c +++ b/src/mm_player_ini.c @@ -167,7 +167,6 @@ mm_player_ini_load(void) g_player_ini.use_decodebin = iniparser_getboolean(dict, "general:use decodebin", DEFAULT_USE_DECODEBIN); g_player_ini.disable_segtrap = iniparser_getboolean(dict, "general:disable segtrap", DEFAULT_DISABLE_SEGTRAP); g_player_ini.skip_rescan = iniparser_getboolean(dict, "general:skip rescan", DEFAULT_SKIP_RESCAN); - g_player_ini.video_surface = DEFAULT_VIDEO_SURFACE; g_player_ini.generate_dot = iniparser_getboolean(dict, "general:generate dot", DEFAULT_GENERATE_DOT); g_player_ini.provide_clock= iniparser_getboolean(dict, "general:provide clock", DEFAULT_PROVIDE_CLOCK); g_player_ini.live_state_change_timeout = iniparser_getint(dict, "general:live state change timeout", DEFAULT_LIVE_STATE_CHANGE_TIMEOUT); @@ -276,7 +275,6 @@ mm_player_ini_load(void) g_player_ini.use_audio_filter_preset = DEFAULT_USE_AUDIO_FILTER_PRESET; g_player_ini.use_audio_filter_custom = DEFAULT_USE_AUDIO_FILTER_CUSTOM; g_player_ini.skip_rescan = DEFAULT_SKIP_RESCAN; - g_player_ini.video_surface = DEFAULT_VIDEO_SURFACE; strncpy( g_player_ini.videosink_element_x, DEFAULT_VIDEOSINK_X, PLAYER_INI_MAX_STRLEN - 1 ); strncpy( g_player_ini.videosink_element_evas, DEFAULT_VIDEOSINK_EVAS, PLAYER_INI_MAX_STRLEN - 1 ); strncpy( g_player_ini.videosink_element_fake, DEFAULT_VIDEOSINK_FAKE, PLAYER_INI_MAX_STRLEN - 1 ); @@ -339,7 +337,6 @@ mm_player_ini_load(void) debug_log("use_audio_filter_custom : %d\n", g_player_ini.use_audio_filter_custom); debug_log("disable_segtrap : %d\n", g_player_ini.disable_segtrap); debug_log("skip rescan : %d\n", g_player_ini.skip_rescan); - debug_log("video surface(0:X, 1:EVAS, 2:GL, 3:NULL) : %d\n", g_player_ini.video_surface); debug_log("videosink element x: %s\n", g_player_ini.videosink_element_x); debug_log("videosink element evas: %s\n", g_player_ini.videosink_element_evas); debug_log("videosink element fake: %s\n", g_player_ini.videosink_element_fake); diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index b9f6b1a..aabbad2 100755 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -112,7 +112,7 @@ gulong ahs_appsrc_cb_probe_id = 0; ---------------------------------------------------------------------------*/ static gboolean __mmplayer_set_state(mm_player_t* player, int state); static int __mmplayer_get_state(mm_player_t* player); -static int __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps *caps); +static int __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps *caps, MMDisplaySurfaceType surface_type); static int __mmplayer_gst_create_audio_pipeline(mm_player_t* player); static int __mmplayer_gst_create_text_pipeline(mm_player_t* player); static int __mmplayer_gst_create_subtitle_pipeline(mm_player_t* player); @@ -166,6 +166,7 @@ static int __mmplayer_post_missed_plugin(mm_player_t* player); static int __mmplayer_check_not_supported_codec(mm_player_t* player, gchar* mime); static gboolean __mmplayer_configure_audio_callback(mm_player_t* player); static void __mmplayer_add_sink( mm_player_t* player, GstElement* sink); +static void __mmplayer_del_sink( mm_player_t* player, GstElement* sink); static void __mmplayer_release_signal_connection(mm_player_t* player); static void __mmplayer_set_antishock( mm_player_t* player, gboolean disable_by_force); static gpointer __mmplayer_repeat_thread(gpointer data); @@ -196,7 +197,6 @@ static gint __gst_handle_stream_error( mm_player_t* player, GError* error, GstM static gint __gst_transform_gsterror( mm_player_t* player, GstMessage * message, GError* error); static gboolean __gst_send_event_to_sink( mm_player_t* player, GstEvent* event ); -static int __mmplayer_get_video_frame_from_buffer(mm_player_t* player, GstBuffer *buffer); static int __mmplayer_set_pcm_extraction(mm_player_t* player); static gboolean __mmplayer_can_extract_pcm( mm_player_t* player ); @@ -206,7 +206,6 @@ static void __mmplayer_undo_sound_fadedown(mm_player_t* player); static void __mmplayer_add_new_caps(GstPad* pad, GParamSpec* unused, gpointer data); static void __mmplayer_set_unlinked_mime_type(mm_player_t* player, GstCaps *caps); -static void __mmplayer_set_videosink_type(mm_player_t* player); /* util */ const gchar * __get_state_name ( int state ); @@ -815,12 +814,6 @@ __mmplayer_set_state(mm_player_t* player, int state) // @ return TRUE; } - /* update player states */ - MMPLAYER_PREV_STATE(player) = MMPLAYER_CURRENT_STATE(player); - MMPLAYER_CURRENT_STATE(player) = new_state; - if ( MMPLAYER_CURRENT_STATE(player) == MMPLAYER_PENDING_STATE(player) ) - MMPLAYER_PENDING_STATE(player) = MM_PLAYER_STATE_NONE; - /* print state */ MMPLAYER_PRINT_STATE(player); @@ -828,8 +821,8 @@ __mmplayer_set_state(mm_player_t* player, int state) // @ if (MMPLAYER_TARGET_STATE(player) == new_state) { /* fill the message with state of player */ - msg.state.previous = MMPLAYER_PREV_STATE(player); - msg.state.current = MMPLAYER_CURRENT_STATE(player); + msg.state.previous = MMPLAYER_CURRENT_STATE(player); + msg.state.current = new_state; /* state changed by asm callback */ if ( player->sm.by_asm_cb ) @@ -852,7 +845,13 @@ __mmplayer_set_state(mm_player_t* player, int state) // @ debug_log ("intermediate state, do nothing.\n"); return TRUE; } - + + /* update player states */ + MMPLAYER_PREV_STATE(player) = MMPLAYER_CURRENT_STATE(player); + MMPLAYER_CURRENT_STATE(player) = new_state; + if ( MMPLAYER_CURRENT_STATE(player) == MMPLAYER_PENDING_STATE(player) ) + MMPLAYER_PENDING_STATE(player) = MM_PLAYER_STATE_NONE; + switch ( MMPLAYER_TARGET_STATE(player) ) { case MM_PLAYER_STATE_NULL: @@ -2280,22 +2279,25 @@ __mmplayer_gst_decode_callback(GstElement *decodebin, GstPad *pad, gboolean last { if (player->pipeline->videobin == NULL) { - __mmplayer_set_videosink_type(player); + /* NOTE : not make videobin because application dose not want to play it even though file has video stream. + */ - /* NOTE : not make videobin because application dose not want to play it even though file has video stream. - */ - if (PLAYER_INI()->video_surface == MM_DISPLAY_SURFACE_NULL) - { - debug_log("not make videobin because it dose not want\n"); - goto ERROR; - } + /* get video surface type */ + int surface_type = 0; + mm_attrs_get_int_by_name (player->attrs, "display_surface_type", &surface_type); + debug_log("check display surface type attribute: %d", surface_type); + if (surface_type == MM_DISPLAY_SURFACE_NULL) + { + debug_log("not make videobin because it dose not want\n"); + goto ERROR; + } __ta__("__mmplayer_gst_create_video_pipeline", - if (MM_ERROR_NONE != __mmplayer_gst_create_video_pipeline(player, caps) ) - { - debug_error("failed to create videobin. continuing without video\n"); - goto ERROR; - } + if (MM_ERROR_NONE != __mmplayer_gst_create_video_pipeline(player, caps, surface_type) ) + { + debug_error("failed to create videobin. continuing without video\n"); + goto ERROR; + } ) sinkbin = player->pipeline->videobin[MMPLAYER_V_BIN].gst; @@ -2424,8 +2426,7 @@ int _mmplayer_update_video_param(mm_player_t* player) // @ { MMHandleType attrs = 0; - gint videosink_idx_x = 0; - gint videosink_idx_evas = 0; + MMDisplaySurfaceType surface_type = 0; debug_fenter(); @@ -2445,7 +2446,8 @@ _mmplayer_update_video_param(mm_player_t* player) // @ } /* update display surface */ - __mmplayer_set_videosink_type(player); + mm_attrs_get_int_by_name (player->attrs, "display_surface_type", &surface_type); + debug_log("check display surface type attribute: %d", surface_type); /* check video stream callback is used */ if( player->use_video_stream ) @@ -2537,10 +2539,8 @@ _mmplayer_update_video_param(mm_player_t* player) // @ return MM_ERROR_NONE; } - videosink_idx_x = videosink_idx_evas = MMPLAYER_V_SINK; - /* configuring display */ - switch ( PLAYER_INI()->video_surface ) + switch ( surface_type ) { case MM_DISPLAY_SURFACE_X: { @@ -2583,7 +2583,7 @@ _mmplayer_update_video_param(mm_player_t* player) // @ mm_attrs_get_int_by_name(attrs, "display_roi_height", &roi_h); mm_attrs_get_int_by_name(attrs, "display_visible", &visible); - g_object_set(player->pipeline->videobin[videosink_idx_x].gst, + g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "force-aspect-ratio", force_aspect_ratio, "zoom", zoom, "rotate", degree, @@ -2619,7 +2619,7 @@ _mmplayer_update_video_param(mm_player_t* player) // @ mm_attrs_get_int_by_name(attrs, "display_evas_do_scaling", &scaling); if (object) { - g_object_set(player->pipeline->videobin[videosink_idx_evas].gst, + g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "evas-object", object, "visible", visible, NULL); @@ -2684,7 +2684,7 @@ _mmplayer_update_video_param(mm_player_t* player) // @ mm_attrs_get_int_by_name(attrs, "display_roi_width", &roi_w); mm_attrs_get_int_by_name(attrs, "display_roi_height", &roi_h); - g_object_set(player->pipeline->videobin[videosink_idx_evas].gst, + g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "force-aspect-ratio", force_aspect_ratio, "origin-size", origin_size, "dst-roi-x", roi_x, @@ -3184,6 +3184,7 @@ __mmplayer_ahs_appsrc_probe (GstPad *pad, GstBuffer *buffer, gpointer u_data) * * @param player [in] handle of player * caps [in] src caps of decoder + * surface_type [in] surface type for video rendering * * @return This function returns zero on success. * @remark @@ -3197,7 +3198,7 @@ __mmplayer_ahs_appsrc_probe (GstPad *pad, GstBuffer *buffer, gpointer u_data) * - evas surface (x86) : videoconvertor ! evasimagesink */ static int -__mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps) +__mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps, MMDisplaySurfaceType surface_type) { GstPad *pad = NULL; MMHandleType attrs; @@ -3205,7 +3206,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps) MMPlayerGstElement* first_element = NULL; MMPlayerGstElement* videobin = NULL; gchar* vconv_factory = NULL; - char *videosink_element = NULL; + gchar *videosink_element = NULL; debug_fenter(); @@ -3225,7 +3226,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps) videobin[MMPLAYER_V_BIN].gst = gst_bin_new("videobin"); if ( !videobin[MMPLAYER_V_BIN].gst ) { - debug_critical("failed to create audiobin\n"); + debug_critical("failed to create videobin"); goto ERROR; } @@ -3354,7 +3355,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps) if (player->is_nv12_tiled) { - if ( ((PLAYER_INI()->video_surface == MM_DISPLAY_SURFACE_EVAS) && !strcmp(PLAYER_INI()->videosink_element_evas, "evasimagesink")) ) + if ( ((surface_type == MM_DISPLAY_SURFACE_EVAS) && !strcmp(PLAYER_INI()->videosink_element_evas, "evasimagesink")) ) { vconv_factory = "fimcconvert"; } @@ -3377,7 +3378,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps) #endif /* set video sink */ - switch (PLAYER_INI()->video_surface) + switch (surface_type) { case MM_DISPLAY_SURFACE_X: if (strlen(PLAYER_INI()->videosink_element_x) > 0) @@ -3402,7 +3403,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps) goto ERROR; } - MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK, videosink_element, "videosink", TRUE); + MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK, videosink_element, videosink_element, TRUE); debug_log("selected videosink name: %s", videosink_element); } @@ -3632,7 +3633,6 @@ ERROR: static int __mmplayer_gst_create_subtitle_pipeline(mm_player_t* player) { - GstBus *bus = NULL; MMPlayerGstElement* subtitlebin = NULL; MMHandleType attrs = 0; gchar *subtitle_uri =NULL; @@ -4636,7 +4636,6 @@ __mmplayer_gst_destroy_pipeline(mm_player_t* player) // @ { gint timeout = 0; int ret = MM_ERROR_NONE; - int i = 0; debug_fenter(); @@ -4740,6 +4739,7 @@ __mmplayer_gst_destroy_pipeline(mm_player_t* player) // @ MMPLAYER_FREEIF( audiobin ); MMPLAYER_FREEIF( videobin ); MMPLAYER_FREEIF( textbin ); + MMPLAYER_FREEIF( subtitlebin); MMPLAYER_FREEIF( mainbin ); } @@ -5073,7 +5073,7 @@ static int __gst_stop(mm_player_t* player) // @ /* Just set state to PAUESED and the rewind. it's usual player behavior. */ timeout = MMPLAYER_STATE_CHANGE_TIMEOUT ( player ); - if ( player->profile.uri_type == MM_PLAYER_URI_TYPE_BUFF ) + if ( player->profile.uri_type == MM_PLAYER_URI_TYPE_BUFF || player->profile.uri_type == MM_PLAYER_URI_TYPE_HLS) { ret = __mmplayer_gst_set_state(player, player->pipeline->mainbin[MMPLAYER_M_PIPE].gst, GST_STATE_READY, FALSE, timeout ); @@ -5880,7 +5880,6 @@ __mmplayer_asm_callback(int handle, ASM_event_sources_t event_src, ASM_sound_com { mm_player_t* player = (mm_player_t*) cb_data; ASM_cb_result_t cb_res = ASM_CB_RES_IGNORE; - MMHandleType attrs = 0; int result = MM_ERROR_NONE; gboolean lazy_pause = FALSE; @@ -7394,29 +7393,6 @@ __mmplayer_set_pcm_extraction(mm_player_t* player) return MM_ERROR_NONE; } -static -void __mmplayer_set_videosink_type(mm_player_t* player) -{ - int type = 0; - - debug_fenter(); - - return_if_fail( player ); - - mm_attrs_get_int_by_name (player->attrs, "display_surface_type", &type); - - debug_log("check display surface attribute: %d\n", type); - - if (type >=MM_DISPLAY_SURFACE_X) - { - PLAYER_INI()->video_surface = type; - } - - debug_fleave(); - - return; -} - int _mmplayer_deactivate_section_repeat(MMHandleType hplayer) { @@ -10155,6 +10131,20 @@ __mmplayer_add_sink( mm_player_t* player, GstElement* sink ) debug_fleave(); } +static void +__mmplayer_del_sink( mm_player_t* player, GstElement* sink ) +{ + debug_fenter(); + + return_if_fail ( player ); + return_if_fail ( sink ); + + player->sink_elements = + g_list_remove(player->sink_elements, sink); + + debug_fleave(); +} + static gboolean __gst_seek(mm_player_t* player, GstElement * element, gdouble rate, GstFormat format, GstSeekFlags flags, GstSeekType cur_type, diff --git a/src/mm_player_sndeffect.c b/src/mm_player_sndeffect.c index 9f2e88c..1a7b5ea 100755 --- a/src/mm_player_sndeffect.c +++ b/src/mm_player_sndeffect.c @@ -31,15 +31,16 @@ mm_player_get_foreach_present_supported_filter_type(MMHandleType player, MMAudio { debug_fenter(); int result = MM_ERROR_NONE; - gboolean is_earphone = NULL; + mm_sound_device_in device_in; + mm_sound_device_out device_out; int i = 0; return_val_if_fail ( player, MM_ERROR_PLAYER_NOT_INITIALIZED ); - /* get status if earphone is activated */ - result = mm_sound_is_route_available(MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY, &is_earphone); + /* get status if speaker is activated */ + result = mm_sound_get_active_device(&device_in, &device_out); if ( result ) { - debug_error("mm_sound_is_route_available() failed [%x]!!\n", result); + debug_error("mm_sound_get_active_device() failed [%x]!!\n", result); return result; } @@ -48,25 +49,17 @@ mm_player_get_foreach_present_supported_filter_type(MMHandleType player, MMAudio { for ( i = 0; i < MM_AUDIO_FILTER_PRESET_NUM; i++ ) { - if (is_earphone) { - if (PLAYER_INI()->audio_filter_preset_list[i]) + if (PLAYER_INI()->audio_filter_preset_list[i] ) + { + if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER && + PLAYER_INI()->audio_filter_preset_earphone_only_list[i]) { - if (!foreach_cb(filter_type, i, user_data)) - { - goto CALLBACK_ERROR; - } + continue; } - } - else - { - if (PLAYER_INI()->audio_filter_preset_list[i] && !PLAYER_INI()->audio_filter_preset_earphone_only_list[i]) + if (!foreach_cb(filter_type,i, user_data)) { - if (!foreach_cb(filter_type, i, user_data)) - { - goto CALLBACK_ERROR; - } + goto CALLBACK_ERROR; } - } } } @@ -75,24 +68,16 @@ mm_player_get_foreach_present_supported_filter_type(MMHandleType player, MMAudio { for ( i = 0; i < MM_AUDIO_FILTER_CUSTOM_NUM; i++ ) { - if (is_earphone) + if (PLAYER_INI()->audio_filter_custom_list[i] ) { - if (PLAYER_INI()->audio_filter_custom_list[i]) + if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER && + PLAYER_INI()->audio_filter_custom_earphone_only_list[i]) { - if (!foreach_cb(filter_type, i, user_data)) - { - goto CALLBACK_ERROR; - } + continue; } - } - else - { - if (PLAYER_INI()->audio_filter_custom_list[i] && !PLAYER_INI()->audio_filter_custom_earphone_only_list[i]) + if (!foreach_cb(filter_type,i, user_data)) { - if (!foreach_cb(filter_type,i, user_data)) - { - goto CALLBACK_ERROR; - } + goto CALLBACK_ERROR; } } } @@ -278,7 +263,9 @@ _mmplayer_sound_filter_preset_apply(mm_player_t *player, MMAudioFilterPresetType GstElement *filter_element = NULL; int result = MM_ERROR_NONE; int output_type = 0; - bool is_earphone = FALSE; + mm_sound_device_in device_in; + mm_sound_device_out device_out; + debug_fenter(); return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED ); @@ -300,18 +287,15 @@ _mmplayer_sound_filter_preset_apply(mm_player_t *player, MMAudioFilterPresetType filter_element = player->pipeline->audiobin[MMPLAYER_A_FILTER].gst; - /* get status if earphone is activated */ - result = mm_sound_is_route_available(MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY, &is_earphone); + /* get status if speaker is activated */ + result = mm_sound_get_active_device(&device_in, &device_out); if ( result ) { - debug_error("mm_sound_is_route_available() failed [%x]!!\n", result); + debug_error("mm_sound_get_active_device() failed [%x]!!\n", result); return result; } - if (is_earphone) - { - output_type = MM_AUDIO_FILTER_OUTPUT_EAR; - } - else + /* SPEAKER case */ + if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER) { output_type = MM_AUDIO_FILTER_OUTPUT_SPK; if (__mmplayer_is_earphone_only_filter_type(player, MM_AUDIO_FILTER_TYPE_PRESET, filter_type)) @@ -320,6 +304,11 @@ _mmplayer_sound_filter_preset_apply(mm_player_t *player, MMAudioFilterPresetType return MM_ERROR_PLAYER_SOUND_EFFECT_INVALID_STATUS; } } + /* Other case, include WIRED_ACCESSORY, BLUETOOTH, DOCK */ + else + { + output_type = MM_AUDIO_FILTER_OUTPUT_EAR; + } /* set filter output mode as SPEAKER or EARPHONE */ g_object_set(filter_element, "filter-output-mode", output_type, NULL); @@ -370,24 +359,23 @@ _mmplayer_sound_filter_custom_apply(mm_player_t *player) } else { - int output_type; - bool is_earphone = FALSE; + int output_type = 0; + mm_sound_device_in device_in; + mm_sound_device_out device_out; + return_val_if_fail( player->pipeline->audiobin, MM_ERROR_PLAYER_NOT_INITIALIZED ); filter_element = player->pipeline->audiobin[MMPLAYER_A_FILTER].gst; - /* get status if earphone is activated */ - result = mm_sound_is_route_available(MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY, &is_earphone); + /* get status if speaker is activated */ + result = mm_sound_get_active_device(&device_in, &device_out); if ( result ) { - debug_error("mm_sound_is_route_available() failed [%x]!!\n", result); + debug_error("mm_sound_get_active_device() failed [%x]!!\n", result); return result; } - if (is_earphone) - { - output_type = MM_AUDIO_FILTER_OUTPUT_EAR; - } - else + /* SPEAKER case */ + if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER) { output_type = MM_AUDIO_FILTER_OUTPUT_SPK; if (__mmplayer_is_earphone_only_filter_type(player, MM_AUDIO_FILTER_TYPE_CUSTOM, NULL)) @@ -396,6 +384,11 @@ _mmplayer_sound_filter_custom_apply(mm_player_t *player) return MM_ERROR_PLAYER_SOUND_EFFECT_INVALID_STATUS; } } + /* Other case, include WIRED_ACCESSORY, BLUETOOTH, DOCK */ + else + { + output_type = MM_AUDIO_FILTER_OUTPUT_EAR; + } /* set filter output mode as SPEAKER or EARPHONE */ g_object_set(filter_element, "filter-output-mode", output_type, NULL);