[gst-cvs] gst-plugins-base: cdparanoia: expose cache size setting

Tim Mueller tpm at kemper.freedesktop.org
Fri Jun 19 14:33:04 PDT 2009


Module: gst-plugins-base
Branch: master
Commit: 9daee1f4a9195ab040db1a2180e6eece1ee2997e
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=9daee1f4a9195ab040db1a2180e6eece1ee2997e

Author: Jonathan Matthew <jonathan at d14n.org>
Date:   Fri Jun 19 11:27:40 2009 +1000

cdparanoia: expose cache size setting

This setting was added in cdparanoia 10.2.  The default value is good
for audio extraction, but lower values (previous versions of cdparanoia
used 150) are better for realtime playback.

Fixes #586331.

---

 configure.ac                      |    8 ++++++++
 ext/cdparanoia/gstcdparanoiasrc.c |   19 ++++++++++++++++++-
 ext/cdparanoia/gstcdparanoiasrc.h |    1 +
 3 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/configure.ac b/configure.ac
index 5ebf698..260aea5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -480,6 +480,14 @@ AG_GST_CHECK_FEATURE(CDPARANOIA, [CDParanoia], cdparanoia, [
     AC_DEFINE_UNQUOTED(CDPARANOIA_HEADERS_IN_DIR, ,
                        defined if cdda headers are in a cdda/ directory)
   fi
+  if test "x$FOUND_CDPARANOIA" = "xyes";
+  then
+    AC_CHECK_LIB(cdda_paranoia,
+                 paranoia_cachemodel_size,
+                 : ,
+                 HAVE_CDPARANOIA=no)
+  fi
+
   AC_SUBST(CDPARANOIA_LIBS)
 ])
 dnl FIXME : add second check somehow if that is necessary
diff --git a/ext/cdparanoia/gstcdparanoiasrc.c b/ext/cdparanoia/gstcdparanoiasrc.c
index fc755f7..c5bdf3c 100644
--- a/ext/cdparanoia/gstcdparanoiasrc.c
+++ b/ext/cdparanoia/gstcdparanoiasrc.c
@@ -43,13 +43,15 @@ enum
   PROP_READ_SPEED,
   PROP_PARANOIA_MODE,
   PROP_SEARCH_OVERLAP,
-  PROP_GENERIC_DEVICE
+  PROP_GENERIC_DEVICE,
+  PROP_CACHE_SIZE
 };
 
 #define DEFAULT_READ_SPEED              -1
 #define DEFAULT_SEARCH_OVERLAP          -1
 #define DEFAULT_PARANOIA_MODE            PARANOIA_MODE_FRAGMENT
 #define DEFAULT_GENERIC_DEVICE           NULL
+#define DEFAULT_CACHE_SIZE              -1
 
 GST_DEBUG_CATEGORY_STATIC (gst_cd_paranoia_src_debug);
 #define GST_CAT_DEFAULT gst_cd_paranoia_src_debug
@@ -125,6 +127,7 @@ gst_cd_paranoia_src_init (GstCdParanoiaSrc * src, GstCdParanoiaSrcClass * klass)
   src->paranoia_mode = DEFAULT_PARANOIA_MODE;
   src->read_speed = DEFAULT_READ_SPEED;
   src->generic_device = g_strdup (DEFAULT_GENERIC_DEVICE);
+  src->cache_size = DEFAULT_CACHE_SIZE;
 }
 
 static void
@@ -158,6 +161,11 @@ gst_cd_paranoia_src_class_init (GstCdParanoiaSrcClass * klass)
           "Force minimum overlap search during verification to n sectors", -1,
           75, DEFAULT_SEARCH_OVERLAP,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CACHE_SIZE,
+      g_param_spec_int ("cache-size", "Cache size",
+          "Set CD cache size to n sectors", -1,
+          G_MAXINT, DEFAULT_CACHE_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /* FIXME: we don't really want signals for this, but messages on the bus,
    * but then we can't check any longer whether anyone is interested in them */
@@ -245,6 +253,8 @@ gst_cd_paranoia_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device)
 
   if (src->search_overlap != -1)
     paranoia_overlapset (src->p, src->search_overlap);
+  if (src->cache_size != -1)
+    paranoia_cachemodel_size (src->p, src->cache_size);
 
   src->next_sector = -1;
 
@@ -442,6 +452,10 @@ gst_cd_paranoia_src_set_property (GObject * object, guint prop_id,
       src->search_overlap = g_value_get_int (value);
       break;
     }
+    case PROP_CACHE_SIZE:{
+      src->cache_size = g_value_get_int (value);
+      break;
+    }
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -471,6 +485,9 @@ gst_cd_paranoia_src_get_property (GObject * object, guint prop_id,
     case PROP_SEARCH_OVERLAP:
       g_value_set_int (value, src->search_overlap);
       break;
+    case PROP_CACHE_SIZE:
+      g_value_set_int (value, src->cache_size);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/ext/cdparanoia/gstcdparanoiasrc.h b/ext/cdparanoia/gstcdparanoiasrc.h
index c9f5ba0..6cec23c 100644
--- a/ext/cdparanoia/gstcdparanoiasrc.h
+++ b/ext/cdparanoia/gstcdparanoiasrc.h
@@ -63,6 +63,7 @@ struct _GstCdParanoiaSrc {
   gint             paranoia_mode;
   gint             read_speed;
   gint             search_overlap;
+  gint             cache_size;
 
   gchar           *generic_device;
 };





More information about the Gstreamer-commits mailing list