remove multi-surface display feature
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 18 Sep 2012 12:08:06 +0000 (21:08 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 18 Sep 2012 12:08:06 +0000 (21:08 +0900)
packaging/libmm-player.spec
src/include/mm_player_priv.h
src/mm_player_priv.c

index 8d1cf2d..808dcab 100644 (file)
@@ -1,8 +1,8 @@
 
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.2.1
-Release:    2
+Version:    0.2.2
+Release:    1
 Group:      System/Libraries
 License:    TBD
 Source0:    %{name}-%{version}.tar.gz
index 3a29bfc..35ada0a 100755 (executable)
@@ -193,7 +193,6 @@ enum VideoElementID
        MMPLAYER_V_CAPS,
        MMPLAYER_V_TEE,
        MMPLAYER_V_SINK,
-       MMPLAYER_V_SINK_EXT,
        MMPLAYER_V_NUM
 };
 
@@ -485,10 +484,6 @@ typedef struct {
        /* video capture callback*/
        gulong video_capture_cb_probe_id;
 
-       /* video display */
-       GstPad* tee_src_pad[2];
-       gboolean use_multi_surface;
-
        /* sound info */
        MMPlayerSoundInfo       sound;
 
index b6951ec..30a7256 100755 (executable)
@@ -642,12 +642,12 @@ _mmplayer_update_content_attrs(mm_player_t* player) // @
                gint tmpNu, tmpDe;
                gint width, height;
 
-               if (player->use_multi_surface)
+               pad = gst_element_get_static_pad( player->pipeline->videobin[MMPLAYER_V_SINK].gst, "sink" );
+               if ( pad )
                {
-                       /* NOTE : if v_stream_caps were deprecated, it might be implemented by using "pad-added" signal callback */
-                       if (player->v_stream_caps)
+                       caps_v = gst_pad_get_negotiated_caps( pad );
+                       if (caps_v)
                        {
-                               caps_v = player->v_stream_caps;
                                p = gst_caps_get_structure (caps_v, 0);
                                gst_structure_get_int (p, "width", &width);
                                mm_attrs_set_int_by_name(attrs, "content_video_width", width);
@@ -659,6 +659,9 @@ _mmplayer_update_content_attrs(mm_player_t* player) // @
 
                                debug_log("width : %d     height : %d", width, height );
 
+                               gst_caps_unref( caps_v );
+                               caps_v = NULL;
+
                                if (tmpDe > 0)
                                {
                                        mm_attrs_set_int_by_name(attrs, "content_video_fps", tmpNu / tmpDe);
@@ -667,51 +670,15 @@ _mmplayer_update_content_attrs(mm_player_t* player) // @
                        }
                        else
                        {
-                               debug_warning("failed to get caps from v_stream_caps when using multi-surface");
+                               debug_warning("failed to get negitiated caps from videosink");
                        }
+
+                       gst_object_unref( pad );
+                       pad = NULL;
                }
                else
                {
-                       pad = gst_element_get_static_pad( player->pipeline->videobin[MMPLAYER_V_SINK].gst, "sink" );
-                       if ( pad )
-                       {
-                               caps_v = gst_pad_get_negotiated_caps( pad );
-                               if (caps_v)
-                               {
-                                       p = gst_caps_get_structure (caps_v, 0);
-                                       gst_structure_get_int (p, "width", &width);
-                                       mm_attrs_set_int_by_name(attrs, "content_video_width", width);
-
-                                       gst_structure_get_int (p, "height", &height);
-                                       mm_attrs_set_int_by_name(attrs, "content_video_height", height);
-
-                                       gst_structure_get_fraction (p, "framerate", &tmpNu, &tmpDe);
-
-                                       debug_log("width : %d     height : %d", width, height );
-
-                                       gst_caps_unref( caps_v );
-                                       caps_v = NULL;
-
-                                       if (tmpDe > 0)
-                                       {
-                                               mm_attrs_set_int_by_name(attrs, "content_video_fps", tmpNu / tmpDe);
-                                               debug_log("fps : %d", tmpNu / tmpDe);
-                                       }
-                               }
-                               else
-                               {
-                                       debug_warning("failed to get negitiated caps from videosink");
-                               }
-                               if (!player->use_multi_surface)
-                               {
-                                       gst_object_unref( pad );
-                                       pad = NULL;
-                               }
-                       }
-                       else
-                       {
-                               debug_warning("failed to get pad from videosink");
-                       }
+                       debug_warning("failed to get pad from videosink");
                }
        }
 
@@ -2455,7 +2422,6 @@ _mmplayer_update_video_param(mm_player_t* player) // @
        MMHandleType attrs = 0;
        gint videosink_idx_x = 0;
        gint videosink_idx_evas = 0;
-       gboolean is_first_v_sink_x = FALSE;
 
        debug_fenter();
 
@@ -2567,25 +2533,7 @@ _mmplayer_update_video_param(mm_player_t* player) // @
                return MM_ERROR_NONE;
        }
 
