From: NAMJEONGYOON Date: Mon, 8 Aug 2016 08:57:39 +0000 (+0900) Subject: fix looping operation for evas surface and remove unused code X-Git-Tag: accepted/tizen/common/20160811.145701^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F50%2F82950%2F6;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git fix looping operation for evas surface and remove unused code 1. when surface_type is evas, player will make videobin including fakesink. 2. it will make selector before making videobin. 3. remove unused callback Change-Id: Id47485f7e823596080022489b51b7487d043b9d2 --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index d68f44d..7f855be 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -1,6 +1,6 @@ Name: libmm-player Summary: Multimedia Framework Player Library -Version: 0.5.92 +Version: 0.5.93 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_player.h b/src/include/mm_player.h index 9fb1798..2ed7cc1 100644 --- a/src/include/mm_player.h +++ b/src/include/mm_player.h @@ -2069,8 +2069,6 @@ int mm_player_set_next_uri(MMHandleType player, const char *uri); */ int mm_player_get_next_uri(MMHandleType player, char **uri); -int mm_player_enable_media_packet_video_stream(MMHandleType player, bool enable); - /** * This function is to increase reference count of internal buffer. * diff --git a/src/include/mm_player_priv.h b/src/include/mm_player_priv.h index 79f427a..ed8c96c 100644 --- a/src/include/mm_player_priv.h +++ b/src/include/mm_player_priv.h @@ -544,7 +544,6 @@ typedef struct { /* video stream callback */ mm_player_video_stream_callback video_stream_cb; void* video_stream_cb_user_param; - int use_video_stream; GCond video_bo_cond; GMutex video_bo_mutex; GList* video_bo_list; /* mm_player_video_bo_info_t, bo list for decoded video data by sw codec */ @@ -664,7 +663,6 @@ typedef struct { gboolean resumed_by_rewind; gboolean is_nv12_tiled; - gboolean is_drm_file; /* resource manager for H/W resources */ MMPlayerResourceManager resource_manager; @@ -857,7 +855,6 @@ int _mmplayer_set_uri(MMHandleType hplayer, const char* uri); int _mmplayer_set_next_uri(MMHandleType hplayer, const char* uri, bool is_first_path); int _mmplayer_get_next_uri(MMHandleType hplayer, char** uri); int _mmplayer_has_closed_caption(MMHandleType hplayer, bool* exist); -int _mmplayer_enable_media_packet_video_stream(MMHandleType hplayer, bool enable); void * _mm_player_media_packet_video_stream_internal_buffer_ref(void *buffer); void _mm_player_media_packet_video_stream_internal_buffer_unref(void *buffer); int _mmplayer_set_pcm_spec(MMHandleType hplayer, int samplerate, int channel); diff --git a/src/mm_player.c b/src/mm_player.c index e1acd4c..9a4f776 100644 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -1012,22 +1012,6 @@ int mm_player_has_closed_caption(MMHandleType player, bool *exist) return result; } -int mm_player_enable_media_packet_video_stream(MMHandleType player, bool enable) -{ - int result = MM_ERROR_NONE; - - MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); - MMPLAYER_RETURN_VAL_IF_FAIL(enable, MM_ERROR_INVALID_ARGUMENT); - - MMPLAYER_CMD_LOCK( player ); - - result = _mmplayer_enable_media_packet_video_stream(player, enable); - - MMPLAYER_CMD_UNLOCK( player ); - - return result; -} - void * mm_player_media_packet_video_stream_internal_buffer_ref(void *buffer) { void * result; diff --git a/src/mm_player_capture.c b/src/mm_player_capture.c index be80a75..170d284 100644 --- a/src/mm_player_capture.c +++ b/src/mm_player_capture.c @@ -140,13 +140,6 @@ _mmplayer_do_video_capture(MMHandleType hplayer) } } - /* check if drm file */ - if (player->is_drm_file) - { - LOGW("not supported in drm file"); - return MM_ERROR_PLAYER_DRM_OUTPUT_PROTECTION; - } - if (player->pipeline->videobin) pad = gst_element_get_static_pad(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "sink" ); else // evas surface diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 7518f84..33456dd 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -306,40 +306,6 @@ print_tag (const GstTagList * list, const gchar * tag, gpointer unused) } #endif -static void -__mmplayer_videostream_cb(GstElement *element, void *data, -int width, int height, gpointer user_data) // @ -{ - mm_player_t* player = (mm_player_t*)user_data; - - MMPLAYER_RETURN_IF_FAIL ( player ); - - MMPLAYER_FENTER(); - - if (player->is_drm_file) - { - MMMessageParamType msg_param = { 0, }; - LOGW("not supported in drm file"); - msg_param.code = MM_ERROR_PLAYER_DRM_OUTPUT_PROTECTION; - MMPLAYER_POST_MSG( player, MM_MESSAGE_ERROR, &msg_param ); - } - else if ( !player->set_mode.media_packet_video_stream && player->video_stream_cb) - { - MMPlayerVideoStreamDataType stream; - - /* clear stream data structure */ - memset(&stream, 0x0, sizeof(MMPlayerVideoStreamDataType)); - - stream.data[0] = data; - stream.length_total = width * height * 4; // for rgb 32bit - stream.height = height; - stream.width = width; - player->video_stream_cb(&stream, player->video_stream_cb_user_param); - } - - MMPLAYER_FLEAVE(); -} - /* This function should be called after the pipeline goes PAUSED or higher state. */ gboolean @@ -1597,7 +1563,6 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @ case GST_STATE_PAUSED: { gboolean prepare_async = FALSE; - gboolean is_drm = FALSE; if ( ! player->audio_cb_probe_id && player->set_mode.pcm_extraction && !player->audio_stream_render_cb_ex) __mmplayer_configure_audio_callback(player); @@ -1618,19 +1583,6 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @ player->total_maximum_bitrate, player->total_bitrate); } } - - /* NOTE : should consider streaming case */ - /* check if drm file */ - if ((player->pipeline->mainbin[MMPLAYER_M_SRC].gst) && - (g_object_class_find_property(G_OBJECT_GET_CLASS(player->pipeline->mainbin[MMPLAYER_M_SRC].gst), "is-drm"))) - { - g_object_get(G_OBJECT(player->pipeline->mainbin[MMPLAYER_M_SRC].gst), "is-drm", &is_drm, NULL); - - if (is_drm) - { - player->is_drm_file = TRUE; - } - } } break; @@ -2741,7 +2693,7 @@ __mmplayer_gst_decode_pad_added (GstElement *elem, GstPad *pad, gpointer data) mm_attrs_get_int_by_name (player->attrs, "display_surface_type", &stype); /* don't make video because of not required, and not support multiple track */ - if (stype == MM_DISPLAY_SURFACE_NULL || stype == MM_DISPLAY_SURFACE_REMOTE) + if (stype == MM_DISPLAY_SURFACE_NULL) { LOGD ("no video sink by null surface or multiple track (%d)", stype); MMPlayerResourceState resource_state = RESOURCE_STATE_NONE; @@ -2749,7 +2701,7 @@ __mmplayer_gst_decode_pad_added (GstElement *elem, GstPad *pad, gpointer data) == MM_ERROR_NONE) { /* acquire resources for video playing */ - if (resource_state >= RESOURCE_STATE_PREPARED) + if (resource_state == RESOURCE_STATE_PREPARED) { if (_mmplayer_resource_manager_acquire(&player->resource_manager) != MM_ERROR_NONE) @@ -2918,12 +2870,8 @@ __mmplayer_gst_decode_pad_added (GstElement *elem, GstPad *pad, gpointer data) gst_element_set_state (selector, GST_STATE_PAUSED); gst_bin_add (GST_BIN(pipeline), selector); - } - else - { + } else LOGD ("input-selector is already created.\n"); - selector = player->pipeline->mainbin[elemId].gst; - } // link LOGD ("Calling request pad with selector %p \n", selector); @@ -3776,8 +3724,7 @@ __mmplayer_gst_decode_callback(GstElement *elem, GstPad *pad, gpointer data) // mm_attrs_get_int_by_name(player->attrs, "display_surface_type", &surface_type); LOGD("display_surface_type (%d)\n", surface_type); - if (surface_type == MM_DISPLAY_SURFACE_NULL || surface_type == MM_DISPLAY_SURFACE_REMOTE) - { + if (surface_type == MM_DISPLAY_SURFACE_NULL) { LOGD("not make videobin because it dose not want\n"); goto ERROR; } @@ -3803,7 +3750,7 @@ __mmplayer_gst_decode_callback(GstElement *elem, GstPad *pad, gpointer data) // == MM_ERROR_NONE) { /* acquire resources for video playing */ - if (resource_state >= RESOURCE_STATE_PREPARED) + if (resource_state == RESOURCE_STATE_PREPARED) { if (_mmplayer_resource_manager_acquire(&player->resource_manager) != MM_ERROR_NONE) @@ -4511,70 +4458,6 @@ __mmplayer_update_evas_videosink_video_param(mm_player_t* player) return MM_ERROR_NONE; } -void -__mmplayer_update_video_stream_callback_video_param(mm_player_t* player) -{ - MMHandleType attrs = 0; - int org_angle = 0; // current supported angle values are 0, 90, 180, 270 - int user_angle = 0; - int rotation_value = 0; - MMPLAYER_FENTER(); - - /* check video sinkbin is created */ - if(MM_ERROR_NONE != __mmplayer_video_param_check_video_sink_bin(player)) - return; - - attrs = MMPLAYER_GET_ATTRS(player); - MMPLAYER_RETURN_IF_FAIL (attrs); - - __mmplayer_get_video_angle(player, &user_angle, &org_angle); - - if (player->set_mode.video_zc) - { - gchar *ename = NULL; - int width = 0; - int height = 0; - - mm_attrs_get_int_by_name(attrs, "display_width", &width); - mm_attrs_get_int_by_name(attrs, "display_height", &height); - - /* resize video frame with requested values for fimcconvert */ - MMPLAYER_RETURN_IF_FAIL (player->pipeline->videobin[MMPLAYER_V_CONV].gst); - - ename = GST_OBJECT_NAME(gst_element_get_factory(player->pipeline->videobin[MMPLAYER_V_CONV].gst)); - - if (ename && g_strrstr(ename, "fimcconvert")) - { - if (width) - g_object_set(player->pipeline->videobin[MMPLAYER_V_CONV].gst, "dst-width", width, NULL); - - if (height) - g_object_set(player->pipeline->videobin[MMPLAYER_V_CONV].gst, "dst-height", height, NULL); - - /* NOTE: fimcconvert does not manage index of src buffer from upstream src-plugin, decoder gives frame information in output buffer with no ordering */ - g_object_set(player->pipeline->videobin[MMPLAYER_V_CONV].gst, "src-rand-idx", TRUE, NULL); - - /* get rotation value to set */ - __mmplayer_get_property_value_for_rotation(player, org_angle+user_angle, &rotation_value); - - g_object_set(player->pipeline->videobin[MMPLAYER_V_CONV].gst, "rotate", rotation_value, NULL); - - LOGD("updating fimcconvert - r[%d], w[%d], h[%d]", rotation_value, width, height); - } - } - else - { - LOGD("using video stream callback with memsink. player handle : [%p]", player); - MMPLAYER_RETURN_IF_FAIL (player->pipeline->videobin[MMPLAYER_V_FLIP].gst); - - /* get rotation value to set */ - __mmplayer_get_property_value_for_rotation(player, org_angle+user_angle, &rotation_value); - - g_object_set(player->pipeline->videobin[MMPLAYER_V_FLIP].gst, "method", rotation_value, NULL); - } - -} - int _mmplayer_update_video_param(mm_player_t* player, char *param_name) // @ { @@ -4596,13 +4479,6 @@ _mmplayer_update_video_param(mm_player_t* player, char *param_name) // @ } LOGD("param_name : %s", param_name); - /* check video stream callback is used */ - if(!player->set_mode.media_packet_video_stream && player->use_video_stream ) - { - __mmplayer_update_video_stream_callback_video_param(player); - return MM_ERROR_NONE; - } - /* update display surface */ mm_attrs_get_int_by_name(attrs, "display_surface_type", &surface_type); LOGD("check display surface type attribute: %d", surface_type); @@ -5803,8 +5679,9 @@ __mmplayer_video_stream_probe (GstPad *pad, GstPadProbeInfo *info, gpointer user } static int -__mmplayer_gst_create_video_filters(mm_player_t* player, GList** bucket, gboolean use_video_stream) +__mmplayer_gst_create_video_filters(mm_player_t* player, GList** bucket) { + MMDisplaySurfaceType surface_type = MM_DISPLAY_SURFACE_NULL; gchar* video_csc = "videoconvert"; // default colorspace converter GList* element_bucket = *bucket; @@ -5812,91 +5689,40 @@ __mmplayer_gst_create_video_filters(mm_player_t* player, GList** bucket, gboolea MMPLAYER_FENTER(); - if (!player->set_mode.media_packet_video_stream && use_video_stream) + mm_attrs_get_int_by_name (player->attrs, "display_surface_type", (int *)&surface_type); + + if (player->set_mode.video_zc) /* ST12 or SN12 , if player use omx, evasimagesink doesn't use videoconvert */ { - if (player->set_mode.video_zc && strlen(player->ini.videoconverter_element) > 0) + if ( (surface_type == MM_DISPLAY_SURFACE_EVAS) && ( !strcmp(player->ini.videosink_element_evas, "evasimagesink")) ) { video_csc = player->ini.videoconverter_element; } - - MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_CONV, video_csc, "video converter", TRUE, player); - LOGD("using video converter: %s", video_csc); - - if ( !player->set_mode.video_zc) + else { - gint width = 0; //width of video - gint height = 0; //height of video - GstCaps* video_caps = NULL; - GstStructure *structure = NULL; - - /* rotator, scaler and capsfilter */ - MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_FLIP, "videoflip", "video rotator", TRUE, player); - MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_SCALE, "videoscale", "video scaler", TRUE, player); - MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_CAPS, "capsfilter", "videocapsfilter", TRUE, player); - - /* get video stream caps parsed by demuxer */ - - mm_attrs_get_int_by_name(player->attrs, "display_width", &width); - - if(width) - structure = gst_structure_new("video/x-raw", "width", G_TYPE_INT, width, NULL); - - mm_attrs_get_int_by_name(player->attrs, "display_height", &height); - - if(structure && height) { - gst_structure_set (structure, "height", G_TYPE_INT, height, NULL); - - video_caps = gst_caps_new_full(structure, NULL); - g_object_set (GST_ELEMENT(player->pipeline->videobin[MMPLAYER_V_CAPS].gst), "caps", video_caps, NULL ); - MMPLAYER_LOG_GST_CAPS_TYPE(video_caps); - gst_caps_unref(video_caps); - } - else - LOGE("fail to set capsfilter %p, width %d, height %d", structure, width, height); - - if(structure) - gst_structure_free(structure); - + video_csc = ""; /* Videosinks don't use videoconvert except evasimagesink which use normal video formats */ } } - else + else /* sw codec, if player use libav, waylandsink need videoconvert to render shm wl-buffer which support RGB only */ { - MMDisplaySurfaceType surface_type = MM_DISPLAY_SURFACE_NULL; - mm_attrs_get_int_by_name (player->attrs, "display_surface_type", (int *)&surface_type); - - if (player->set_mode.video_zc) /* ST12 or SN12 , if player use omx, evasimagesink doesn't use videoconvert */ - { - if ( (surface_type == MM_DISPLAY_SURFACE_EVAS) && ( !strcmp(player->ini.videosink_element_evas, "evasimagesink")) ) - { - video_csc = player->ini.videoconverter_element; - } - else - { - video_csc = ""; /* Videosinks don't use videoconvert except evasimagesink which use normal video formats */ - } - } - else /* sw codec, if player use libav, waylandsink need videoconvert to render shm wl-buffer which support RGB only */ - { - if ((surface_type == MM_DISPLAY_SURFACE_OVERLAY) && (!strncmp(player->ini.videosink_element_overlay, "waylandsink", strlen(player->ini.videosink_element_overlay)))) - { - video_csc = "videoconvert"; - } - } - if (video_csc && (strcmp(video_csc, ""))) + if ((surface_type == MM_DISPLAY_SURFACE_OVERLAY) && (!strncmp(player->ini.videosink_element_overlay, "waylandsink", strlen(player->ini.videosink_element_overlay)))) { - MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_CONV, video_csc, "video converter", TRUE, player); - LOGD("using video converter: %s", video_csc); + video_csc = "videoconvert"; } + } + if (video_csc && (strcmp(video_csc, ""))) + { + MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_CONV, video_csc, "video converter", TRUE, player); + LOGD("using video converter: %s", video_csc); + } - /* set video rotator */ - if ( !player->set_mode.video_zc ) - MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_FLIP, "videoflip", "video rotator", TRUE, player); + /* set video rotator */ + if ( !player->set_mode.video_zc ) + MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_FLIP, "videoflip", "video rotator", TRUE, player); - /* videoscaler */ - #if !defined(__arm__) - MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_SCALE, "videoscale", "videoscaler", TRUE, player); - #endif - } + /* videoscaler */ + #if !defined(__arm__) + MMPLAYER_CREATE_ELEMENT(player->pipeline->videobin, MMPLAYER_V_SCALE, "videoscale", "videoscaler", TRUE, player); + #endif *bucket = element_bucket; MMPLAYER_FLEAVE(); @@ -5965,102 +5791,92 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps, MMDispl goto ERROR; } - if( player->use_video_stream ) // video stream callback, so send raw video data to application - { - LOGD("using memsink\n"); - - if ( __mmplayer_gst_create_video_filters(player, &element_bucket, TRUE) != MM_ERROR_NONE) + if (!player->set_mode.media_packet_video_stream) { + if (__mmplayer_gst_create_video_filters(player, &element_bucket) != MM_ERROR_NONE) goto ERROR; - - /* finally, create video sink. output will be BGRA8888. */ - MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK, "avsysmemsink", "videosink", TRUE, player); - - MMPLAYER_SIGNAL_CONNECT( player, - videobin[MMPLAYER_V_SINK].gst, - MM_PLAYER_SIGNAL_TYPE_VIDEOBIN, - "video-stream", - G_CALLBACK(__mmplayer_videostream_cb), - player ); } - else // render video data using sink plugin like xvimagesink - { - if ( __mmplayer_gst_create_video_filters(player, &element_bucket, FALSE) != MM_ERROR_NONE) - goto ERROR; - /* set video sink */ - switch (surface_type) - { - case MM_DISPLAY_SURFACE_OVERLAY: - if (strlen(player->ini.videosink_element_overlay) > 0) - videosink_element = player->ini.videosink_element_overlay; - else - goto ERROR; - break; - case MM_DISPLAY_SURFACE_EVAS: - if (strlen(player->ini.videosink_element_evas) > 0) - videosink_element = player->ini.videosink_element_evas; - else - goto ERROR; - break; - case MM_DISPLAY_SURFACE_NULL: - if (strlen(player->ini.videosink_element_fake) > 0) - videosink_element = player->ini.videosink_element_fake; - else - goto ERROR; - break; - case MM_DISPLAY_SURFACE_REMOTE: - if (strlen(player->ini.videosink_element_fake) > 0) - videosink_element = player->ini.videosink_element_fake; - else - goto ERROR; - break; - default: - LOGE("unidentified surface type"); + /* set video sink */ + switch (surface_type) + { + case MM_DISPLAY_SURFACE_OVERLAY: + if (strlen(player->ini.videosink_element_overlay) > 0) + videosink_element = player->ini.videosink_element_overlay; + else goto ERROR; - } + break; + case MM_DISPLAY_SURFACE_EVAS: + if (strlen(player->ini.videosink_element_evas) > 0) + videosink_element = player->ini.videosink_element_evas; + else + goto ERROR; + break; + case MM_DISPLAY_SURFACE_NULL: + if (strlen(player->ini.videosink_element_fake) > 0) + videosink_element = player->ini.videosink_element_fake; + else + goto ERROR; + break; + case MM_DISPLAY_SURFACE_REMOTE: + if (strlen(player->ini.videosink_element_fake) > 0) + videosink_element = player->ini.videosink_element_fake; + else + goto ERROR; + break; + default: + LOGE("unidentified surface type"); + goto ERROR; + } + LOGD("selected videosink name: %s", videosink_element); - MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK, videosink_element, videosink_element, TRUE, player); - LOGD("selected videosink name: %s", videosink_element); + MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK, videosink_element, videosink_element, TRUE, player); - /* additional setting for sink plug-in */ - switch (surface_type) { - case MM_DISPLAY_SURFACE_OVERLAY: + /* additional setting for sink plug-in */ + switch (surface_type) { + case MM_DISPLAY_SURFACE_OVERLAY: + { + bool use_tbm = player->set_mode.video_zc; + if (!use_tbm) { - bool use_tbm = player->set_mode.video_zc; - if (!use_tbm) - { - LOGD("selected videosink name: %s", videosink_element); + LOGD("selected videosink name: %s", videosink_element); - /* support shard memory with S/W codec on HawkP */ - if(strncmp(videosink_element, "waylandsink", strlen(videosink_element)) == 0) - { - g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, - "use-tbm", use_tbm, NULL); - } + /* support shard memory with S/W codec on HawkP */ + if(strncmp(videosink_element, "waylandsink", strlen(videosink_element)) == 0) + { + g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, + "use-tbm", use_tbm, NULL); } - else + } + else + { + if (attrs) { - if (attrs) - { - int gapless = 0; + int gapless = 0; - mm_attrs_get_int_by_name (attrs, "gapless_mode", &gapless); + mm_attrs_get_int_by_name (attrs, "gapless_mode", &gapless); - if (gapless > 0) { - LOGD("disable last-sample"); - g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "enable-last-sample", FALSE, NULL); - } + if (gapless > 0) { + LOGD("disable last-sample"); + g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "enable-last-sample", FALSE, NULL); } } - break; - } - case MM_DISPLAY_SURFACE_REMOTE: - { - break; } - default: - break; + break; + } + case MM_DISPLAY_SURFACE_REMOTE: + { + if (player->set_mode.media_packet_video_stream) { + GstPad* sinkpad = NULL; + sinkpad = gst_element_get_static_pad (player->pipeline->videobin[MMPLAYER_V_SINK].gst, "sink"); + g_object_set (player->pipeline->videobin[MMPLAYER_V_SINK].gst, "sync", TRUE, NULL); + + LOGE("add data probe at videosink"); + player->video_cb_probe_id = gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_BUFFER, __mmplayer_video_stream_probe, player, NULL); + } + break; } + default: + break; } if (_mmplayer_update_video_param(player, "update_all_param") != MM_ERROR_NONE) @@ -10426,10 +10242,14 @@ _mmplayer_set_videostream_cb(MMHandleType hplayer, mm_player_video_stream_callba MMPLAYER_RETURN_VAL_IF_FAIL ( player, MM_ERROR_PLAYER_NOT_INITIALIZED ); + if (callback && !player->bufmgr) + player->bufmgr = tbm_bufmgr_init(-1); + + player->set_mode.media_packet_video_stream = (callback)?TRUE:FALSE; player->video_stream_cb = callback; player->video_stream_cb_user_param = user_param; - player->use_video_stream = TRUE; - LOGD("Stream cb Handle value is %p : %p\n", player, player->video_stream_cb); + + LOGD("Stream cb Handle value is %p : %p, enable:%d\n", player, player->video_stream_cb, player->set_mode.media_packet_video_stream); MMPLAYER_FLEAVE(); @@ -12377,7 +12197,6 @@ __mmplayer_initialize_next_play(mm_player_t *player) player->msg_posted = FALSE; player->has_many_types = FALSE; player->no_more_pad = FALSE; - player->is_drm_file = FALSE; player->not_found_demuxer = 0; player->doing_seek = FALSE; player->max_audio_channels = 0; @@ -13164,15 +12983,12 @@ GstCaps* caps, GstElementFactory* factory, gpointer data) mm_attrs_get_int_by_name (player->attrs, "display_surface_type", &stype); /* don't make video because of not required */ - if (stype == MM_DISPLAY_SURFACE_NULL || stype == MM_DISPLAY_SURFACE_REMOTE) + if ((stype == MM_DISPLAY_SURFACE_NULL) && + (player->set_mode.media_packet_video_stream == FALSE)) { - if (player->set_mode.media_packet_video_stream == FALSE - && !player->video_stream_cb) - { - LOGD ("no video because it's not required. -> return expose"); - result = GST_AUTOPLUG_SELECT_EXPOSE; - goto DONE; - } + LOGD ("no video because it's not required. -> return expose"); + result = GST_AUTOPLUG_SELECT_EXPOSE; + goto DONE; } /* get w/h for omx state-tune */ @@ -13491,7 +13307,6 @@ __mmplayer_release_misc(mm_player_t* player) MMPLAYER_RETURN_IF_FAIL ( player ); - player->use_video_stream = FALSE; player->video_stream_cb = NULL; player->video_stream_cb_user_param = NULL; @@ -13528,7 +13343,6 @@ __mmplayer_release_misc(mm_player_t* player) player->pending_seek.pos = 0; player->msg_posted = FALSE; player->has_many_types = FALSE; - player->is_drm_file = FALSE; player->max_audio_channels = 0; player->video_share_api_delta = 0; player->video_share_clock_delta = 0; @@ -14519,28 +14333,23 @@ static gboolean __mmplayer_can_extract_pcm( mm_player_t* player ) { MMHandleType attrs = 0; - gboolean is_drm = FALSE; gboolean sound_extraction = FALSE; MMPLAYER_RETURN_VAL_IF_FAIL ( player, FALSE ); attrs = MMPLAYER_GET_ATTRS(player); - if ( !attrs ) + if (!attrs) { LOGE("fail to get attributes."); return FALSE; } - /* check file is drm or not */ - if (g_object_class_find_property(G_OBJECT_GET_CLASS(player->pipeline->mainbin[MMPLAYER_M_SRC].gst), "is-drm")) - g_object_get(G_OBJECT(player->pipeline->mainbin[MMPLAYER_M_SRC].gst), "is-drm", &is_drm, NULL); - /* get sound_extraction property */ mm_attrs_get_int_by_name(attrs, "pcm_extraction", &sound_extraction); - if ( ! sound_extraction || is_drm ) + if (!sound_extraction) { - LOGD("checking pcm extraction mode : %d, drm : %d", sound_extraction, is_drm); + LOGD("checking pcm extraction mode : %d ", sound_extraction); return FALSE; } @@ -16660,24 +16469,6 @@ _mmplayer_has_closed_caption(MMHandleType hplayer, bool* exist) return MM_ERROR_NONE; } -int -_mmplayer_enable_media_packet_video_stream(MMHandleType hplayer, bool enable) -{ - mm_player_t* player = (mm_player_t*) hplayer; - - MMPLAYER_FENTER(); - MMPLAYER_RETURN_VAL_IF_FAIL (player, MM_ERROR_PLAYER_NOT_INITIALIZED); - - if (enable && !player->bufmgr) - player->bufmgr = tbm_bufmgr_init(-1); - - player->set_mode.media_packet_video_stream = enable; - - MMPLAYER_FLEAVE(); - - return MM_ERROR_NONE; -} - void * _mm_player_media_packet_video_stream_internal_buffer_ref(void *buffer) { void * ret = NULL