diff options
-rw-r--r-- | deadbeef.h | 1 | ||||
-rw-r--r-- | plugins/supereq/supereq.c | 8 | ||||
-rw-r--r-- | streamer.c | 10 |
3 files changed, 18 insertions, 1 deletions
@@ -552,6 +552,7 @@ typedef struct DB_dsp_s { // stereo samples are stored in interleaved format // stereo sample is counted as 1 sample int (*process_int16) (int16_t *samples, int nsamples, int nch, int bps, int srate); + void (*reset) (void); } DB_dsp_t; // misc plugin diff --git a/plugins/supereq/supereq.c b/plugins/supereq/supereq.c index 2e1a1ae1..368bcda3 100644 --- a/plugins/supereq/supereq.c +++ b/plugins/supereq/supereq.c @@ -137,6 +137,13 @@ supereq_set_band (int band, float value) { deadbeef->conf_set_float (key, value); } +void +supereq_reset (void) { + deadbeef->mutex_lock (mutex); + equ_clearbuf(last_bps,last_srate); + deadbeef->mutex_unlock (mutex); +} + static DB_supereq_dsp_t plugin = { .dsp.plugin.api_vmajor = DB_API_VERSION_MAJOR, .dsp.plugin.api_vminor = DB_API_VERSION_MINOR, @@ -151,6 +158,7 @@ static DB_supereq_dsp_t plugin = { .dsp.plugin.stop = supereq_plugin_stop, // .dsp.plugin.configdialog = settings_dlg, .dsp.process_int16 = supereq_process_int16, + .dsp.reset = supereq_reset, .get_band = supereq_get_band, .set_band = supereq_set_band, }; @@ -813,9 +813,12 @@ streamer_thread (void *ctx) { } if (fileinfo && playing_track && playing_track->_duration > 0) { streamer_lock (); + streamer_reset (1); +#if 0 streambuffer_fill = 0; streambuffer_pos = 0; src_remaining = 0; +#endif if (fileinfo->plugin->seek (fileinfo, pos) >= 0) { playpos = fileinfo->readpos; } @@ -936,9 +939,14 @@ streamer_reset (int full) { // must be called when current song changes by exter streambuffer_pos = 0; streambuffer_fill = 0; } -// trace ("\033[0;31msrc_reset\033[37;0m\n"); src_remaining = 0; src_reset (src); + // reset dsp + DB_dsp_t **dsp = deadbeef->plug_get_dsp_list (); + int srate = p_get_rate (); + for (int i = 0; dsp[i]; i++) { + dsp[i]->reset (); + } src_unlock (); } |