From: Eunhae Choi Date: Mon, 19 Nov 2018 10:55:30 +0000 (+0900) Subject: [0.6.149] handle null surface type with remote type X-Git-Tag: submit/tizen/20181123.080458~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0cc36f09528e6c3e8fa1a8197f03694f452215c1;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git [0.6.149] handle null surface type with remote type - handle 'exporting video + null surface type' with remote surface type to create videobin and add 360 video plugin - remove unused player element Change-Id: Iacafdeb039e30c47cc44c90803686fed90ffe03f --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index ee0cf7a..f24e520 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.6.148 +Version: 0.6.149 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_player_priv.h b/src/include/mm_player_priv.h index aa68967..68de886 100644 --- a/src/include/mm_player_priv.h +++ b/src/include/mm_player_priv.h @@ -782,7 +782,6 @@ typedef struct { /* whether a video has closed caption or not */ gboolean has_closed_caption; - GstElement *video_fakesink; /* audio stream caps parsed by demuxer or set by external demuxer */ GstCaps *a_stream_caps; diff --git a/src/mm_player_capture.c b/src/mm_player_capture.c old mode 100755 new mode 100644 index 37cdd0f..3f742a5 --- a/src/mm_player_capture.c +++ b/src/mm_player_capture.c @@ -134,18 +134,11 @@ _mmplayer_do_video_capture(MMHandleType hplayer) /* check if video pipeline is linked or not */ if (!player->pipeline->videobin) { - if (surface_type == MM_DISPLAY_SURFACE_REMOTE && player->video_fakesink) { - LOGD("it is evas surface type."); - } else { - LOGW("not ready to capture"); - return MM_ERROR_PLAYER_INVALID_STATE; - } + LOGW("not ready to capture"); + return MM_ERROR_PLAYER_INVALID_STATE; } - if (player->pipeline->videobin) - pad = gst_element_get_static_pad(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "sink"); - else // evas surface - pad = gst_element_get_static_pad(player->video_fakesink, "sink"); + pad = gst_element_get_static_pad(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "sink"); if (player->state != MM_PLAYER_STATE_PLAYING) { if (player->state == MM_PLAYER_STATE_PAUSED) { @@ -153,11 +146,7 @@ _mmplayer_do_video_capture(MMHandleType hplayer) GstSample *sample = NULL; gst_element_get_state(player->pipeline->mainbin[MMPLAYER_M_PIPE].gst, NULL, NULL, 5 * GST_SECOND); //5 seconds - - if (player->pipeline->videobin) - g_object_get(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "last-sample", &sample, NULL); - else // evas surface - g_object_get(player->video_fakesink, "last-sample", &sample, NULL); + g_object_get(player->pipeline->videobin[MMPLAYER_V_SINK].gst, "last-sample", &sample, NULL); if (sample) { GstBuffer *buf = NULL; diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c index c44fd63..f000701 100644 --- a/src/mm_player_gst.c +++ b/src/mm_player_gst.c @@ -2604,7 +2604,7 @@ __mmplayer_gst_rtp_dynamic_pad(GstElement *element, GstPad *pad, gpointer data) gint stype = 0; mm_attrs_get_int_by_name(player->attrs, "display_surface_type", &stype); - if ((stype == MM_DISPLAY_SURFACE_NULL) && (player->set_mode.media_packet_video_stream == FALSE)) { + if ((stype == MM_DISPLAY_SURFACE_NULL) && (!player->set_mode.media_packet_video_stream)) { if (player->v_stream_caps) { gst_caps_unref(player->v_stream_caps); player->v_stream_caps = NULL; diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 10e45da..499b40a 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -1067,34 +1067,12 @@ __mmplayer_gst_make_fakesink(mm_player_t *player, GstPad *pad, const gchar *name } if (strstr(name, "video")) { - player->video_fakesink = fakesink; - if (player->v_stream_caps) { gst_caps_unref(player->v_stream_caps); player->v_stream_caps = NULL; } - if (player->ini.set_dump_element_flag) __mmplayer_add_dump_buffer_probe(player, fakesink); - - - if (player->set_mode.media_packet_video_stream) { /* export video decoded frame */ - g_object_set(G_OBJECT(fakesink), "signal-handoffs", TRUE, "max-lateness", FAKE_SINK_MAX_LATENESS, NULL); - - __mmplayer_add_signal_connection(player, - G_OBJECT(fakesink), - MM_PLAYER_SIGNAL_TYPE_VIDEOBIN, - "handoff", - G_CALLBACK(__mmplayer_video_stream_decoded_render_cb), - (gpointer)player); - - __mmplayer_add_signal_connection(player, - G_OBJECT(fakesink), - MM_PLAYER_SIGNAL_TYPE_VIDEOBIN, - "preroll-handoff", - G_CALLBACK(__mmplayer_video_stream_decoded_preroll_cb), - (gpointer)player); - } } g_object_set(G_OBJECT(fakesink), "sync", TRUE, NULL); @@ -1201,7 +1179,9 @@ __mmplayer_gst_decode_pad_added(GstElement *elem, GstPad *pad, gpointer data) goto DONE; } - if (stype == MM_DISPLAY_SURFACE_NULL) { + /* in case of exporting video frame, it requires the 360 video filter. + * it will be handled in _no_more_pads(). */ + if ((stype == MM_DISPLAY_SURFACE_NULL) && (!player->set_mode.media_packet_video_stream)){ __mmplayer_gst_make_fakesink(player, pad, name); goto DONE; } @@ -3338,12 +3318,10 @@ __mmplayer_get_videosink_factory_name(mm_player_t *player, MMDisplaySurfaceType factory_name = player->ini.videosink_element_overlay; break; case MM_DISPLAY_SURFACE_REMOTE: + case MM_DISPLAY_SURFACE_NULL: if (strlen(player->ini.videosink_element_fake) > 0) factory_name = player->ini.videosink_element_fake; break; - case MM_DISPLAY_SURFACE_NULL: - LOGE("null surface type have to be handled in _decode_pad_added()"); - break; default: LOGE("unidentified surface type"); break; @@ -3359,6 +3337,7 @@ __mmplayer_gst_set_videosink_property(mm_player_t *player, MMDisplaySurfaceType gchar *factory_name = NULL; MMPlayerGstElement *videobin = NULL; MMHandleType attrs; + int gapless = 0; MMPLAYER_FENTER(); MMPLAYER_RETURN_VAL_IF_FAIL(player && player->pipeline && player->pipeline->videobin, MM_ERROR_PLAYER_NOT_INITIALIZED); @@ -3372,52 +3351,46 @@ __mmplayer_gst_set_videosink_property(mm_player_t *player, MMDisplaySurfaceType return MM_ERROR_PLAYER_INTERNAL; } - if (surface_type == MM_DISPLAY_SURFACE_OVERLAY || surface_type == MM_DISPLAY_SURFACE_REMOTE) { - int gapless = 0; - - if (surface_type == MM_DISPLAY_SURFACE_OVERLAY) { - bool use_tbm = (player->set_mode.video_zc || (player->is_360_feature_enabled && player->is_content_spherical)); - LOGD("OVERLAY: selected videosink is %s", factory_name); - - if (!use_tbm) { - /* support shard memory with S/W codec on HawkP */ - if (strncmp(factory_name, "tizenwlsink", strlen(factory_name)) == 0) { - g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, - "use-tbm", use_tbm, NULL); - } + LOGD("surface type %d, videosink factory name is %s", surface_type, factory_name); + if (surface_type == MM_DISPLAY_SURFACE_OVERLAY) { + bool use_tbm = (player->set_mode.video_zc || (player->is_360_feature_enabled && player->is_content_spherical)); + if (!use_tbm) { + /* support shard memory with S/W codec on HawkP */ + if (strncmp(factory_name, "tizenwlsink", strlen(factory_name)) == 0) { + g_object_set(player->pipeline->videobin[MMPLAYER_V_SINK].gst, + "use-tbm", use_tbm, NULL); } - } else { - LOGE("REMOTE : add data probe at videosink"); - g_object_set(G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), - "sync", TRUE, "max-lateness", FAKE_SINK_MAX_LATENESS, NULL); } + } else { + g_object_set(G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), + "sync", TRUE, "max-lateness", FAKE_SINK_MAX_LATENESS, NULL); + } - 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); - } + 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 (player->set_mode.media_packet_video_stream) { - int enable = 0; - mm_attrs_get_int_by_name(player->attrs, "enable_video_decoded_cb", &enable); - if (enable || (surface_type == MM_DISPLAY_SURFACE_REMOTE)) - g_object_set(G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), "signal-handoffs", TRUE, NULL); + if (player->set_mode.media_packet_video_stream) { + int enable = 0; + mm_attrs_get_int_by_name(player->attrs, "enable_video_decoded_cb", &enable); + if (enable || (surface_type == MM_DISPLAY_SURFACE_REMOTE) || (surface_type == MM_DISPLAY_SURFACE_NULL)) + g_object_set(G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), "signal-handoffs", TRUE, NULL); - __mmplayer_add_signal_connection(player, - G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), - MM_PLAYER_SIGNAL_TYPE_VIDEOBIN, - "handoff", - G_CALLBACK(__mmplayer_video_stream_decoded_render_cb), - (gpointer)player); + __mmplayer_add_signal_connection(player, + G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), + MM_PLAYER_SIGNAL_TYPE_VIDEOBIN, + "handoff", + G_CALLBACK(__mmplayer_video_stream_decoded_render_cb), + (gpointer)player); - __mmplayer_add_signal_connection(player, - G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), - MM_PLAYER_SIGNAL_TYPE_VIDEOBIN, - "preroll-handoff", - G_CALLBACK(__mmplayer_video_stream_decoded_preroll_cb), - (gpointer)player); - } + __mmplayer_add_signal_connection(player, + G_OBJECT(player->pipeline->videobin[MMPLAYER_V_SINK].gst), + MM_PLAYER_SIGNAL_TYPE_VIDEOBIN, + "preroll-handoff", + G_CALLBACK(__mmplayer_video_stream_decoded_preroll_cb), + (gpointer)player); } if (_mmplayer_update_video_param(player, "update_all_param") != MM_ERROR_NONE) @@ -5325,7 +5298,7 @@ _mmplayer_set_videostream_cb(MMHandleType hplayer, mm_player_video_stream_callba if (callback && !player->bufmgr) player->bufmgr = tbm_bufmgr_init(-1); - player->set_mode.media_packet_video_stream = (callback) ? TRUE : FALSE; + player->set_mode.media_packet_video_stream = (callback) ? true : false; player->video_stream_cb = callback; player->video_stream_cb_user_param = user_param; @@ -7230,8 +7203,8 @@ GstCaps* caps, GstElementFactory* factory, gpointer data) /* don't make video because of not required */ if ((stype == MM_DISPLAY_SURFACE_NULL) && - (player->set_mode.media_packet_video_stream == FALSE)) { - LOGD("no video because it's not required. -> return expose"); + (!player->set_mode.media_packet_video_stream)) { + LOGD("no need video decoding, expose pad"); result = GST_AUTOPLUG_SELECT_EXPOSE; goto DONE; } @@ -7511,7 +7484,7 @@ __mmplayer_release_misc(mm_player_t* player) player->adjust_subtitle_pos = 0; player->last_multiwin_status = FALSE; player->has_closed_caption = FALSE; - player->set_mode.media_packet_video_stream = FALSE; + player->set_mode.media_packet_video_stream = false; player->profile.uri_type = MM_PLAYER_URI_TYPE_NONE; memset(&player->set_mode, 0, sizeof(MMPlayerSetMode)); /* recover mode */