From: <lin...@us...> - 2004-04-05 21:29:40
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18037 Modified Files: dvbsubs.c dvbtextsubs.c pes.c Log Message: Attempt to deal with PTS wrapping from 0x1ffffffff to 0x000000000 Index: dvbsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbsubs.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** dvbsubs.c 22 Mar 2004 20:53:37 -0000 1.18 --- dvbsubs.c 5 Apr 2004 21:16:43 -0000 1.19 *************** *** 66,69 **** --- 66,70 ---- uint64_t video_pts,first_video_pts,audio_pts,first_audio_pts; + int audio_pts_wrap=0; void init_data() { *************** *** 507,510 **** --- 508,512 ---- fprintf(stderr,"PNG: displaying region %d at %d,%d width=%d,height=%d\n",r,page.regions[r].x,page.regions[r].y,regions[r].width,regions[r].height); out_y=page.regions[r].y*720; + for (v=0;v<16;v++) { fprintf(stderr,"Colour %c=dave r=%d, g=%d, b=%d\n",'0'+v,colours[regions[r].CLUT_id*48+v*3+0],colours[regions[r].CLUT_id*48+v*3+1],colours[regions[r].CLUT_id*48+v*3+2]); } for (y=0;y<regions[r].height;y++) { for (x=0;x<regions[r].width;x++) { *************** *** 512,516 **** --- 514,520 ---- if (v>0) { found=1; } bitmap.buffer[out_y+x+page.regions[r].x]=v+16*regions[r].CLUT_id; + fprintf(stderr,"%c",'.'+bitmap.buffer[out_y+x+page.regions[r].x]); } + fprintf(stderr,"\n"); out_y+=720; } *************** *** 575,579 **** // fprintf(stderr,"READ PES PACKET: length=%d\n",PES_packet_length); while (PES_packet_length >= 0) { ! PTS=get_pes_pts(buf); if (first_PTS==0) { first_PTS=PTS; } --- 579,583 ---- // fprintf(stderr,"READ PES PACKET: length=%d\n",PES_packet_length); while (PES_packet_length >= 0) { ! PTS=get_pes_pts(buf)/90; if (first_PTS==0) { first_PTS=PTS; } Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** dvbtextsubs.c 8 Mar 2004 22:20:32 -0000 1.10 --- dvbtextsubs.c 5 Apr 2004 21:16:44 -0000 1.11 *************** *** 111,116 **** --- 111,119 ---- uint64_t audio_pts=0; uint64_t first_audio_pts=0; + int audio_pts_wrap=0; + int pts_wrap=0; uint64_t FIRST_PTS=0; int sub_count=0; + int prev_PTS=0; typedef struct { *************** *** 506,510 **** PTS=p0|(p1<<8)|(p2<<16)|(p3<<24)|(p4<<32); ! PTS=PTS/90; if (FIRST_PTS==0) { FIRST_PTS=PTS-USER_PTS; } } else { --- 509,518 ---- PTS=p0|(p1<<8)|(p2<<16)|(p3<<24)|(p4<<32); ! if ((prev_PTS > (uint64_t)0x1ffff0000LL) && (PTS < (uint64_t)0x000100000LL)) { ! pts_wrap=1; ! } ! if (pts_wrap) { PTS+=0x200000000LL; } ! prev_PTS=PTS; ! if (FIRST_PTS==0) { FIRST_PTS=PTS-USER_PTS; } } else { *************** *** 551,555 **** int main(int argc, char** argv) { unsigned char pesbuf[1265536]; - uint64_t tmp_pts; int pes_format=0; int PES_packet_length; --- 559,562 ---- *************** *** 620,625 **** while ((PES_packet_length=read_pes_packet(0,the_pid,pesbuf,pes_format)) > 0) { - tmp_pts=get_pes_pts(pesbuf); - process_pes_packet(pesbuf,PES_packet_length+6,the_page); } --- 627,630 ---- Index: pes.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/pes.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** pes.c 8 Mar 2004 21:12:58 -0000 1.4 --- pes.c 5 Apr 2004 21:16:45 -0000 1.5 *************** *** 9,12 **** --- 9,13 ---- extern uint64_t audio_pts,first_audio_pts; + extern int audio_pts_wrap; extern uint16_t apid; *************** *** 22,25 **** --- 23,27 ---- int h,m,s,u; + pts/=90; // Convert to milliseconds h=(pts/(1000*60*60)); m=(pts/(1000*60))-(h*60); *************** *** 46,50 **** PTS=p0|(p1<<8)|(p2<<16)|(p3<<24)|(p4<<32); - PTS=PTS/90; } else { PTS=0; --- 48,51 ---- *************** *** 81,85 **** } else if (stream_id==0xc0) { tmp_pts=get_pes_pts(buf); ! //fprintf(stdout,"stream_id=%02x, PTS=%lld ms\n",stream_id,tmp_pts); if (tmp_pts > audio_pts) { audio_pts=tmp_pts; } if ((first_audio_pts==0) || ((tmp_pts!=0) && (tmp_pts < first_audio_pts))) { first_audio_pts=tmp_pts; } --- 82,91 ---- } else if (stream_id==0xc0) { tmp_pts=get_pes_pts(buf); ! if (tmp_pts != 0) { ! if ((audio_pts > (uint64_t)0x1ffff0000LL) && (tmp_pts < (uint64_t)0x000100000LL)) { ! audio_pts_wrap=1; ! } ! if (audio_pts_wrap) { tmp_pts+=0x200000000LL; } ! } if (tmp_pts > audio_pts) { audio_pts=tmp_pts; } if ((first_audio_pts==0) || ((tmp_pts!=0) && (tmp_pts < first_audio_pts))) { first_audio_pts=tmp_pts; } *************** *** 144,149 **** } if (apid==packet_pid) { ! tmp_pts=get_pes_pts(&tsbuf[i]); ! // fprintf(stderr,"Found Audio stream, PID=%d, PTS=%s\n",packet_pid,pts2hmsu(last_tmp_pts,'.')); if (tmp_pts > audio_pts) { audio_pts=tmp_pts; } if ((first_audio_pts==0) || ((tmp_pts!=0) && (tmp_pts < first_audio_pts))) { first_audio_pts=tmp_pts; } --- 150,160 ---- } if (apid==packet_pid) { ! tmp_pts=get_pes_pts(buf); ! if (tmp_pts != 0) { ! if ((audio_pts > (uint64_t)0x1ffff0000LL) && (tmp_pts < (uint64_t)0x000100000LL)) { ! audio_pts_wrap=1; ! } ! if (audio_pts_wrap) { tmp_pts+=0x200000000LL; } ! } if (tmp_pts > audio_pts) { audio_pts=tmp_pts; } if ((first_audio_pts==0) || ((tmp_pts!=0) && (tmp_pts < first_audio_pts))) { first_audio_pts=tmp_pts; } |