From: barbieri Date: Sun, 4 Sep 2011 00:07:41 +0000 (+0000) Subject: remove old vlc, fix build bugs and introduce m4 for generic players. X-Git-Tag: submit/2.0alpha-wayland/20121127.222018~161 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4fd038af5584bc16f37a39269a0903d5e6f3c382;p=profile%2Fivi%2Femotion.git remove old vlc, fix build bugs and introduce m4 for generic players. Previous commit to disable VLC messed everything, so this one fixes it doing: - remove old src/modules/vlc and related. - add EMOTION_CHECK_GENERIC_PLAYER() m4 macro - change previous EMOTION_BUILD_VLC to EMOTION_BUILD_GENERIC_VLC git-svn-id: http://svn.enlightenment.org/svn/e/trunk/emotion@63140 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/configure.ac b/configure.ac index 8cdf17b..c67b483 100644 --- a/configure.ac +++ b/configure.ac @@ -53,16 +53,17 @@ AC_SUBST(release_info) VMAJ=v_maj AC_SUBST(VMAJ) -want_vlc="no" want_generic="yes" case "$host_os" in mingw* | cegcc*) want_xine="no" want_gstreamer="yes" + want_generic_vlc="no" ;; *) want_xine="yes" want_gstreamer="yes" + want_generic_vlc="yes" ;; esac @@ -230,17 +231,15 @@ AC_MSG_RESULT([${have_v4l2}]) EMOTION_CHECK_MODULE([Xine], [${want_xine}]) EMOTION_CHECK_MODULE([Gstreamer], [${want_gstreamer}]) -#disabled vlc EMOTION_CHECK_MODULE([VLC], [${want_vlc}]) -EMOTION_CHECK_MODULE([generic], [${want_generic}]) - -#disabled vlc -#if test "x${enable_xine}" = "xno" && test "x${enable_gstreamer}" = "xno" && test "x${enable_vlc}" = "xno" ; then -if test "x${enable_xine}" = "xno" && test "x${enable_gstreamer}" = "xno"; then -#disabled vlc -# AC_MSG_ERROR([Xine, Gstreamer or VLC backends must be selected to build Emotion]) - AC_MSG_ERROR([Xine or Gstreamer backends must be selected to build Emotion]) +EMOTION_CHECK_MODULE([Generic], [${want_generic}]) + +EMOTION_CHECK_GENERIC_PLAYER([VLC], [${want_generic_vlc}]) + +if test "x${enable_xine}" = "xno" && test "x${enable_gstreamer}" = "xno" && test "x${enable_generic}" = "xno" ; then + AC_MSG_ERROR([Xine, Gstreamer or Generic backends must be selected to build Emotion]) fi + PKG_CHECK_MODULES([EIO], [eio], [ @@ -259,9 +258,6 @@ EFL_CHECK_INSTALL_EXAMPLES([enable_install_examples="yes"], [enable_install_exam AC_SUBST(requirement_emotion) -#disabled vlc -#src/modules/vlc/Makefile - AC_OUTPUT([ Makefile emotion.pc @@ -297,8 +293,15 @@ echo "Configuration Options Summary:" echo echo " Modules:" echo " Xine...............: ${enable_xine}" -#echo " Vlc................: ${enable_vlc}" echo " Gstreamer..........: ${enable_gstreamer}" +echo " Generic............: ${enable_generic}" + +if test "x${enable_generic}" = "xyes"; then +echo +echo " Generic Players:" +echo " VLC................: ${enable_generic_vlc}" +fi + echo echo " Build emotion_test...: $have_emotion_test" echo " edje_cc..............: ${edje_cc}" diff --git a/m4/emotion_check.m4 b/m4/emotion_check.m4 index 0281f1d..4509c25 100644 --- a/m4/emotion_check.m4 +++ b/m4/emotion_check.m4 @@ -48,15 +48,15 @@ AS_IF([test "x$have_dep" = "xyes"], [$2], [$3]) ]) -dnl use: EMOTION_CHECK_DEP_VLC(want_static[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +dnl use: EMOTION_CHECK_DEP_GENERIC_VLC(want_static[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -AC_DEFUN([EMOTION_CHECK_DEP_VLC], +AC_DEFUN([EMOTION_CHECK_DEP_GENERIC_VLC], [ requirement="" -PKG_CHECK_MODULES([VLC], - [libvlc >= 0.9 evas >= 0.9.9], +PKG_CHECK_MODULES([GENERIC_VLC], + [libvlc >= 0.9], [ have_dep="yes" requirement="libvlc" @@ -152,3 +152,58 @@ AS_IF([test "x$have_module" = "xyes"], [$3], [$4]) m4_popdef([UP]) m4_popdef([DOWN]) ]) + +dnl use: EMOTION_CHECK_GENERIC_PLAYER(description, want_module[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +AC_DEFUN([EMOTION_CHECK_GENERIC_PLAYER], +[ +m4_pushdef([UP], m4_translit([$1], [-a-z], [_A-Z]))dnl +m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl + +want_module="$2" + +AC_ARG_ENABLE(generic-[]DOWN, + [AC_HELP_STRING([--enable-generic-]DOWN, [enable build of Generic Player $1 @<:@default=yes@:>@])], + [ + if test "x${enableval}" = "xyes" ; then + enable_module="yes" + else + enable_module="no" + fi + ], + [enable_module="auto"]) + +if test "x${enable_generic}" != "xyes"; then + if test "x${enable_module}" = "xyes"; then + AC_MSG_WARN([Generic module is disabled, force disable of Generic Player $1]) + fi + enable_module="no" + want_module="no" +fi + +if test "x${enable_module}" = "xauto"; then + enable_module="${want_module}" +elif test "x${enable_module}" = "xyes"; then + want_module="yes" +fi + +have_module="no" +if test "x${want_module}" = "xyes" && test "x${enable_module}" = "xyes"; then + m4_default([EMOTION_CHECK_DEP_GENERIC_]m4_defn([UP]))(${enable_module}, [have_module="yes"], [have_module="no"]) +fi + +AC_MSG_CHECKING([Whether to enable Generic Player $1]) +AC_MSG_RESULT([${have_module}]) + +AM_CONDITIONAL(EMOTION_BUILD_GENERIC_[]UP, [test "x${have_module}" = "xyes"]) + +enable_generic_[]DOWN="no" +if test "x${have_module}" = "xyes" ; then + enable_generic_[]DOWN=${enable_module} + AC_DEFINE(EMOTION_BUILD_GENERIC_[]UP, 1, [Set to 1 if $1 is built]) +fi + +AS_IF([test "x$have_module" = "xyes"], [$3], [$4]) + +m4_popdef([UP]) +m4_popdef([DOWN]) +]) diff --git a/src/edje_external/emotion.c b/src/edje_external/emotion.c index c95b60d..d7fc012 100644 --- a/src/edje_external/emotion.c +++ b/src/edje_external/emotion.c @@ -57,8 +57,8 @@ static const char *_external_emotion_engines[] = { #ifdef EMOTION_BUILD_GSTREAMER "gstreamer", #endif -#ifdef EMOTION_BUILD_VLC - "vlc", +#ifdef EMOTION_BUILD_GENERIC + "generic", #endif NULL, }; @@ -68,8 +68,8 @@ static const char _external_emotion_engine_def[] = "xine"; #elif defined(EMOTION_BUILD_GSTREAMER) "gstreamer"; -#elif defined(EMOTION_BUILD_VLC) - "vlc"; +#elif defined(EMOTION_BUILD_GENERIC) + "generic"; #else "impossible"; #endif diff --git a/src/generic_players/Makefile.am b/src/generic_players/Makefile.am index 7d1f5d8..bbdd8c3 100644 --- a/src/generic_players/Makefile.am +++ b/src/generic_players/Makefile.am @@ -3,6 +3,6 @@ MAINTAINERCLEANFILES = Makefile.in SUBDIRS = -#if EMOTION_BUILD_VLC -#SUBDIRS += vlc -#endif +if EMOTION_BUILD_GENERIC_VLC +SUBDIRS += vlc +endif diff --git a/src/generic_players/vlc/Makefile.am b/src/generic_players/vlc/Makefile.am index c32906e..6d6a9f2 100644 --- a/src/generic_players/vlc/Makefile.am +++ b/src/generic_players/vlc/Makefile.am @@ -8,11 +8,11 @@ AM_CPPFLAGS = \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ -@VLC_CFLAGS@ +@GENERIC_VLC_CFLAGS@ internal_bindir = $(libdir)/emotion/utils internal_bin_PROGRAMS = em_generic_vlc em_generic_vlc_SOURCES = emotion_generic_vlc.c em_generic_vlc_DEPENDENCIES = $(top_srcdir)/src/modules/generic/Emotion_Generic_Plugin.h -em_generic_vlc_LDADD = @VLC_LIBS@ +em_generic_vlc_LDADD = @GENERIC_VLC_LIBS@ diff --git a/src/lib/emotion_smart.c b/src/lib/emotion_smart.c index e0136c0..be68d0f 100644 --- a/src/lib/emotion_smart.c +++ b/src/lib/emotion_smart.c @@ -1505,9 +1505,6 @@ _pixels_get(void *data, Evas_Object *obj) #ifdef EMOTION_STATIC_BUILD_XINE Eina_Bool xine_module_init(void); #endif -#ifdef EMOTION_STATIC_BUILD_VLC -Eina_Bool vlc_module_init(void); -#endif #ifdef EMOTION_STATIC_BUILD_GSTREAMER Eina_Bool gstreamer_module_init(void); #endif @@ -1557,9 +1554,6 @@ _smart_init(void) #ifdef EMOTION_STATIC_BUILD_XINE xine_module_init(); #endif -#ifdef EMOTION_STATIC_BUILD_VLC - vlc_module_init(); -#endif #ifdef EMOTION_STATIC_BUILD_GSTREAMER gstreamer_module_init(); #endif diff --git a/src/modules/generic/emotion_generic.c b/src/modules/generic/emotion_generic.c index 0243f95..aac4696 100644 --- a/src/modules/generic/emotion_generic.c +++ b/src/modules/generic/emotion_generic.c @@ -30,7 +30,7 @@ struct _default_players { }; static struct _default_players players[] = { -#ifdef EMOTION_BUILD_VLC +#ifdef EMOTION_BUILD_GENERIC_VLC { "vlc", "em_generic_vlc" }, #endif { NULL, NULL } diff --git a/src/modules/vlc/Makefile.am b/src/modules/vlc/Makefile.am deleted file mode 100644 index 5d9c056..0000000 --- a/src/modules/vlc/Makefile.am +++ /dev/null @@ -1,29 +0,0 @@ -MAINTAINERCLEANFILES = Makefile.in - -AM_CPPFLAGS = \ --I$(top_srcdir) \ --I$(top_srcdir)/src/lib \ --I$(top_srcdir)/src/modules \ --DPACKAGE_BIN_DIR=\"$(bindir)\" \ --DPACKAGE_LIB_DIR=\"$(libdir)\" \ --DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ -@EMOTION_CFLAGS@ \ -@EMOTION_CPPFLAGS@ \ -@VLC_CFLAGS@ - -if EMOTION_BUILD_VLC -if !EMOTION_STATIC_BUILD_VLC - -pkgdir = $(libdir)/emotion - -pkg_LTLIBRARIES = vlc.la - -vlc_la_SOURCES = \ -emotion_vlc.c \ -emotion_vlc.h -vlc_la_LIBADD = @VLC_LIBS@ $(top_builddir)/src/lib/libemotion.la -lpthread -vlc_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version -vlc_la_LIBTOOLFLAGS = --tag=disable-static - -endif -endif diff --git a/src/modules/vlc/TODO b/src/modules/vlc/TODO deleted file mode 100644 index 64e724a..0000000 --- a/src/modules/vlc/TODO +++ /dev/null @@ -1,72 +0,0 @@ -# -# TODO for emotion/vlc plugin -# - -# Known bug -When changing video size at beginning, there is sometimes SEGV in evas. -The plugin first load the movie with default geometry, wait for it inputThread from VLC to be launched -and read the movie geometry. Then it stops vlc and start it again with known geometry and realloc frames. -Plugin warn emotion that size changed using API func "_emotion_frame_resize" thru fd_write/fd_read socket. - -It seems that it tries to convert original picture from YUV to BGRA but it's already in RGBA format. -p im->cache_entry = {_list_data = {next = 0x818f860, prev = 0x0, last = 0x818f860}, cache = 0x80627f0, cache_key = 0x0, file = 0x0, key = 0x0, - timestamp = 0, laststat = 1221825297, references = 1, scale = 1 '\001', load_opts = {scale_down_by = 0, dpi = 0, w = 0, h = 0}, - space = 1, w = 384, h = 288, allocated = {w = 384, h = 288}, info = {module = 0x0, loader = 0x0}, flags = {loaded = 0 '\0', - dirty = 1 '\001', activ = 0 '\0', need_data = 1 '\001', lru_nodata = 0 '\0', cached = 1 '\001', alpha = 0 '\0', alpha_sparse = 0 '\0'}} -We can see cache is 1 (=EVAS_COLORSPACE_YCBCR422P601_PL) instead of 0 (=EVAS_COLORSPACE_ARGB8888). - -GDB TRACE = -evas_common_convert_yuv_420p_601_rgba (src=0xb40a6008, dst=0xb3e72008 "", w=720, h=400) at evas_convert_yuv.c:198 -198 movd_m2r(*up, mm3); -(gdb) bt -0 evas_common_convert_yuv_420p_601_rgba (src=0xb40a6008, dst=0xb3e72008 "", w=720, h=400) at evas_convert_yuv.c:198 -1 0xb7f3e087 in evas_common_image_colorspace_normalize (im=0x8090a88) at evas_image_main.c:388 -2 0xb7e6486d in eng_image_draw (data=0x8063388, context=0x8061120, surface=0x8090808, image=0x8090a88, src_x=0, src_y=0, src_w=720, src_h=400, dst_x=0, dst_y=0, dst_w=800, dst_h=600, smooth=1) at evas_engine.c:566 -3 0xb7ee027b in evas_object_image_render (obj=0x8061788, output=0x8063388, context=0x8061120, surface=0x8090808, x=0, y=0) at evas_object_image.c:1974 -4 0xb7f09db1 in evas_render_updates_internal (e=0x8063c80, make_updates=1 '\001', do_draw=1 '\001') at evas_render.c:526 -5 0xb7e7f3d6 in _ecore_evas_x_render (ee=0x8063a98) at ecore_evas_x.c:330 -6 0xb7e82207 in _ecore_evas_x_idle_enter (data=0x0) at ecore_evas_x.c:1320 -7 0xb7ea738b in _ecore_idle_enterer_call () at ecore_idle_enterer.c:101 -8 0xb7eaaae5 in _ecore_main_loop_iterate_internal (once_only=0) at ecore_main.c:691 -9 0xb7eaaccf in ecore_main_loop_begin () at ecore_main.c:87 -10 0x08048bb2 in main () - -# Missing functions (empty bodies) int emotion_vlc.c -/* STUB */ -static void em_event_feed(void *ef, int event) --- -/* STUB */ -static void em_event_mouse_button_feed(void *ef, int button, int x, int y) --- -/* STUB */ -static void em_event_mouse_move_feed(void *ef, int x, int y) --- -/* STUB */ -static void em_video_channel_set(void *ef, int channel) --- -/* STUB */ -static int em_video_channel_get(void *ef) --- -/* STUB */ -static const char * em_video_channel_name_get(void *ef, int channel) --- -/* STUB */ -static int em_audio_channel_count(void *ef) --- -/* STUB */ -static const char * em_audio_channel_name_get(void *ef, int channel) --- -/* STUB */ -static int em_spu_channel_count(void *ef) --- -/* STUB */ -static const char * em_spu_channel_name_get(void *ef, int channel) --- -/* STUB */ -static void em_spu_channel_mute_set(void *ef, int mute) --- -/* STUB */ -static int em_spu_channel_mute_get(void *ef) --- -/* STUB */ -static const char * em_chapter_name_get(void *ef, int chapter) diff --git a/src/modules/vlc/emotion_vlc.c b/src/modules/vlc/emotion_vlc.c deleted file mode 100644 index c59cfc9..0000000 --- a/src/modules/vlc/emotion_vlc.c +++ /dev/null @@ -1,1238 +0,0 @@ -/* - * SICMA AERO SEAT - * code@ife-sit.info - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif -#include -#include -#include -#ifdef HAVE_EVAS_SOFWARE_X11 -# include -#endif -#ifdef HAVE_EVAS_OPENGL_X11 -# include -#endif - -#include "Emotion.h" -#include "emotion_private.h" -#include "emotion_vlc.h" - -/* internal util calls */ -static void *_em_lock (void *par); -static void _em_unlock (void *par); -static void _em_event (const libvlc_event_t *event, void* data); -static void _em_resize (Emotion_Vlc_Video *ev, int x, int y); -static Eina_Bool _em_fd_active (Emotion_Vlc_Video *ev, Ecore_Fd_Handler *fdh); -static int _em_reload_vlc (Emotion_Vlc_Video *ev); -void* _em_slave_thread (void * t); - -void * _em_slave_thread(void * t) -{ - int event; - pthread_detach(pthread_self()); - Emotion_Vlc_Video *ev= (Emotion_Vlc_Video*)t; - while(read(ev->fd_slave_read, &event, sizeof(int)) > 0) { - switch(event) { - case VLC_RESIZE: - _em_resize(ev, -1, -1); - break; - case VLC_CHANGE_VOL: - _emotion_audio_level_change(ev->obj); - break; - default: - break; - } - } - fprintf(stderr,"BYE BYE"); - return NULL; -} - -static unsigned char em_init(Evas_Object *obj, void **emotion_video, Emotion_Module_Options *opt) -{ - Emotion_Vlc_Video *ev; - Emotion_Vlc_Video_Frame *ef; - int fds[2], x, y; - int event = VLC_NEW_FRAME; - pthread_t t_id; - x = WIDTH; - y = HEIGHT; - - - if (!emotion_video) return 0; - - ev = (Emotion_Vlc_Video*)calloc(1, sizeof(Emotion_Vlc_Video)); - ASSERT_EV(ev) return 0; - memset(ev, 0, sizeof(Emotion_Vlc_Video)); - - ef = (Emotion_Vlc_Video_Frame*)calloc(1, sizeof(Emotion_Vlc_Video_Frame)); - if (!ef) return 0; - memset(ef, 0, sizeof(Emotion_Vlc_Video_Frame)); - - /* init internal frames */ - if(ef->frame_A) { - free(ef->frame_A); - } - if(ef->frame_B) { - free(ef->frame_B); - } - ef->frame_A = (char*)malloc(x*y*sizeof(char)*4); - ef->frame_B = (char*)malloc(x*y*sizeof(char)*4); - memset(ef->frame_A, 0x00, x*y*sizeof(char)*4); - memset(ef->frame_B, 0x00, x*y*sizeof(char)*4); - ef->frame = ef->frame_A; - - /* update size in object */ - ev->w = x; - ev->h = y; - ev->ratio = (double)x/(double)y; - - ev->cur_frame = ef; - - if(pipe(fds) == 0) - { - ev->fd_read = fds[0]; - ev->fd_write = fds[1]; - fcntl(ev->fd_read, F_SETFL, O_NONBLOCK); - ev->fd_handler = ecore_main_fd_handler_add(ev->fd_read, ECORE_FD_READ, (Ecore_Fd_Cb)_em_fd_active, ev, NULL, NULL); - ecore_main_fd_handler_active_set(ev->fd_handler, ECORE_FD_READ); - } - - if (pipe(fds) == 0) - { - ev->fd_slave_read = fds[0]; - ev->fd_slave_write = fds[1]; - fcntl(ev->fd_slave_write, F_SETFL, O_NONBLOCK); - } - ev->obj = obj; - - ev->delete_me = 0; - ev->opening = 1; - ev->play_ok = 0; - ev->video_mute = 1; - - if (opt) - { - ev->opt_no_audio = opt->no_audio; - ev->opt_no_video = opt->no_video; - } - - - /* init libvlc */ - int vlc_argc = 0; - char const *vlc_argv[] = - { - "-q", - //"-vvvvv", - "--ignore-config" - }; - vlc_argc = sizeof(vlc_argv) / sizeof(*vlc_argv); - sprintf(ev->clock, "%lld", (long long int)(intptr_t)_em_lock); - sprintf(ev->cunlock, "%lld", (long long int)(intptr_t)_em_unlock); - sprintf(ev->cdata, "%lld", (long long int)(intptr_t)ev); - sprintf(ev->width, "%d", WIDTH); - sprintf(ev->height, "%d", HEIGHT); - sprintf(ev->pitch, "%d", 4*WIDTH); - - ev->vlc_player = libvlc_new(vlc_argc, vlc_argv); - - if(ev->vlc_player) { - ev->play_ok = 1; - } - - pthread_mutex_init(&ef->frame_copy_lock, NULL); - pthread_create(&t_id, NULL, _em_slave_thread, ev); - - ev->opening = 0; - write(ev->fd_write, &event, sizeof(void *)); - - *emotion_video = ev; - return 1; -} - -static int em_shutdown(void *ef) -{ - Emotion_Vlc_Video *ev; - Emotion_Vlc_Video_Frame *evvf; - - ev = (Emotion_Vlc_Video *)ef; - evvf = ev->cur_frame; - - ASSERT_EV_VLC(ev) return 0; - libvlc_release(ev->vlc_player); - ev->vlc_player = NULL; - - ev->closing = 0; - - ecore_main_fd_handler_del(ev->fd_handler); - - if(evvf) { - if(evvf->frame_A) { - free(evvf->frame_A); - } - if(evvf->frame_B) { - free(evvf->frame_B); - } - pthread_mutex_destroy(&(evvf->frame_copy_lock)); - free(evvf); - } - close(ev->fd_write); - close(ev->fd_read); - close(ev->fd_slave_write); - close(ev->fd_slave_read); - - return 1; -} - -static unsigned char em_file_open(const char *file, Evas_Object *obj, void *ef) -{ - Emotion_Vlc_Video *ev; - int i, method; - Evas *e; - Eina_List *methods, *l; - char *name; -#ifndef _WIN32 - uint32_t xid; -#endif - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_VLC(ev) return 0; - - ev->vlc_m = libvlc_media_new_path(ev->vlc_player, file); - ASSERT_EV_M(ev) return 0; - ev->vlc_mp = libvlc_media_player_new_from_media(ev->vlc_m); - libvlc_media_release(ev->vlc_m); - ev->vlc_m = NULL; - ASSERT_EV_MP(ev) return 0; - - e = evas_object_evas_get(obj); - method = evas_output_method_get(e); - methods = evas_render_method_list(); - EINA_LIST_FOREACH(methods, l, name) - if (evas_render_method_lookup(name) == method) break; - -#ifdef _WIN32 /* NOT IMPLEMENTED YET */ - libvlc_media_player_set_hwnd(ev->vlc_mp, (void*)xid); -#else -#ifdef HAVE_EVAS_SOFWARE_X11 - if (!strcmp(name, "software_x11")) - { - Evas_Engine_Info_Software_X11 *einfo; - einfo = (Evas_Engine_Info_Software_X11*)evas_engine_info_get(e); - xid = einfo->info.drawable; - } -#endif -#ifdef HAVE_EVAS_OPENGL_X11 - if (!strcmp(name, "gl_x11")) - { - Evas_Engine_Info_GL_X11 *einfo; - einfo = (Evas_Engine_Info_GL_X11*)evas_engine_info_get(e); - xid = einfo->info.drawable; - } -#endif - if (strcmp(name, "software_x11") && strcmp(name, "gl_x11")) /* FIXME */ - { - fprintf(stderr, "FATAL: engine unsupported!\n"); - exit(1); - } - libvlc_media_player_set_xwindow(ev->vlc_mp, xid); -#endif - - ev->vlc_evtmngr = libvlc_media_player_event_manager (ev->vlc_mp); - - for(i = EVENT_BEG_ID; ivlc_evtmngr, (libvlc_event_type_t)i, _em_event, ev); - } - - if(ev->filename) { - free(ev->filename); - ev->filename = NULL; - } - ev->filename = strdup(file); - - /* set properties to video object */ - ev->just_loaded = 1; - evas_render_method_list_free(methods); - return 1; -} - -static void em_file_close(void *ef) -{ - Emotion_Vlc_Video *ev; - int i; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_MP(ev) return; - - for(i = EVENT_BEG_ID; ivlc_evtmngr, (libvlc_event_type_t)i, _em_event, ev); - } - libvlc_media_player_stop(ev->vlc_mp); - libvlc_media_player_release(ev->vlc_mp); - ev->vlc_mp = NULL; - if(ev->filename) { - free(ev->filename); - ev->filename = NULL; - } -} - -static void em_play(void *ef, double pos) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_MP(ev) return; - - ev->play = 1; - ev->play_ok = 0; - - if(pos != ev->pos) { - libvlc_media_player_set_time(ev->vlc_mp, (libvlc_time_t)(pos*1000)); - } - - libvlc_media_player_play(ev->vlc_mp); - - ev->just_loaded = 0; -} - -static void em_stop(void *ef) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_MP(ev) return; - - ev->play = 0; - ev->play_ok = 0; - libvlc_media_player_pause(ev->vlc_mp); -} - -static void em_size_get(void *ef, int *w, int *h) -{ - Emotion_Vlc_Video *ev; - Emotion_Vlc_Video_Frame *fr; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - fr = ev->cur_frame; - - pthread_mutex_lock(&fr->frame_copy_lock); - if(w) *w = ev->w; - if(h) *h = ev->h; - pthread_mutex_unlock(&fr->frame_copy_lock); -} - -static void em_pos_set(void *ef, double pos) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_MP(ev) return; - libvlc_media_player_set_time(ev->vlc_mp, (libvlc_time_t)(pos*1000)); -} - -static double em_len_get(void *ef) -{ - Emotion_Vlc_Video *ev; - ASSERT_EV(ev) return 0; - - ev = (Emotion_Vlc_Video *)ef; - return ev->len; -} - -static int em_fps_num_get(void *ef) -{ - Emotion_Vlc_Video *ev; - - ASSERT_EV(ev) return 0; - ev = (Emotion_Vlc_Video *)ef; - return (int)(ev->fps * 1000.0); -} - -static int em_fps_den_get(void *ef) -{ - Emotion_Vlc_Video *ev; - - return 1000; -} - -static double em_fps_get(void *ef) -{ - Emotion_Vlc_Video *ev; - - ASSERT_EV(ev) return 0; - ev = (Emotion_Vlc_Video *)ef; - return ev->fps; -} - -static double em_pos_get(void *ef) -{ - Emotion_Vlc_Video *ev; - - ASSERT_EV(ev) return 0; - ev = (Emotion_Vlc_Video *)ef; - return ev->pos; -} - -static void em_vis_set(void *ef, Emotion_Vis vis) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - if (ev->vis == vis) return; - ev->vis = vis; -} - -static Emotion_Vis em_vis_get(void *ef) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - return ev->vis; -} - -static Eina_Bool em_vis_supported(void *ef, Emotion_Vis vis) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - return EINA_FALSE; -} - -static double em_ratio_get(void *ef) -{ - double ratio; - Emotion_Vlc_Video *ev; - Emotion_Vlc_Video_Frame *fr; - - ASSERT_EV(ev) return 0; - ev = (Emotion_Vlc_Video *)ef; - fr = ev->cur_frame; - pthread_mutex_lock(&fr->frame_copy_lock); - ratio = ev->ratio; - pthread_mutex_unlock(&fr->frame_copy_lock); - return ratio; -} - -static int em_video_handled(void *ef) -{ - int ret = 0; - Emotion_Vlc_Video *ev; - - ASSERT_EV(ev) return 0; - ASSERT_EV_MP(ev) return 0; - ev = (Emotion_Vlc_Video *)ef; - if (ev->opening || (!ev->play_ok)) return 0; - - ret = libvlc_media_player_has_vout(ev->vlc_mp); - return ret; -} - -static int em_audio_handled(void *ef) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - if (ev->opening || (!ev->play_ok)) return 0; - return 1; -} - -static int em_seekable(void *ef) -{ - int ret = 0; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_MP(ev) return 0; - if (ev->opening || (!ev->play_ok)) return 0; - ret = libvlc_media_player_is_seekable(ev->vlc_mp); - return ret; -} - -static void em_frame_done(void *ef) -{ - return; -} - -static Emotion_Format em_format_get(void *ef) -{ - Emotion_Vlc_Video *ev; - - return EMOTION_FORMAT_BGRA; -} - -static void em_video_data_size_get(void *ef, int *w, int *h) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - if (w) *w = ev->w; - if (h) *h = ev->h; -} - -static int em_yuv_rows_get(void *ef, int w, int h, unsigned char **yrows, unsigned char **urows, unsigned char **vrows) -{ - Emotion_Vlc_Video *ev; - volatile Emotion_Vlc_Video_Frame *fr; - - ev = (Emotion_Vlc_Video *)ef; - fr = ev->cur_frame; - if (!fr) return 0; - if (fr->frame_A) - { - int i; - - // FIXME: this is wrong. see xine/gst modules - for (i = 0; i < h; i++) yrows[i] = fr->frame_A + (i * w); - for (i = 0; i < (h / 2); i++) urows[i] = fr->frame_A + (i * w); - for (i = 0; i < (h / 2); i++) vrows[i] = fr->frame_A + (i * w); - return 1; - } - return 0; -} - -static int em_bgra_data_get(void *ef, unsigned char **bgra_data) -{ - Emotion_Vlc_Video *ev; - Emotion_Vlc_Video_Frame *fr; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - fr = ev->cur_frame; - if (!fr) return 0; - if (fr->frame) - { - /* wait for frame to be ready */ - pthread_mutex_lock(&fr->frame_copy_lock); - /* send cur frame to emotion */ - *bgra_data = fr->frame; - - /* switch frames */ - if(fr->frame == fr->frame_A) { - fr->frame = fr->frame_B; - } else { - fr->frame = fr->frame_A; - } - - /* unlock both frames */ - pthread_mutex_unlock(&fr->frame_copy_lock); - return 1; - } - return 0; -} - -static void _em_resize(Emotion_Vlc_Video *ev, int x, int y) -{ - int i; - int event; - int vlc_argc = 0; - unsigned int tmp; - char const *vlc_argv[] = - { - "-q", - //"-vvvvv", - "--ignore-config", - "--vout", "vmem", - "--vmem-width", ev->width, - "--vmem-height", ev->height, - "--vmem-pitch", ev->pitch, - "--vmem-chroma", "RV32", - "--vmem-lock", ev->clock, - "--vmem-unlock", ev->cunlock, - "--vmem-data", ev->cdata, - }; - Emotion_Vlc_Video_Frame *fr; - - ASSERT_EV(ev) return; - ASSERT_EV_VLC(ev) return; - fr = ev->cur_frame; - - /* We look for new size if not specified */ - if ((x == -1) || (y == -1)) - if (!libvlc_video_get_size(ev->vlc_mp, tmp, &x, &y)) return; - - /* stop vlc if necessary */ - if(ev->filename) { - libvlc_media_player_stop(ev->vlc_mp); - libvlc_media_player_release(ev->vlc_mp); - } - - /* update size in object */ - ev->w = x; - ev->h = y; - ev->ratio = (double)x/(double)y; - - /* we need to restart vlc */ - libvlc_release(ev->vlc_player); - vlc_argc = sizeof(vlc_argv) / sizeof(*vlc_argv); - sprintf(ev->clock, "%lld", (long long int)(intptr_t)_em_lock); - sprintf(ev->cunlock, "%lld", (long long int)(intptr_t)_em_unlock); - sprintf(ev->cdata, "%lld", (long long int)(intptr_t)ev); - sprintf(ev->width, "%d", ev->w); - sprintf(ev->height, "%d", ev->h); - sprintf(ev->pitch, "%d", 4*ev->w); - ev->vlc_player = libvlc_new(vlc_argc, vlc_argv); - - pthread_mutex_lock(&fr->frame_copy_lock); - - if(ev->filename) { - /* relaunch media and mediaplayer */ - ev->vlc_m = libvlc_media_new_path(ev->vlc_player, ev->filename); - ASSERT_EV_M(ev) return; - ev->vlc_mp = libvlc_media_player_new_from_media(ev->vlc_m); - libvlc_media_release(ev->vlc_m); - ev->vlc_m = NULL; - ASSERT_EV_MP(ev) return; - - ev->vlc_evtmngr = libvlc_media_player_event_manager (ev->vlc_mp); - - for(i = EVENT_BEG_ID; ivlc_evtmngr, (libvlc_event_type_t)i, _em_event, ev); - } - } - - /* resize frames */ - if(fr->frame_A) { - free(fr->frame_A); - } - if(fr->frame_B) { - free(fr->frame_B); - } - fr->frame_A = malloc(ev->w*ev->h*sizeof(char)*4); - fr->frame_B = malloc(ev->w*ev->h*sizeof(char)*4); - memset(fr->frame_A, 0xFF, x*y*sizeof(char)*4); - memset(fr->frame_B, 0xFF, x*y*sizeof(char)*4); - fr->frame = fr->frame_A; - - /* notify a new frame is available */ - event = VLC_RESIZE; - write(ev->fd_write, &event, sizeof(void *)); - - pthread_mutex_unlock(&fr->frame_copy_lock); - - /* unlock both frames */ - if(ev->filename) { - libvlc_media_player_play(ev->vlc_mp); - } - - /* activate display */ - ev->video_mute = 0; -} - -static Eina_Bool _em_fd_active(Emotion_Vlc_Video *ev, Ecore_Fd_Handler *fdh) -{ - /* this only used for ecore notification */ - /* every other internal event should be done in _em_slave_thread */ - int event; - int fd, len; - Emotion_Vlc_Video_Frame *fr; - - fd = ecore_main_fd_handler_fd_get(fdh); - while((len = read(fd, &event, sizeof(int))) > 0) { - if(len == sizeof(int)) { - switch(event) { - case VLC_NEW_FRAME: - ASSERT_EV(ev) return EINA_TRUE; - _emotion_frame_new(ev->obj); - break; - case VLC_RESIZE: - ASSERT_EV(ev) return EINA_TRUE; - _emotion_frame_resize(ev->obj, ev->w, ev->h, ev->ratio); - break; - default: - break; - } - } - } - return EINA_TRUE; -} - - -/* STUB */ -static void em_event_feed(void *ef, int event) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - if ((ev->opening) || (!ev->play_ok)) return; - - switch (event) - { - case EMOTION_EVENT_MENU1: - break; - case EMOTION_EVENT_MENU2: - break; - case EMOTION_EVENT_MENU3: - break; - case EMOTION_EVENT_MENU4: - break; - case EMOTION_EVENT_MENU5: - break; - case EMOTION_EVENT_MENU6: - break; - case EMOTION_EVENT_MENU7: - break; - case EMOTION_EVENT_UP: - break; - case EMOTION_EVENT_DOWN: - break; - case EMOTION_EVENT_LEFT: - break; - case EMOTION_EVENT_RIGHT: - break; - case EMOTION_EVENT_SELECT: - break; - case EMOTION_EVENT_NEXT: - break; - case EMOTION_EVENT_PREV: - break; - case EMOTION_EVENT_ANGLE_NEXT: - break; - case EMOTION_EVENT_ANGLE_PREV: - break; - case EMOTION_EVENT_FORCE: - break; - case EMOTION_EVENT_0: - break; - case EMOTION_EVENT_1: - break; - case EMOTION_EVENT_2: - break; - case EMOTION_EVENT_3: - break; - case EMOTION_EVENT_4: - break; - case EMOTION_EVENT_5: - break; - case EMOTION_EVENT_6: - break; - case EMOTION_EVENT_7: - break; - case EMOTION_EVENT_8: - break; - case EMOTION_EVENT_9: - break; - case EMOTION_EVENT_10: - break; - default: - return; - break; - } -} - -/* STUB */ -static void em_event_mouse_button_feed(void *ef, int button, int x, int y) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - if ((ev->opening) || (!ev->play_ok)) return; -} - -/* STUB */ -static void em_event_mouse_move_feed(void *ef, int x, int y) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - if ((ev->opening) || (!ev->play_ok)) return; -} - -static int em_video_channel_count(void *ef) -{ - int ret = 0; - Emotion_Vlc_Video *ev; - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_MP(ev) return 0; - if (ev->opening || (!ev->play_ok)) return 0; - ret = libvlc_media_player_has_vout(ev->vlc_mp); - return ret; -} - -/* STUB */ -static void em_video_channel_set(void *ef, int channel) -{ - return; -} - -/* STUB */ -static int em_video_channel_get(void *ef) -{ - return 1; -} - -/* STUB */ -static const char * em_video_channel_name_get(void *ef, int channel) -{ - Emotion_Vlc_Video *ev; - return NULL; -} - -static void em_video_channel_mute_set(void *ef, int mute) -{ - Emotion_Vlc_Video *ev; - ev = (Emotion_Vlc_Video*)ef; - ASSERT_EV(ev) return; - ev->video_mute = mute; -} - -static int em_video_channel_mute_get(void *ef) -{ - Emotion_Vlc_Video *ev; - ev = (Emotion_Vlc_Video*)ef; - ASSERT_EV(ev) return; - return ev->video_mute; -} - -/* STUB */ -static int em_audio_channel_count(void *ef) -{ - return -1; -} - -static void em_audio_channel_set(void *ef, int channel) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_VLC(ev) return; - if (channel < -1) channel = -1; - ev->audio_channel = channel; - libvlc_audio_set_channel(ev->vlc_mp, channel); -} - -static int em_audio_channel_get(void *ef) -{ - int ret = 0; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_VLC(ev) return 0; - if (ev->opening || (!ev->play_ok)) return 0; - ret = libvlc_audio_get_channel(ev->vlc_mp); - return ret; -} - -/* STUB */ -static const char * em_audio_channel_name_get(void *ef, int channel) -{ - return NULL; -} - -static void em_audio_channel_mute_set(void *ef, int mute) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_VLC(ev) return; - ev->audio_mute = mute; - libvlc_audio_set_mute(ev->vlc_mp, (int)(ev->audio_mute)); -} - -static int em_audio_channel_mute_get(void *ef) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - return ev->audio_mute; -} - -static void em_audio_channel_volume_set(void *ef, double vol) -{ - int event = VLC_CHANGE_VOL; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_VLC(ev) return; - - if (vol < 0.0) vol = 0.0; - if (vol > 1.0) vol = 1.0; - libvlc_audio_set_volume(ev->vlc_mp, (int)(vol * 200)); - write(ev->fd_slave_write, &event, sizeof(void *)); -} - -static double em_audio_channel_volume_get(void *ef) -{ - int vol; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_VLC(ev) return; - if (ev->opening || (!ev->play_ok)) return 0; - vol = libvlc_audio_get_volume(ev->vlc_mp); - return (double)(vol/200.0); -} - -/* STUB */ -static int em_spu_channel_count(void *ef) -{ - return 0; -} - -static void em_spu_channel_set(void *ef, int channel) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_MP(ev) return; - if (channel < 0) channel = 0; - ev->spu_channel = channel; - libvlc_video_set_spu(ev->vlc_mp, ev->spu_channel); -} - -static int em_spu_channel_get(void *ef) -{ - int num = 0; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_MP(ev) return 0; - if (ev->opening || (!ev->play_ok)) return 0; - num = libvlc_video_get_spu(ev->vlc_mp); - return num; -} - -/* STUB */ -static const char * em_spu_channel_name_get(void *ef, int channel) -{ - return NULL; -} - -/* STUB */ -static void em_spu_channel_mute_set(void *ef, int mute) -{ - return; -} - -/* STUB */ -static int em_spu_channel_mute_get(void *ef) -{ - return 0; -} - -static int em_chapter_count(void *ef) -{ - int num = 0; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_MP(ev) return 0; - if (ev->opening || (!ev->play_ok)) return 0; - num = libvlc_media_player_get_chapter_count(ev->vlc_mp); - return num; -} - -static void em_chapter_set(void *ef, int chapter) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_MP(ev) return ; - libvlc_media_player_set_chapter(ev->vlc_mp, chapter); -} - -static int em_chapter_get(void *ef) -{ - int num = 0; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_MP(ev) return 0; - num = libvlc_media_player_get_chapter(ev->vlc_mp); - return num; -} - -/* STUB */ -static const char * em_chapter_name_get(void *ef, int chapter) -{ - return NULL; -} - -static void em_speed_set(void *ef, double speed) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return; - ASSERT_EV_MP(ev) return; - libvlc_media_player_set_rate(ev->vlc_mp, speed); -} - -static double em_speed_get(void *ef) -{ - float speed = 0; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return 0; - ASSERT_EV_MP(ev) return 0; - speed = libvlc_media_player_get_rate(ev->vlc_mp); - return (double)speed; -} - -static int em_eject(void *ef) -{ - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - if (system("eject")) - fprintf(stderr, "Eject failed!\n"); - return 1; -} - -static const char * em_meta_get(void *ef, int meta) -{ - char * meta_data = NULL; - Emotion_Vlc_Video *ev; - - ev = (Emotion_Vlc_Video *)ef; - ASSERT_EV(ev) return NULL; - ASSERT_EV_M(ev) return NULL; - if ((ev->opening) || (!ev->play_ok)) return NULL; - switch (meta) - { - case META_TRACK_TITLE: - meta_data = libvlc_media_get_meta(ev->vlc_m, libvlc_meta_Title); - break; - case META_TRACK_ARTIST: - meta_data = libvlc_media_get_meta(ev->vlc_m, libvlc_meta_Artist); - break; - case META_TRACK_GENRE: - meta_data = libvlc_media_get_meta(ev->vlc_m, libvlc_meta_Genre); - break; - case META_TRACK_COMMENT: - meta_data = libvlc_media_get_meta(ev->vlc_m, libvlc_meta_Description); - break; - case META_TRACK_ALBUM: - meta_data = libvlc_media_get_meta(ev->vlc_m, libvlc_meta_Album); - break; - case META_TRACK_YEAR: - meta_data = libvlc_media_get_meta(ev->vlc_m, libvlc_meta_Date); - break; - case META_TRACK_DISCID: - meta_data = libvlc_media_get_meta(ev->vlc_m, libvlc_meta_TrackID); - break; - default: - break; - } - return meta_data; -} - -static void _em_event(const libvlc_event_t *event, void *data) -{ - Emotion_Vlc_Event *new_ev; - Emotion_Vlc_Video *ev; - - ev = data; - ASSERT_EV(ev) return; - switch (event->type) { - case libvlc_MediaPlayerTimeChanged: { - libvlc_time_t pos = event->u.media_player_time_changed.new_time; - double time = (pos / 1000000.f); - _emotion_video_pos_update(ev->obj, time, 0); - ev->pos = time; - if(ev->len == 0) { - pos = libvlc_media_player_get_length(ev->vlc_mp); - ev->len = (double)(pos / 1000.0); - } - } - case libvlc_MediaPlayerPlaying: { - int x, y; - unsigned int tmp; - float fps = 0; - float pos = 0; - float total_pos = 0; - libvlc_time_t time = 0; - libvlc_time_t total_time = 0; - - /* get video properties */ - total_time = libvlc_media_player_get_length(ev->vlc_mp); - fps = libvlc_media_player_get_fps(ev->vlc_mp); - libvlc_video_get_size(ev->vlc_mp, tmp, &x, &y); - /* set them to object */ - if(ev->fps == 0) { - ev->fps = fps; - } - if(ev->len == 0) { - ev->len = (double)(total_time / 1000.0); - } - if((x != 0) && (y != 0)) { - if((ev->w != x)||(ev->h != y)) { - int event; - event = VLC_RESIZE; - write(ev->fd_slave_write, &event, sizeof(void *)); - } - } - } break; - case libvlc_MediaPlayerEndReached: { - ev->play = 0; - _emotion_decode_stop(ev->obj); - _emotion_playback_finished(ev->obj); - } break; - default: - break; - } -} - -static void *_em_lock(void *par) -{ - Emotion_Vlc_Video *ev; - Emotion_Vlc_Video_Frame *evvf; - - /* get current frame */ - ev = (Emotion_Vlc_Video*)par; - evvf = ev->cur_frame; - - /* lock current frame */ - pthread_mutex_lock(&(evvf->frame_copy_lock)); - - /* send current frame address to vlc */ - return evvf->frame; -} - -static void _em_unlock(void *par) -{ - float p = 0; - int ret; - int event; - Emotion_Vlc_Video *ev; - Emotion_Vlc_Video_Frame *evvf; - - /* get current frame */ - ev = (Emotion_Vlc_Video*)par; - evvf = ev->cur_frame; - - /* notify a new frame is available */ - event = VLC_NEW_FRAME; - - if(ev->video_mute == 0) { - ret = write(ev->fd_write, &event, sizeof(void *)); - } - pthread_mutex_unlock(&(evvf->frame_copy_lock)); - - return; -} - -static Emotion_Video_Module em_module = -{ - em_init, /* init */ - em_shutdown, /* shutdown */ - em_file_open, /* file_open */ - em_file_close, /* file_close */ - em_play, /* play */ - em_stop, /* stop */ - em_size_get, /* size_get */ - em_pos_set, /* pos_set */ - em_len_get, /* len_get */ - em_fps_num_get, /* fps_num_get */ - em_fps_den_get, /* fps_den_get */ - em_fps_get, /* fps_get */ - em_pos_get, /* pos_get */ - em_vis_set, /* vis_set */ - em_vis_get, /* vis_get */ - em_vis_supported, /* vis_supported */ - em_ratio_get, /* ratio_get */ - em_video_handled, /* video_handled */ - em_audio_handled, /* audio_handled */ - em_seekable, /* seekable */ - em_frame_done, /* frame_done */ - em_format_get, /* format_get */ - em_video_data_size_get, /* video_data_size_get */ - em_yuv_rows_get, /* yuv_rows_get */ - em_bgra_data_get, /* bgra_data_get */ - em_event_feed, /* event_feed */ - em_event_mouse_button_feed, /* event_mouse_button_feed */ - em_event_mouse_move_feed, /* event_mouse_move_feed */ - em_video_channel_count, /* video_channel_count */ - em_video_channel_set, /* video_channel_set */ - em_video_channel_get, /* video_channel_get */ - em_video_channel_name_get, /* video_channel_name_get */ - em_video_channel_mute_set, /* video_channel_mute_set */ - em_video_channel_mute_get, /* video_channel_mute_get */ - em_audio_channel_count, /* audio_channel_count */ - em_audio_channel_set, /* audio_channel_set */ - em_audio_channel_get, /* audio_channel_get */ - em_audio_channel_name_get, /* audio_channel_name_get */ - em_audio_channel_mute_set, /* audio_channel_mute_set */ - em_audio_channel_mute_get, /* audio_channel_mute_get */ - em_audio_channel_volume_set, /* audio_channel_volume_set */ - em_audio_channel_volume_get, /* audio_channel_volume_get */ - em_spu_channel_count, /* spu_channel_count */ - em_spu_channel_set, /* spu_channel_set */ - em_spu_channel_get, /* spu_channel_get */ - em_spu_channel_name_get, /* spu_channel_name_get */ - em_spu_channel_mute_set, /* spu_channel_mute_set */ - em_spu_channel_mute_get, /* spu_channel_mute_get */ - em_chapter_count, /* chapter_count */ - em_chapter_set, /* chapter_set */ - em_chapter_get, /* chapter_get */ - em_chapter_name_get, /* chapter_name_get */ - em_speed_set, /* speed_set */ - em_speed_get, /* speed_get */ - em_eject, /* eject */ - em_meta_get, /* meta_get */ - NULL /* handle */ -}; - -static Eina_Bool module_open(Evas_Object *obj, const Emotion_Video_Module **module, void **video, Emotion_Module_Options *opt) -{ - if (!module) { - return EINA_FALSE; - } - - if (!em_module.init(obj, video, opt)) { - return EINA_FALSE; - } - - *module = &em_module; - - return EINA_TRUE; -} - -static void module_close(Emotion_Video_Module *module, void *video) -{ - em_module.shutdown(video); -} - - -Eina_Bool -vlc_module_init(void) -{ - return _emotion_module_register("vlc", module_open, module_close); -} - -void -vlc_module_shutdown(void) -{ - _emotion_module_unregister("vlc"); -} - -#ifndef EMOTION_STATIC_BUILD_VLC - -EINA_MODULE_INIT(vlc_module_init); -EINA_MODULE_SHUTDOWN(vlc_module_shutdown); - -#endif - diff --git a/src/modules/vlc/emotion_vlc.h b/src/modules/vlc/emotion_vlc.h deleted file mode 100644 index 42c1c1e..0000000 --- a/src/modules/vlc/emotion_vlc.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * SICMA AERO SEAT - * code@ife-sit.info - */ - -#ifndef EMOTION_VLC_H -#define EMOTION_VLC_H - -#include -#include -#include - - -/* default values */ -#define WIDTH 10 -#define HEIGHT 10 - -/* internal values */ -#define EVENT_BEG_ID 6 -#define NB_EVENTS 14 - -/* checking macros */ -#define ASSERT_EV(ev) if(!ev) -#define ASSERT_EV_M(ev) if(!ev->vlc_m) -#define ASSERT_EV_MP(ev) if(!ev->vlc_mp) -#define ASSERT_EV_VLC(ev) if(!ev->vlc_player) - -/* internal events */ -#define VLC_NEW_FRAME 1 -#define VLC_RESIZE 2 -#define VLC_CHANGE_VOL 3 - -typedef struct _Emotion_Vlc_Video Emotion_Vlc_Video; -typedef struct _Emotion_Vlc_Video_Frame Emotion_Vlc_Video_Frame; -typedef struct _Emotion_Vlc_Event Emotion_Vlc_Event; - -/* module api EMOTION --> VLC */ -static unsigned char em_init (Evas_Object *obj, void **emotion_video, Emotion_Module_Options *opt); -static int em_shutdown (void *ef); -static unsigned char em_file_open (const char *file, Evas_Object *obj, void *ef); -static void em_file_close (void *ef); -static void em_play (void *ef, double pos); -static void em_stop (void *ef); -static void em_size_get (void *ef, int *w, int *h); -static void em_pos_set (void *ef, double pos); -static double em_len_get (void *ef); -static int em_fps_num_get (void *ef); -static int em_fps_den_get (void *ef); -static double em_fps_get (void *ef); -static double em_pos_get (void *ef); -static void em_vis_set (void *ef, Emotion_Vis vis); -static Emotion_Vis em_vis_get (void *ef); -static Eina_Bool em_vis_supported(void *ef, Emotion_Vis vis); -static double em_ratio_get (void *ef); -static int em_seekable (void *ef); -static void em_frame_done (void *ef); -static Emotion_Format em_format_get (void *ef); -static void em_video_data_size_get (void *ef, int *w, int *h); -static int em_yuv_rows_get (void *ef, int w, int h, unsigned char **yrows, unsigned char **urows, unsigned char **vrows); -static int em_bgra_data_get (void *ef, unsigned char **bgra_data); -static void em_event_feed (void *ef, int event); -static void em_event_mouse_button_feed (void *ef, int button, int x, int y); -static void em_event_mouse_move_feed (void *ef, int x, int y); -static int em_video_channel_count (void *ef); -static void em_video_channel_set (void *ef, int channel); -static int em_video_channel_get (void *ef); -static const char *em_video_channel_name_get (void *ef, int channel); -static void em_video_channel_mute_set (void *ef, int mute); -static int em_video_channel_mute_get (void *ef); -static int em_audio_channel_count (void *ef); -static void em_audio_channel_set (void *ef, int channel); -static int em_audio_channel_get (void *ef); -static const char *em_audio_channel_name_get (void *ef, int channel); -static void em_audio_channel_mute_set (void *ef, int mute); -static int em_audio_channel_mute_get (void *ef); -static void em_audio_channel_volume_set(void *ef, double vol); -static double em_audio_channel_volume_get(void *ef); -static int em_spu_channel_count (void *ef); -static void em_spu_channel_set (void *ef, int channel); -static int em_spu_channel_get (void *ef); -static const char *em_spu_channel_name_get (void *ef, int channel); -static void em_spu_channel_mute_set (void *ef, int mute); -static int em_spu_channel_mute_get (void *ef); -static int em_chapter_count (void *ef); -static void em_chapter_set (void *ef, int chapter); -static int em_chapter_get (void *ef); -static const char *em_chapter_name_get (void *ef, int chapter); -static void em_speed_set (void *ef, double speed); -static double em_speed_get (void *ef); -static int em_eject (void *ef); -static const char *em_meta_get (void *ef, int meta); - -typedef struct _vlc_event_t { - libvlc_event_type_t type; - int data_length; - void * data; -} vlc_event_t; - -/* emotion/vlc main structure */ -struct _Emotion_Vlc_Video -{ - /* vlc objects */ - libvlc_instance_t * vlc_player; - libvlc_media_player_t * vlc_mp; - libvlc_media_t * vlc_m; - libvlc_event_manager_t * vlc_evtmngr; - - /* vlc datas */ - char clock[64], cunlock[64], cdata[64]; - char width[32], height[32], pitch[32]; - - int fd_read, fd_write; - int fd_slave_read, fd_slave_write; - Ecore_Fd_Handler *fd_handler; - - char *filename; - volatile double len; - volatile double pos; - double fps; - double ratio; - int w, h; - Evas_Object *obj; - Emotion_Vlc_Video_Frame *cur_frame; - volatile int spu_channel; - volatile int audio_channel; - volatile int video_channel; - volatile int fq; - Emotion_Vis vis; - unsigned char play : 1; - unsigned char just_loaded : 1; - unsigned char video_mute : 1; - unsigned char audio_mute : 1; - unsigned char spu_mute : 1; - Eina_Bool opt_no_video : 1; - Eina_Bool opt_no_audio : 1; - volatile unsigned char delete_me : 1; - volatile unsigned char opening : 1; - volatile unsigned char closing : 1; - volatile unsigned char have_vo : 1; - volatile unsigned char play_ok : 1; -}; - -/* structure for frames 2 buffers to keep integrity */ -struct _Emotion_Vlc_Video_Frame -{ - unsigned char *frame; - unsigned char *frame_A; - unsigned char *frame_B; - pthread_mutex_t frame_copy_lock; -}; - - -/* internal event struct */ - -struct _Emotion_Vlc_Event -{ - int type; - int mtype; -}; - -#endif -