emotion: remove (broken) X11 integration from the GStreamer 1.x backend.
authorSebastian Dröge <sebastian@centricular.com>
Fri, 27 Dec 2013 00:56:11 +0000 (09:56 +0900)
committerCedric BAIL <cedric.bail@samsung.com>
Fri, 27 Dec 2013 00:56:20 +0000 (09:56 +0900)
This code was disabled and did not work properly. If this should be
re-added it will have to be rewritten anyway and currently it only
clutters the existing code.

Reviewers: cedric

CC: cedric
Differential Revision: https://phab.enlightenment.org/D414

Signed-off-by: Cedric BAIL <cedric.bail@samsung.com>
src/Makefile_Emotion.am
src/modules/emotion/gstreamer1/emotion_fakeeos.c [deleted file]
src/modules/emotion/gstreamer1/emotion_gstreamer.c
src/modules/emotion/gstreamer1/emotion_gstreamer.h
src/modules/emotion/gstreamer1/emotion_sink.c

index 4796018..a95714a 100644 (file)
@@ -91,7 +91,6 @@ modules/emotion/gstreamer1/emotion_gstreamer.h \
 modules/emotion/gstreamer1/emotion_gstreamer.c \
 modules/emotion/gstreamer1/emotion_alloc.c \
 modules/emotion/gstreamer1/emotion_convert.c \
-modules/emotion/gstreamer1/emotion_fakeeos.c \
 modules/emotion/gstreamer1/emotion_sink.c
 
 if EMOTION_STATIC_BUILD_GSTREAMER1
@@ -110,11 +109,6 @@ modules_emotion_gstreamer1_module_la_LIBADD = \
 modules_emotion_gstreamer1_module_la_DEPENDENCIES = @USE_EMOTION_INTERNAL_LIBS@
 modules_emotion_gstreamer1_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@
 modules_emotion_gstreamer1_module_la_LIBTOOLFLAGS = --tag=disable-static
-if HAVE_ECORE_X
-modules_emotion_gstreamer1_module_la_CPPFLAGS += @ECORE_X_CFLAGS@ @ECORE_EVAS_CFLAGS@
-modules_emotion_gstreamer1_module_la_LIBADD += @USE_ECORE_X_LIBS@ @USE_ECORE_EVAS_LIBS@
-modules_emotion_gstreamer1_module_la_DEPENDENCIES += @USE_ECORE_X_INTERNAL_LIBS@ @USE_ECORE_EVAS_INTERNAL_LIBS@
-endif
 endif
 endif
 
diff --git a/src/modules/emotion/gstreamer1/emotion_fakeeos.c b/src/modules/emotion/gstreamer1/emotion_fakeeos.c
deleted file mode 100644 (file)
index 7e71e72..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "emotion_gstreamer.h"
-
-typedef struct _FakeEOSBin
-{
-   GstBin parent;
-} FakeEOSBin;
-
-typedef struct _FakeEOSBinClass
-{
-   GstBinClass parent;
-} FakeEOSBinClass;
-
-G_DEFINE_TYPE (FakeEOSBin, fakeeos_bin, GST_TYPE_BIN);
-
-static void
-fakeeos_bin_handle_message(GstBin * bin, GstMessage * message)
-{
-   /* FakeEOSBin *fakeeos = (FakeEOSBin *)(bin); */
-
-   switch (GST_MESSAGE_TYPE(message)) {
-    case GST_MESSAGE_EOS:
-       /* what to do here ? just returning at the moment */
-       return;
-    default:
-       break;
-   }
-
-   GST_BIN_CLASS(fakeeos_bin_parent_class)->handle_message(bin, message);
-}
-
-static void
-fakeeos_bin_class_init(FakeEOSBinClass * klass)
-{
-   GstBinClass *gstbin_class = GST_BIN_CLASS(klass);
-
-   gstbin_class->handle_message =
-     GST_DEBUG_FUNCPTR (fakeeos_bin_handle_message);
-}
-
-static void
-fakeeos_bin_init(FakeEOSBin *src EINA_UNUSED)
-{
-}
index c9ed86c..39f821b 100644 (file)
@@ -4,12 +4,9 @@
 
 #include "emotion_gstreamer.h"
 
