mirror of
https://github.com/mpv-player/mpv
synced 2025-05-05 09:46:01 +00:00
small bugfix in the new optimized head sync code
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@548 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
cd663cd2f2
commit
09b1f74810
13
demux_mpg.c
13
demux_mpg.c
@ -3,12 +3,17 @@
|
|||||||
//#define MAX_PS_PACKETSIZE 2048
|
//#define MAX_PS_PACKETSIZE 2048
|
||||||
#define MAX_PS_PACKETSIZE (224*1024)
|
#define MAX_PS_PACKETSIZE (224*1024)
|
||||||
|
|
||||||
|
static int mpeg_pts_error=0;
|
||||||
|
|
||||||
static unsigned int read_mpeg_timestamp(stream_t *s,int c){
|
static unsigned int read_mpeg_timestamp(stream_t *s,int c){
|
||||||
int d,e;
|
int d,e;
|
||||||
unsigned int pts;
|
unsigned int pts;
|
||||||
d=stream_read_word(s);
|
d=stream_read_word(s);
|
||||||
e=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);
|
pts=(((c>>1)&7)<<30)|((d>>1)<<15)|(e>>1);
|
||||||
if(verbose>=3) printf("{%d}",pts);
|
if(verbose>=3) printf("{%d}",pts);
|
||||||
return pts;
|
return pts;
|
||||||
@ -49,6 +54,8 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
|
|||||||
return -2; // invalid packet !!!!!!
|
return -2; // invalid packet !!!!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mpeg_pts_error=0;
|
||||||
|
|
||||||
while(len>0){ // Skip stuFFing bytes
|
while(len>0){ // Skip stuFFing bytes
|
||||||
c=stream_read_char(demux->stream);--len;
|
c=stream_read_char(demux->stream);--len;
|
||||||
if(c!=0xFF)break;
|
if(c!=0xFF)break;
|
||||||
@ -146,6 +153,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
|
|||||||
return -1; // invalid packet !!!!!!
|
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(verbose>=3) printf(" => len=%d\n",len);
|
||||||
|
|
||||||
// if(len<=0 || len>MAX_PS_PACKETSIZE) return -1; // Invalid packet size
|
// if(len<=0 || len>MAX_PS_PACKETSIZE) return -1; // Invalid packet size
|
||||||
@ -215,6 +223,8 @@ int ret=0;
|
|||||||
do{
|
do{
|
||||||
demux->filepos=stream_tell(demux->stream);
|
demux->filepos=stream_tell(demux->stream);
|
||||||
head=stream_read_dword(demux->stream);
|
head=stream_read_dword(demux->stream);
|
||||||
|
if((head&0xFFFFFF00)!=0x100){
|
||||||
|
// sync...
|
||||||
demux->filepos-=skipped;
|
demux->filepos-=skipped;
|
||||||
while(1){
|
while(1){
|
||||||
int c=stream_read_char(demux->stream);
|
int c=stream_read_char(demux->stream);
|
||||||
@ -229,6 +239,7 @@ do{
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
demux->filepos+=skipped;
|
demux->filepos+=skipped;
|
||||||
|
}
|
||||||
if(stream_eof(demux->stream)) break;
|
if(stream_eof(demux->stream)) break;
|
||||||
// sure: head=0x000001XX
|
// sure: head=0x000001XX
|
||||||
if(verbose>=4) printf("*** head=0x%X\n",head);
|
if(verbose>=4) printf("*** head=0x%X\n",head);
|
||||||
|
Loading…
Reference in New Issue
Block a user