-       if (player->use_multi_surface)
-       {
-               is_first_v_sink_x = !strncmp(GST_ELEMENT_NAME(player->pipeline->videobin[MMPLAYER_V_SINK_EXT].gst),  "videosink_ext_evas", 18);
-               if (is_first_v_sink_x)
-               {
-                       videosink_idx_x = MMPLAYER_V_SINK;
-                       videosink_idx_evas = MMPLAYER_V_SINK_EXT;
-               }
-               else
-               {
-                       videosink_idx_x = MMPLAYER_V_SINK_EXT;
-                       videosink_idx_evas = MMPLAYER_V_SINK;
-               }
-               debug_log("use multi-surface : videosink_idx_x(%d), videosink_idx_evas(%d)", videosink_idx_x,videosink_idx_evas);
-       }
-       else
-       {
-               videosink_idx_x = videosink_idx_evas = MMPLAYER_V_SINK;
-       }
+       videosink_idx_x = videosink_idx_evas = MMPLAYER_V_SINK;
 
        /* configuring display */
        switch ( PLAYER_INI()->video_surface )
@@ -2605,59 +2553,17 @@ _mmplayer_update_video_param(mm_player_t* player) // @
 
                        gboolean visible = TRUE;
 
-                       /* common case if using multi-surface */
-                       if (player->use_multi_surface)
+                       /* common case if using x surface */
+                       mm_attrs_get_data_by_name(attrs, "display_overlay", &xid);
+                       if ( xid )
                        {
-                               void *evas_image_object = NULL;
-                               if (is_first_v_sink_x)
-                               {
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay", &xid);
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay_ext", &evas_image_object);
-                               }
-                               else
-                               {
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay", &evas_image_object);
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay_ext", &xid);
-                               }
-                               if ( xid )
-                               {
-                                       debug_log("use multi-surface : xid %d", *(int*)xid);
-                                       gst_x_overlay_set_xwindow_id( GST_X_OVERLAY( player->pipeline->videobin[videosink_idx_x].gst ), *(int*)xid );
-                               }
-                               else
-                               {
-                                       debug_error("no xwindow");
-                                       return MM_ERROR_PLAYER_INTERNAL;
-                               }
-                               if (evas_image_object)
-                               {
-                                       g_object_set(player->pipeline->videobin[videosink_idx_evas].gst,
-                                                       "evas-object", evas_image_object,
-                                                       "visible", FALSE,
-                                                       NULL);
-                               }
-                               else
-                               {
-                                       debug_error("no evas object");
-                                       return MM_ERROR_PLAYER_INTERNAL;
-                               }
-                               debug_log("use multi-surface : evas_image_object (%x)", evas_image_object);
-                               debug_log("use multi-surface : evas visible %d", FALSE);
+                               debug_log("set video param : xid %d", *(int*)xid);
+                               gst_x_overlay_set_xwindow_id( GST_X_OVERLAY( player->pipeline->videobin[MMPLAYER_V_SINK].gst ), *(int*)xid );
                        }
-                       /* common case if using x surface */
                        else
                        {
-                               mm_attrs_get_data_by_name(attrs, "display_overlay", &xid);
-                               if ( xid )
-                               {
-                                       debug_log("set video param : xid %d", *(int*)xid);
-                                       gst_x_overlay_set_xwindow_id( GST_X_OVERLAY( player->pipeline->videobin[MMPLAYER_V_SINK].gst ), *(int*)xid );
-                               }
-                               else
-                               {
-                                       /* FIXIT : is it error case? */
-                                       debug_warning("still we don't have xid on player attribute. create it's own surface.");
-                               }
+                               /* FIXIT : is it error case? */
+                               debug_warning("still we don't have xid on player attribute. create it's own surface.");
                        }
 
                        /* if xvimagesink */