-Eina_Bool window_manager_video = EINA_FALSE;
 int _emotion_gstreamer_log_domain = -1;
 Eina_Bool debug_fps = EINA_FALSE;
-Eina_Bool _ecore_x_available = EINA_FALSE;
 
-static Ecore_Idler *restart_idler;
 static int _emotion_init_count = 0;
 
 /* Callbacks to get the eos */
@@ -20,13 +17,8 @@ static GstBusSyncReply _eos_sync_fct(GstBus *bus,
                                     GstMessage *message,
                                     gpointer data);
 
-static Eina_Bool _em_restart_stream(void *data);
-
 /* Module interface */
 
-
-static int priority_overide = 0;
-
 static Emotion_Video_Stream *
 emotion_video_stream_new(Emotion_Gstreamer_Video *ev)
 {
@@ -137,27 +129,8 @@ em_cleanup(Emotion_Gstreamer_Video *ev)
        ev->pipeline = NULL;
        ev->sink = NULL;
 
-       if (ev->eteepad) gst_object_unref(ev->eteepad);
-       ev->eteepad = NULL;
-       if (ev->xvteepad) gst_object_unref(ev->xvteepad);
-       ev->xvteepad = NULL;
-       if (ev->xvpad) gst_object_unref(ev->xvpad);
-       ev->xvpad = NULL;
-
        ev->src_width = 0;
        ev->src_height = 0;
-
-#ifdef HAVE_ECORE_X
-       INF("destroying window: %i", ev->win);
-       if (ev->win) ecore_x_window_free(ev->win);
-       ev->win = 0;
-#endif
-     }
-
-   if (restart_idler)
-     {
-        ecore_idler_del(restart_idler);
-        restart_idler = NULL;
      }
 
    EINA_LIST_FREE(ev->audio_streams, astream)
@@ -1065,106 +1038,6 @@ em_meta_get(void *video, int meta)
    return str;
 }
 
-static void
-em_priority_set(void *video, Eina_Bool pri)
-{
-   Emotion_Gstreamer_Video *ev;
-
-   ev = video;
-   if (priority_overide > 3) return; /* If we failed to much to create that pipeline, let's don't wast our time anymore */
-
-   if (ev->priority != pri && ev->pipeline)
-     {
-        if (ev->threads)
-          {
-             Ecore_Thread *t;
-
-             EINA_LIST_FREE(ev->threads, t)
-                ecore_thread_cancel(t);
-          }
-        em_cleanup(ev);
-        restart_idler = ecore_idler_add(_em_restart_stream, ev);
-     }
-   ev->priority = pri;
-}
-
-static Eina_Bool
-em_priority_get(void *video)
-{
-   Emotion_Gstreamer_Video *ev;
-
-   ev = video;
-   return !ev->stream;
-}
-
-#ifdef HAVE_ECORE_X
-static Eina_Bool
-_ecore_event_x_destroy(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
-{
-   Ecore_X_Event_Window_Destroy *ev = event;
-
-   INF("killed window: %x (%x).", ev->win, ev->event_win);
-
-   return EINA_TRUE;
-}
-
-static void
-gstreamer_ecore_x_check(void)
-{
-   Ecore_X_Window *roots;
-   int num;
-
-   ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DESTROY, _ecore_event_x_destroy, NULL);
-
-   /* Check if the window manager is able to handle our special Xv window. */
-   roots = ecore_x_window_root_list(&num);
-   if (roots && num > 0)
-     {
-        Ecore_X_Window  win, twin;
-        int nwins;
-
-        nwins = ecore_x_window_prop_window_get(roots[0],
-                                               ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
-                                               &win, 1);
-        if (nwins > 0)
-          {
-             nwins = ecore_x_window_prop_window_get(win,
-                                                    ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
-                                                    &twin, 1);
-             if (nwins > 0 && twin == win)
-               {
-                  Ecore_X_Atom *supported;
-                  int supported_num;
-                  int i;
-
-                  if (ecore_x_netwm_supported_get(roots[0], &supported, &supported_num))
-                    {
-                       Eina_Bool parent = EINA_FALSE;
-                       Eina_Bool video_position = EINA_FALSE;
-
-                       for (i = 0; i < supported_num; ++i)
-                         {
-                            if (supported[i] == ECORE_X_ATOM_E_VIDEO_PARENT)
-                              parent = EINA_TRUE;
-                            else if (supported[i] == ECORE_X_ATOM_E_VIDEO_POSITION)
-                              video_position = EINA_TRUE;
-                            if (parent && video_position)
-                              break;
-                         }
-
-                       if (parent && video_position)
-                         {
-                            window_manager_video = EINA_TRUE;
-                         }
-                    }
-                  free(supported);
-               }
-          }
-     }
-   free(roots);
-}
-#endif
-
 static void *
 em_add(const Emotion_Engine *api,
        Evas_Object *obj,
@@ -1253,8 +1126,8 @@ static const Emotion_Engine em_engine =
    em_speed_get, /* speed_get */
    em_eject, /* eject */
    em_meta_get, /* meta_get */
-   em_priority_set, /* priority_set */
-   em_priority_get /* priority_get */
+   NULL, /* priority_set */
+   NULL /* priority_get */
 };
 
 Eina_Bool
