typedef struct aout_mixer_t aout_mixer_t;
typedef struct {
- /* */
aout_fifo_t fifo;
-
- /* Software multiplier */
- float multiplier;
} aout_mixer_input_t;
/**
static void FilterFI32 (aout_mixer_t *mixer, block_t *block, float volume)
{
- const int64_t mult = volume * mixer->input->multiplier * FIXED32_ONE;
+ const int64_t mult = volume * FIXED32_ONE;
if (mult == FIXED32_ONE)
return;
*p = (*p * mult) >> FIXED32_FRACBITS;
p++;
}
+
+ (void) mixer;
}
static void FilterS16N (aout_mixer_t *mixer, block_t *block, float volume)
{
- const int32_t mult = volume * mixer->input->multiplier * 0x10000;
+ const int32_t mult = volume * 0x10000;
if (mult == 0x10000)
return;
*p = (*p * mult) >> 16;
p++;
}
+
+ (void) mixer;
}
static void DoWork( aout_mixer_t * p_mixer, aout_buffer_t *p_buffer,
float f_multiplier )
{
- f_multiplier *= p_mixer->input->multiplier;
-
if( f_multiplier == 1.0 )
return; /* nothing to do */
float *p = (float *)p_buffer->p_buffer;
for( size_t i = p_buffer->i_buffer / sizeof(float); i > 0; i-- )
*(p++) *= f_multiplier;
+
+ (void) p_mixer;
}
struct aout_input_t
{
audio_sample_format_t input;
+ float multiplier; /**< Replay gain multiplier */
/* pre-filters */
filter_t * pp_filters[AOUT_MAX_FILTERS];
aout_InputCheckAndRestart( p_aout, p_input );
aout_InputPlay( p_aout, p_input, p_buffer, i_input_rate );
/* Run the mixer if it is able to run. */
- aout_MixerRun( p_aout, p_aout->mixer_multiplier );
+ aout_MixerRun( p_aout, p_aout->mixer_multiplier * p_input->multiplier );
aout_unlock( p_aout );
return 0;
}
int i_use;
float f_gain;
- p_input->mixer.multiplier = 1.0;
+ p_input->multiplier = 1.0;
if( !psz_replay_gain )
return;
f_gain = var_GetFloat( p_aout, "audio-replay-gain-default" );
else
f_gain = 0.0;
- p_input->mixer.multiplier = pow( 10.0, f_gain / 20.0 );
+ p_input->multiplier = pow( 10.0, f_gain / 20.0 );
/* */
if( p_input->replay_gain.pb_peak[i_use] &&
var_GetBool( p_aout, "audio-replay-gain-peak-protection" ) &&
- p_input->replay_gain.pf_peak[i_use] * p_input->mixer.multiplier > 1.0 )
+ p_input->replay_gain.pf_peak[i_use] * p_input->multiplier > 1.0 )
{
- p_input->mixer.multiplier = 1.0f / p_input->replay_gain.pf_peak[i_use];
+ p_input->multiplier = 1.0f / p_input->replay_gain.pf_peak[i_use];
}
free( psz_replay_gain );