diff options
author | Guenter Bartsch <guenter@users.sourceforge.net> | 2003-04-26 19:36:23 +0000 |
---|---|---|
committer | Guenter Bartsch <guenter@users.sourceforge.net> | 2003-04-26 19:36:23 +0000 |
commit | 69b1c8f679f15092670f124e29c371b987031911 (patch) | |
tree | 135b51fe599e904eda36ba3e1b7790f67b20c073 | |
parent | 4fc8dd4325139929b74a8ad89ee9677545b20fd2 (diff) | |
download | xine-lib-69b1c8f679f15092670f124e29c371b987031911.tar.gz xine-lib-69b1c8f679f15092670f124e29c371b987031911.tar.bz2 |
switch back to old demux behaviour: use demux_mpeg for mpeg1, demux_mpeg_block for mpeg2/vob files
CVS patchset: 4688
CVS date: 2003/04/26 19:36:23
-rw-r--r-- | src/demuxers/demux_mpeg.c | 74 | ||||
-rw-r--r-- | src/demuxers/demux_mpeg_block.c | 4 |
2 files changed, 53 insertions, 25 deletions
diff --git a/src/demuxers/demux_mpeg.c b/src/demuxers/demux_mpeg.c index d50580900..bb6ee92d8 100644 --- a/src/demuxers/demux_mpeg.c +++ b/src/demuxers/demux_mpeg.c @@ -17,11 +17,12 @@ * 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.111 2003/04/26 19:28:54 miguelfreitas Exp $ + * $Id: demux_mpeg.c,v 1.112 2003/04/26 19:36:23 guenter Exp $ * * demultiplexer for mpeg 1/2 program streams * reads streams of variable blocksizes * + * currently only used for mpeg-1-files * */ @@ -990,28 +991,39 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str * look for mpeg header */ - if (!buf[0] && !buf[1] && (buf[2] == 0x01) - && (buf[3] == 0xba)) /* if so, take it */ - break; - - free (this); - return NULL; + if(!buf[0] && !buf[1] && (buf[2] == 0x01)) { + + switch(buf[3]) { + case 0xba: + if((buf[4] & 0xf0) == 0x20) { + uint32_t pckbuf ; + + pckbuf = read_bytes (this, 1); + if ((pckbuf>>4) != 4) { + ok = 1; + break; + } + } + break; +#if 0 + case 0xe0: + if((buf[6] & 0xc0) != 0x80) { + uint32_t pckbuf ; + + pckbuf = read_bytes (this, 1); + if ((pckbuf>>4) != 4) { + ok = 1; + break; + } + } + break; +#endif + } + } } - input->seek(input, 0, SEEK_SET); - if (input->read(input, buf, 16) == 16) { - - /* - * look for mpeg header - */ - - if (!buf[0] && !buf[1] && (buf[2] == 0x01) - && (buf[3] == 0xba)) /* if so, take it */ - break; - - free (this); - return NULL; - } + if (ok) + break; /* special case for MPEG streams hidden inside QT files; check * is there is an mdat atom */ @@ -1027,11 +1039,25 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str /* go through the same MPEG detection song and dance */ if (input->read(input, buf, 6)) { - if (!buf[0] && !buf[1] && (buf[2] == 0x01) - && (buf[3] == 0xba)) /* if so, take it */ - break; + if (!buf[0] && !buf[1] && buf[2] == 0x01) { + switch (buf[3]) { + case 0xba: + if ((buf[4] & 0xf0) == 0x20) { + uint32_t pckbuf ; + + pckbuf = read_bytes (this, 1); + if ((pckbuf>>4) != 4) { + ok = 1; + } + } + break; + } + } } + if (ok) + break; + free (this); return NULL; } diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index 997b70db7..94a0a448a 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.171 2003/04/25 14:13:45 miguelfreitas Exp $ + * $Id: demux_mpeg_block.c,v 1.172 2003/04/26 19:36:24 guenter Exp $ * * demultiplexer for mpeg 1/2 program streams * @@ -1117,12 +1117,14 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str case METHOD_BY_CONTENT: { +#if 0 /* use demux_mpeg_block for vob files (performance reasons) */ /* use demux_mpeg for non-block devices */ if (!(input->get_capabilities(input) & INPUT_CAP_BLOCK)) { free (this->scratch_base); free (this); return NULL; } +#endif if (((input->get_capabilities(input) & INPUT_CAP_SEEKABLE) != 0) ) { |