[gst-devel] vcdsrc

Joshua N Pritikin noreply at eth.net
Thu Dec 6 03:02:02 CET 2001


The attached patch makes vcdsrc robust against damaged CDs.  It also
comments out some warnings.

-- 
Victory to the Divine Mother!!         after all,
  http://sahajayoga.org                  http://why-compete.org
-------------- next part --------------
? vcd1
Index: vcdsrc.c
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/plugins/vcdsrc/vcdsrc.c,v
retrieving revision 1.14
diff -u -r1.14 vcdsrc.c
--- vcdsrc.c	2001/11/19 16:58:45	1.14
+++ vcdsrc.c	2001/12/06 10:57:20
@@ -215,8 +215,9 @@
   GstBuffer *buf;
   gulong offset;
   struct cdrom_msf *msf;
+  gint error_count = 0;
 
-  fprintf(stderr,"in vcdsrc_push\n");
+  // fprintf(stderr,"in vcdsrc_push\n");
 
   g_return_val_if_fail(pad != NULL, NULL);
   g_return_val_if_fail(GST_IS_PAD(pad), NULL);
@@ -236,17 +237,29 @@
 
   msf = (struct cdrom_msf *)GST_BUFFER_DATA(buf);
 
+ read_sector:
+
   /* read it in from the device */
   offset = vcdsrc->trackoffset + vcdsrc->curoffset;
   msf->cdmsf_frame0 = offset % 75;
   msf->cdmsf_sec0 = (offset / 75) % 60;
   msf->cdmsf_min0 = (offset / (75 * 60));
-  gst_info("msf is %d:%d:%d\n",msf->cdmsf_min0,msf->cdmsf_sec0,
-           msf->cdmsf_frame0);
+
+  //gst_info("msf is %d:%d:%d\n",msf->cdmsf_min0,msf->cdmsf_sec0,
+  // msf->cdmsf_frame0);
+
   if (ioctl(vcdsrc->fd,CDROMREADRAW,msf)) {
-    perror("reading raw data from cdrom");
-// FIXME
-    exit(1);
+    if (++error_count > 16)
+      {
+	fprintf (stderr, "End of CD\n");
+	exit(1);
+      }
+
+    fprintf (stderr, "%s while reading raw data from cdrom at %d:%d:%d\n",
+	     strerror (errno),
+	     msf->cdmsf_min0, msf->cdmsf_sec0, msf->cdmsf_frame0);
+    vcdsrc->curoffset += 1;
+    goto read_sector;
   }
 
 //  if (readbytes == 0) {


More information about the gstreamer-devel mailing list