@@ -1286,14 +1159,6 @@ gstreamer_module_init(void)
         goto error_gst_init;
      }
 
-#ifdef HAVE_ECORE_X
-   if (ecore_x_init(NULL) > 0)
-     {
-        _ecore_x_available = EINA_TRUE;
-        gstreamer_ecore_x_check();
-     }
-#endif
-
    if (gst_plugin_register_static(GST_VERSION_MAJOR, GST_VERSION_MINOR,
                                   "emotion-sink",
                                   "video sink plugin for Emotion",
@@ -1319,14 +1184,6 @@ gstreamer_module_init(void)
 
  error_register:
  error_gst_plugin:
-#ifdef HAVE_ECORE_X
-   if (_ecore_x_available)
-     {
-        ecore_x_shutdown();
-        _ecore_x_available = EINA_FALSE;
-        window_manager_video = EINA_FALSE;
-     }
-#endif
 
    gst_deinit();
 
@@ -1354,15 +1211,6 @@ gstreamer_module_shutdown(void)
 
    _emotion_module_unregister(&em_engine);
 
-#ifdef HAVE_ECORE_X
-   if (_ecore_x_available)
-     {
-        ecore_x_shutdown();
-        _ecore_x_available = EINA_FALSE;
-        window_manager_video = EINA_FALSE;
-     }
-#endif
-
    eina_log_domain_unregister(_emotion_gstreamer_log_domain);
    _emotion_gstreamer_log_domain = -1;
 
@@ -1508,32 +1356,6 @@ _free_metadata(Emotion_Gstreamer_Metadata *m)
 }
 
 static Eina_Bool
-_em_restart_stream(void *data)
-{
-   Emotion_Gstreamer_Video *ev;
-
-   ev = data;
-
-   ev->pipeline = gstreamer_video_sink_new(ev, ev->obj, ev->uri);
-
-   if (ev->pipeline)
-     {
-        ev->eos_bus = gst_pipeline_get_bus(GST_PIPELINE(ev->pipeline));
-        if (!ev->eos_bus)
-          {
-             ERR("could not get the bus");
-             return EINA_FALSE;
-          }
-
-        gst_bus_set_sync_handler(ev->eos_bus, _eos_sync_fct, ev, NULL);
-     }
-
-   restart_idler = NULL;
-
-   return ECORE_CALLBACK_CANCEL;
-}
-
-static Eina_Bool
 _video_size_get(GstElement *elem, int *width, int *height)
 {
    GstIterator *itr = NULL;
@@ -1687,15 +1509,6 @@ _eos_main_fct(void *data)
          break;
       case GST_MESSAGE_ERROR:
          em_cleanup(ev);
-
-        if (ev->priority)
-          {
-            ERR("Switching back to canvas rendering.");
-            ev->priority = EINA_FALSE;
-            priority_overide++;
-
-            restart_idler = ecore_idler_add(_em_restart_stream, ev);
-          }
          break;
       default:
          ERR("bus say: %s [%i - %s]",
@@ -1769,16 +1582,12 @@ _eos_sync_fct(GstBus *bus EINA_UNUSED, GstMessage *msg, gpointer data)
           g_error_free(error);
           g_free(debug);
 
-           /* FIXME: This is broken */
-           if (strncmp(GST_OBJECT_NAME(msg->src), "xvimagesink", 11) == 0)
-             {
-                send = emotion_gstreamer_message_alloc(ev, msg);
+           send = emotion_gstreamer_message_alloc(ev, msg);
 
-                if (send)
-                  {
-                     _emotion_pending_ecore_begin();
-                     ecore_main_loop_thread_safe_call_async(_eos_main_fct, send);
-                  }
+           if (send)
+             {
+                _emotion_pending_ecore_begin();
+                ecore_main_loop_thread_safe_call_async(_eos_main_fct, send);
              }
           break;
        }
index 9aa844d..32a12fc 100644 (file)
 #include <gst/audio/audio.h>
 #include <gst/tag/tag.h>
 
-// forcibly disable x overlay window.. broken badly.
-#undef HAVE_ECORE_X
-
-#ifdef HAVE_ECORE_X
-# include <Ecore_X.h>
-# include <gst/video/videooverlay.h>
-#endif
-
 typedef void (*Evas_Video_Convert_Cb)(unsigned char *evas_data,
                                       const unsigned char *gst_data,
                                       unsigned int w,
@@ -75,13 +67,8 @@ struct _Emotion_Gstreamer_Video
    GstElement       *pipeline;
    GstElement       *sink;
    GstElement       *esink;
-   GstElement       *xvsink;
-   GstElement       *tee;
    GstElement       *convert;
 
-   GstPad           *eteepad;
-   GstPad           *xvteepad;
-   GstPad           *xvpad;
    Eina_List        *threads;
 
    /* eos */
@@ -110,10 +97,6 @@ struct _Emotion_Gstreamer_Video
 
    Emotion_Gstreamer_Metadata *metadata;
 
-#ifdef HAVE_ECORE_X
-   Ecore_X_Window    win;
-#endif
-
    const char       *uri;
 
    Emotion_Gstreamer_Buffer *send;
@@ -144,7 +127,6 @@ struct _Emotion_Gstreamer_Video
    Eina_Bool         delete_me    : 1;
    Eina_Bool         kill_buffer  : 1;
    Eina_Bool         stream       : 1;
-   Eina_Bool         priority     : 1;
 
    int src_width;
    int src_height;
@@ -162,8 +144,6 @@ struct _EvasVideoSinkClass {
 };
 
 struct _EvasVideoSinkPrivate {
-   EINA_REFCOUNT;
-
    Evas_Object *o;
 
    Emotion_Gstreamer_Video *ev;
@@ -206,10 +186,8 @@ struct _Emotion_Gstreamer_Message
    GstMessage *msg;
 };
 
-extern Eina_Bool window_manager_video;
-extern Eina_Bool debug_fps;
 extern int _emotion_gstreamer_log_domain;
-extern Eina_Bool _ecore_x_available;
+extern Eina_Bool debug_fps;
 
 #ifdef DBG
 #undef DBG
@@ -238,8 +216,6 @@ extern Eina_Bool _ecore_x_available;
 
 #define EVAS_TYPE_VIDEO_SINK evas_video_sink_get_type()
 
-GType fakeeos_bin_get_type(void);
-
 #define EVAS_VIDEO_SINK(obj) \
     (G_TYPE_CHECK_INSTANCE_CAST((obj), \
     EVAS_TYPE_VIDEO_SINK, EvasVideoSink))
@@ -260,8 +236,6 @@ GType fakeeos_bin_get_type(void);
     (G_TYPE_INSTANCE_GET_CLASS((obj), \
     EVAS_TYPE_VIDEO_SINK, EvasVideoSinkClass))
 
-#define GST_TYPE_FAKEEOS_BIN fakeeos_bin_get_type()
-
 GstElement *gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
                                      Evas_Object *obj,
                                      const char *uri);
index 3a061b6..c5c060d 100644 (file)
@@ -599,132 +599,6 @@ _emotion_gstreamer_end(void *data, Ecore_Thread *thread)
      _emotion_gstreamer_video_pipeline_parse(data, EINA_TRUE);
 }
 
-static void
-_video_resize(void *data, Evas_Object *obj EINA_UNUSED, const Evas_Video_Surface *surface EINA_UNUSED,
-              Evas_Coord w, Evas_Coord h)
-{
-#ifdef HAVE_ECORE_X
-   Emotion_Gstreamer_Video *ev = data;
-
-   ecore_x_window_resize(ev->win, w, h);
-   DBG("resize: %i, %i", w, h);
-#else   
-   if (data)
-     {
-        DBG("resize: %i, %i (fake)", w, h);
-     }
-#endif
-}
-
-static void
-_video_move(void *data, Evas_Object *obj EINA_UNUSED, const Evas_Video_Surface *surface EINA_UNUSED,
-            Evas_Coord x, Evas_Coord y)
-{
-#ifdef HAVE_ECORE_X
-   Emotion_Gstreamer_Video *ev = data;
-   unsigned int pos[2];
-
-   DBG("move: %i, %i", x, y);
-   pos[0] = x; pos[1] = y;
-   ecore_x_window_prop_card32_set(ev->win, ECORE_X_ATOM_E_VIDEO_POSITION, pos, 2);
-#else   
-   if (data)
-     {
-        DBG("move: %i, %i (fake)", x, y);
-     }
-#endif
-}
-
-#if 0
-/* Much better idea to always feed the XvImageSink and let him handle optimizing the rendering as we do */
-static void
-_block_pad_unlink_cb(GstPad *pad, gboolean blocked, gpointer user_data)
-{
-   if (blocked)
-     {
-        Emotion_Gstreamer_Video *ev = user_data;
-        GstEvent *gev;
-
-        gst_pad_unlink(ev->xvteepad, ev->xvpad);
-        gev = gst_event_new_eos();
-        gst_pad_send_event(ev->xvpad, gev);
-        gst_pad_set_blocked_async(pad, FALSE, _block_pad_unlink_cb, NULL);
-     }
-}
-
-static void
-_block_pad_link_cb(GstPad *pad, gboolean blocked, gpointer user_data)
-{
-   if (blocked)
-     {
-        Emotion_Gstreamer_Video *ev = user_data;
-
-        gst_pad_link(ev->xvteepad, ev->xvpad);
-        if (ev->play)
-          gst_element_set_state(ev->xvsink, GST_STATE_PLAYING);
-        else
-          gst_element_set_state(ev->xvsink, GST_STATE_PAUSED);
-        gst_pad_set_blocked_async(pad, FALSE, _block_pad_link_cb, NULL);
-     }
-}
-#endif
-
-static void
-_video_show(void *data, Evas_Object *obj EINA_UNUSED, const Evas_Video_Surface *surface EINA_UNUSED)
-{
-#ifdef HAVE_ECORE_X
-   Emotion_Gstreamer_Video *ev = data;
-
-   DBG("show xv");
-   ecore_x_window_show(ev->win);
-#else
-   if (data)
-     {
-        DBG("show xv (fake)");
-     }
-#endif
-   /* gst_pad_set_blocked_async(ev->xvteepad, TRUE, _block_pad_link_cb, ev); */
-}
-
-static void
-_video_hide(void *data, Evas_Object *obj EINA_UNUSED, const Evas_Video_Surface *surface EINA_UNUSED)
-{
-#ifdef HAVE_ECORE_X
-   Emotion_Gstreamer_Video *ev = data;
-
-   DBG("hide xv");
-   ecore_x_window_hide(ev->win);
-#else
-   if (data)
-     {
-        DBG("hide xv (fake)");
-     }
-#endif
-   /* gst_pad_set_blocked_async(ev->xvteepad, TRUE, _block_pad_unlink_cb, ev); */
-}
-
-static void
-_video_update_pixels(void *data, Evas_Object *obj EINA_UNUSED, const Evas_Video_Surface *surface EINA_UNUSED)
-{
-   Emotion_Gstreamer_Video *ev = data;
-   Emotion_Gstreamer_Buffer *send;
-
-   if (!ev->send) return;
-
-   send = ev->send;
-   send->force = EINA_TRUE;
-   ev->send = NULL;
-
-   _emotion_pending_ecore_begin();
-   evas_video_sink_main_render(send);
-}
-
-
-static void
-_image_resize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
-}
-
 GstElement *
 gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
                         Evas_Object *o,
@@ -733,18 +607,11 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
    GstElement *playbin;
    GstElement *bin = NULL;
    GstElement *esink = NULL;
-   GstElement *xvsink = NULL;
-   GstElement *tee = NULL;
    GstElement *queue = NULL;
    Evas_Object *obj;
    GstPad *pad;
-   GstPad *teepad;
    int flags;
    const char *launch;
-#if defined HAVE_ECORE_X
-   const char *engine = NULL;
-   Eina_List *engines;
-#endif
 
    obj = emotion_object_image_get(o);
    if (!obj)
@@ -791,83 +658,6 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
        goto unref_pipeline;
      }
 
