diff --git a/configure.ac b/configure.ac index 5ebf698eb9..260aea5854 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 fc755f7730..c5bdf3cb9b 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 c9f5ba04e9..6cec23c4c9 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; };