Index: apps/dsp_asm.h
===================================================================
--- apps/dsp_asm.h (revision 27936)
+++ apps/dsp_asm.h (working copy)
@@ -28,7 +28,7 @@
#if defined(CPU_ARM)
#define DSP_HAVE_ASM_APPLY_GAIN
#define DSP_HAVE_ASM_RESAMPLING
-#define DSP_HAVE_ASM_CROSSFEED
+//#define DSP_HAVE_ASM_CROSSFEED
#define DSP_HAVE_ASM_SOUND_CHAN_MONO
#define DSP_HAVE_ASM_SOUND_CHAN_CUSTOM
#define DSP_HAVE_ASM_SOUND_CHAN_KARAOKE
@@ -37,7 +37,7 @@
#elif defined (CPU_COLDFIRE)
#define DSP_HAVE_ASM_APPLY_GAIN
#define DSP_HAVE_ASM_RESAMPLING
-#define DSP_HAVE_ASM_CROSSFEED
+//#define DSP_HAVE_ASM_CROSSFEED
#define DSP_HAVE_ASM_SOUND_CHAN_MONO
#define DSP_HAVE_ASM_SOUND_CHAN_CUSTOM
#define DSP_HAVE_ASM_SOUND_CHAN_KARAOKE
Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang (revision 27936)
+++ apps/lang/english.lang (working copy)
@@ -972,6 +972,23 @@
+ id: LANG_CROSSFEED_DELAY
+ desc: in crossfeed settings
+ user: core
+
+ *: none
+ swcodec: "Inter-ear Delay"
+
+
+ *: none
+ swcodec: "Inter-ear Delay"
+
+
+ *: none
+ swcodec: "Inter-ear delay"
+
+
+
id: LANG_EQUALIZER
desc: in the sound settings menu
user: core
Index: apps/settings.c
===================================================================
--- apps/settings.c (revision 27936)
+++ apps/settings.c (working copy)
@@ -978,7 +978,8 @@
dsp_set_crossfeed_direct_gain(global_settings.crossfeed_direct_gain);
dsp_set_crossfeed_cross_params(global_settings.crossfeed_cross_gain,
global_settings.crossfeed_hf_attenuation,
- global_settings.crossfeed_hf_cutoff);
+ global_settings.crossfeed_hf_cutoff,
+ global_settings.crossfeed_delay);
/* Configure software equalizer, hardware eq is handled in audio_init() */
dsp_set_eq(global_settings.eq_enabled);
Index: apps/settings.h
===================================================================
--- apps/settings.h (revision 27936)
+++ apps/settings.h (working copy)
@@ -326,6 +326,7 @@
unsigned int crossfeed_cross_gain; /* dB x 10 */
unsigned int crossfeed_hf_attenuation; /* dB x 10 */
unsigned int crossfeed_hf_cutoff; /* Frequency in Hz */
+ unsigned int crossfeed_delay; /* inter-ear delay in us */
/* EQ */
bool eq_enabled; /* Enable equalizer */
Index: apps/menus/sound_menu.c
===================================================================
--- apps/menus/sound_menu.c (revision 27936)
+++ apps/menus/sound_menu.c (working copy)
@@ -100,9 +100,11 @@
&global_settings.crossfeed_hf_attenuation, lowlatency_callback);
MENUITEM_SETTING(crossfeed_hf_cutoff,
&global_settings.crossfeed_hf_cutoff, lowlatency_callback);
+ MENUITEM_SETTING(crossfeed_delay,
+ &global_settings.crossfeed_delay, lowlatency_callback);
MAKE_MENU(crossfeed_menu,ID2P(LANG_CROSSFEED), NULL, Icon_NOICON,
&crossfeed, &crossfeed_direct_gain, &crossfeed_cross_gain,
- &crossfeed_hf_attenuation, &crossfeed_hf_cutoff);
+ &crossfeed_hf_attenuation, &crossfeed_hf_cutoff, &crossfeed_delay);
static int timestretch_callback(int action,const struct menu_item_ex *this_item)
{
Index: apps/dsp.c
===================================================================
--- apps/dsp.c (revision 27936)
+++ apps/dsp.c (working copy)
@@ -118,9 +118,9 @@
int32_t gain; /* 00h - Direct path gain */
int32_t coefs[3]; /* 04h - Coefficients for the shelving filter */
int32_t history[4]; /* 10h - Format is x[n - 1], y[n - 1] for both channels */
- int32_t delay[13][2]; /* 20h */
+ int32_t delay[44][2]; /* 20h */
int32_t *index; /* 88h - Current pointer into the delay line */
- /* 8ch */
+ int32_t delaylen; /* 8ch */
};
/* Current setup is one lowshelf filters three peaking filters and one
@@ -813,7 +813,7 @@
buf[1][i] = FRACMUL(right, gain) + hist_l[1];
/* Wrap delay line index if bigger than delay line size */
- if (di >= delay + 13*2)
+ if (di >= delay + crossfeed_data.delaylen * 2)
di = delay;
}
/* Write back local copies of data we've modified */
@@ -844,7 +844,7 @@
}
/* Both gains should be below 0 dB */
-void dsp_set_crossfeed_cross_params(long lf_gain, long hf_gain, long cutoff)
+void dsp_set_crossfeed_cross_params(long lf_gain, long hf_gain, long cutoff, int usdelay)
{
int32_t *c = crossfeed_data.coefs;
long scaler = get_replaygain_int(lf_gain * 10) << 7;
@@ -864,6 +864,8 @@
c[0] = FRACMUL_SHL(c[0], scaler, 4);
c[1] = FRACMUL_SHL(c[1], scaler, 4);
c[2] <<= 4;
+
+ crossfeed_data.delaylen = usdelay * NATIVE_FREQUENCY / 1000000;
}
/* Apply a constant gain to the samples (e.g., for ReplayGain).
Index: apps/dsp.h
===================================================================
--- apps/dsp.h (revision 27936)
+++ apps/dsp.h (working copy)
@@ -70,7 +70,7 @@
void dsp_set_crossfeed(bool enable);
void dsp_set_crossfeed_direct_gain(int gain);
void dsp_set_crossfeed_cross_params(long lf_gain, long hf_gain,
- long cutoff);
+ long cutoff, int usdelay);
void dsp_set_eq(bool enable);
void dsp_set_eq_precut(int precut);
void dsp_set_eq_coefs(int band);
Index: apps/settings_list.c
===================================================================
--- apps/settings_list.c (revision 27936)
+++ apps/settings_list.c (working copy)
@@ -379,7 +379,8 @@
(void)val;
dsp_set_crossfeed_cross_params(global_settings.crossfeed_cross_gain,
global_settings.crossfeed_hf_attenuation,
- global_settings.crossfeed_hf_cutoff);
+ global_settings.crossfeed_hf_cutoff,
+ global_settings.crossfeed_delay);
}
static void compressor_set(int val)
@@ -1303,6 +1304,10 @@
LANG_CROSSFEED_HF_CUTOFF, 700,
"crossfeed hf cutoff", UNIT_HERTZ, 500, 2000, 100,
NULL, NULL, crossfeed_cross_set),
+ INT_SETTING_NOWRAP(F_SOUNDSETTING, crossfeed_delay,
+ LANG_CROSSFEED_DELAY, 300,
+ "crossfeed delay", UNIT_INT, 50, 1000, 50,
+ NULL, NULL, crossfeed_cross_set),
/* equalizer */
OFFON_SETTING(F_EQSETTING, eq_enabled, LANG_EQUALIZER_ENABLED, false,