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; }
|