summaryrefslogtreecommitdiff
path: root/plugins/dsp_libsrc
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-05-20 22:00:25 +0200
committerGravatar waker <wakeroid@gmail.com>2011-05-20 22:00:25 +0200
commit4175514337bf3782755710162d3e30f3baf6e2d4 (patch)
tree9700a5e7825f4142461c2418c8df250a1a0f1098 /plugins/dsp_libsrc
parent1810ce0564058b621909567fdb2750c3d8cd02b6 (diff)
added automatic samplerate option to resampler, as it was done in 0.4.4
Diffstat (limited to 'plugins/dsp_libsrc')
-rw-r--r--plugins/dsp_libsrc/src.c24
-rw-r--r--plugins/dsp_libsrc/src.h1
2 files changed, 21 insertions, 4 deletions
diff --git a/plugins/dsp_libsrc/src.c b/plugins/dsp_libsrc/src.c
index 2c909e3d..76262f37 100644
--- a/plugins/dsp_libsrc/src.c
+++ b/plugins/dsp_libsrc/src.c
@@ -39,6 +39,7 @@ typedef struct {
int channels;
int quality;
float samplerate;
+ int autosamplerate;
SRC_STATE *src;
SRC_DATA srcdata;
int remaining; // number of input samples in SRC buffer
@@ -88,7 +89,13 @@ int
ddb_src_process (ddb_dsp_context_t *_src, float *samples, int nframes, int maxframes, ddb_waveformat_t *fmt, float *r) {
ddb_src_libsamplerate_t *src = (ddb_src_libsamplerate_t*)_src;
- if (fmt->samplerate == src->samplerate) {
+ int samplerate = src->samplerate;
+ if (src->autosamplerate) {
+ DB_output_t *output = deadbeef->get_output ();
+ samplerate = output->fmt.samplerate;
+ }
+
+ if (fmt->samplerate == samplerate) {
return nframes;
}
@@ -104,9 +111,9 @@ ddb_src_process (ddb_dsp_context_t *_src, float *samples, int nframes, int maxfr
src->need_reset = 0;
}
- float ratio = src->samplerate / fmt->samplerate;
+ float ratio = samplerate / fmt->samplerate;
ddb_src_set_ratio (_src, ratio);
- fmt->samplerate = src->samplerate;
+ fmt->samplerate = samplerate;
int numoutframes = 0;
int outsize = nframes*24;
@@ -177,7 +184,7 @@ ddb_src_process (ddb_dsp_context_t *_src, float *samples, int nframes, int maxfr
//}
//fwrite (input, 1, numoutframes*sizeof(float)*(*nchannels), out);
- fmt->samplerate = src->samplerate;
+ fmt->samplerate = samplerate;
trace ("src: ratio=%f, in=%d, out=%d\n", ratio, nframes, numoutframes);
return numoutframes;
}
@@ -194,6 +201,8 @@ ddb_src_get_param_name (int p) {
return "Quality";
case SRC_PARAM_SAMPLERATE:
return "Samplerate";
+ case SRC_PARAM_AUTOSAMPLERATE:
+ return "Auto samplerate";
default:
fprintf (stderr, "ddb_src_get_param_name: invalid param index (%d)\n", p);
}
@@ -215,6 +224,9 @@ ddb_src_set_param (ddb_dsp_context_t *ctx, int p, const char *val) {
((ddb_src_libsamplerate_t*)ctx)->quality = atoi (val);
((ddb_src_libsamplerate_t*)ctx)->quality_changed = 1;
break;
+ case SRC_PARAM_AUTOSAMPLERATE:
+ ((ddb_src_libsamplerate_t*)ctx)->autosamplerate = atoi (val);
+ break;
default:
fprintf (stderr, "ddb_src_set_param: invalid param index (%d)\n", p);
}
@@ -229,12 +241,16 @@ ddb_src_get_param (ddb_dsp_context_t *ctx, int p, char *val, int sz) {
case SRC_PARAM_QUALITY:
snprintf (val, sz, "%d", ((ddb_src_libsamplerate_t*)ctx)->quality);
break;
+ case SRC_PARAM_AUTOSAMPLERATE:
+ snprintf (val, sz, "%d", ((ddb_src_libsamplerate_t*)ctx)->autosamplerate);
+ break;
default:
fprintf (stderr, "ddb_src_get_param: invalid param index (%d)\n", p);
}
}
static const char settings_dlg[] =
+ "property \"Automatic Samplerate (overrides Target Samplerate)\" checkbox 2 0;\n"
"property \"Target Samplerate\" spinbtn[8192,192000,1] 0 48000;\n"
"property \"Quality / Algorythm\" select[5] 1 2 SINC_BEST_QUALITY SINC_MEDIUM_QUALITY SINC_FASTEST ZERO_ORDER_HOLD LINEAR;\n"
;
diff --git a/plugins/dsp_libsrc/src.h b/plugins/dsp_libsrc/src.h
index bb9a15e2..9b7edcef 100644
--- a/plugins/dsp_libsrc/src.h
+++ b/plugins/dsp_libsrc/src.h
@@ -22,6 +22,7 @@
enum {
SRC_PARAM_SAMPLERATE = 0,
SRC_PARAM_QUALITY = 1,
+ SRC_PARAM_AUTOSAMPLERATE = 2,
SRC_PARAM_COUNT
};