merge with master accepted/tizen/20130607.213312 submit/tizen/20130607.220928
authorJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:19:37 +0000 (01:19 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:19:37 +0000 (01:19 +0900)
ChangeLog
NEWS
packaging/emotion.spec
src/modules/gstreamer/emotion_gstreamer.c
src/modules/gstreamer/emotion_sink.c

index af65492..b80dc8c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 2012-08-30  Carsten Haitzler (The Rasterman)
 
         1.7.0 release
-
-2012-09-06  Sohyun Kim
-
-       * Add capsfilter to limit format and size for fimc on device.
-
-2012-10-11  Sohyun Kim
-
-       * Fix to call correct render function based on the format.
diff --git a/NEWS b/NEWS
index 7202b33..cedcaf4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,6 @@ Additions:
        - Sync rendering with Ecore_Animator.
        - Track pending object for proper shutdown.
        - Start handling embedded hardware customization.
-       - Add fimcconvert and capsfilter element for device
 
 Fixes:
        - build out of tree.
@@ -18,7 +17,6 @@ Fixes:
        - fix priority set/get for gstreamer.
        - reset VLC pipeline on EOS.
        - fix race condition on shutdown when still saving a file position.
-       - fix to call correct render function.
 
 Improvements:
 
index 30b06c7..95bc694 100644 (file)
@@ -1,6 +1,6 @@
 Name:             emotion
 Summary:          Media Library
-Version:          1.7.1+svn.76438+build01r01
+Version:          1.7.1+svn.76438slp2+build01
 Release:          1
 Group:            System Environment/Libraries
 License:          BSD
index 8ec71fb..df29de8 100644 (file)
@@ -1662,16 +1662,6 @@ _video_size_get(GstElement *elem, int *width, int *height)
 }
 
 static void
