autofool cleanups... argh! i hate autofools!
authorraster <raster>
Thu, 24 Jun 2004 06:11:36 +0000 (06:11 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 24 Jun 2004 06:11:36 +0000 (06:11 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/e17/libs/emotion@10574 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

autogen.sh
m4/ac_expand_dir.m4 [new file with mode: 0644]
m4/ac_path_generic.m4 [new file with mode: 0644]
src/lib/Emotion.h
src/modules/Makefile.am
src/modules/emotion_xine.c
src/modules/emotion_xine.h
src/modules/xine/Makefile.am

index 778fc5b..88ee7f3 100755 (executable)
 #!/bin/sh
-# Run this to generate all the initial makefiles, etc.
 
-srcdir=`dirname $0`
-PKG_NAME="the package."
+rm -rf autom4te.cache
+rm -f aclocal.m4
 
-DIE=0
+echo "Running aclocal..."; aclocal $ACLOCAL_FLAGS -I m4 \
+&& echo "Running autoheader..."; autoheader \
+&& echo "Running autoconf..."; autoconf \
+&& echo "Running libtoolize..."; libtoolize --automake \
+&& echo "Running automake..."; automake --add-missing --copy --gnu
 
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
-  echo
-  echo "**Error**: You must have \`autoconf' installed to."
-  echo "Download the appropriate package for your distribution,"
-  echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
-  DIE=1
-}
-
-(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && {
-  (libtoolize --version) < /dev/null > /dev/null 2>&1 || {
-    echo
-    echo "**Error**: You must have \`libtool' installed."
-    echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz"
-    echo "(or a newer version if it is available)"
-    DIE=1
-  }
-}
-
-grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
-  grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
-  (gettext --version) < /dev/null > /dev/null 2>&1 || {
-    echo
-    echo "**Error**: You must have \`gettext' installed."
-    echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
-    echo "(or a newer version if it is available)"
-    DIE=1
-  }
-}
-
-(automake --version) < /dev/null > /dev/null 2>&1 || {
-  echo
-  echo "**Error**: You must have \`automake' installed."
-  echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
-  echo "(or a newer version if it is available)"
-  DIE=1
-  NO_AUTOMAKE=yes
-}
-
-
-# if no automake, don't bother testing for aclocal
-test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
-  echo
-  echo "**Error**: Missing \`aclocal'.  The version of \`automake'"
-  echo "installed doesn't appear recent enough."
-  echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
-  echo "(or a newer version if it is available)"
-  DIE=1
-}
-
-if test "$DIE" -eq 1; then
-  exit 1
-fi
-
-if test -z "$*"; then
-  echo "**Warning**: I am going to run \`configure' with no arguments."
-  echo "If you wish to pass any to it, please specify them on the"
-  echo \`$0\'" command line."
-  echo
-fi
-
-case $CC in
-xlc )
-  am_opt=--include-deps;;
-esac
-
-for coin in `find $srcdir -name configure.in -print`
-do 
-  dr=`dirname $coin`
-  if test -f $dr/NO-AUTO-GEN; then
-    echo skipping $dr -- flagged as no auto-gen
-  else
-    echo processing $dr
-    macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin`
-    ( cd $dr
-      aclocalinclude="$ACLOCAL_FLAGS"
-      for k in $macrodirs; do
-       if test -d $k; then
-          aclocalinclude="$aclocalinclude -I $k"
-       ##else 
-       ##  echo "**Warning**: No such directory \`$k'.  Ignored."
-        fi
-      done
-      if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then
-       if grep "sed.*POTFILES" configure.in >/dev/null; then
-         : do nothing -- we still have an old unmodified configure.in
-       else
-         echo "Creating $dr/aclocal.m4 ..."
-         test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
-         echo "Running gettextize...  Ignore non-fatal messages."
-         echo "no" | gettextize --force --copy
-         echo "Making $dr/aclocal.m4 writable ..."
-         test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
-        fi
-      fi
-      if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then
-       echo "Creating $dr/aclocal.m4 ..."
-       test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
-       echo "Running gettextize...  Ignore non-fatal messages."
-       echo "no" | gettextize --force --copy
-       echo "Making $dr/aclocal.m4 writable ..."
-       test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
-      fi
-      if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
-       echo "Running libtoolize..."
-       libtoolize --force --copy
-      fi
-      echo "Running aclocal $aclocalinclude ..."
-      aclocal $aclocalinclude
-      if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then
-       echo "Running autoheader..."
-       autoheader
-      fi
-      echo "Running automake --gnu $am_opt ..."
-      automake --add-missing --gnu $am_opt
-      echo "Running autoconf ..."
-      autoconf
-    )
-  fi
-done
-
-#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
-
-if test x$NOCONFIGURE = x; then
-  echo Running $srcdir/configure $conf_flags "$@" ...
-  $srcdir/configure $conf_flags "$@" \
-  && echo Now type \`make\' to compile $PKG_NAME
-else
-  echo Skipping configure process.
-fi
+###  If you want this, uncomment it.
+./configure "$@"
diff --git a/m4/ac_expand_dir.m4 b/m4/ac_expand_dir.m4
new file mode 100644 (file)
index 0000000..b5599a0
--- /dev/null
@@ -0,0 +1,14 @@
+dnl AC_EXPAND_DIR(VARNAME, DIR)
+dnl expands occurrences of ${prefix} and ${exec_prefix} in the given DIR,
+dnl and assigns the resulting string to VARNAME
+dnl example: AC_DEFINE_DIR(DATADIR, "$datadir")
+dnl by Alexandre Oliva <oliva@dcc.unicamp.br>
+AC_DEFUN([AC_EXPAND_DIR], [
+       $1=$2
+       $1=`(
+           test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+           test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
+           eval echo \""[$]$1"\"
+           )`
+])
+
diff --git a/m4/ac_path_generic.m4 b/m4/ac_path_generic.m4
new file mode 100644 (file)
index 0000000..27b55b3
--- /dev/null
@@ -0,0 +1,136 @@
+dnl @synopsis AC_PATH_GENERIC(LIBRARY [, MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl
+dnl Runs a LIBRARY-config script and defines LIBRARY_CFLAGS and LIBRARY_LIBS
+dnl
+dnl The script must support `--cflags' and `--libs' args.
+dnl If MINIMUM-VERSION is specified, the script must also support the
+dnl `--version' arg.
+dnl If the `--with-library-[exec-]prefix' arguments to ./configure are given,
+dnl it must also support `--prefix' and `--exec-prefix'.
+dnl (In other words, it must be like gtk-config.)
+dnl
+dnl For example:
+dnl
+dnl    AC_PATH_GENERIC(Foo, 1.0.0)
+dnl
+dnl would run `foo-config --version' and check that it is at least 1.0.0
+dnl
+dnl If so, the following would then be defined:
+dnl
+dnl    FOO_CFLAGS to `foo-config --cflags`
+dnl    FOO_LIBS   to `foo-config --libs`
+dnl
+dnl At present there is no support for additional "MODULES" (see AM_PATH_GTK)
+dnl (shamelessly stolen from gtk.m4 and then hacked around a fair amount)
+dnl
+dnl @author Angus Lees <gusl@cse.unsw.edu.au>
+
+AC_DEFUN([AC_PATH_GENERIC],
+[dnl
+dnl we're going to need uppercase, lowercase and user-friendly versions of the
+dnl string `LIBRARY'
+pushdef([UP], translit([$1], [a-z], [A-Z]))dnl
+pushdef([DOWN], translit([$1], [A-Z], [a-z]))dnl
+
+dnl
+dnl Get the cflags and libraries from the LIBRARY-config script
+dnl
+AC_ARG_WITH(DOWN-prefix,[  --with-]DOWN[-prefix=PFX       Prefix where $1 is installed (optional)],
+        DOWN[]_config_prefix="$withval", DOWN[]_config_prefix="")
+AC_ARG_WITH(DOWN-exec-prefix,[  --with-]DOWN[-exec-prefix=PFX Exec prefix where $1 is installed (optional)],
+        DOWN[]_config_exec_prefix="$withval", DOWN[]_config_exec_prefix="")
+
+  if test x$DOWN[]_config_exec_prefix != x ; then
+     DOWN[]_config_args="$DOWN[]_config_args --exec-prefix=$DOWN[]_config_exec_prefix"
+     if test x${UP[]_CONFIG+set} != xset ; then
+       UP[]_CONFIG=$DOWN[]_config_exec_prefix/bin/DOWN-config
+     fi
+  fi
+  if test x$DOWN[]_config_prefix != x ; then
+     DOWN[]_config_args="$DOWN[]_config_args --prefix=$DOWN[]_config_prefix"
+     if test x${UP[]_CONFIG+set} != xset ; then
+       UP[]_CONFIG=$DOWN[]_config_prefix/bin/DOWN-config
+     fi
+  fi
+
+  AC_PATH_PROG(UP[]_CONFIG, DOWN-config, no)
+  ifelse([$2], ,
+     AC_MSG_CHECKING(for $1),
+     AC_MSG_CHECKING(for $1 - version >= $2)
+  )
+  no_[]DOWN=""
+  if test "$UP[]_CONFIG" = "no" ; then
+     no_[]DOWN=yes
+  else
+     UP[]_CFLAGS="`$UP[]_CONFIG $DOWN[]_config_args --cflags`"
+     UP[]_LIBS="`$UP[]_CONFIG $DOWN[]_config_args --libs`"
+     ifelse([$2], , ,[
+        DOWN[]_config_major_version=`$UP[]_CONFIG $DOWN[]_config_args \
+         --version | sed 's/[[^0-9]]*\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+        DOWN[]_config_minor_version=`$UP[]_CONFIG $DOWN[]_config_args \
+         --version | sed 's/[[^0-9]]*\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+        DOWN[]_config_micro_version=`$UP[]_CONFIG $DOWN[]_config_args \
+         --version | sed 's/[[^0-9]]*\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+        DOWN[]_wanted_major_version="regexp($2, [\<\([0-9]*\)], [\1])"
+        DOWN[]_wanted_minor_version="regexp($2, [\<\([0-9]*\)\.\([0-9]*\)], [\2])"
+        DOWN[]_wanted_micro_version="regexp($2, [\<\([0-9]*\).\([0-9]*\).\([0-9]*\)], [\3])"
+
+        # Compare wanted version to what config script returned.
+        # If I knew what library was being run, i'd probably also compile
+        # a test program at this point (which also extracted and tested
+        # the version in some library-specific way)
+        if test "$DOWN[]_config_major_version" -lt \
+                        "$DOWN[]_wanted_major_version" \
+          -o \( "$DOWN[]_config_major_version" -eq \
+                        "$DOWN[]_wanted_major_version" \
+            -a "$DOWN[]_config_minor_version" -lt \
+                        "$DOWN[]_wanted_minor_version" \) \
+          -o \( "$DOWN[]_config_major_version" -eq \
+                        "$DOWN[]_wanted_major_version" \
+            -a "$DOWN[]_config_minor_version" -eq \
+                        "$DOWN[]_wanted_minor_version" \
+            -a "$DOWN[]_config_micro_version" -lt \
+                        "$DOWN[]_wanted_micro_version" \) ; then
+          # older version found
+          no_[]DOWN=yes
+          echo -n "*** An old version of $1 "
+          echo -n "($DOWN[]_config_major_version"
+          echo -n ".$DOWN[]_config_minor_version"
+          echo    ".$DOWN[]_config_micro_version) was found."
+          echo -n "*** You need a version of $1 newer than "
+          echo -n "$DOWN[]_wanted_major_version"
+          echo -n ".$DOWN[]_wanted_minor_version"
+          echo    ".$DOWN[]_wanted_micro_version."
+          echo "***"
+          echo "*** If you have already installed a sufficiently new version, this error"
+          echo "*** probably means that the wrong copy of the DOWN-config shell script is"
+          echo "*** being found. The easiest way to fix this is to remove the old version"
+          echo "*** of $1, but you can also set the UP[]_CONFIG environment to point to the"
+          echo "*** correct copy of DOWN-config. (In this case, you will have to"
+          echo "*** modify your LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf"
+          echo "*** so that the correct libraries are found at run-time)"
+        fi
+     ])
+  fi
+  if test "x$no_[]DOWN" = x ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$3], , :, [$3])
+  else
+     AC_MSG_RESULT(no)
+     if test "$UP[]_CONFIG" = "no" ; then
+       echo "*** The DOWN-config script installed by $1 could not be found"
+       echo "*** If $1 was installed in PREFIX, make sure PREFIX/bin is in"
+       echo "*** your path, or set the UP[]_CONFIG environment variable to the"
+       echo "*** full path to DOWN-config."
+     fi
+     UP[]_CFLAGS=""
+     UP[]_LIBS=""
+     ifelse([$4], , :, [$4])
+  fi
+  AC_SUBST(UP[]_CFLAGS)
+  AC_SUBST(UP[]_LIBS)
+
+  popdef([UP])
+  popdef([DOWN])
+])
+
index c621554..9404310 100644 (file)
@@ -6,13 +6,13 @@
 
 enum _Emotion_Event
 {
-   EMOTION_EVENT_MENU1,
-   EMOTION_EVENT_MENU2,
-   EMOTION_EVENT_MENU3,
-   EMOTION_EVENT_MENU4,
-   EMOTION_EVENT_MENU5,
-   EMOTION_EVENT_MENU6,
-   EMOTION_EVENT_MENU7,
+   EMOTION_EVENT_MENU1, // Escape Menu
+   EMOTION_EVENT_MENU2, // Title Menu
+   EMOTION_EVENT_MENU3, // Root Menu
+   EMOTION_EVENT_MENU4, // Subpicture Menu
+   EMOTION_EVENT_MENU5, // Audio Menu
+   EMOTION_EVENT_MENU6, // Angle Menu
+   EMOTION_EVENT_MENU7, // Part Menu
    EMOTION_EVENT_UP,
    EMOTION_EVENT_DOWN,
    EMOTION_EVENT_LEFT,
index e5ee9f8..9403be3 100644 (file)
@@ -2,7 +2,7 @@
 
 SUBDIRS = xine
 
-AUTOMAKE_OPTIONS     = 1.4 foreign
+#AUTOMAKE_OPTIONS     = 1.4 foreign
 
 MAINTAINERCLEANFILES = Makefile.in
 
@@ -22,6 +22,6 @@ emotion_xine.h
 emotion_decoder_xine_la_LIBADD       = @my_libs@ @xine_libs@
 emotion_decoder_xine_la_LDFLAGS      = \
 $(LDFLAGS) \
--no-undefined -module -avoid-version \
+-module -avoid-version \
 -L$(top_builddir)/src/lib -L$(top_builddir)/src/lib/.libs
 emotion_decoder_xine_la_DEPENDENCIES = $(top_builddir)/config.h
index f3b2f08..4044ef5 100644 (file)
@@ -10,6 +10,9 @@ static int        init_count = 0;
 static int        fd_read = -1;
 static int        fd_write = -1;
 Ecore_Fd_Handler *fd_handler = NULL;
+static int        fd_ev_read = -1;
+static int        fd_ev_write = -1;
+Ecore_Fd_Handler *fd_ev_handler = NULL;
 static xine_t    *decoder = NULL;
 
 static int em_init(void);
@@ -59,9 +62,11 @@ static void em_speed_set(void *ef, double speed);
 static double em_speed_get(void *ef);
 static int em_eject(void *ef);
 
-static void *_em_seek     (void *par);
-static int   _em_fd_active(void *data, Ecore_Fd_Handler *fdh);
-static int   _em_timer    (void *data);
+static void *_em_seek        (void *par);
+static int   _em_fd_active   (void *data, Ecore_Fd_Handler *fdh);
+static void  _em_event       (void *data, const xine_event_t *event);
+static int   _em_fd_ev_active(void *data, Ecore_Fd_Handler *fdh);
+static int   _em_timer       (void *data);
 
 static int
 em_init(void)
@@ -100,6 +105,23 @@ em_init(void)
                  ecore_main_fd_handler_active_set(fd_handler, ECORE_FD_READ);
               }
          }
+         {
+            int fds[2];
+            
+            if (pipe(fds) == 0)
+              {
+                 fd_ev_read = fds[0];
+                 fd_ev_write = fds[1];
+                 fcntl(fd_ev_read, F_SETFL, O_NONBLOCK);
+                 fd_ev_handler = ecore_main_fd_handler_add(fd_ev_read, 
+                                                           ECORE_FD_READ, 
+                                                           _em_fd_ev_active,
+                                                           decoder,
+                                                           NULL,
+                                                           NULL);
+                 ecore_main_fd_handler_active_set(fd_ev_handler, ECORE_FD_READ);
+              }
+         }
      }
    return init_count;
 }
@@ -115,11 +137,17 @@ em_shutdown(void)
        ecore_main_fd_handler_del(fd_handler);
        close(fd_write);
        close(fd_read);
+       ecore_main_fd_handler_del(fd_ev_handler);
+       close(fd_ev_write);
+       close(fd_ev_read);
        
        decoder = NULL;
        fd_handler = NULL;
        fd_read = -1;
        fd_write = -1;
+       fd_ev_handler = NULL;
+       fd_ev_read = -1;
+       fd_ev_write = -1;
      }
    return 0;
 }
@@ -218,10 +246,29 @@ em_file_open(const char *file, Evas_Object *obj)
      }
    if (1)
      {
+       xine_mrl_t **mrls;
+       int mrls_num;
+       
+       mrls = xine_get_browse_mrls(decoder, "dvd", "dvd://", &mrls_num);
+       printf("mrls = %p\n", mrls);
+       if (mrls)
+         {
+            int i;
+            
+            for (i = 0; i < mrls_num; i++)
+              {
+                 printf("MRL: origin \"%s\" mrl \"%s\" link \"%s\" type %x size %i\n", 
+                        mrls[i]->origin, mrls[i]->mrl, mrls[i]->link,
+                        (int)mrls[i]->type, (int)mrls[i]->size);
+              }
+         }
+     }
+   if (1)
+     {
        char **auto_play_mrls;
        int auto_play_num;
        
-       auto_play_mrls = xine_get_autoplay_mrls(decoder, "cdda", &auto_play_num);
+       auto_play_mrls = xine_get_autoplay_mrls(decoder, "dvd", &auto_play_num);
        printf("auto_play_mrls = %p\n", auto_play_mrls);
        if (auto_play_mrls)
          {
@@ -232,13 +279,19 @@ em_file_open(const char *file, Evas_Object *obj)
          }
      }
    ev->video = xine_open_video_driver(decoder, "emotion", XINE_VISUAL_TYPE_NONE, ev);
