summaryrefslogtreecommitdiffstats
path: root/demux_mpg.c
diff options
context:
space:
mode:
authorarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-04-20 16:43:17 +0000
committerarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-04-20 16:43:17 +0000
commit09b1f74810a5d092bfcd29a5722d0d91aaec553c (patch)
treeabbe5e0afcb8a372113ad5d2f751e7bc7a87146a /demux_mpg.c
parentcd663cd2f2ce800ad12918a33f030b85574bdfb8 (diff)
downloadmpv-09b1f74810a5d092bfcd29a5722d0d91aaec553c.tar.bz2
mpv-09b1f74810a5d092bfcd29a5722d0d91aaec553c.tar.xz
small bugfix in the new optimized head sync code
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@548 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'demux_mpg.c')
-rw-r--r--demux_mpg.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/demux_mpg.c b/demux_mpg.c
index c3745539dc..0b59997408 100644
--- a/demux_mpg.c
+++ b/demux_mpg.c
@@ -3,12 +3,17 @@
//#define MAX_PS_PACKETSIZE 2048
#define MAX_PS_PACKETSIZE (224*1024)
+static int mpeg_pts_error=0;
+
static unsigned int read_mpeg_timestamp(stream_t *s,int c){
int d,e;
unsigned int pts;
d=stream_read_word(s);
e=stream_read_word(s);
- if( ((c&1)!=1) || ((d&1)!=1) || ((e&1)!=1) ) return 0; // invalid pts
+ if( ((c&1)!=1) || ((d&1)!=1) || ((e&1)!=1) ){
+ ++mpeg_pts_error;
+ return 0; // invalid pts
+ }
pts=(((c>>1)&7)<<30)|((d>>1)<<15)|(e>>1);
if(verbose>=3) printf("{%d}",pts);
return pts;
@@ -49,6 +54,8 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
return -2; // invalid packet !!!!!!
}
+ mpeg_pts_error=0;
+
while(len>0){ // Skip stuFFing bytes
c=stream_read_char(demux->stream);--len;
if(c!=0xFF)break;
@@ -146,6 +153,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
return -1; // invalid packet !!!!!!
}
}
+ if(mpeg_pts_error) printf(" {PTS_err:%d} \n",mpeg_pts_error);
if(verbose>=3) printf(" => len=%d\n",len);
// if(len<=0 || len>MAX_PS_PACKETSIZE) return -1; // Invalid packet size
@@ -215,8 +223,10 @@ int ret=0;
do{
demux->filepos=stream_tell(demux->stream);
head=stream_read_dword(demux->stream);
- demux->filepos-=skipped;
- while(1){
+ if((head&0xFFFFFF00)!=0x100){
+ // sync...
+ demux->filepos-=skipped;
+ while(1){
int c=stream_read_char(demux->stream);
if(c<0) break; //EOF
head<<=8;
@@ -227,8 +237,9 @@ do{
}
head|=c;
break;
+ }
+ demux->filepos+=skipped;
}
- demux->filepos+=skipped;
if(stream_eof(demux->stream)) break;
// sure: head=0x000001XX
if(verbose>=4) printf("*** head=0x%X\n",head);