summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuenter Bartsch <guenter@users.sourceforge.net>2003-04-26 19:36:23 +0000
committerGuenter Bartsch <guenter@users.sourceforge.net>2003-04-26 19:36:23 +0000
commit69b1c8f679f15092670f124e29c371b987031911 (patch)
tree135b51fe599e904eda36ba3e1b7790f67b20c073
parent4fc8dd4325139929b74a8ad89ee9677545b20fd2 (diff)
downloadxine-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.c74
-rw-r--r--src/demuxers/demux_mpeg_block.c4
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) ) {