-_main_frame_resize(void *data)
-{
-   Emotion_Gstreamer_Video *ev = data;
-   double ratio;
-
-   ratio = (double)ev->src_width / (double)ev->src_height;
-   _emotion_frame_resize(ev->obj, ev->src_width, ev->src_height, ratio);
-}
-
-static void
 _no_more_pads(GstElement *decodebin, gpointer data)
 {
    GstIterator *itr = NULL;
@@ -1683,7 +1673,11 @@ _no_more_pads(GstElement *decodebin, gpointer data)
      {
         if(_video_size_get(GST_ELEMENT(elem), &ev->src_width, &ev->src_height))
           {
-             ecore_main_loop_thread_safe_call_async(_main_frame_resize, ev);
+             double ratio;
+
+             ratio = (double)ev->src_width / (double)ev->src_height;
+             _emotion_frame_resize(ev->obj, ev->src_width, ev->src_height, ratio);
+
              gst_object_unref(elem);
              break;
           }
index 17a1bc5..b9e2e74 100644 (file)
@@ -881,8 +881,8 @@ _video_resize(void *data, Evas_Object *obj __UNUSED__, const Evas_Video_Surface
    Emotion_Gstreamer_Video *ev = data;
 
    ecore_x_window_resize(ev->win, w, h);
-   fprintf(stderr, "resize: %i, %i\n", w, h);
 #endif
+   fprintf(stderr, "resize: %i, %i\n", w, h);
 }
 
 static void
@@ -962,19 +962,13 @@ _video_update_pixels(void *data, Evas_Object *obj __UNUSED__, const Evas_Video_S
 {
    Emotion_Gstreamer_Video *ev = data;
    Emotion_Gstreamer_Buffer *send;
-   EvasVideoSinkPrivate *priv = NULL;
 
    if (!ev->send) return ;
 
    send = ev->send;
-   priv = send->sink;
    send->force = EINA_TRUE;
    ev->send = NULL;
-
-   if (priv->samsung)
-      evas_video_sink_samsung_main_render(send);
-   else
-      evas_video_sink_main_render(send);
+   evas_video_sink_main_render(send);
 }
 
 static void
@@ -985,13 +979,6 @@ _image_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info
    int image_area, src_area;
    double ratio;
 
-   GstElementFactory *cfactory = NULL;
-   GstElement *convert = NULL, *filter = NULL, *queue = NULL;
-   GstPad *pad = NULL, *teepad = NULL;
-   GstCaps *caps = NULL;
-   Eina_List *l, *engines;
-   const char *ename, *engine = NULL;
-
    evas_object_geometry_get(obj, NULL, NULL, &width, &height);
    image_area = width * height;
    src_area = ev->src_width * ev->src_height;
@@ -999,112 +986,50 @@ _image_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info
 
    // when an image is much smaller than original video size,
    // add fimcconvert element to the pipeline
-   if (ratio < 0.8 && ev->stream && !ev->convert)
+   if (ratio < 0.8 && !ev->priority && !ev->convert)
      {
-        cfactory = gst_element_factory_find("fimcconvert");
-        if (!cfactory) return;
-
-        convert = gst_element_factory_create(cfactory, NULL);
-        if (!convert) return;
-
-        // add capsfilter to limit size and formats based on the backend
-        filter = gst_element_factory_make("capsfilter", "fimccapsfilter");
-        if (!filter)
-          {
-             gst_object_unref(convert);
-             return;
-          }
-
-        engines = evas_render_method_list();
-        EINA_LIST_FOREACH(engines, l, ename)
-          {
-             if (evas_render_method_lookup(ename) ==
-                 evas_output_method_get(evas_object_evas_get(obj)))
-               {
-                  engine = ename;
-                  break;
-               }
-          }
+        GstElementFactory *cfactory = NULL;
 
-        if (strstr(engine, "software") != NULL)
-          {
-             caps = gst_caps_new_simple("video/x-raw-rgb",
-                                        "width", G_TYPE_INT, width,
-                                        "height", G_TYPE_INT, height,
-                                        NULL);
-          }
-        else if (strstr(engine, "gl") != NULL)
+        cfactory = gst_element_factory_find("fimcconvert");
+        if (cfactory)
           {
-             caps = gst_caps_new_simple("video/x-raw-yuv",
-                                        "width", G_TYPE_INT, width,
-                                        "height", G_TYPE_INT, height,
-                                        NULL);
-          }
-        g_object_set(G_OBJECT(filter), "caps", caps, NULL);
-        gst_caps_unref(caps);
-
-        // add new elements to the pipeline
-        queue = gst_bin_get_by_name(GST_BIN(ev->sink), "equeue");
-        gst_element_unlink(ev->tee, queue);
-        gst_element_release_request_pad(ev->tee, ev->eteepad);
-        gst_object_unref(ev->eteepad);
-
-        gst_bin_add_many(GST_BIN(ev->sink), convert, filter, NULL);
-        gst_element_link_many(ev->tee, convert, filter, queue, NULL);
-
-        pad = gst_element_get_pad(convert, "sink");
-        teepad = gst_element_get_request_pad(ev->tee, "src%d");
-        gst_pad_link(teepad, pad);
-        gst_object_unref(pad);
+             GstElement *convert = NULL;
 
-        gst_element_sync_state_with_parent(convert);
-        gst_element_sync_state_with_parent(filter);
-
-        ev->eteepad = teepad;
-        ev->convert = convert;
-        evas_render_method_list_free(engines);
-
-        INF("add fimcconvert element. video size: %dx%d. emotion object size: %dx%d",
-            ev->src_width, ev->src_height, width, height);
-     }
-   // set size again to the capsfilter when the image is resized
-   else if (ev->convert)
-     {
-        filter = gst_bin_get_by_name(GST_BIN(ev->sink), "fimccapsfilter");
-
-        engines = evas_render_method_list();
-        EINA_LIST_FOREACH(engines, l, ename)
-          {
-             if (evas_render_method_lookup(ename) ==
-                 evas_output_method_get(evas_object_evas_get(obj)))
+             convert = gst_element_factory_create(cfactory, NULL);
+             if (convert)
                {
-                  engine = ename;
-                  break;
+                  GstElement *queue = NULL;
+                  GstPad *pad, *teepad;
+
+                  queue = gst_bin_get_by_name(GST_BIN(ev->sink), "equeue");
+                  gst_element_unlink(ev->tee, queue);
+                  gst_element_release_request_pad(ev->tee, ev->eteepad);
+                  gst_object_unref(ev->eteepad);
+
+                  gst_bin_add(GST_BIN(ev->sink), convert);
+                  gst_element_link_many(ev->tee, convert, queue, NULL);
+                  pad = gst_element_get_pad(convert, "sink");
+                  teepad = gst_element_get_request_pad(ev->tee, "src%d");
+                  gst_pad_link(teepad, pad);
+                  gst_object_unref(pad);
+
+                  g_object_set(G_OBJECT(convert), "src-width", width, NULL);
+                  g_object_set(G_OBJECT(convert), "src-height", height, NULL);
+                  g_object_set(G_OBJECT(convert), "qos", TRUE, NULL);
+                  gst_element_sync_state_with_parent(convert);
+
+                  ev->eteepad = teepad;
+                  ev->convert = convert;
                }
           }
-
-        if (strstr(engine, "software") != NULL)
-          {
-             caps = gst_caps_new_simple("video/x-raw-rgb",
-                                        "width", G_TYPE_INT, width,
-                                        "height", G_TYPE_INT, height,
-                                        NULL);
-          }
-        else if (strstr(engine, "gl") != NULL)
-          {
-             caps = gst_caps_new_simple("video/x-raw-yuv",
-                                        "width", G_TYPE_INT, width,
-                                        "height", G_TYPE_INT, height,
-                                        NULL);
-          }
-
-        g_object_set(G_OBJECT(filter), "caps", caps, NULL);
-        gst_caps_unref(caps);
-        evas_render_method_list_free(engines);
-
-        INF("set capsfilter size again:. video size: %dx%d. emotion object size: %dx%d",
-            ev->src_width, ev->src_height, width, height);
      }
+   // TODO: when an image is resized(e.g rotation), set size again to fimcconvert
+   // TODO: fimcconvert has an issue about resetting 
+   //else if (ev->convert)
+   //  {
+   //     g_object_set(G_OBJECT(ev->convert), "src-width", w, NULL);
+   //     g_object_set(G_OBJECT(ev->convert), "src-height", h, NULL);
+   //  }
 }
 
 GstElement *