@@ -2703,74 +2609,23 @@ _mmplayer_update_video_param(mm_player_t* player) // @
                        int scaling = 0;
                        gboolean visible = TRUE;
 
-                       /* common case if using multi-surface */
-                       if (player->use_multi_surface)
+                       /* common case if using evas surface */
+                       mm_attrs_get_data_by_name(attrs, "display_overlay", &object);
+                       mm_attrs_get_int_by_name(attrs, "display_visible", &visible);
+                       mm_attrs_get_int_by_name(attrs, "display_evas_do_scaling", &scaling);
+                       if (object)
                        {
-                               void *xid = NULL;
-                               mm_attrs_get_int_by_name(attrs, "display_visible", &visible);
-                               if (is_first_v_sink_x)
-                               {
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay", &xid);
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay_ext", &object);
-                               }
-                               else
-                               {
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay", &object);
-                                       mm_attrs_get_data_by_name(attrs, "display_overlay_ext", &xid);
-                               }
-                               if (object)
-                               {
-                                       g_object_set(player->pipeline->videobin[videosink_idx_evas].gst,
-                                                       "evas-object", object,
-                                                       "visible", visible,
-                                                       NULL);
-                                       debug_log("use multi-surface : evas-object %x", object);
-                                       debug_log("use multi-surface : evas visible %d", object);
-                               }
-                               else
-                               {
-                                       debug_error("no evas object");
-                                       return MM_ERROR_PLAYER_INTERNAL;
-                               }
-                               if (xid)
-                               {
-                                       gst_x_overlay_set_xwindow_id( GST_X_OVERLAY( player->pipeline->videobin[videosink_idx_x].gst ), *(int*)xid );
-                               }
-                               else
-                               {
-                                       debug_error("no xwindow");
-                                       return MM_ERROR_PLAYER_INTERNAL;
-                               }
-                               /* if xvimagesink */
-                               if (!strcmp(PLAYER_INI()->videosink_element_x,"xvimagesink"))
-                               {
-                                       g_object_set(player->pipeline->videobin[videosink_idx_x].gst,
-                                                       "visible", FALSE,
-                                                       NULL );
-                               }
-                               debug_log("use multi-surface : xid %d", *(int*)xid);
-                               debug_log("use multi-surface : x visible %d", FALSE);
+                               g_object_set(player->pipeline->videobin[videosink_idx_evas].gst,
+                                               "evas-object", object,
+                                               "visible", visible,
+                                               NULL);
+                               debug_log("set video param : evas-object %x", object);
+                               debug_log("set video param : visible %d", visible);
                        }
-                       /* common case if using evas surface */
                        else
                        {
-                               mm_attrs_get_data_by_name(attrs, "display_overlay", &object);
-                               mm_attrs_get_int_by_name(attrs, "display_visible", &visible);
-                               mm_attrs_get_int_by_name(attrs, "display_evas_do_scaling", &scaling);
-                               if (object)
-                               {
-                                       g_object_set(player->pipeline->videobin[videosink_idx_evas].gst,
-                                                       "evas-object", object,
-                                                       "visible", visible,
-                                                       NULL);
-                                       debug_log("set video param : evas-object %x", object);
-                                       debug_log("set video param : visible %d", visible);
-                               }
-                               else
-                               {
-                                       debug_error("no evas object");
-                                       return MM_ERROR_PLAYER_INTERNAL;
-                               }
+                               debug_error("no evas object");
+                               return MM_ERROR_PLAYER_INTERNAL;
                        }
 
                        /* if evasimagesink */
@@ -3336,7 +3191,6 @@ __mmplayer_ahs_appsrc_probe (GstPad *pad, GstBuffer *buffer, gpointer u_data)
   * - evas surface  (arm) : evaspixmapsink
   *                         fimcconvert ! evasimagesink
   * - evas surface  (x86) : videoconvertor ! evasimagesink
-  * - multi-surface (arm) : tee name=tee ! xvimagesink tee. ! evaspixmapsink
   */
 static int
 __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
@@ -3347,10 +3201,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
        MMPlayerGstElement* first_element = NULL;
        MMPlayerGstElement* videobin = NULL;
        gchar* vconv_factory = NULL;
-       char *err_name = NULL;
-       gboolean use_multi_surface = FALSE;
        char *videosink_element = NULL;