-   tee = gst_element_factory_make("tee", NULL);
-   if (!tee)
-     {
-       ERR("Unable to create 'tee' GstElement.");
-       goto unref_pipeline;
-     }
-
-#if defined HAVE_ECORE_X
-   if (window_manager_video)
-     {
-        Eina_List *l;
-        const char *ename;
-        
-        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;
-               }
-          }
-
-       if (ev->priority && engine && strstr(engine, "_x11") != NULL)
-        {
-          Ecore_Evas *ee;
-          Evas_Coord x, y, w, h;
-          Ecore_X_Window win;
-          Ecore_X_Window parent;
-
-          evas_object_geometry_get(obj, &x, &y, &w, &h);
-
-          ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
-
-          if (w < 4) w = 4;
-          if (h < 2) h = 2;
-
-          /* Here we really need to have the help of the window manager, this code will change when we update E17. */
-          parent = (Ecore_X_Window) ecore_evas_window_get(ee);
-          DBG("parent: %x", parent);
-
-          win = ecore_x_window_new(0, x, y, w, h);
-          DBG("creating window: %x [%i, %i, %i, %i]", win, x, y, w, h);
-          if (win)
-            {
-              Ecore_X_Window_State state[] = { ECORE_X_WINDOW_STATE_SKIP_TASKBAR, ECORE_X_WINDOW_STATE_SKIP_PAGER };
-
-              ecore_x_netwm_window_state_set(win, state, 2);
-              ecore_x_window_hide(win);
-              xvsink = gst_element_factory_make("xvimagesink", NULL);
-              if (xvsink)
-                {
-                  unsigned int pos[2];
-
-                  gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(xvsink), win);
-                  ev->win = win;
-
-                  ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIDEO_PARENT, &parent, 1);
-
-                  pos[0] = x; pos[1] = y;
-                  ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIDEO_POSITION, pos, 2);
-                }
-              else
-                {
-                  DBG("destroying win: %x", win);
-                  ecore_x_window_free(win);
-                }
-            }
-        }
-       evas_render_method_list_free(engines);
-     }
-#else
-//# warning "missing: ecore_x"
-#endif
-
    esink = gst_element_factory_make("emotion-sink", "sink");
    if (!esink)
      {
@@ -879,7 +669,6 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
    g_object_set(G_OBJECT(esink), "ev", ev, NULL);
 
    evas_object_image_pixels_get_callback_set(obj, NULL, NULL);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _image_resize, ev);
 
    /* We need queue to force each video sink to be in its own thread */
    queue = gst_element_factory_make("queue", "equeue");
