[gst-devel] vcdsrc patch

Joshua N Pritikin vishnu at pobox.com
Fri May 10 08:50:02 CEST 2002


The attached patch:

* Allows vcdsrc to read arbitrarily scratched VCDs.  It adds a "max-errors"
parameters that can be increased beyond the default of 16.

* Make vcdsrc return an EOS event instead of exit(1).

Does this apply cleanly to CVS?  My patch is against 0.3.1.

-- 
Victory to the Divine Mother!!         after all,
  http://sahajayoga.org                  http://why-compete.org
-------------- next part --------------
# This is a patch for gst-plugins-0.3.1 to update it to gst-plugins-0.3.1
# 
# To apply this patch:
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'applypatch' program with this patch file as input.
#
# If you do not have 'applypatch', it is part of the 'makepatch' package
# that you can fetch from the Comprehensive Perl Archive Network:
# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
# In the above URL, 'x' should be 2 or higher.
#
# To apply this patch without the use of 'applypatch':
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'patch' program with this file as input.
#
#### End of Preamble ####

#### Patch data follows ####
diff -up '/tmp/mp10049.d/old/gst-plugins-0.3.1/sys/vcd/vcdsrc.c' 'gst-plugins-0.3.1/sys/vcd/vcdsrc.c'
Index: ./sys/vcd/vcdsrc.c
--- ./sys/vcd/vcdsrc.c	Sat Dec 29 01:54:41 2001
+++ ./sys/vcd/vcdsrc.c	Fri May 10 21:03:52 2002
@@ -56,6 +56,7 @@ enum {
   ARG_TRACK,
   ARG_BYTESPERREAD,
   ARG_OFFSET,
+  ARG_MAX_ERRORS,
 };
 
 static void			vcdsrc_class_init	(VCDSrcClass *klass);
@@ -117,6 +118,8 @@ vcdsrc_class_init (VCDSrcClass *klass)
   g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_OFFSET,
     g_param_spec_int("offset","offset","offset",
                      G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
+  g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MAX_ERRORS,
+    g_param_spec_int("max-errors","","", 0,G_MAXINT,16,G_PARAM_READWRITE));
 
   gobject_class->set_property = vcdsrc_set_property;
   gobject_class->get_property = vcdsrc_get_property;
@@ -139,6 +142,7 @@ vcdsrc_init (VCDSrc *vcdsrc)
   vcdsrc->curoffset = 0;
   vcdsrc->bytes_per_read = VCD_BYTES_PER_SECTOR;
   vcdsrc->seq = 0;
+  vcdsrc->max_errors = 16;
 }
 
 
@@ -174,6 +178,9 @@ vcdsrc_set_property (GObject *object, gu
     case ARG_OFFSET:
       src->curoffset = g_value_get_int (value) / VCD_BYTES_PER_SECTOR;
       break;
+    case ARG_MAX_ERRORS:
+      src->max_errors = g_value_get_int (value);
+      break;
     default:
       break;
   }
@@ -202,6 +209,9 @@ vcdsrc_get_property (GObject *object, gu
     case ARG_OFFSET:
       g_value_set_int (value, src->curoffset * VCD_BYTES_PER_SECTOR);
       break;
+    case ARG_MAX_ERRORS:
+      g_value_set_int (value, src->max_errors);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -249,16 +259,18 @@ vcdsrc_get (GstPad *pad)
   /* msf->cdmsf_frame0); */
 
   if (ioctl(vcdsrc->fd,CDROMREADRAW,msf)) {
-    if (++error_count > 16)
+    if (++error_count > vcdsrc->max_errors)
       {
-	fprintf (stderr, "End of CD\n");
-	exit(1);
+	gst_element_set_eos (GST_ELEMENT (vcdsrc));
+	return GST_BUFFER (gst_event_new (GST_EVENT_EOS));
       }
 
     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;
+
+    /* Or we can return a zero-filled buffer.  Which is better? */
     goto read_sector;
   }
 
diff -up '/tmp/mp10049.d/old/gst-plugins-0.3.1/sys/vcd/vcdsrc.h' 'gst-plugins-0.3.1/sys/vcd/vcdsrc.h'
Index: ./sys/vcd/vcdsrc.h
--- ./sys/vcd/vcdsrc.h	Fri Dec 21 01:55:24 2001
+++ ./sys/vcd/vcdsrc.h	Fri May 10 20:49:28 2002
@@ -80,6 +80,7 @@ struct _VCDSrc {
   gulong bytes_per_read;		/* bytes per read */
 
   gulong seq;				/* buffer sequence number */
+  int max_errors;
 };
 
 struct _VCDSrcClass {
#### End of Patch data ####

#### ApplyPatch data follows ####
# Data version        : 1.0
# Date generated      : Fri May 10 21:08:33 2002
# Generated by        : makepatch 2.00_03
# Recurse directories : Yes
# p 'sys/vcd/vcdsrc.c' 11159 1021044832 0100644
# p 'sys/vcd/vcdsrc.h' 2303 1021043968 0100644
#### End of ApplyPatch data ####

#### End of Patch kit [created: Fri May 10 21:08:33 2002] ####
#### Patch checksum: 96 3208 44997 ####
#### Checksum: 114 3903 37092 ####


More information about the gstreamer-devel mailing list