[0.6.149] handle null surface type with remote type 37/193337/2
authorEunhae Choi <eunhae1.choi@samsung.com>
Mon, 19 Nov 2018 10:55:30 +0000 (19:55 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Mon, 19 Nov 2018 11:06:34 +0000 (20:06 +0900)
- 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

packaging/libmm-player.spec
src/include/mm_player_priv.h
src/mm_player_capture.c [changed mode: 0755->0644]
src/mm_player_gst.c
src/mm_player_priv.c

index ee0cf7a..f24e520 100644 (file)
@@ -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
index aa68967..68de886 100644 (file)
@@ -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;
old mode 100755 (executable)
new mode 100644 (file)
index 37cdd0f..3f742a5
@@ -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;
index c44fd63..f000701 100644 (file)
@@ -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;
index 10e45da..499b40a 100644 (file)
@@ -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 */