@@ -889,57 +678,14 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
         goto unref_pipeline;
      }
 
-   gst_bin_add_many(GST_BIN(bin), tee, queue, esink, NULL);
+   gst_bin_add_many(GST_BIN(bin), queue, esink, NULL);
    gst_element_link_many(queue, esink, NULL);
 
    /* link both sink to GstTee */
    pad = gst_element_get_static_pad(queue, "sink");
-   teepad = gst_element_get_request_pad(tee, "src_%u");
-   gst_pad_link(teepad, pad);
+   gst_element_add_pad(bin, gst_ghost_pad_new("sink", pad));
    gst_object_unref(pad);
 
-   ev->eteepad = teepad;
-
-   /* FIXME: Why a bin that drops the EOS message?! */
-   if (xvsink)
-     {
-        GstElement *fakeeos;
-
-        queue = gst_element_factory_make("queue", "xvqueue");
-        fakeeos = GST_ELEMENT(GST_BIN(g_object_new(GST_TYPE_FAKEEOS_BIN, "name", "eosbin", NULL)));
-        if (queue && fakeeos)
-          {
-             GstPad *queue_pad;
-
-             gst_bin_add_many(GST_BIN(bin), fakeeos, NULL);
-
-             gst_bin_add_many(GST_BIN(fakeeos), queue, xvsink, NULL);
-             gst_element_link_many(queue, xvsink, NULL);
-             queue_pad = gst_element_get_static_pad(queue, "sink");
-             gst_element_add_pad(fakeeos, gst_ghost_pad_new("sink", queue_pad));
-
-             pad = gst_element_get_static_pad(fakeeos, "sink");
-             teepad = gst_element_get_request_pad(tee, "src_%u");
-             gst_pad_link(teepad, pad);
-
-             xvsink = fakeeos;
-
-             ev->xvteepad = teepad;
-             ev->xvpad = pad;
-         }
-       else
-         {
-             if (fakeeos) gst_object_unref(fakeeos);
-             if (queue) gst_object_unref(queue);
-             gst_object_unref(xvsink);
-             xvsink = NULL;
-         }
-     }
-
-   teepad = gst_element_get_static_pad(tee, "sink");
-   gst_element_add_pad(bin, gst_ghost_pad_new("sink", teepad));
-   gst_object_unref(teepad);
-
 #define GST_PLAY_FLAG_NATIVE_VIDEO  (1 << 6)
 #define GST_PLAY_FLAG_DOWNLOAD      (1 << 7)
 #define GST_PLAY_FLAG_AUDIO         (1 << 1)
