changeset 3842:32e488a4fc40

dvdsub pts fix, based on patch by Kim Minh Kaplan
author arpi
date Fri, 28 Dec 2001 19:20:12 +0000
parents 25600d0bdc63
children 38e84c14280d
files mplayer.c spudec.c
diffstat 2 files changed, 11 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mplayer.c	Fri Dec 28 18:29:12 2001 +0000
+++ b/mplayer.c	Fri Dec 28 19:20:12 2001 +0000
@@ -2220,13 +2220,13 @@
     if(len>=2){
       int len2;
       len2=(packet[0]<<8)+packet[1];
-      mp_msg(MSGT_CPLAYER,MSGL_V,"\rDVD sub: %d / %d  \n",len,len2);
-      spudec_assemble(vo_spudec,packet,len,100*d_video->pts);
+      mp_msg(MSGT_CPLAYER,MSGL_V,"\rDVD sub: %d / %d   v_pts=%5.3f  s_pts=%5.3f  \n",len,len2,d_video->pts,d_dvdsub->pts);
+      spudec_assemble(vo_spudec,packet,len,100*d_dvdsub->pts);
     } else {
-      spudec_heartbeat(vo_spudec,100*d_video->pts);
       if(len>=0)
 	mp_msg(MSGT_CPLAYER,MSGL_V,"invalid dvd sub\n");
     }
+    spudec_heartbeat(vo_spudec,100*d_video->pts);
     current_module=NULL;
   }
 #endif
--- a/spudec.c	Fri Dec 28 18:29:12 2001 +0000
+++ b/spudec.c	Fri Dec 28 19:20:12 2001 +0000
@@ -164,7 +164,7 @@
   }
 }
 
-static void spudec_process_control(spudec_handle_t *this)
+static void spudec_process_control(spudec_handle_t *this, int pts100)
 {
   int a,b; /* Temporary vars */
   int date, type;
@@ -190,12 +190,12 @@
       case 0x01:
 	/* Start display */
 	mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Start display!\n");
-	this->start_pts = this->now_pts + date;
+	this->start_pts = pts100 + date;
 	break;
       case 0x02:
 	/* Stop display */
 	mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Stop display!\n");
-	this->end_pts = this->now_pts + date;
+	this->end_pts = pts100 + date;
 	break;
       case 0x03:
 	/* Palette */
@@ -257,9 +257,9 @@
   }
 }
 
-static void spudec_decode(spudec_handle_t *this)
+static void spudec_decode(spudec_handle_t *this,int pts100)
 {
-  spudec_process_control(this);
+  spudec_process_control(this, pts100);
   spudec_process_data(this);
 }
 
@@ -267,7 +267,7 @@
 void spudec_assemble(void *this, unsigned char *packet, int len, int pts100)
 {
   spudec_handle_t *spu = (spudec_handle_t*)this;
-  spudec_heartbeat(this, pts100);
+//  spudec_heartbeat(this, pts100);
   if (spu->packet_offset == 0) {
     unsigned int len2 = get_be16(packet);
     // Start new fragment
@@ -304,7 +304,7 @@
       if(x>=4 && x==y){		// if it points to self - we're done!
         // we got it!
 	mp_msg(MSGT_SPUDEC,MSGL_DBG2,"SPUgot: off=%d  size=%d \n",spu->packet_offset,spu->packet_size);
-	spudec_decode(spu);
+	spudec_decode(spu, pts100);
 	spu->packet_offset = 0;
 	break;
       }
@@ -318,7 +318,7 @@
   }
 #else
   if (spu->packet_offset == spu->packet_size) {
-    spudec_decode(spu);
+    spudec_decode(spu, pts100);
     spu->packet_offset = 0;
   }
 #endif