-       char *videosink_element_ext = NULL;
 
        debug_fenter();
 
@@ -3374,9 +3225,6 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
                goto ERROR;
        }
 
-       mm_player_get_attribute(player, &err_name, "display_surface_use_multi", &use_multi_surface, NULL);
-       player->use_multi_surface = use_multi_surface;
-
        if( player->use_video_stream ) // video stream callack, so send raw video data to application
        {
                GstStructure *str = NULL;
@@ -3504,7 +3352,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
                        if (player->is_nv12_tiled && PLAYER_INI()->use_video_hw_accel)
                                nv12t_hw_enabled = TRUE;
                
-                       if ( (nv12t_hw_enabled && (PLAYER_INI()->video_surface == MM_DISPLAY_SURFACE_EVAS) && !strcmp(PLAYER_INI()->videosink_element_evas, "evasimagesink")) || (nv12t_hw_enabled && use_multi_surface && !strcmp(PLAYER_INI()->videosink_element_evas, "evasimagesink") ) )
+                       if ( (nv12t_hw_enabled && (PLAYER_INI()->video_surface == MM_DISPLAY_SURFACE_EVAS) && !strcmp(PLAYER_INI()->videosink_element_evas, "evasimagesink")) )
                        {
                                vconv_factory = "fimcconvert";
                        }
@@ -3513,7 +3361,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
                                vconv_factory = NULL;
                        }
 
-                       if (vconv_factory && !use_multi_surface)
+                       if (vconv_factory)
                        {
                                MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_CONV, vconv_factory, "video converter", TRUE);
                                debug_log("using video converter: %s", vconv_factory);
@@ -3522,10 +3370,7 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
 
                /* videoscaler */ /* NOTE : ini parsing method seems to be more suitable rather than define method */
                #if !defined(__arm__)
-               if (!use_multi_surface) /* NOTE : at now, we did not consider using multi-surface in x86 case */
-               {
-                       MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SCALE, "videoscale", "videoscaler", TRUE);
-               }
+               MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SCALE, "videoscale", "videoscaler", TRUE);
                #endif
 
                /* set video sink */
@@ -3554,38 +3399,6 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
                                goto ERROR;
                }
 
-               if (use_multi_surface)
-               {
-                       if ( (strlen(PLAYER_INI()->videosink_element_x) > 0 ) && (strlen(PLAYER_INI()->videosink_element_evas) > 0 ) )
-                       {
-                               /* create elements for multi sink usage */
-                               MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_TEE, "tee", "tee", TRUE);
-                               debug_log("using tee");
-
-                               if (vconv_factory)
-                               {
-                                       MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_CONV, vconv_factory, "video converter", TRUE);
-                                       debug_log("using video converter: %s", vconv_factory);
-                               }
-
-                               if (PLAYER_INI()->video_surface == MM_DISPLAY_SURFACE_X)
-                               {
-                                       videosink_element_ext = PLAYER_INI()->videosink_element_evas;
-                                       MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK_EXT, videosink_element_ext, "videosink_ext_evas", TRUE);
-                               }
-                               else if (PLAYER_INI()->video_surface == MM_DISPLAY_SURFACE_EVAS)
-                               {
-                                       videosink_element_ext = PLAYER_INI()->videosink_element_x;
-                                       MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK_EXT, videosink_element_ext, "videosink_ext_x", TRUE);
-                               }
-                               else
-                               {
-                                       debug_error("not normal case..multi-surface mode is only available with X and EVAS surface");
-                                       goto ERROR;
-                               }
-                               debug_log("selected videosink_ext name: %s", videosink_element_ext);
-                       }
-               }
                MMPLAYER_CREATE_ELEMENT(videobin, MMPLAYER_V_SINK, videosink_element, "videosink", TRUE);
                debug_log("selected videosink name: %s", videosink_element);
        }
@@ -3596,19 +3409,8 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
        /* qos on */
        g_object_set (G_OBJECT (videobin[MMPLAYER_V_SINK].gst), "qos", TRUE, NULL);
 
-       if (use_multi_surface)
-       {
-               g_object_set (G_OBJECT (videobin[MMPLAYER_V_SINK_EXT].gst), "qos", TRUE, NULL);
-               g_object_set (G_OBJECT (videobin[MMPLAYER_V_SINK].gst), "async", FALSE, NULL);
-               g_object_set (G_OBJECT (videobin[MMPLAYER_V_SINK_EXT].gst), "async", FALSE, NULL);
-       }
-
        /* store it as it's sink element */
        __mmplayer_add_sink( player, videobin[MMPLAYER_V_SINK].gst );