@@ -961,29 +707,10 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
 
    ev->stream = EINA_TRUE;
 
-   if (xvsink)
-     {
-        Evas_Video_Surface video;
-
-        video.version = EVAS_VIDEO_SURFACE_VERSION;
-        video.data = ev;
-        video.parent = NULL;
-        video.move = _video_move;
-        video.resize = _video_resize;
-        video.show = _video_show;
-        video.hide = _video_hide;
-        video.update_pixels = _video_update_pixels;
-
-        evas_object_image_video_surface_set(obj, &video);
-        ev->stream = EINA_FALSE;
-     }
-
    eina_stringshare_replace(&ev->uri, uri);
    ev->pipeline = playbin;
    ev->sink = bin;
    ev->esink = esink;
-   ev->xvsink = xvsink;
-   ev->tee = tee;
    ev->threads = eina_list_append(ev->threads,
                                   ecore_thread_run(_emotion_gstreamer_pause,
                                                    _emotion_gstreamer_end,
@@ -997,9 +724,7 @@ gstreamer_video_sink_new(Emotion_Gstreamer_Video *ev,
    return playbin;
 
  unref_pipeline:
-   gst_object_unref(xvsink);
    gst_object_unref(esink);
-   gst_object_unref(tee);
    gst_object_unref(bin);
    gst_object_unref(playbin);
    return NULL;