summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-01-05 21:54:16 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-01-05 21:54:16 +0000
commit3517e658ee37cb82ba28a4e05fc708bba9e82af6 (patch)
tree87b06c4615628418db6f829a663d8bca06173b1f
parentbb5d65d9f49e148de4f3b402d7a87956b05f5a4a (diff)
downloadxine-lib-3517e658ee37cb82ba28a4e05fc708bba9e82af6.tar.gz
xine-lib-3517e658ee37cb82ba28a4e05fc708bba9e82af6.tar.bz2
updates for closed caption decoder
CVS patchset: 1344 CVS date: 2002/01/05 21:54:16
-rw-r--r--include/xine.h.tmpl.in7
-rw-r--r--misc/fonts/Makefile.am7
-rw-r--r--src/liba52/xine_decoder.c8
-rw-r--r--src/libdivx4/xine_decoder.c10
-rw-r--r--src/libdts/xine_decoder.c6
-rw-r--r--src/libffmpeg/xine_decoder.c6
-rw-r--r--src/liblpcm/xine_decoder.c6
-rw-r--r--src/libmad/xine_decoder.c6
-rw-r--r--src/libmpeg2/decode.c48
-rw-r--r--src/libmpeg2/mpeg2.h9
-rw-r--r--src/libmpeg2/xine_decoder.c8
-rw-r--r--src/libvfill/xine_decoder.c4
-rw-r--r--src/libvorbis/xine_decoder.c6
-rw-r--r--src/libw32dll/w32codec.c21
-rw-r--r--src/xine-engine/events.h21
-rw-r--r--src/xine-engine/load_plugins.c6
-rw-r--r--src/xine-engine/osd.c19
-rw-r--r--src/xine-engine/osd.h10
-rw-r--r--src/xine-engine/xine_internal.h4
19 files changed, 159 insertions, 53 deletions
diff --git a/include/xine.h.tmpl.in b/include/xine.h.tmpl.in
index f02c51c0d..3b83ef708 100644
--- a/include/xine.h.tmpl.in
+++ b/include/xine.h.tmpl.in
@@ -28,7 +28,7 @@
\endverbatim
*/
/*
- * $Id: xine.h.tmpl.in,v 1.71 2001/12/27 14:30:29 f1rmb Exp $
+ * $Id: xine.h.tmpl.in,v 1.72 2002/01/05 21:54:16 miguelfreitas Exp $
*
*/
@@ -1707,6 +1707,11 @@ struct osd_renderer_s {
*/
void (*close) (osd_renderer_t *self);
+ /*
+ * clear an osd object
+ */
+ void (*clear) (osd_object_t *osd );
+
};
osd_renderer_t *xine_get_osd_renderer (xine_t *self);
diff --git a/misc/fonts/Makefile.am b/misc/fonts/Makefile.am
index 1c64c22da..135dabb4a 100644
--- a/misc/fonts/Makefile.am
+++ b/misc/fonts/Makefile.am
@@ -3,9 +3,10 @@ data_DATA = mono-16.xinefont.gz sans-16.xinefont.gz serif-16.xinefont.gz \
mono-20.xinefont.gz sans-20.xinefont.gz serif-20.xinefont.gz \
mono-24.xinefont.gz sans-24.xinefont.gz serif-24.xinefont.gz \
mono-32.xinefont.gz sans-32.xinefont.gz serif-32.xinefont.gz \
- cetus-16.xinefont.gz cetus-24.xinefont.gz \
- cetus-20.xinefont.gz cetus-32.xinefont.gz
-
+ cetus-16.xinefont.gz cetus-20.xinefont.gz cetus-24.xinefont.gz \
+ cetus-32.xinefont.gz cc-16.xinefont.gz cc-20.xinefont.gz \
+ cc-24.xinefont.gz cc-32.xinefont.gz cci-16.xinefont.gz \
+ cci-20.xinefont.gz cci-24.xinefont.gz cci-32.xinefont.gz
#
# font used for osd
diff --git a/src/liba52/xine_decoder.c b/src/liba52/xine_decoder.c
index 58b1cbf8a..52910aada 100644
--- a/src/liba52/xine_decoder.c
+++ b/src/liba52/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.15 2001/12/11 15:30:05 miguelfreitas Exp $
+ * $Id: xine_decoder.c,v 1.16 2002/01/05 21:54:17 miguelfreitas Exp $
*
* stuff needed to turn liba52 into a xine decoder plugin
*/
@@ -553,11 +553,12 @@ static char *a52dec_get_id(void) {
return "a/52dec";
}
-audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *cfg) {
+audio_decoder_t *init_audio_decoder_plugin (int iface_version, xine_t *xine) {
a52dec_decoder_t *this ;
+ config_values_t *cfg;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "liba52: plugin doesn't support plugin API version %d.\n"
"liba52: this means there's a version mismatch between xine and this "
"liba52: decoder plugin.\nInstalling current plugins should help.\n",
@@ -565,6 +566,7 @@ audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *
return NULL;
}
+ cfg = xine->config;
this = (a52dec_decoder_t *) malloc (sizeof (a52dec_decoder_t));
memset(this, 0, sizeof (a52dec_decoder_t));
diff --git a/src/libdivx4/xine_decoder.c b/src/libdivx4/xine_decoder.c
index 57ae983eb..ce63350b6 100644
--- a/src/libdivx4/xine_decoder.c
+++ b/src/libdivx4/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.15 2001/12/29 04:32:36 miguelfreitas Exp $
+ * $Id: xine_decoder.c,v 1.16 2002/01/05 21:54:17 miguelfreitas Exp $
*
* xine decoder plugin using divx4
*
@@ -466,14 +466,15 @@ static char *divx4_get_id(void) {
/* This is pretty generic. I took the liberty to increase the
priority over that of libffmpeg :-) */
-video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *cfg) {
+video_decoder_t *init_video_decoder_plugin (int iface_version, xine_t *xine) {
divx4_decoder_t *this ;
char *libdecore_name;
void *libdecore_handle;
decoreFunc libdecore_func = 0;
+ config_values_t *cfg;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "divx4: plugin doesn't support plugin API version %d.\n"
"divx4: this means there's a version mismatch between xine and this "
"divx4: decoder plugin.\nInstalling current plugins should help.\n",
@@ -481,7 +482,8 @@ video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *
return NULL;
}
-
+ cfg = xine->config;
+
/* Try to dlopen libdivxdecore, then look for decore function
if it fails, print a message and return 0 so that xine ignores
us from then on. */
diff --git a/src/libdts/xine_decoder.c b/src/libdts/xine_decoder.c
index efb482eab..c8849ffbc 100644
--- a/src/libdts/xine_decoder.c
+++ b/src/libdts/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.12 2002/01/03 22:53:27 jcdutton Exp $
+ * $Id: xine_decoder.c,v 1.13 2002/01/05 21:54:17 miguelfreitas Exp $
*
* 04-09-2001 DTS passtrough (C) Joachim Koenig
* 09-12-2001 DTS passthrough inprovements (C) James Courtier-Dutton
@@ -214,11 +214,11 @@ static char *dts_get_id(void) {
return "dts";
}
-audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *cfg) {
+audio_decoder_t *init_audio_decoder_plugin (int iface_version, xine_t *xine) {
dts_decoder_t *this ;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "libdts: plugin doesn't support plugin API version %d.\n"
"libdts: this means there's a version mismatch between xine and this "
"libdts: decoder plugin.\nInstalling current plugins should help.\n",
diff --git a/src/libffmpeg/xine_decoder.c b/src/libffmpeg/xine_decoder.c
index a7c06f19d..9fec027f4 100644
--- a/src/libffmpeg/xine_decoder.c
+++ b/src/libffmpeg/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.21 2001/12/27 20:07:25 miguelfreitas Exp $
+ * $Id: xine_decoder.c,v 1.22 2002/01/05 21:54:17 miguelfreitas Exp $
*
* xine decoder plugin using ffmpeg
*
@@ -359,11 +359,11 @@ static char *ff_get_id(void) {
}
-video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *cfg) {
+video_decoder_t *init_video_decoder_plugin (int iface_version, xine_t *xine) {
ff_decoder_t *this ;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "ffmpeg: plugin doesn't support plugin API version %d.\n"
"ffmpeg: this means there's a version mismatch between xine and this "
"ffmpeg: decoder plugin.\nInstalling current plugins should help.\n",
diff --git a/src/liblpcm/xine_decoder.c b/src/liblpcm/xine_decoder.c
index a1d67b106..a333695d2 100644
--- a/src/liblpcm/xine_decoder.c
+++ b/src/liblpcm/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.17 2001/12/11 15:30:05 miguelfreitas Exp $
+ * $Id: xine_decoder.c,v 1.18 2002/01/05 21:54:17 miguelfreitas Exp $
*
* 31-8-2001 Added LPCM rate sensing.
* (c) 2001 James Courtier-Dutton James@superbug.demon.co.uk
@@ -150,11 +150,11 @@ static char *lpcm_get_id(void) {
return "lpcm";
}
-audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *cfg) {
+audio_decoder_t *init_audio_decoder_plugin (int iface_version, xine_t *xine) {
lpcm_decoder_t *this ;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "liblpcm: plugin doesn't support plugin API version %d.\n"
"liblpcm: this means there's a version mismatch between xine and this "
"liblpcm: decoder plugin.\nInstalling current plugins should help.\n",
diff --git a/src/libmad/xine_decoder.c b/src/libmad/xine_decoder.c
index 1999c982b..fb6cc03b8 100644
--- a/src/libmad/xine_decoder.c
+++ b/src/libmad/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.11 2001/12/25 11:41:04 miguelfreitas Exp $
+ * $Id: xine_decoder.c,v 1.12 2002/01/05 21:54:17 miguelfreitas Exp $
*
* stuff needed to turn libmad into a xine decoder plugin
*/
@@ -258,11 +258,11 @@ static char *mad_get_id(void) {
return "mad";
}
-audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *cfg) {
+audio_decoder_t *init_audio_decoder_plugin (int iface_version, xine_t *xine) {
mad_decoder_t *this ;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "libmad: plugin doesn't support plugin API version %d.\n"
"libmad: this means there's a version mismatch between xine and this "
"libmad: decoder plugin.\nInstalling current plugins should help.\n",
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c
index 98cc87268..bc7ad7758 100644
--- a/src/libmpeg2/decode.c
+++ b/src/libmpeg2/decode.c
@@ -33,6 +33,8 @@
#include "mpeg2.h"
#include "mpeg2_internal.h"
#include "xineutils.h"
+#include "xine_internal.h"
+#include "events.h"
#define BUFFER_SIZE (224 * 1024)
@@ -179,6 +181,10 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
break;
+ case 0xb2: /* user data code */
+ process_userdata(mpeg2dec, buffer);
+ break;
+
case 0xb3: /* sequence_header_code */
if (header_process_sequence_header (picture, buffer)) {
printf ("libmpeg2: bad sequence header\n");
@@ -186,10 +192,16 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
} else if (mpeg2dec->is_sequence_needed
|| (picture->frame_width != picture->coded_picture_width)
|| (picture->frame_height != picture->coded_picture_height)) {
-
+ xine_frame_change_event_t notify_event;
+
printf ("mpeg2dec: frame size has changed to from %d x %d to %d x %d\n",
picture->frame_width, picture->frame_height,
picture->coded_picture_width, picture->coded_picture_height);
+
+ notify_event.event.type = XINE_EVENT_FRAME_CHANGE;
+ notify_event.width = picture->coded_picture_width;
+ notify_event.height = picture->coded_picture_height;
+ xine_send_event(mpeg2dec->xine, &notify_event.event);
if (picture->forward_reference_frame)
picture->forward_reference_frame->free (picture->forward_reference_frame);
@@ -468,12 +480,19 @@ void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec,
}
if (mpeg2dec->is_sequence_needed) {
+ xine_frame_change_event_t notify_event;
+
mpeg2dec->is_sequence_needed = 0;
picture->frame_width = picture->coded_picture_width;
picture->frame_height = picture->coded_picture_height;
printf ("mpeg2dec: frame size %d x %d\n",
picture->frame_width, picture->frame_height);
+
+ notify_event.event.type = XINE_EVENT_FRAME_CHANGE;
+ notify_event.width = picture->coded_picture_width;
+ notify_event.height = picture->coded_picture_height;
+ xine_send_event(mpeg2dec->xine, &notify_event.event);
}
} else if (code == 0xb5) { /* extension_start_code */
if (header_process_extension (picture, mpeg2dec->chunk_buffer)) {
@@ -484,3 +503,30 @@ void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec,
}
}
+/* Find the end of the userdata field in an MPEG-2 stream */
+static uint8_t *find_end(uint8_t *buffer)
+{
+ uint8_t *current = buffer;
+ while(1) {
+ if (current[0] == 0 && current[1] == 0 && current[2] == 1)
+ break;
+ current++;
+ }
+ return current;
+}
+
+static void process_userdata(mpeg2dec_t *mpeg2dec, uint8_t *buffer)
+{
+ /* check if user data denotes closed captions */
+ if (buffer[0] == 'C' && buffer[1] == 'C') {
+ xine_closed_caption_event_t event;
+ uint8_t *end = find_end(buffer);
+
+ event.event.type = XINE_EVENT_CLOSED_CAPTION;
+ event.buffer = &buffer[2];
+ event.buf_len = end - &buffer[2];
+ event.pts = mpeg2dec->pts;
+ event.scr = mpeg2dec->scr;
+ xine_send_event(mpeg2dec->xine, &event.event);
+ }
+}
diff --git a/src/libmpeg2/mpeg2.h b/src/libmpeg2/mpeg2.h
index 32ea7a72e..f1a09b5dd 100644
--- a/src/libmpeg2/mpeg2.h
+++ b/src/libmpeg2/mpeg2.h
@@ -44,13 +44,11 @@ typedef struct mpeg2dec_s {
uint8_t code;
uint32_t pts, scr;
-
+
+ xine_t *xine;
} mpeg2dec_t ;
-
-
-
/* initialize mpegdec with a opaque user pointer */
void mpeg2_init (mpeg2dec_t * mpeg2dec,
vo_instance_t * output);
@@ -65,5 +63,6 @@ int mpeg2_decode_data (mpeg2dec_t * mpeg2dec,
void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec,
uint8_t * data_start, uint8_t * data_end);
-
void mpeg2_flush (mpeg2dec_t * mpeg2dec);
+
+void process_userdata(mpeg2dec_t *mpeg2dec, uint8_t *buffer);
diff --git a/src/libmpeg2/xine_decoder.c b/src/libmpeg2/xine_decoder.c
index da55cab88..2f6a338bb 100644
--- a/src/libmpeg2/xine_decoder.c
+++ b/src/libmpeg2/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.19 2001/12/24 00:45:03 guenter Exp $
+ * $Id: xine_decoder.c,v 1.20 2002/01/05 21:54:17 miguelfreitas Exp $
*
* stuff needed to turn libmpeg2 into a xine decoder plugin
*/
@@ -105,11 +105,11 @@ static char *mpeg2dec_get_id(void) {
return "mpeg2dec";
}
-video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *cfg) {
+video_decoder_t *init_video_decoder_plugin (int iface_version, xine_t *xine) {
mpeg2dec_decoder_t *this ;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "libmpeg2: plugin doesn't support plugin API version %d.\n"
"libmpeg2: this means there's a version mismatch between xine and this "
"libmpeg2: decoder plugin.\nInstalling current plugins should help.\n",
@@ -129,6 +129,8 @@ video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *
this->video_decoder.get_identifier = mpeg2dec_get_id;
this->video_decoder.priority = 1;
+ this->mpeg2.xine = xine;
+
return (video_decoder_t *) this;
}
diff --git a/src/libvfill/xine_decoder.c b/src/libvfill/xine_decoder.c
index 286dbb580..237576e11 100644
--- a/src/libvfill/xine_decoder.c
+++ b/src/libvfill/xine_decoder.c
@@ -121,11 +121,11 @@ static char *videofill_get_id(void) {
return "videofill";
}
-video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *cfg) {
+video_decoder_t *init_video_decoder_plugin (int iface_version, xine_t *xine) {
videofill_decoder_t *this ;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "videofill: plugin doesn't support plugin API version %d.\n"
"videofill: this means there's a version mismatch between xine and this "
"videofill: decoder plugin.\nInstalling current plugins should help.\n",
diff --git a/src/libvorbis/xine_decoder.c b/src/libvorbis/xine_decoder.c
index 8e3c5dff2..cd0517e29 100644
--- a/src/libvorbis/xine_decoder.c
+++ b/src/libvorbis/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.4 2001/12/11 15:30:06 miguelfreitas Exp $
+ * $Id: xine_decoder.c,v 1.5 2002/01/05 21:54:17 miguelfreitas Exp $
*
* (ogg/)vorbis audio decoder plugin (libvorbis wrapper) for xine
*/
@@ -232,11 +232,11 @@ static char *vorbis_get_id(void) {
return "vorbis";
}
-audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *cfg) {
+audio_decoder_t *init_audio_decoder_plugin (int iface_version, xine_t *xine) {
vorbis_decoder_t *this ;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "libvorbis: plugin doesn't support plugin API version %d.\n"
"libvorbis: this means there's a version mismatch between xine and this "
"libvorbis: decoder plugin.\nInstalling current plugins should help.\n",
diff --git a/src/libw32dll/w32codec.c b/src/libw32dll/w32codec.c
index df6465960..fedba9391 100644
--- a/src/libw32dll/w32codec.c
+++ b/src/libw32dll/w32codec.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: w32codec.c,v 1.52 2001/12/27 20:07:25 miguelfreitas Exp $
+ * $Id: w32codec.c,v 1.53 2002/01/05 21:54:17 miguelfreitas Exp $
*
* routines for using w32 codecs
* DirectShow support by Miguel Freitas (Nov/2001)
@@ -94,7 +94,7 @@ typedef struct w32v_decoder_s {
void *img_buffer;
int size;
long outfmt;
-
+
/* profiler */
int prof_rgb2yuv;
@@ -675,8 +675,9 @@ static void w32v_decode_data (video_decoder_t *this_gen, buf_element_t *buf) {
if(ret) {
printf("w32codec: Error decompressing frame, err=%ld\n", (long)ret);
img->bad_frame = 1;
- } else
+ } else {
img->bad_frame = 0;
+ }
if (img->copy) {
int height = abs(this->o_bih.biHeight);
@@ -1115,11 +1116,12 @@ static char *w32a_get_id(void) {
return "vfw (win32) audio decoder";
}
-video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *cfg) {
+video_decoder_t *init_video_decoder_plugin (int iface_version, xine_t *xine) {
w32v_decoder_t *this ;
+ config_values_t *cfg;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "w32codec: plugin doesn't support plugin API version %d.\n"
"w32codec: this means there's a version mismatch between xine and this "
"w32codec: decoder plugin.\nInstalling current input plugins should help.\n",
@@ -1127,7 +1129,7 @@ video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *
return NULL;
}
-
+ cfg = xine->config;
win32_def_path = cfg->register_string (cfg, "codec.win32_path", "/usr/lib/win32",
"path to win32 codec dlls",
NULL, NULL, NULL);
@@ -1149,12 +1151,12 @@ video_decoder_t *init_video_decoder_plugin (int iface_version, config_values_t *
return (video_decoder_t *) this;
}
-audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *cfg) {
+audio_decoder_t *init_audio_decoder_plugin (int iface_version, xine_t *xine) {
w32a_decoder_t *this ;
-
+ config_values_t *cfg;
- if (iface_version != 4) {
+ if (iface_version != 5) {
printf( "w32codec: plugin doesn't support plugin API version %d.\n"
"w32codec: this means there's a version mismatch between xine and this "
"w32codec: decoder plugin.\nInstalling current input plugins should help.\n",
@@ -1163,6 +1165,7 @@ audio_decoder_t *init_audio_decoder_plugin (int iface_version, config_values_t *
return NULL;
}
+ cfg = xine->config;
win32_def_path = cfg->register_string (cfg, "codec.win32_path", "/usr/lib/win32",
"path to win32 codec dlls",
NULL, NULL, NULL);
diff --git a/src/xine-engine/events.h b/src/xine-engine/events.h
index 807fb66b4..2cdf32a88 100644
--- a/src/xine-engine/events.h
+++ b/src/xine-engine/events.h
@@ -58,6 +58,8 @@ extern "C" {
#define XINE_EVENT_INPUT_ANGLE_NEXT 20
#define XINE_EVENT_INPUT_ANGLE_PREVIOUS 21
#define XINE_EVENT_SPU_FORCEDISPLAY 22
+#define XINE_EVENT_FRAME_CHANGE 23
+#define XINE_EVENT_CLOSED_CAPTION 24
/*
* generic event type.
@@ -105,6 +107,25 @@ typedef struct {
int handled;
} xine_next_mrl_event_t;
+/*
+ * notify frame change
+ */
+typedef struct {
+ xine_event_t event;
+ int width;
+ int height;
+} xine_frame_change_event_t;
+
+/*
+ * closed caption
+ */
+typedef struct {
+ xine_event_t event;
+ uint8_t *buffer;
+ uint32_t buf_len;
+ uint32_t pts;
+ uint32_t scr;
+} xine_closed_caption_event_t;
#ifdef __cplusplus
}
diff --git a/src/xine-engine/load_plugins.c b/src/xine-engine/load_plugins.c
index 00bc05b43..cde800de7 100644
--- a/src/xine-engine/load_plugins.c
+++ b/src/xine-engine/load_plugins.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: load_plugins.c,v 1.64 2002/01/02 18:16:07 jkeil Exp $
+ * $Id: load_plugins.c,v 1.65 2002/01/05 21:54:17 miguelfreitas Exp $
*
*
* Load input/demux/audio_out/video_out/codec plugins
@@ -571,7 +571,7 @@ void load_decoder_plugins (xine_t *this,
video_decoder_t *vdp;
int streamtype;
- vdp = (video_decoder_t *) initplug(iface_version, config);
+ vdp = (video_decoder_t *) initplug(iface_version, this);
if (vdp) {
vdp->metronom = this->metronom;
@@ -596,7 +596,7 @@ void load_decoder_plugins (xine_t *this,
audio_decoder_t *adp;
int streamtype;
- adp = (audio_decoder_t *) initplug(iface_version, config);
+ adp = (audio_decoder_t *) initplug(iface_version, this);
if (adp) {
for (streamtype = 0; streamtype<DECODER_PLUGIN_MAX; streamtype++)
diff --git a/src/xine-engine/osd.c b/src/xine-engine/osd.c
index 58fc4d5f8..9263674ad 100644
--- a/src/xine-engine/osd.c
+++ b/src/xine-engine/osd.c
@@ -279,6 +279,24 @@ static int osd_hide (osd_object_t *osd, uint32_t vpts) {
return 1;
}
+
+/*
+ * clear an osd object, so that it can be used for rendering a new image
+ */
+
+static void osd_clear (osd_object_t *osd) {
+#ifdef LOG_DEBUG
+ printf("osd_clear\n");
+#endif
+
+ memset(osd->area, 0, osd->width * osd->height);
+ osd->x1 = osd->width;
+ osd->y1 = osd->height;
+ osd->x2 = 0;
+ osd->y2 = 0;
+}
+
+
/*
* Bresenham line implementation on osd object
*/
@@ -849,6 +867,7 @@ osd_renderer_t *osd_renderer_init( video_overlay_instance_t *video_overlay, conf
this->get_palette = osd_get_palette;
this->set_position = osd_set_position;
this->set_font = osd_set_font;
+ this->clear = osd_clear;
this->line = osd_line;
this->filled_rect = osd_filled_rect;
this->render_text = osd_render_text;
diff --git a/src/xine-engine/osd.h b/src/xine-engine/osd.h
index a55b791bd..177b9d817 100644
--- a/src/xine-engine/osd.h
+++ b/src/xine-engine/osd.h
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
* OSD stuff (text and graphic primitives)
- * $Id: osd.h,v 1.5 2001/12/13 23:15:02 guenter Exp $
+ * $Id: osd.h,v 1.6 2002/01/05 21:54:17 miguelfreitas Exp $
*/
#ifndef HAVE_OSD_H
@@ -33,6 +33,7 @@ typedef struct osd_object_s osd_object_t;
typedef struct osd_renderer_s osd_renderer_t;
typedef struct osd_font_s osd_font_t;
+/* WARNING: this should be kept in sync with include/xine.h.tmpl.in */
struct osd_renderer_s {
/*
@@ -123,7 +124,12 @@ struct osd_renderer_s {
* osd objects are closed
*/
void (*close) (osd_renderer_t *this);
-
+
+ /*
+ * clear an osd object
+ */
+ void (*clear) (osd_object_t *osd );
+
/* private stuff */
pthread_mutex_t osd_mutex;
diff --git a/src/xine-engine/xine_internal.h b/src/xine-engine/xine_internal.h
index a4f960136..9ffcadd4c 100644
--- a/src/xine-engine/xine_internal.h
+++ b/src/xine-engine/xine_internal.h
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_internal.h,v 1.67 2001/12/27 14:30:30 f1rmb Exp $
+ * $Id: xine_internal.h,v 1.68 2002/01/05 21:54:17 miguelfreitas Exp $
*
*/
@@ -55,7 +55,7 @@ extern "C" {
#define INPUT_PLUGIN_MAX 50
#define DEMUXER_PLUGIN_MAX 50
#define DECODER_PLUGIN_MAX 256
-#define DECODER_PLUGIN_IFACE_VERSION 4
+#define DECODER_PLUGIN_IFACE_VERSION 5
#define AUDIO_OUT_PLUGIN_MAX 50
#define VIDEO_OUT_PLUGIN_MAX 50
#define XINE_MAX_EVENT_LISTENERS 50