Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/emotion
Dir : e17/libs/emotion/src/modules
Modified Files:
Makefile.am emotion_xine.c emotion_xine.h
Log Message:
autofool cleanups... argh! i hate autofools!
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/emotion/src/modules/Makefile.am,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- Makefile.am 18 Jun 2004 15:38:03 -0000 1.1
+++ Makefile.am 24 Jun 2004 06:11:32 -0000 1.2
@@ -2,7 +2,7 @@
SUBDIRS = xine
-AUTOMAKE_OPTIONS = 1.4 foreign
+#AUTOMAKE_OPTIONS = 1.4 foreign
MAINTAINERCLEANFILES = Makefile.in
@@ -22,6 +22,6 @@
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
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/emotion/src/modules/emotion_xine.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- emotion_xine.c 18 Jun 2004 15:38:03 -0000 1.1
+++ emotion_xine.c 24 Jun 2004 06:11:32 -0000 1.2
@@ -10,6 +10,9 @@
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 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 @@
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 @@
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 @@
}
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 @@
}
}
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 @@
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 @@
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 @@
}
}
+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)
{
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/emotion/src/modules/emotion_xine.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- emotion_xine.h 18 Jun 2004 15:38:03 -0000 1.1
+++ emotion_xine.h 24 Jun 2004 06:11:32 -0000 1.2
@@ -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 @@
void *frame;
};
+struct _Emotion_Xine_Event
+{
+ int type;
+ char *xine_event;
+};
+
Emotion_Video_Module *module_open (void);
void module_close(Emotion_Video_Module *module);
-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
digital self defense, top technical experts, no vendor pitches,
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs