r4075 - trunk/bse
- From: stw svn gnome org
- To: svn-commits-list gnome org
- Subject: r4075 - trunk/bse
- Date: Mon, 13 Nov 2006 19:07:06 -0500 (EST)
Author: stw
Date: 2006-11-13 19:06:22 -0500 (Mon, 13 Nov 2006)
New Revision: 4075
Modified:
trunk/bse/ChangeLog
trunk/bse/bsedatahandle-resample.cc
trunk/bse/bseresampler.cc
trunk/bse/bseresampler.hh
Log:
Tue Nov 14 01:02:45 2006 Stefan Westerfeld <stefan space twc de>
* bseresampler.[hc]*: Added Resampler2::find_precision_for_bits to the
API, and an precision enum -> string conversion function.
* bsedatahandle-resample.cc: Use find_precision_for_bits.
Modified: trunk/bse/ChangeLog
===================================================================
--- trunk/bse/ChangeLog 2006-11-13 19:13:04 UTC (rev 4074)
+++ trunk/bse/ChangeLog 2006-11-14 00:06:22 UTC (rev 4075)
@@ -1,3 +1,10 @@
+Tue Nov 14 01:02:45 2006 Stefan Westerfeld <stefan space twc de>
+
+ * bseresampler.[hc]*: Added Resampler2::find_precision_for_bits to the
+ API, and an precision enum -> string conversion function.
+
+ * bsedatahandle-resample.cc: Use find_precision_for_bits.
+
Mon Nov 13 20:05:53 2006 Stefan Westerfeld <stefan space twc de>
* bseresamplerimpl.hh: Removed unnecessary delay. The stream delay for
Modified: trunk/bse/bsedatahandle-resample.cc
===================================================================
--- trunk/bse/bsedatahandle-resample.cc 2006-11-13 19:13:04 UTC (rev 4074)
+++ trunk/bse/bsedatahandle-resample.cc 2006-11-14 00:06:22 UTC (rev 4075)
@@ -167,8 +167,7 @@
m_pcm_frame = -2;
m_pcm_data.resize (m_frame_size);
- /* FIXME: Resampler2::find_precision_for_bits (...) */
- BseResampler2Precision precision = static_cast<BseResampler2Precision> (m_precision_bits);
+ BseResampler2Precision precision = Resampler2::find_precision_for_bits (m_precision_bits);
for (guint i = 0; i < setup->n_channels; i++)
{
Resampler2 *resampler = Resampler2::create (mode(), precision);
Modified: trunk/bse/bseresampler.cc
===================================================================
--- trunk/bse/bseresampler.cc 2006-11-13 19:13:04 UTC (rev 4074)
+++ trunk/bse/bseresampler.cc 2006-11-14 00:06:22 UTC (rev 4075)
@@ -33,6 +33,41 @@
Resampler2::~Resampler2()
{}
+BseResampler2Precision
+Resampler2::find_precision_for_bits (guint bits)
+{
+ if (bits <= 1)
+ return BSE_RESAMPLER2_PREC_LINEAR;
+ if (bits <= 8)
+ return BSE_RESAMPLER2_PREC_48DB;
+ if (bits <= 12)
+ return BSE_RESAMPLER2_PREC_72DB;
+ if (bits <= 16)
+ return BSE_RESAMPLER2_PREC_96DB;
+ if (bits <= 20)
+ return BSE_RESAMPLER2_PREC_120DB;
+
+ /* thats the best precision we can deliver (and by the way also close to
+ * the best precision possible with floats anyway)
+ */
+ return BSE_RESAMPLER2_PREC_144DB;
+}
+
+const char *
+Resampler2::precision_name (BseResampler2Precision precision)
+{
+ switch (precision)
+ {
+ case BSE_RESAMPLER2_PREC_LINEAR: return "linear interpolation";
+ case BSE_RESAMPLER2_PREC_48DB: return "8 bit (48dB)";
+ case BSE_RESAMPLER2_PREC_72DB: return "12 bit (72dB)";
+ case BSE_RESAMPLER2_PREC_96DB: return "16 bit (96dB)";
+ case BSE_RESAMPLER2_PREC_120DB: return "20 bit (120dB)";
+ case BSE_RESAMPLER2_PREC_144DB: return "24 bit (144dB)";
+ default: return "unknown precision enum value";
+ }
+}
+
/* --- coefficient sets for Resampler2 --- */
/* halfband FIR filter for factor 2 resampling, created with octave
*
@@ -311,3 +346,15 @@
{
return reinterpret_cast<Bse::Resampler::Resampler2 *> (resampler)->delay();
}
+
+BseResampler2Precision
+bse_resampler2_find_precision_for_bits (guint bits)
+{
+ return Bse::Resampler::Resampler2::find_precision_for_bits (bits);
+}
+
+const char*
+bse_resampler2_precision_name (BseResampler2Precision precision)
+{
+ return Bse::Resampler::Resampler2::precision_name (precision);
+}
Modified: trunk/bse/bseresampler.hh
===================================================================
--- trunk/bse/bseresampler.hh 2006-11-13 19:13:04 UTC (rev 4074)
+++ trunk/bse/bseresampler.hh 2006-11-14 00:06:22 UTC (rev 4075)
@@ -51,6 +51,10 @@
guint bse_resampler2_order (BseResampler2 *resampler);
double bse_resampler2_delay (BseResampler2 *resampler);
+/* precision <-> bits conversion */
+BseResampler2Precision bse_resampler2_find_precision_for_bits (guint bits);
+const char* bse_resampler2_precision_name (BseResampler2Precision precision);
+
G_END_DECLS
#ifdef __cplusplus
@@ -67,9 +71,17 @@
/**
* creates a resampler instance fulfilling a given specification
*/
- static Resampler2* create (BseResampler2Mode mode,
- BseResampler2Precision precision);
+ static Resampler2* create (BseResampler2Mode mode,
+ BseResampler2Precision precision);
/**
+ * finds a precision which is appropriate for at least the specified number of bits
+ */
+ static BseResampler2Precision find_precision_for_bits (guint bits);
+ /**
+ * returns a human-readable name for a given precision
+ */
+ static const char *precision_name (BseResampler2Precision precision);
+ /**
* virtual destructor for abstract class
*/
virtual ~Resampler2();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]