summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2003-08-19 12:43:46 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2003-08-19 12:43:46 +0000
commitc08afccd5658381ed9f4cf9568f1a5e35d3f0848 (patch)
tree90a9d99143d5a30c689fef01ca27ad653da8ad53
parentaeb098de85e5d66398bcfda6ef648bb07584af07 (diff)
downloadxine-lib-c08afccd5658381ed9f4cf9568f1a5e35d3f0848.tar.gz
xine-lib-c08afccd5658381ed9f4cf9568f1a5e35d3f0848.tar.bz2
Laurent Aimar <fenrir@videolan.org> mpeg demuxer fixes
CVS patchset: 5296 CVS date: 2003/08/19 12:43:46
-rw-r--r--src/demuxers/demux_mpeg.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/demuxers/demux_mpeg.c b/src/demuxers/demux_mpeg.c
index ad9bf5ca1..3600e96ff 100644
--- a/src/demuxers/demux_mpeg.c
+++ b/src/demuxers/demux_mpeg.c
@@ -19,7 +19,7 @@
*/
/*
- * $Id: demux_mpeg.c,v 1.122 2003/07/25 21:02:05 miguelfreitas Exp $
+ * $Id: demux_mpeg.c,v 1.123 2003/08/19 12:43:46 miguelfreitas Exp $
*
* demultiplexer for mpeg 1/2 program streams
* reads streams of variable blocksizes
@@ -667,7 +667,7 @@ static uint32_t parse_pack(demux_mpeg_t *this) {
buf = read_bytes (this, 1);
- if ((buf>>4) == 4) {
+ if ((buf>>6) == 0x01) {
int stuffing, i;
@@ -675,8 +675,8 @@ static uint32_t parse_pack(demux_mpeg_t *this) {
/* system_clock_reference */
- scr = (buf & 0x08) << 27;
- scr = (buf & 0x03) << 28;
+ scr = (buf & 0x38) << 27;
+ scr |= (buf & 0x03) << 28;
buf = read_bytes (this, 1);
scr |= buf << 20;
buf = read_bytes (this, 1);
@@ -777,7 +777,7 @@ static uint32_t parse_pack_preview (demux_mpeg_t *this, int *num_buffers) {
/* system_clock_reference */
buf = read_bytes (this, 1);
- if ((buf>>4) == 4) {
+ if ((buf>>6) == 0x01) {
buf = read_bytes(this, 1);
mpeg_version = 2;
} else {
@@ -809,6 +809,18 @@ static uint32_t parse_pack_preview (demux_mpeg_t *this, int *num_buffers) {
} else
buf = read_bytes (this, 3) ;
+ if( mpeg_version == 2 )
+ {
+ int i, stuffing;
+
+ buf = read_bytes(this,1);
+
+ /* stuffing bytes */
+ stuffing = buf &0x03;
+ for (i=0; i<stuffing; i++)
+ read_bytes (this, 1);
+ }
+
/* system header */
buf = read_bytes (this, 4) ;