-       if (use_multi_surface)
-       {
-               __mmplayer_add_sink( player, videobin[MMPLAYER_V_SINK_EXT].gst );
-       }
 
        /* adding created elements to bin */
        if( ! __mmplayer_gst_element_add_bucket_to_bin(GST_BIN(videobin[MMPLAYER_V_BIN].gst), element_bucket) )
@@ -3617,60 +3419,11 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps)
                goto ERROR;
        }
 
-       if (!use_multi_surface)
-       {
-               /* Linking elements in the bucket by added order */
-               if ( __mmplayer_gst_element_link_bucket(element_bucket) == -1 )
-               {
-                       debug_error("failed to link elements\n");
-                       goto ERROR;
-               }
-       }
-       else
+       /* Linking elements in the bucket by added order */
+       if ( __mmplayer_gst_element_link_bucket(element_bucket) == -1 )
        {
-               GstPad *sinkpad;
-               int i = 0;
-               for (i = 0 ; i < 2 ; i++)
-               {
-                       if (!vconv_factory)
-                       {
-                               sinkpad = gst_element_get_static_pad (videobin[MMPLAYER_V_SINK+i].gst, "sink");
-                               debug_log("do not need vconv");
-                       }
-                       else
-                       {
-                               if (PLAYER_INI()->video_surface == MM_DISPLAY_SURFACE_X)
-                               {
-                                       if (i == 0)
-                                       {
-                                               sinkpad = gst_element_get_static_pad (videobin[MMPLAYER_V_SINK].gst, "sink");
-                                       }
-                                       else
-                                       {
-                                               sinkpad = gst_element_get_static_pad (videobin[MMPLAYER_V_CONV].gst, "sink");
-                                               GST_ELEMENT_LINK(GST_ELEMENT(videobin[MMPLAYER_V_CONV].gst), GST_ELEMENT(videobin[MMPLAYER_V_SINK_EXT].gst));
-                                       }
-                               }
-                               else
-                               {
-                                       if (i == 0)
-                                       {
-                                               sinkpad = gst_element_get_static_pad (videobin[MMPLAYER_V_CONV].gst, "sink");
-                                               GST_ELEMENT_LINK(GST_ELEMENT(videobin[MMPLAYER_V_CONV].gst), GST_ELEMENT(videobin[MMPLAYER_V_SINK].gst));
-                                       }
-                                       else
-                                       {
-                                               sinkpad = gst_element_get_static_pad (videobin[MMPLAYER_V_SINK_EXT].gst, "sink");
-                                       }
-                               }
-                       }
-                       player->tee_src_pad[i] = gst_element_get_request_pad (videobin[MMPLAYER_V_TEE].gst, "src%d");
-                       if (gst_pad_link (player->tee_src_pad[i], sinkpad) != GST_PAD_LINK_OK) {
-                               debug_error("failed to link tee element with sink element(%d)",i);
-                               goto ERROR;
-                       }
-                       gst_object_unref (sinkpad);
-               }
+               debug_error("failed to link elements\n");
+               goto ERROR;
        }
 
        /* get first element's sinkpad for creating ghostpad */
@@ -4921,21 +4674,6 @@ __mmplayer_gst_destroy_pipeline(mm_player_t* player) // @
                ahs_appsrc_cb_probe_id = 0;
        }
 
-       /* free request pads for multi-surface */
-       if (player->use_multi_surface && player->pipeline && player->pipeline->videobin[MMPLAYER_V_TEE].gst)
-       {
-               for (i = 0 ; i < 2 ; i++)
-               {
-                       if (player->tee_src_pad[i])
-                       {
-                               gst_element_release_request_pad (player->pipeline->videobin[MMPLAYER_V_TEE].gst, player->tee_src_pad[i]);
-                               gst_object_unref(player->tee_src_pad[i]);
-                       }
-               }
-               player->use_multi_surface = FALSE;
-               debug_log("release request pads from TEE, and unref TEE's src pads");
-       }
-
        if ( player->sink_elements )
                g_list_free ( player->sink_elements );
        player->sink_elements = NULL;