From 839537da53801ce9542eded0813c660e71ab2e58 Mon Sep 17 00:00:00 2001 From: Guenter Bartsch Date: Sat, 9 Nov 2002 23:22:32 +0000 Subject: beginnings of the get_video/audio_frame api CVS patchset: 3215 CVS date: 2002/11/09 23:22:32 --- src/demuxers/demux.h | 22 +++++++++++++++++-- src/demuxers/demux_aiff.c | 6 ++++-- src/demuxers/demux_asf.c | 6 ++++-- src/demuxers/demux_avi.c | 6 ++++-- src/demuxers/demux_cda.c | 6 ++++-- src/demuxers/demux_eawve.c | 6 ++++-- src/demuxers/demux_elem.c | 6 ++++-- src/demuxers/demux_film.c | 6 ++++-- src/demuxers/demux_fli.c | 6 ++++-- src/demuxers/demux_idcin.c | 6 ++++-- src/demuxers/demux_mpeg.c | 6 ++++-- src/demuxers/demux_mpeg_block.c | 47 +++++++++++++++++++++++++++++++++++------ src/demuxers/demux_mpgaudio.c | 5 +++-- src/demuxers/demux_ogg.c | 6 ++++-- src/demuxers/demux_pes.c | 4 +++- src/demuxers/demux_qt.c | 6 ++++-- src/demuxers/demux_real.c | 6 ++++-- src/demuxers/demux_realaudio.c | 6 ++++-- src/demuxers/demux_roq.c | 6 ++++-- src/demuxers/demux_smjpeg.c | 6 ++++-- src/demuxers/demux_snd.c | 6 ++++-- src/demuxers/demux_ts.c | 24 ++++++++++++++++++--- src/demuxers/demux_voc.c | 6 ++++-- src/demuxers/demux_vqa.c | 6 ++++-- src/demuxers/demux_wav.c | 6 ++++-- src/demuxers/demux_wc3movie.c | 6 ++++-- src/demuxers/demux_yuv4mpeg2.c | 6 ++++-- src/xine-engine/buffer.h | 4 +++- src/xine-engine/xine.c | 29 ++++++++++++++++++++++++- 29 files changed, 207 insertions(+), 60 deletions(-) (limited to 'src') diff --git a/src/demuxers/demux.h b/src/demuxers/demux.h index 29bd0cf45..16c827cae 100644 --- a/src/demuxers/demux.h +++ b/src/demuxers/demux.h @@ -17,13 +17,14 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux.h,v 1.23 2002/11/01 17:41:02 mroi Exp $ + * $Id: demux.h,v 1.24 2002/11/09 23:22:32 guenter Exp $ */ #ifndef HAVE_DEMUX_H #define HAVE_DEMUX_H #include "buffer.h" +#include "video_out.h" #include "xine_internal.h" #if defined(XINE_COMPILE) #include "input/input_plugin.h" @@ -31,7 +32,7 @@ #include "input_plugin.h" #endif -#define DEMUXER_PLUGIN_IFACE_VERSION 15 +#define DEMUXER_PLUGIN_IFACE_VERSION 16 #define DEMUX_OK 0 #define DEMUX_FINISHED 1 @@ -148,6 +149,23 @@ struct demux_plugin_s { int (*get_stream_length) (demux_plugin_t *this); + /* + * get audio/video frames + * + * experimental, function pointers can be NULL for now. + */ + + int (*get_video_frame) (demux_plugin_t *this, + int timestamp, /* msec */ + int *width, int *height, + int *ratio_code, + int *duration, /* msec */ + int *format, + uint8_t *img) ; + + /* called by video_out for every frame it receives */ + void (*got_video_frame_cb) (demux_plugin_t *this, + vo_frame_t *frame); /* * "backwards" link to plugin class diff --git a/src/demuxers/demux_aiff.c b/src/demuxers/demux_aiff.c index 04dd677f3..ac4bb13fa 100644 --- a/src/demuxers/demux_aiff.c +++ b/src/demuxers/demux_aiff.c @@ -19,7 +19,7 @@ * * AIFF File Demuxer by Mike Melanson (melanson@pcisys.net) * - * $Id: demux_aiff.c,v 1.15 2002/11/01 17:41:03 mroi Exp $ + * $Id: demux_aiff.c,v 1.16 2002/11/09 23:22:32 guenter Exp $ * */ @@ -343,6 +343,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_aiff_dispose; this->demux_plugin.get_status = demux_aiff_get_status; this->demux_plugin.get_stream_length = demux_aiff_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -454,6 +456,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "aiff", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "aiff", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_asf.c b/src/demuxers/demux_asf.c index 632c6c702..ce1d020ad 100644 --- a/src/demuxers/demux_asf.c +++ b/src/demuxers/demux_asf.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: demux_asf.c,v 1.76 2002/11/03 20:41:55 guenter Exp $ + * $Id: demux_asf.c,v 1.77 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for asf streams * @@ -1379,6 +1379,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, this->demux_plugin.dispose = demux_asf_dispose; this->demux_plugin.get_status = demux_asf_get_status; this->demux_plugin.get_stream_length = demux_asf_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -1435,6 +1437,6 @@ static void *init_class (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "asf", XINE_VERSION_CODE, NULL, init_class }, + { PLUGIN_DEMUX, 16, "asf", XINE_VERSION_CODE, NULL, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_avi.c b/src/demuxers/demux_avi.c index 3c869d925..f13c8bf43 100644 --- a/src/demuxers/demux_avi.c +++ b/src/demuxers/demux_avi.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: demux_avi.c,v 1.131 2002/11/01 17:41:04 mroi Exp $ + * $Id: demux_avi.c,v 1.132 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for avi streams * @@ -1491,6 +1491,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_avi_dispose; this->demux_plugin.get_status = demux_avi_get_status; this->demux_plugin.get_stream_length = demux_avi_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -1613,6 +1615,6 @@ static void *init_class (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "avi", XINE_VERSION_CODE, NULL, init_class }, + { PLUGIN_DEMUX, 16, "avi", XINE_VERSION_CODE, NULL, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_cda.c b/src/demuxers/demux_cda.c index de37933a2..8dd2fc144 100644 --- a/src/demuxers/demux_cda.c +++ b/src/demuxers/demux_cda.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: demux_cda.c,v 1.32 2002/11/02 12:50:14 tmattern Exp $ + * $Id: demux_cda.c,v 1.33 2002/11/09 23:22:32 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -190,6 +190,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_cda_dispose; this->demux_plugin.get_status = demux_cda_get_status; this->demux_plugin.get_stream_length = demux_cda_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -281,6 +283,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "cda", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "cda", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_eawve.c b/src/demuxers/demux_eawve.c index bcfae8f61..f12fd0c67 100644 --- a/src/demuxers/demux_eawve.c +++ b/src/demuxers/demux_eawve.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: demux_eawve.c,v 1.5 2002/11/03 21:08:42 guenter Exp $ + * $Id: demux_eawve.c,v 1.6 2002/11/09 23:22:32 guenter Exp $ * * demux_eawve.c, Demuxer plugin for Electronic Arts' WVE file format * @@ -390,6 +390,8 @@ static demux_plugin_t* open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = (void*)demux_eawve_dispose; this->demux_plugin.get_status = (void*)demux_eawve_get_status; this->demux_plugin.get_stream_length = (void*)demux_eawve_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -486,6 +488,6 @@ static void *init_plugin (xine_t *xine, void *data) } plugin_info_t xine_plugin_info[] = { - { PLUGIN_DEMUX, 15, "wve", XINE_VERSION_CODE, NULL, (void*)init_plugin}, + { PLUGIN_DEMUX, 16, "wve", XINE_VERSION_CODE, NULL, (void*)init_plugin}, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_elem.c b/src/demuxers/demux_elem.c index e14e491e2..fd6aa20a3 100644 --- a/src/demuxers/demux_elem.c +++ b/src/demuxers/demux_elem.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: demux_elem.c,v 1.59 2002/11/01 17:41:06 mroi Exp $ + * $Id: demux_elem.c,v 1.60 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for elementary mpeg streams * @@ -198,6 +198,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_mpeg_elem_dispose; this->demux_plugin.get_status = demux_mpeg_elem_get_status; this->demux_plugin.get_stream_length = demux_mpeg_elem_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -335,6 +337,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "elem", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "elem", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_film.c b/src/demuxers/demux_film.c index df4693c83..aaecfb395 100644 --- a/src/demuxers/demux_film.c +++ b/src/demuxers/demux_film.c @@ -21,7 +21,7 @@ * For more information on the FILM file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_film.c,v 1.42 2002/11/01 17:41:08 mroi Exp $ + * $Id: demux_film.c,v 1.43 2002/11/09 23:22:32 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -660,6 +660,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_film_dispose; this->demux_plugin.get_status = demux_film_get_status; this->demux_plugin.get_stream_length = demux_film_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -788,6 +790,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "film", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "film", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_fli.c b/src/demuxers/demux_fli.c index 1a9c1de77..924f795de 100644 --- a/src/demuxers/demux_fli.c +++ b/src/demuxers/demux_fli.c @@ -22,7 +22,7 @@ * avoid while programming a FLI decoder, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_fli.c,v 1.25 2002/11/01 17:41:11 mroi Exp $ + * $Id: demux_fli.c,v 1.26 2002/11/09 23:22:32 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -290,6 +290,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_fli_dispose; this->demux_plugin.get_status = demux_fli_get_status; this->demux_plugin.get_stream_length = demux_fli_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -403,6 +405,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "fli", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "fli", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_idcin.c b/src/demuxers/demux_idcin.c index 10bb588bd..3996afce5 100644 --- a/src/demuxers/demux_idcin.c +++ b/src/demuxers/demux_idcin.c @@ -63,7 +63,7 @@ * - if any bytes exceed 63, do not shift the bytes at all before * transmitting them to the video decoder * - * $Id: demux_idcin.c,v 1.26 2002/11/01 17:41:13 mroi Exp $ + * $Id: demux_idcin.c,v 1.27 2002/11/09 23:22:32 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -465,6 +465,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_idcin_dispose; this->demux_plugin.get_status = demux_idcin_get_status; this->demux_plugin.get_stream_length = demux_idcin_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -577,6 +579,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "idcin", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "idcin", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_mpeg.c b/src/demuxers/demux_mpeg.c index 6fc4b07e3..c6fe792b5 100644 --- a/src/demuxers/demux_mpeg.c +++ b/src/demuxers/demux_mpeg.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: demux_mpeg.c,v 1.94 2002/11/01 17:41:13 mroi Exp $ + * $Id: demux_mpeg.c,v 1.95 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for mpeg 1/2 program streams * reads streams of variable blocksizes @@ -897,6 +897,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_mpeg_dispose; this->demux_plugin.get_status = demux_mpeg_get_status; this->demux_plugin.get_stream_length = demux_mpeg_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -1128,6 +1130,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "mpeg", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "mpeg", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index b3082ceba..b6b1608dc 100644 --- a/src/demuxers/demux_mpeg_block.c +++ b/src/demuxers/demux_mpeg_block.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: demux_mpeg_block.c,v 1.135 2002/11/01 17:41:15 mroi Exp $ + * $Id: demux_mpeg_block.c,v 1.136 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for mpeg 1/2 program streams * @@ -80,6 +80,9 @@ typedef struct demux_mpeg_block_s { int send_newpts; int buf_flag_seek; + /* stream index for get_audio/video_frame */ + int have_index; + } demux_mpeg_block_t ; typedef struct { @@ -927,8 +930,36 @@ static int demux_mpeg_block_get_stream_length (demux_plugin_t *this_gen) { return this->input->get_length (this->input) / (this->rate * 50); else return 0; +} + +static void generate_index (demux_mpeg_block_t *this) { + + /* FIXME: implement */ } + +static int demux_mpeg_block_get_video_frame (demux_plugin_t *this_gen, + int timestamp, + int *width, int *height, + int *ratio_code, + int *duration, + int *format, + uint8_t *img) { + + demux_mpeg_block_t *this = (demux_mpeg_block_t*) this_gen; + + if (!this->have_index) { + + generate_index (this); + + this->have_index = 1; + } + + + return 0; +} + + static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *stream, input_plugin_t *input_gen) { @@ -955,10 +986,13 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_mpeg_block_dispose; this->demux_plugin.get_status = demux_mpeg_block_get_status; this->demux_plugin.get_stream_length = demux_mpeg_block_get_stream_length; + this->demux_plugin.get_video_frame = demux_mpeg_block_get_video_frame; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; - this->scratch = xine_xmalloc_aligned (512, 4096, (void**) &this->scratch_base); - this->status = DEMUX_FINISHED; + this->scratch = xine_xmalloc_aligned (512, 4096, (void**) &this->scratch_base); + this->status = DEMUX_FINISHED; + this->have_index = 0; #ifdef LOG printf ("demux_mpeg_block:open_plugin:detection_method=%d\n", @@ -1029,8 +1063,9 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str free (this); return NULL; } - if( (!strncmp((ending + 3), "mpeg2", 5)) || - (!strncmp((ending + 3), "mpeg1", 5)) ) { + if ( (!strncasecmp (ending, ".vob", 4)) || + (!strncmp((ending + 3), "mpeg2", 5)) || + (!strncmp((ending + 3), "mpeg1", 5)) ) { this->blocksize = 2048; demux_mpeg_block_accept_input(this, input); } else if(!strncmp(mrl, "vcd", 3)) { @@ -1118,6 +1153,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "mpeg_block", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "mpeg_block", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_mpgaudio.c b/src/demuxers/demux_mpgaudio.c index 056ae8c43..054bb75fb 100644 --- a/src/demuxers/demux_mpgaudio.c +++ b/src/demuxers/demux_mpgaudio.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: demux_mpgaudio.c,v 1.78 2002/11/09 13:52:32 mroi Exp $ + * $Id: demux_mpgaudio.c,v 1.79 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for mpeg audio (i.e. mp3) streams * @@ -570,6 +570,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_mpgaudio_dispose; this->demux_plugin.get_status = demux_mpgaudio_get_status; this->demux_plugin.get_stream_length = demux_mpgaudio_get_stream_length; + this->demux_plugin.get_video_frame = NULL; this->demux_plugin.demux_class = class_gen; this->input = input; @@ -637,6 +638,6 @@ static void *init_class (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "mp3", XINE_VERSION_CODE, NULL, init_class }, + { PLUGIN_DEMUX, 16, "mp3", XINE_VERSION_CODE, NULL, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_ogg.c b/src/demuxers/demux_ogg.c index 8c969e16b..eae65a6d0 100644 --- a/src/demuxers/demux_ogg.c +++ b/src/demuxers/demux_ogg.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: demux_ogg.c,v 1.50 2002/11/01 17:41:20 mroi Exp $ + * $Id: demux_ogg.c,v 1.51 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for ogg streams * @@ -1000,6 +1000,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, this->demux_plugin.dispose = demux_ogg_dispose; this->demux_plugin.get_status = demux_ogg_get_status; this->demux_plugin.get_stream_length = demux_ogg_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -1060,6 +1062,6 @@ static void *init_class (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "ogg", XINE_VERSION_CODE, NULL, init_class }, + { PLUGIN_DEMUX, 16, "ogg", XINE_VERSION_CODE, NULL, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_pes.c b/src/demuxers/demux_pes.c index 5977d7ef5..18a111799 100644 --- a/src/demuxers/demux_pes.c +++ b/src/demuxers/demux_pes.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: demux_pes.c,v 1.41 2002/11/01 17:41:22 mroi Exp $ + * $Id: demux_pes.c,v 1.42 2002/11/09 23:22:32 guenter Exp $ * * demultiplexer for mpeg 2 PES (Packetized Elementary Streams) * reads streams of variable blocksizes @@ -624,6 +624,8 @@ static void *init_demuxer_plugin(xine_t *xine, void *data) { this->demux_plugin.get_status = demux_pes_get_status; this->demux_plugin.get_identifier = demux_pes_get_id; this->demux_plugin.get_stream_length = demux_pes_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.get_mimetypes = demux_pes_get_mimetypes; this->status = DEMUX_FINISHED; diff --git a/src/demuxers/demux_qt.c b/src/demuxers/demux_qt.c index 3c03d24c2..126c8a33b 100644 --- a/src/demuxers/demux_qt.c +++ b/src/demuxers/demux_qt.c @@ -30,7 +30,7 @@ * build_frame_table * free_qt_info * - * $Id: demux_qt.c,v 1.108 2002/11/01 17:41:23 mroi Exp $ + * $Id: demux_qt.c,v 1.109 2002/11/09 23:22:32 guenter Exp $ * */ @@ -1824,6 +1824,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_qt_dispose; this->demux_plugin.get_status = demux_qt_get_status; this->demux_plugin.get_stream_length = demux_qt_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -1970,6 +1972,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "quicktime", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "quicktime", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_real.c b/src/demuxers/demux_real.c index 9d7d447b1..141a07467 100644 --- a/src/demuxers/demux_real.c +++ b/src/demuxers/demux_real.c @@ -21,7 +21,7 @@ * For more information regarding the Real file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_real.c,v 1.7 2002/11/01 17:41:25 mroi Exp $ + * $Id: demux_real.c,v 1.8 2002/11/09 23:22:32 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -403,6 +403,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_real_dispose; this->demux_plugin.get_status = demux_real_get_status; this->demux_plugin.get_stream_length = demux_real_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -508,6 +510,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "real", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "real", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_realaudio.c b/src/demuxers/demux_realaudio.c index 9b68412bb..a3f5fb210 100644 --- a/src/demuxers/demux_realaudio.c +++ b/src/demuxers/demux_realaudio.c @@ -19,7 +19,7 @@ * * RealAudio File Demuxer by Mike Melanson (melanson@pcisys.net) * - * $Id: demux_realaudio.c,v 1.3 2002/11/01 17:41:26 mroi Exp $ + * $Id: demux_realaudio.c,v 1.4 2002/11/09 23:22:32 guenter Exp $ * */ @@ -288,6 +288,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_ra_dispose; this->demux_plugin.get_status = demux_ra_get_status; this->demux_plugin.get_stream_length = demux_ra_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -398,7 +400,7 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "realaudio", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "realaudio", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_roq.c b/src/demuxers/demux_roq.c index 9f47633a2..dee6c5ef5 100644 --- a/src/demuxers/demux_roq.c +++ b/src/demuxers/demux_roq.c @@ -21,7 +21,7 @@ * For more information regarding the RoQ file format, visit: * http://www.csse.monash.edu.au/~timf/ * - * $Id: demux_roq.c,v 1.28 2002/11/01 17:41:26 mroi Exp $ + * $Id: demux_roq.c,v 1.29 2002/11/09 23:22:32 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -411,6 +411,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_roq_dispose; this->demux_plugin.get_status = demux_roq_get_status; this->demux_plugin.get_stream_length = demux_roq_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -519,6 +521,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "roq", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "roq", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_smjpeg.c b/src/demuxers/demux_smjpeg.c index 93367cf4f..7ab3819d9 100644 --- a/src/demuxers/demux_smjpeg.c +++ b/src/demuxers/demux_smjpeg.c @@ -21,7 +21,7 @@ * For more information on the SMJPEG file format, visit: * http://www.lokigames.com/development/smjpeg.php3 * - * $Id: demux_smjpeg.c,v 1.24 2002/11/01 17:41:27 mroi Exp $ + * $Id: demux_smjpeg.c,v 1.25 2002/11/09 23:22:32 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -422,6 +422,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_smjpeg_dispose; this->demux_plugin.get_status = demux_smjpeg_get_status; this->demux_plugin.get_stream_length = demux_smjpeg_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -547,6 +549,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "smjpeg", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "smjpeg", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_snd.c b/src/demuxers/demux_snd.c index daf0a53b9..72458cf51 100644 --- a/src/demuxers/demux_snd.c +++ b/src/demuxers/demux_snd.c @@ -19,7 +19,7 @@ * * SND/AU File Demuxer by Mike Melanson (melanson@pcisys.net) * - * $Id: demux_snd.c,v 1.16 2002/11/01 17:41:27 mroi Exp $ + * $Id: demux_snd.c,v 1.17 2002/11/09 23:22:32 guenter Exp $ * */ @@ -326,6 +326,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_snd_dispose; this->demux_plugin.get_status = demux_snd_get_status; this->demux_plugin.get_stream_length = demux_snd_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -438,6 +440,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "snd", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "snd", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index 1ee74bbe4..3115f510c 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.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: demux_ts.c,v 1.61 2002/11/07 04:08:14 guenter Exp $ + * $Id: demux_ts.c,v 1.62 2002/11/09 23:22:32 guenter Exp $ * * Demultiplexer for MPEG2 Transport Streams. * @@ -1414,7 +1414,23 @@ static int demux_ts_get_stream_length (demux_plugin_t *this_gen) { demux_ts_t*this = (demux_ts_t*)this_gen; - return this->input->get_length (this->input) / (this->rate * 50); + if (this->rate) + return this->input->get_length (this->input) / (this->rate * 50); + else + return 0; +} + +static int demux_ts_get_video_frame (demux_plugin_t *this_gen, + int timestamp, + int *width, int *height, + int *ratio_code, + int *duration, + int *format, + uint8_t *img) { + + /* demux_ts_t *this = (demux_ts_t*)this_gen; */ + + return 0; } @@ -1529,6 +1545,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, this->demux_plugin.dispose = demux_ts_dispose; this->demux_plugin.get_status = demux_ts_get_status; this->demux_plugin.get_stream_length = demux_ts_get_stream_length; + this->demux_plugin.get_video_frame = demux_ts_get_video_frame; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; /* @@ -1618,6 +1636,6 @@ static void *init_class (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "mpeg-ts", XINE_VERSION_CODE, NULL, init_class }, + { PLUGIN_DEMUX, 16, "mpeg-ts", XINE_VERSION_CODE, NULL, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_voc.c b/src/demuxers/demux_voc.c index 36d902ce3..96bdcc362 100644 --- a/src/demuxers/demux_voc.c +++ b/src/demuxers/demux_voc.c @@ -23,7 +23,7 @@ * It will only play that block if it is PCM data. More variations will be * supported as they are encountered. * - * $Id: demux_voc.c,v 1.16 2002/11/01 17:41:28 mroi Exp $ + * $Id: demux_voc.c,v 1.17 2002/11/09 23:22:32 guenter Exp $ * */ @@ -319,6 +319,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_voc_dispose; this->demux_plugin.get_status = demux_voc_get_status; this->demux_plugin.get_stream_length = demux_voc_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -426,6 +428,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "voc", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "voc", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_vqa.c b/src/demuxers/demux_vqa.c index cb017068b..7a3c1bd41 100644 --- a/src/demuxers/demux_vqa.c +++ b/src/demuxers/demux_vqa.c @@ -27,7 +27,7 @@ * block needs information from the previous audio block in order to be * decoded, thus making random seeking difficult. * - * $Id: demux_vqa.c,v 1.17 2002/11/01 17:41:28 mroi Exp $ + * $Id: demux_vqa.c,v 1.18 2002/11/09 23:22:33 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -373,6 +373,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_vqa_dispose; this->demux_plugin.get_status = demux_vqa_get_status; this->demux_plugin.get_stream_length = demux_vqa_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -480,6 +482,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "vqa", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "vqa", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_wav.c b/src/demuxers/demux_wav.c index e6369f94a..bcf85babb 100644 --- a/src/demuxers/demux_wav.c +++ b/src/demuxers/demux_wav.c @@ -20,7 +20,7 @@ * MS WAV File Demuxer by Mike Melanson (melanson@pcisys.net) * based on WAV specs that are available far and wide * - * $Id: demux_wav.c,v 1.24 2002/11/01 17:41:28 mroi Exp $ + * $Id: demux_wav.c,v 1.25 2002/11/09 23:22:33 guenter Exp $ * */ @@ -318,6 +318,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_wav_dispose; this->demux_plugin.get_status = demux_wav_get_status; this->demux_plugin.get_stream_length = demux_wav_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -440,6 +442,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "wav", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "wav", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_wc3movie.c b/src/demuxers/demux_wc3movie.c index 3b17db78c..1c7705f7c 100644 --- a/src/demuxers/demux_wc3movie.c +++ b/src/demuxers/demux_wc3movie.c @@ -22,7 +22,7 @@ * For more information on the MVE file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_wc3movie.c,v 1.24 2002/11/01 17:41:28 mroi Exp $ + * $Id: demux_wc3movie.c,v 1.25 2002/11/09 23:22:33 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -677,6 +677,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_mve_dispose; this->demux_plugin.get_status = demux_mve_get_status; this->demux_plugin.get_stream_length = demux_mve_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -776,6 +778,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "wc3movie", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "wc3movie", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/demuxers/demux_yuv4mpeg2.c b/src/demuxers/demux_yuv4mpeg2.c index 09f0c01d4..084828fc7 100644 --- a/src/demuxers/demux_yuv4mpeg2.c +++ b/src/demuxers/demux_yuv4mpeg2.c @@ -22,7 +22,7 @@ * tools, visit: * http://mjpeg.sourceforge.net/ * - * $Id: demux_yuv4mpeg2.c,v 1.9 2002/11/01 17:41:29 mroi Exp $ + * $Id: demux_yuv4mpeg2.c,v 1.10 2002/11/09 23:22:33 guenter Exp $ */ #ifdef HAVE_CONFIG_H @@ -337,6 +337,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->demux_plugin.dispose = demux_yuv4mpeg2_dispose; this->demux_plugin.get_status = demux_yuv4mpeg2_get_status; this->demux_plugin.get_stream_length = demux_yuv4mpeg2_get_stream_length; + this->demux_plugin.get_video_frame = NULL; + this->demux_plugin.got_video_frame_cb= NULL; this->demux_plugin.demux_class = class_gen; this->status = DEMUX_FINISHED; @@ -442,6 +444,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 15, "yuv4mpeg2", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 16, "yuv4mpeg2", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/xine-engine/buffer.h b/src/xine-engine/buffer.h index d17239de0..6fdabb9ea 100644 --- a/src/xine-engine/buffer.h +++ b/src/xine-engine/buffer.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: buffer.h,v 1.76 2002/10/31 05:23:02 tmmm Exp $ + * $Id: buffer.h,v 1.77 2002/11/09 23:22:33 guenter Exp $ * * * contents: @@ -221,6 +221,8 @@ struct buf_element_s { #define BUF_FLAG_SEEK 0x0100 #define BUF_FLAG_SPECIAL 0x0200 #define BUF_FLAG_NO_VIDEO 0x0400 +/* do not decode the buffer contents, detect framing only */ +#define BUF_FLAG_FRAMING 0x0800 /* these are the types of special buffers */ /* diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c index 77c552c33..9ba404b73 100644 --- a/src/xine-engine/xine.c +++ b/src/xine-engine/xine.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.c,v 1.189 2002/11/05 23:29:48 tmattern Exp $ + * $Id: xine.c,v 1.190 2002/11/09 23:22:33 guenter Exp $ * * top-level xine functions * @@ -1057,6 +1057,33 @@ int xine_get_current_frame (xine_stream_t *stream, int *width, int *height, return 1; } +int xine_get_video_frame (xine_stream_t *stream, + int timestamp, /* msec */ + int *width, int *height, + int *ratio_code, + int *duration, /* msec */ + int *format, + uint8_t *img) { + int ret; + + pthread_mutex_lock (&stream->frontend_lock); + + if (stream->status != XINE_STATUS_STOP) + xine_stop_internal (stream); + + if (stream->demux_plugin->get_video_frame) + ret = stream->demux_plugin->get_video_frame (stream->demux_plugin, + timestamp, width, height, + ratio_code, duration, + format, img); + else + ret = 0; + + pthread_mutex_unlock (&stream->frontend_lock); + + return ret; +} + int xine_get_spu_lang (xine_stream_t *stream, int channel, char *lang) { if (stream->input_plugin) { -- cgit v1.2.3