-   ev->audio = xine_open_audio_driver(decoder, "oss", ev);
+   ev->audio = xine_open_audio_driver(decoder, "oss", ev); 
+//   ev->audio = xine_open_audio_driver(decoder, "alsa", ev);
+//   ev->audio = xine_open_audio_driver(decoder, "arts", ev);
+//   ev->audio = xine_open_audio_driver(decoder, "esd", ev);
    ev->stream = xine_stream_new(decoder, ev->audio, ev->video);
+   ev->queue = xine_event_new_queue(ev->stream);
+   xine_event_create_listener_thread(ev->queue, _em_event, ev);
    if (!xine_open(ev->stream, file))
      {
        xine_dispose(ev->stream);
        if (ev->video) xine_close_video_driver(decoder, ev->video);
        if (ev->audio) xine_close_audio_driver(decoder, ev->audio);
+       xine_event_dispose_queue(ev->queue);
        free(ev);
        return NULL;
      }
@@ -270,6 +323,7 @@ em_file_close(void *ef)
    xine_stop(ev->stream);
    xine_close(ev->stream);
    xine_dispose(ev->stream);
+   xine_event_dispose_queue(ev->queue);
    if (ev->video) xine_close_video_driver(decoder, ev->video);
    if (ev->audio) xine_close_audio_driver(decoder, ev->audio);
    if (ev->timer) ecore_timer_del(ev->timer);
