diff options
author | Guenter Bartsch <guenter@users.sourceforge.net> | 2003-04-18 20:04:26 +0000 |
---|---|---|
committer | Guenter Bartsch <guenter@users.sourceforge.net> | 2003-04-18 20:04:26 +0000 |
commit | 74244604cf10bb7810361deb7da31f8462546f65 (patch) | |
tree | a16b583309eff3d041220714a05f1b8ef494c734 /src | |
parent | a5214fb3c22744a61dc1015421e359e4508a9c90 (diff) | |
download | xine-lib-74244604cf10bb7810361deb7da31f8462546f65.tar.gz xine-lib-74244604cf10bb7810361deb7da31f8462546f65.tar.bz2 |
equalizer api
CVS patchset: 4637
CVS date: 2003/04/18 20:04:26
Diffstat (limited to 'src')
-rw-r--r-- | src/xine-engine/audio_out.c | 85 | ||||
-rw-r--r-- | src/xine-engine/audio_out.h | 12 | ||||
-rw-r--r-- | src/xine-engine/xine_interface.c | 37 |
3 files changed, 111 insertions, 23 deletions
diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c index bda88ed52..bd19095b4 100644 --- a/src/xine-engine/audio_out.c +++ b/src/xine-engine/audio_out.c @@ -17,7 +17,7 @@ * along with self program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_out.c,v 1.120 2003/04/18 03:00:33 guenter Exp $ + * $Id: audio_out.c,v 1.121 2003/04/18 20:04:28 guenter Exp $ * * 22-8-2001 James imported some useful AC3 sections from the previous alsa driver. * (c) 2001 Andy Lo A Foe <andy@alsaplayer.org> @@ -247,8 +247,8 @@ typedef struct { /* 10-band equalizer */ int do_equ; - float eq_gain[EQ_BANDS]; - float eq_preamp; + int eq_gain[EQ_BANDS]; + int eq_preamp; int eq_i; int eq_j; int eq_k; @@ -566,7 +566,7 @@ static void audio_filter_equalize (aos_t *this, + (long long)iir_cf[band].gamma * (long long)this->eq_data_history[band][channel].y[this->eq_j] - (long long)iir_cf[band].beta * (long long)this->eq_data_history[band][channel].y[this->eq_k]; this->eq_data_history[band][channel].y[this->eq_i] = (int)(l >> FP_FRBITS); - l = (long long)this->eq_data_history[band][channel].y[this->eq_i] * (long long)EQ_REAL(this->eq_gain[band]); + l = (long long)this->eq_data_history[band][channel].y[this->eq_i] * (long long)this->eq_gain[band]; out[channel] += (int)(l >> FP_FRBITS); } @@ -1517,6 +1517,19 @@ static int ao_get_property (xine_audio_port_t *this_gen, int property) { ret = this->amp_factor*100; break; + case AO_PROP_EQ_30HZ: + case AO_PROP_EQ_60HZ: + case AO_PROP_EQ_125HZ: + case AO_PROP_EQ_250HZ: + case AO_PROP_EQ_500HZ: + case AO_PROP_EQ_1000HZ: + case AO_PROP_EQ_2000HZ: + case AO_PROP_EQ_4000HZ: + case AO_PROP_EQ_8000HZ: + case AO_PROP_EQ_16000HZ: + ret = (100 * this->eq_gain[property - AO_PROP_EQ_30HZ]) / (1 << FP_FRBITS) ; + break; + case AO_PROP_DISCARD_BUFFERS: ret = this->discard_buffers; break; @@ -1555,6 +1568,40 @@ static int ao_set_property (xine_audio_port_t *this_gen, int property, int value ret = this->amp_factor*100; break; + + case AO_PROP_EQ_30HZ: + case AO_PROP_EQ_60HZ: + case AO_PROP_EQ_125HZ: + case AO_PROP_EQ_250HZ: + case AO_PROP_EQ_500HZ: + case AO_PROP_EQ_1000HZ: + case AO_PROP_EQ_2000HZ: + case AO_PROP_EQ_4000HZ: + case AO_PROP_EQ_8000HZ: + case AO_PROP_EQ_16000HZ: + { + + int min_gain, max_gain, i; + + this->eq_gain[property - AO_PROP_EQ_30HZ] = EQ_REAL(((float)value / 100.0)) ; + + /* calc pregain, find out if any gain != 0.0 - enable eq if that is the case */ + min_gain = EQ_REAL(0.0); + max_gain = EQ_REAL(0.0); + for (i=0; i<EQ_BANDS; i++) { + if (this->eq_gain[i] < min_gain) + min_gain = this->eq_gain[i]; + if (this->eq_gain[i] > max_gain) + max_gain = this->eq_gain[i]; + } + + printf ("audio_out: eq min_gain=%d, max_gain=%d\n", min_gain, max_gain); + + this->do_equ = ((min_gain != EQ_REAL(0.0)) || (max_gain != EQ_REAL(0.0))); + + ret = value; + } + break; case AO_PROP_DISCARD_BUFFERS: /* recursive discard buffers setting */ @@ -1759,22 +1806,20 @@ xine_audio_port_t *ao_new_port (xine_t *xine, ao_driver_t *driver, this->do_amp = 0; this->do_equ = 0; - - this->eq_gain[0] = 1.0; - this->eq_gain[1] = 0.9; - this->eq_gain[2] = 0.6; - this->eq_gain[3] = 0.5; - this->eq_gain[4] = 0.4; - this->eq_gain[5] = 0.0; - this->eq_gain[6] = 0.0; - this->eq_gain[7] = 0.0; - this->eq_gain[8] = 0.0; - this->eq_gain[9] = 0.0; - - this->eq_preamp = 1.0; - this->eq_i = 0; - this->eq_j = 2; - this->eq_k = 1; + this->eq_gain[0] = 0; + this->eq_gain[1] = 0; + this->eq_gain[2] = 0; + this->eq_gain[3] = 0; + this->eq_gain[4] = 0; + this->eq_gain[5] = 0; + this->eq_gain[6] = 0; + this->eq_gain[7] = 0; + this->eq_gain[8] = 0; + this->eq_gain[9] = 0; + this->eq_preamp = EQ_REAL(1.0); + this->eq_i = 0; + this->eq_j = 2; + this->eq_k = 1; bzero (this->eq_data_history, sizeof(sXYData) * EQ_BANDS * EQ_CHANNELS); diff --git a/src/xine-engine/audio_out.h b/src/xine-engine/audio_out.h index 79f330afe..8e8620994 100644 --- a/src/xine-engine/audio_out.h +++ b/src/xine-engine/audio_out.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_out.h,v 1.53 2003/03/08 20:25:52 guenter Exp $ + * $Id: audio_out.h,v 1.54 2003/04/18 20:04:29 guenter Exp $ */ #ifndef HAVE_AUDIO_OUT_H #define HAVE_AUDIO_OUT_H @@ -295,6 +295,16 @@ xine_audio_port_t *ao_new_port (xine_t *xine, ao_driver_t *driver, int grab_only #define AO_PROP_DISCARD_BUFFERS 4 #define AO_PROP_PAUSED 5 #define AO_PROP_AMP 6 /* amplifier */ +#define AO_PROP_EQ_30HZ 7 /* equalizer */ +#define AO_PROP_EQ_60HZ 8 /* equalizer */ +#define AO_PROP_EQ_125HZ 9 /* equalizer */ +#define AO_PROP_EQ_250HZ 10 /* equalizer */ +#define AO_PROP_EQ_500HZ 11 /* equalizer */ +#define AO_PROP_EQ_1000HZ 12 /* equalizer */ +#define AO_PROP_EQ_2000HZ 13 /* equalizer */ +#define AO_PROP_EQ_4000HZ 14 /* equalizer */ +#define AO_PROP_EQ_8000HZ 15 /* equalizer */ +#define AO_PROP_EQ_16000HZ 16 /* equalizer */ /* audio device control ops */ #define AO_CTRL_PLAY_PAUSE 0 diff --git a/src/xine-engine/xine_interface.c b/src/xine-engine/xine_interface.c index a2b0c92ad..6fc4b3dcc 100644 --- a/src/xine-engine/xine_interface.c +++ b/src/xine-engine/xine_interface.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_interface.c,v 1.51 2003/04/08 18:10:47 miguelfreitas Exp $ + * $Id: xine_interface.c,v 1.52 2003/04/18 20:04:29 guenter Exp $ * * convenience/abstraction layer, functions to implement * libxine's public interface @@ -373,7 +373,23 @@ void xine_set_param (xine_stream_t *stream, int param, int value) { if (stream->audio_out) stream->audio_out->set_property (stream->audio_out, AO_PROP_AMP, value); break; - + + case XINE_PARAM_EQ_30HZ: + case XINE_PARAM_EQ_60HZ: + case XINE_PARAM_EQ_125HZ: + case XINE_PARAM_EQ_250HZ: + case XINE_PARAM_EQ_500HZ: + case XINE_PARAM_EQ_1000HZ: + case XINE_PARAM_EQ_2000HZ: + case XINE_PARAM_EQ_4000HZ: + case XINE_PARAM_EQ_8000HZ: + case XINE_PARAM_EQ_16000HZ: + if (stream->audio_out) + stream->audio_out->set_property (stream->audio_out, + param - XINE_PARAM_EQ_30HZ + AO_PROP_EQ_30HZ, + value); + break; + case XINE_PARAM_VERBOSITY: stream->xine->verbosity = value; @@ -452,6 +468,23 @@ int xine_get_param (xine_stream_t *stream, int param) { return -1; return stream->audio_out->get_property (stream->audio_out, AO_PROP_AMP); + case XINE_PARAM_EQ_30HZ: + case XINE_PARAM_EQ_60HZ: + case XINE_PARAM_EQ_125HZ: + case XINE_PARAM_EQ_250HZ: + case XINE_PARAM_EQ_500HZ: + case XINE_PARAM_EQ_1000HZ: + case XINE_PARAM_EQ_2000HZ: + case XINE_PARAM_EQ_4000HZ: + case XINE_PARAM_EQ_8000HZ: + case XINE_PARAM_EQ_16000HZ: + if (!stream->audio_out) + return -1; + + return stream->audio_out->get_property (stream->audio_out, + param - XINE_PARAM_EQ_30HZ + AO_PROP_EQ_30HZ); + break; + case XINE_PARAM_VERBOSITY: return stream->xine->verbosity; |