changeset 16547:aa15d627a00b

Prints the numbers of start and end tracks and MSF length for each track of a VCD when -identify is given. Patch by kiriuja < mplayer TIREH patches AH en TIREH directo POIS net > Original Thread: Date: Sep 11, 2005 3:30 AM Subject: [MPlayer-dev-eng] [PATCH] -identify VCD tracks
author gpoirier
date Thu, 22 Sep 2005 08:46:05 +0000
parents f9b93c7c6b92
children 6447ada9024e
files libmpdemux/vcd_read.h libmpdemux/vcd_read_darwin.h libmpdemux/vcd_read_fbsd.h libmpdemux/vcd_read_nbsd.h
diffstat 4 files changed, 132 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/vcd_read.h	Thu Sep 22 08:11:17 2005 +0000
+++ b/libmpdemux/vcd_read.h	Thu Sep 22 08:46:05 2005 +0000
@@ -60,15 +60,20 @@
 mp_vcd_priv_t* vcd_read_toc(int fd){
   struct cdrom_tochdr tochdr;
   mp_vcd_priv_t* vcd;
-  int i;
+  int i, min = 0, sec = 0, frame = 0;
   if (ioctl(fd,CDROMREADTOCHDR,&tochdr)==-1) {
     mp_msg(MSGT_OPEN,MSGL_ERR,"read CDROM toc header: %s\n",strerror(errno));
     return NULL;
   }
-  for (i=tochdr.cdth_trk0 ; i<=tochdr.cdth_trk1 ; i++){
+  if (identify)
+  {
+    mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_START_TRACK=%d\n", tochdr.cdth_trk0);
+    mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_END_TRACK=%d\n", tochdr.cdth_trk1);
+  }
+  for (i=tochdr.cdth_trk0 ; i<=tochdr.cdth_trk1 + 1; i++){
       struct cdrom_tocentry tocentry;
 
-      tocentry.cdte_track  = i;
+      tocentry.cdte_track  = i<=tochdr.cdth_trk1 ? i : CDROM_LEADOUT;
       tocentry.cdte_format = CDROM_MSF;
 
       if (ioctl(fd,CDROMREADTOCENTRY,&tocentry)==-1) {
@@ -76,6 +81,7 @@
 	return NULL;
       }
         
+      if (i<=tochdr.cdth_trk1)
       mp_msg(MSGT_OPEN,MSGL_INFO,"track %02d:  adr=%d  ctrl=%d  format=%d  %02d:%02d:%02d  mode: %d\n",
           (int)tocentry.cdte_track,
           (int)tocentry.cdte_adr,
@@ -86,6 +92,30 @@
           (int)tocentry.cdte_addr.msf.frame,
           (int)tocentry.cdte_datamode
       );
+
+      if (identify)
+      {
+        if (i > tochdr.cdth_trk0)
+        {
+          min = tocentry.cdte_addr.msf.minute - min;
+          sec = tocentry.cdte_addr.msf.second - sec;
+          frame = tocentry.cdte_addr.msf.frame - frame;
+          if ( frame < 0 )
+          {
+            frame += 75;
+            sec --;
+          }
+          if ( sec < 0 )
+          {
+            sec += 60;
+            min --;
+          }
+          mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_TRACK_%d_MSF=%02d:%02d:%02d\n", i - 1, min, sec, frame);
+        }
+        min = tocentry.cdte_addr.msf.minute;
+        sec = tocentry.cdte_addr.msf.second;
+        frame = tocentry.cdte_addr.msf.frame;
+      }
     }
   vcd = malloc(sizeof(mp_vcd_priv_t));
   vcd->fd = fd;
--- a/libmpdemux/vcd_read_darwin.h	Thu Sep 22 08:11:17 2005 +0000
+++ b/libmpdemux/vcd_read_darwin.h	Thu Sep 22 08:46:05 2005 +0000
@@ -110,7 +110,7 @@
 	CDMSF trackMSF;
 	
 	mp_vcd_priv_t* vcd;
-	int i;
+	int i, min = 0, sec = 0, frame = 0;
   
 	//read toc header
     memset(&tochdr, 0, sizeof(tochdr));
@@ -124,11 +124,16 @@
     }
 	
 	//print all track info
-	for (i=hdr.firstTrackNumberInLastSessionLSB ; i<=hdr.lastTrackNumberInLastSessionLSB ; i++)
+	if (identify)
+	{
+		mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_START_TRACK=%d\n", hdr.firstTrackNumberInLastSessionLSB);
+		mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_END_TRACK=%d\n", hdr.lastTrackNumberInLastSessionLSB);
+	}
+	for (i=hdr.firstTrackNumberInLastSessionLSB ; i<=hdr.lastTrackNumberInLastSessionLSB + 1; i++)
 	{
 		memset( &tocentry, 0, sizeof(tocentry));
 		tocentry.addressType = kCDTrackInfoAddressTypeTrackNumber;
-		tocentry.address = i;
+		tocentry.address = i<=hdr.lastTrackNumberInLastSessionLSB ? i : CDROM_LEADOUT;
 		tocentry.bufferLength = sizeof(entry);
 		tocentry.buffer = &entry;
 
@@ -141,6 +146,7 @@
 		trackMSF = CDConvertLBAToMSF(entry.trackStartAddress);
         
 		//mp_msg(MSGT_OPEN,MSGL_INFO,"track %02d:  adr=%d  ctrl=%d  format=%d  %02d:%02d:%02d\n",
+		if (i<=hdr.lastTrackNumberInLastSessionLSB)
 		mp_msg(MSGT_OPEN,MSGL_INFO,"track %02d: format=%d  %02d:%02d:%02d\n",
           (int)tocentry.address,
           //(int)tocentry.entry.addr_type,
@@ -150,6 +156,30 @@
           (int)trackMSF.second,
           (int)trackMSF.frame
 		);
+
+		if (identify)
+		{
+		  if (i > hdr.firstTrackNumberInLastSessionLSB)
+		  {
+		    min = trackMSF.minute - min;
+		    sec = trackMSF.second - sec;
+		    frame = trackMSF.frame - frame;
+		    if ( frame < 0 )
+		    {
+		      frame += 75;
+		      sec --;
+		    }
+		    if ( sec < 0 )
+		    {
+		      sec += 60;
+		      min --;
+		    }
+		    mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_TRACK_%d_MSF=%02d:%02d:%02d\n", i - 1, min, sec, frame);
+		  }
+		  min = trackMSF.minute;
+		  sec = trackMSF.second;
+		  frame = trackMSF.frame;
+		}
 	}
  
 	vcd = malloc(sizeof(mp_vcd_priv_t));
--- a/libmpdemux/vcd_read_fbsd.h	Thu Sep 22 08:11:17 2005 +0000
+++ b/libmpdemux/vcd_read_fbsd.h	Thu Sep 22 08:46:05 2005 +0000
@@ -60,15 +60,20 @@
 mp_vcd_priv_t* vcd_read_toc(int fd){
   struct ioc_toc_header tochdr;
   mp_vcd_priv_t* vcd;
-  int i;
+  int i, min = 0, sec = 0, frame = 0;
   if (ioctl(fd,CDIOREADTOCHEADER,&tochdr)==-1) {
     mp_msg(MSGT_OPEN,MSGL_ERR,"read CDROM toc header: %s\n",strerror(errno));
     return NULL;
   }
-  for (i=tochdr.starting_track ; i<=tochdr.ending_track ; i++){
+  if (identify)
+  {
+    mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_START_TRACK=%d\n", tochdr.starting_track);
+    mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_END_TRACK=%d\n", tochdr.ending_track);
+  }
+  for (i=tochdr.starting_track ; i<=tochdr.ending_track + 1; i++){
       struct ioc_read_toc_single_entry tocentry;
 
-      tocentry.track  = i;
+      tocentry.track  = i<=tochdr.ending_track ? i : CDROM_LEADOUT;
       tocentry.address_format = CD_MSF_FORMAT;
 
       if (ioctl(fd,CDIOREADTOCENTRY,&tocentry)==-1) {
@@ -76,6 +81,7 @@
 	return NULL;
       }
         
+      if (i<=tochdr.ending_track)
       mp_msg(MSGT_OPEN,MSGL_INFO,"track %02d:  adr=%d  ctrl=%d  format=%d  %02d:%02d:%02d\n",
           (int)tocentry.track,
           (int)tocentry.entry.addr_type,
@@ -85,6 +91,30 @@
           (int)tocentry.entry.addr.msf.second,
           (int)tocentry.entry.addr.msf.frame
       );
+
+      if (identify)
+      {
+        if (i > tochdr.starting_track)
+        {
+          min = tocentry.entry.addr.msf.minute - min;
+          sec = tocentry.entry.addr.msf.second - sec;
+          frame = tocentry.entry.addr.msf.frame - frame;
+          if ( frame < 0 )
+          {
+            frame += 75;
+            sec --;
+          }
+          if ( sec < 0 )
+          {
+            sec += 60;
+            min --;
+          }
+          mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_TRACK_%d_MSF=%02d:%02d:%02d\n", i - 1, min, sec, frame);
+        }
+        min = tocentry.entry.addr.msf.minute;
+        sec = tocentry.entry.addr.msf.second;
+        frame = tocentry.entry.addr.msf.frame;
+      }
     }
   vcd = malloc(sizeof(mp_vcd_priv_t));
   vcd->fd = fd;
--- a/libmpdemux/vcd_read_nbsd.h	Thu Sep 22 08:11:17 2005 +0000
+++ b/libmpdemux/vcd_read_nbsd.h	Thu Sep 22 08:46:05 2005 +0000
@@ -84,16 +84,21 @@
 {
   struct ioc_toc_header tochdr;
   mp_vcd_priv_t* vcd;
-  int             i;
+  int i, min = 0, sec = 0, frame = 0;
   if (ioctl(fd, CDIOREADTOCHEADER, &tochdr) == -1) {
     mp_msg(MSGT_OPEN,MSGL_ERR,"read CDROM toc header: %s\n",strerror(errno));
     return;
   }
-  for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
+  if (identify)
+  {
+    mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_START_TRACK=%d\n", tochdr.starting_track);
+    mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_END_TRACK=%d\n", tochdr.ending_track);
+  }
+  for (i = tochdr.starting_track; i <= tochdr.ending_track + 1; i++) {
     struct ioc_read_toc_entry tocentry;
     struct cd_toc_entry tocentry_data;
 
-    tocentry.starting_track = i;
+    tocentry.starting_track = i<=tochdr.ending_track ? i : CDROM_LEADOUT;
     tocentry.address_format = CD_MSF_FORMAT;
     tocentry.data_len = sizeof(struct cd_toc_entry);
     tocentry.data = &tocentry_data;
@@ -102,6 +107,7 @@
       mp_msg(MSGT_OPEN,MSGL_ERR,"read CDROM toc entry: %s\n",strerror(errno));
       return NULL;
     }
+    if (i <= tochdr.ending_track)
     mp_msg(MSGT_OPEN,MSGL_INFO,"track %02d:  adr=%d  ctrl=%d  format=%d  %02d:%02d:%02d\n",
 	   (int) tocentry.starting_track,
 	   (int) tocentry.data->addr_type,
@@ -111,6 +117,30 @@
 	   (int) tocentry.data->addr.msf.second,
 	   (int) tocentry.data->addr.msf.frame
       );
+
+    if (identify)
+    {
+      if (i > tochdr.starting_track)
+      {
+        min = tocentry.data->addr.msf.minute - min;
+        sec = tocentry.data->addr.msf.second - sec;
+        frame = tocentry.data->addr.msf.frame - frame;
+        if ( frame < 0 )
+        {
+          frame += 75;
+          sec --;
+        }
+        if ( sec < 0 )
+        {
+          sec += 60;
+          min --;
+        }
+        mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_VCD_TRACK_%d_MSF=%02d:%02d:%02d\n", i - 1, min, sec, frame);
+      }
+      min = tocentry.data->addr.msf.minute;
+      sec = tocentry.data->addr.msf.second;
+      frame = tocentry.data->addr.msf.frame;
+    }
   }
   vcd = malloc(sizeof(mp_vcd_priv_t));
   vcd->fd = fd;