@@ -906,9 +960,9 @@ _em_fd_active(void *data, Ecore_Fd_Handler *fdh)
    int length_time = 0;
    
    fd = ecore_main_fd_handler_fd_get(fdh);
-   while ((len = read(fd, &buf, sizeof(void *))) > 0)
+   while ((len = read(fd, &buf, sizeof(buf))) > 0)
      {
-       if (len == sizeof(void *))
+       if (len == sizeof(buf))
          {
             fr = buf;
             ev = _emotion_video_get(fr->obj);
@@ -948,6 +1002,149 @@ _em_fd_active(void *data, Ecore_Fd_Handler *fdh)
      }
 }
 
+static void
+_em_event(void *data, const xine_event_t *event)
+{
+   void *buf[2];
+   Emotion_Xine_Event *new_ev;
+   
+   new_ev = calloc(1, sizeof(Emotion_Xine_Event));
+   if (!new_ev) return;
+   new_ev->type = event->type;
+   if (event->data)
+     {
+       new_ev->xine_event = malloc(event->data_length);
+       if (!new_ev->xine_event)
+         {
+            free(new_ev);
+            return;
+         }
+       memcpy(new_ev->xine_event, event->data, event->data_length);
+     }
+   buf[0] = data;
+   buf[1] = new_ev;
+   write(fd_ev_write, buf, sizeof(buf));
+}
+
+static int
+_em_fd_ev_active(void *data, Ecore_Fd_Handler *fdh)
+{
+   int fd, len;
+   void *buf[2];
+   
+   fd = ecore_main_fd_handler_fd_get(fdh);
+   while ((len = read(fd, buf, sizeof(buf))) > 0)
+     {
+       if (len == sizeof(buf))
+         {
+            Emotion_Xine_Video *ev;
+            Emotion_Xine_Event *eev;
+            
+            printf("event from xine...\n");
+            ev = buf[0];
+            eev = buf[1];
+            switch (eev->type)
+              {
+               case XINE_EVENT_UI_PLAYBACK_FINISHED:
+                   {
+                      printf("EV: Playback finished\n");
+                      /* no data in this event */
+                   }
+                 break;
+               case XINE_EVENT_UI_CHANNELS_CHANGED:
+                   {
+                      printf("EV: Channels changed\n");
+                      /* no data in this event */
+                   }
+                 break;
+               case XINE_EVENT_UI_SET_TITLE:
+                   {
+                      xine_ui_data_t *ev;
+                      
+                      ev = eev->xine_event;
+                      printf("EV: New Title \"%s\"\n", ev->str);
+                      // title is ev->str
+                   }
+                 break;
+               case XINE_EVENT_UI_MESSAGE:
+                   {
+                      xine_ui_message_data_t *ev;
+                      
+                      ev = eev->xine_event;
+                      printf("EV: UI Message\n");
+                      // ev->type = error type(XINE_MSG_NO_ERROR, XINE_MSG_GENERAL_WARNING, XINE_MSG_UNKNOWN_HOST etc.)
+                      // ev->messages is a list of messages DOUBLE null terminated
+                   }
+                 break;
+               case XINE_EVENT_AUDIO_LEVEL:
+                   {
+                      xine_audio_level_data_t *ev;
+            
+                      ev = eev->xine_event;
+                      printf("EV: Audio Level\n");
+                      // ev->left (0->100) 
+                      // ev->right
+                      // ev->mute
+                   }
+                 break;
+               case XINE_EVENT_PROGRESS:
+                   {
+                      xine_progress_data_t *ev;
+                      
+                      ev = eev->xine_event;
+                      printf("EV: Progress \"%s\" %i%%\n", ev->description, ev->percent);
+                      // ev->description is text
+                      // ev->percent is a percentage marker (0-100)
+                   }
+                 break;
+               case XINE_EVENT_MRL_REFERENCE:
+                   {
+                      xine_mrl_reference_data_t *ev;
+                      
+                      ev = eev->xine_event;
+                      printf("EV: MRL Ref to \"%s\"\n", ev->mrl);
+                      // ev->alternative alternative playlist no
+                      // ev->mrl is the mrl
+                   }
+                 break;
+               case XINE_EVENT_UI_NUM_BUTTONS:
+                   {
+                      xine_ui_data_t *ev;
+                      
+                      ev = eev->xine_event;
+                      printf("EV: Num buttons %i\n", ev->num_buttons);
+                      // ev->num_buttons indicates how many buttons in the spu
+                   }
+                 break;
+               case XINE_EVENT_SPU_BUTTON:
+                   {
+                      xine_spu_button_t *ev;
+                      
+                      ev = eev->xine_event;
+                      printf("EV: Button enter? [%i] %i\n", ev->direction, ev->button);
+                      // ev->direction 1 = enter, 0 = leave
+                      // ev->button button number entered/left
+                   }
+                 break;
+               case XINE_EVENT_DROPPED_FRAMES:
+                   {
+                      xine_dropped_frames_t *ev;
+                      
+                      ev = eev->xine_event;
+                      printf("EV: Dropped Frames (skipped %i) (discarded %i)\n", ev->skipped_frames, ev->discarded_frames);
+                      // ev->skipped_frames = % frames skipped * 10
+                      // ev->discarded_frames = % frames skipped * 10
+                   }
+                 break;
+               default:
+                 return;
+              }
+            if (eev->xine_event) free(eev->xine_event);
+            free(eev);
+         }
+     }
+}
+
 static int
 _em_timer(void *data)
 {
index 0a819fc..e7ff00e 100644 (file)
@@ -5,12 +5,14 @@
 
 typedef struct _Emotion_Xine_Video       Emotion_Xine_Video;
 typedef struct _Emotion_Xine_Video_Frame Emotion_Xine_Video_Frame;
+typedef struct _Emotion_Xine_Event Emotion_Xine_Event;
 
 struct _Emotion_Xine_Video
 {
    xine_video_port_t        *video;
    xine_audio_port_t        *audio;
    xine_stream_t            *stream;
+   xine_event_queue_t       *queue;
    int                       fd;
    double                    len;
    double                    pos;
@@ -42,6 +44,12 @@ struct _Emotion_Xine_Video_Frame
    void          *frame;
 };
 
+struct _Emotion_Xine_Event
+{
+   int type;
+   char *xine_event;
+};
+
 Emotion_Video_Module *module_open (void);
 void                  module_close(Emotion_Video_Module *module);
 
index 9edd65b..d249514 100644 (file)
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 
-AUTOMAKE_OPTIONS     = 1.4 foreign
+#AUTOMAKE_OPTIONS     = 1.4 foreign
 
 MAINTAINERCLEANFILES = Makefile.in
 
@@ -20,6 +20,6 @@ emotion_xine_vo_out.c
 xineplug_vo_out_emotion_la_LIBADD       = @xine_libs@
 xineplug_vo_out_emotion_la_LDFLAGS      = \
 $(LDFLAGS) \
--no-undefined -module -avoid-version \
+-module -avoid-version \
 -L$(top_builddir)/src/lib -L$(top_builddir)/src/lib/.libs
 xineplug_vo_out_emotion_la_DEPENDENCIES = $(top_builddir)/config.h