AM_CONDITIONAL([HAVE_EIO], [test "x${have_eio}" = "xyes"])
+## Check Ecore-X availability, used for XV, VAAPI, VDPAU output.
+
+have_ecore_x="no"
+want_ecore_x="auto"
+AC_ARG_ENABLE([ecore-x],
+ [AC_HELP_STRING([--disable-ecore-x], [disable ecore-x support. @<:@default=detect@:>@])],
+ [want_ecore_x=$enableval], [])
+
+if test "x$want_ecore_x" != "xno"; then
+ PKG_CHECK_MODULES([ECORE_X],
+ [ecore-x >= 1.0.0],
+ [
+ AC_DEFINE(HAVE_ECORE_X, 1, [X11 support for Ecore])
+ have_ecore_x="yes"
+ requirement_elm="ecore-x >= 1.0.0 ${requirement_elm}"
+ ],
+ [have_ecore_x="no"]
+ )
+else
+ have_ecore_x="no"
+fi
+if test "x$want_ecore_x" = "xyes" -a "x$have_ecore_x" = "xno"; then
+ AC_MSG_ERROR([ecore-x support requested, but not found by pkg-config.])
+fi
+
+## Check if gstreamer X Overlay is available
+build_xoverlay="no"
+if test "x$enable_gstreamer" = "xyes"; then
+ save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS ${GSTREAMER_CFLAGS}"
+ AC_CHECK_HEADER([gst/interfaces/xoverlay.h],
+ [
+ AC_DEFINE(HAVE_XOVERLAY_H, 1, [Build with Gstreamer Xoverlay support])
+ build_xoverlay="yes"
+ ], [
+ build_xoverlay="no"
+ ]
+ )
+ CFLAGS=$save_CFLAGS
+ if test "x${build_xoverlay}" = "xyes"; then
+ PKG_CHECK_MODULES([GSTREAMER_INTERFACE],
+ [ gstreamer-interfaces-0.10 >= 0.10.34 ],
+ [ build_xoverlay="yes" ],
+ [ build_xoverlay="no" ]
+ )
+ fi
+fi
+
### install and build examples
EFL_CHECK_BUILD_EXAMPLES([enable_build_examples="yes"], [enable_build_examples="no"])
echo
echo " Modules:"
echo " Xine...............: ${enable_xine}"
-echo " Gstreamer..........: ${enable_gstreamer}"
+echo " Gstreamer..........: ${enable_gstreamer} (X: ${have_ecore_x}/${build_xoverlay})"
echo " Generic............: ${enable_generic}"
if test "x${enable_generic}" = "xyes" || test "x${enable_generic}" = "xstatic"; then
-#include <Ecore.h>
-
#include "emotion_gstreamer.h"
static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE("sink",
const char *uri)
{
GstElement *playbin;
- GstElement *sink;
+ GstElement *sink = NULL;
Evas_Object *obj;
int flags;
+#if defined HAVE_ECORE_X && defined HAVE_XOVERLAY_H
+ const char *engine;
+ Eina_List *engines;
+#endif
obj = emotion_object_image_get(o);
if (!obj)
return NULL;
}
- sink = gst_element_factory_make("emotion-sink", "sink");
+#if defined HAVE_ECORE_X && defined HAVE_XOVERLAY_H
+ engines = evas_render_method_list();
+
+ engine = eina_list_nth(engines, evas_output_method_get(evas_object_evas_get(obj)) - 1);
+
+ if (engine && strstr(engine, "_x11") != NULL)
+ {
+#if 0
+ Evas_Coord x, y, w, h;
+ Ecore_X_Window win;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+ win = ecore_x_window_new(0, x, y, w, h);
+ if (win)
+ {
+ sink = gst_element_factory_make("xvimagesink", NULL);
+ if (sink)
+ {
+ gst_x_overlay_set_window_handle(GST_X_OVERLAY(sink), win);
+ ev->win = win;
+ }
+ else
+ {
+ ecore_x_window_free(win);
+ }
+ }
+#endif
+ }
+ evas_render_method_list_free(engines);
+#else
+# warning "no ecore_x or xoverlay"
+#endif
+ fprintf(stderr, "sink: %p\n", sink);
if (!sink)
{
- ERR("Unable to create 'emotion-sink' GstElement.");
- goto unref_pipeline;
+ sink = gst_element_factory_make("emotion-sink", "sink");
+ if (!sink)
+ {
+ ERR("Unable to create 'emotion-sink' GstElement.");
+ goto unref_pipeline;
+ }
+
+ g_object_set(G_OBJECT(sink), "evas-object", obj, NULL);
+ g_object_set(G_OBJECT(sink), "ev", ev, NULL);
+
+ evas_object_image_pixels_get_callback_set(obj, NULL, NULL);
}
#define GST_PLAY_FLAG_NATIVE_VIDEO (1 << 6)
#define GST_PLAY_FLAG_DOWNLOAD (1 << 7)
- g_object_set(G_OBJECT(sink), "evas-object", obj, NULL);
- g_object_set(G_OBJECT(sink), "ev", ev, NULL);
-
- evas_object_image_pixels_get_callback_set(obj, NULL, NULL);
-
g_object_get(G_OBJECT(playbin), "flags", &flags, NULL);
g_object_set(G_OBJECT(playbin), "flags", flags | GST_PLAY_FLAG_NATIVE_VIDEO | GST_PLAY_FLAG_DOWNLOAD, NULL);
g_object_set(G_OBJECT(playbin), "video-sink", sink, NULL);