audio: remove float processing option

The only thing this option did was changing the behavior of af_volume.
The option decided what sample format af_volume would use, but only if
the sample format was not already float. If the option was set, it would
default to float, otherwise to S16.

Remove use of the option and all associated code, and make af_volume
always use float (unless a af_volume specific sub-option is set).

Silence maximum value tracking. This message is printed when the filter
is destroyed, and it's slightly annoying. Was enabled due to enabling
float by default.
This commit is contained in:
wm4 2013-03-28 22:35:54 +01:00
parent 41aefce730
commit bc268b313e
6 changed files with 9 additions and 31 deletions

View File

@ -219,7 +219,7 @@ format[=format]
rule that are also valid format specifiers: u8, s8, floatle, floatbe,
floatne, mpeg2, and ac3.
volume[=v[:sc]]
volume[=v[:sc[:fast]]]
Implements software volume control. Use this filter with caution since it
can reduce the signal to noise ratio of the sound. In most cases it is
best to set the level for the PCM sound to max, leave this filter out and
@ -250,6 +250,9 @@ volume[=v[:sc]]
*WARNING*: This feature creates distortion and should be considered a
last resort.
<fast>
Force S16 sample format if set to 1. Lower quality, but might be faster
in some situations.
*EXAMPLE*:

View File

@ -48,10 +48,4 @@ extern const ad_functions_t * const mpcodecs_ad_drivers[];
// fallback if ADCTRL_SKIP not implemented: ds_fill_buffer(sh_audio->ds);
#define ADCTRL_SKIP_FRAME 2 // skip block/frame, called while seeking
// fallback if ADCTRL_QUERY_FORMAT not implemented: sh_audio->sample_format
#define ADCTRL_QUERY_FORMAT 3 // test for availabilty of a format
// fallback: use hw mixer in libao
#define ADCTRL_SET_VOLUME 4 // not used at the moment
#endif /* MPLAYER_AD_H */

View File

@ -47,16 +47,8 @@ static int init_audio_codec(sh_audio_t *sh_audio, const char *decoder)
{
assert(!sh_audio->initialized);
resync_audio_stream(sh_audio);
sh_audio->samplesize = 2;
sh_audio->sample_format = AF_FORMAT_S16_NE;
if ((af_cfg.force & AF_INIT_FORMAT_MASK) == AF_INIT_FLOAT) {
int fmt = AF_FORMAT_FLOAT_NE;
if (sh_audio->ad_driver->control(sh_audio, ADCTRL_QUERY_FORMAT,
&fmt) == CONTROL_TRUE) {
sh_audio->sample_format = fmt;
sh_audio->samplesize = 4;
}
}
sh_audio->samplesize = 4;
sh_audio->sample_format = AF_FORMAT_FLOAT_NE;
sh_audio->audio_out_minsize = 8192; // default, preinit() may change it
if (!sh_audio->ad_driver->preinit(sh_audio)) {
mp_tmsg(MSGT_DECAUDIO, MSGL_ERR, "Audio decoder preinit failed.\n");

View File

@ -154,9 +154,7 @@ static struct af_instance *af_create(struct af_stream *s,
mp_msg(MSGT_AFILTER, MSGL_V, "[libaf] Adding filter %s \n", name);
// Initialize the new filter
if (AF_OK == new->info->open(new) &&
AF_ERROR < new->control(new, AF_CONTROL_POST_CREATE, &s->cfg))
{
if (AF_OK == new->info->open(new)) {
if (cmdline) {
if (AF_ERROR >= new->control(new, AF_CONTROL_COMMAND_LINE, cmdline))
goto err_out;

View File

@ -87,14 +87,10 @@ static int control(struct af_instance* af, int cmd, void* arg)
float v=0.0;
float vol[AF_NCH];
int i;
sscanf((char*)arg,"%f:%i", &v, &s->soft);
sscanf((char*)arg,"%f:%i:%i", &v, &s->soft, &s->fast);
for(i=0;i<AF_NCH;i++) vol[i]=v;
return control(af,AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET, vol);
}
case AF_CONTROL_POST_CREATE:
s->fast = ((((struct af_cfg*)arg)->force & AF_INIT_FORMAT_MASK) ==
AF_INIT_FLOAT) ? 0 : 1;
return AF_OK;
case AF_CONTROL_VOLUME_ON_OFF | AF_CONTROL_SET:
memcpy(s->enable,(int*)arg,AF_NCH*sizeof(int));
return AF_OK;
@ -122,7 +118,7 @@ static int control(struct af_instance* af, int cmd, void* arg)
for(i=0;i<AF_NCH;i++)
m=max(m,s->max[i]);
af_to_dB(1, &m, &m, 10.0);
mp_msg(MSGT_AFILTER, MSGL_INFO, "[volume] The maximum volume was %0.2fdB \n", m);
mp_msg(MSGT_AFILTER, MSGL_V, "[volume] The maximum volume was %0.2fdB \n", m);
}
return AF_OK;
}

View File

@ -98,11 +98,6 @@ typedef struct af_control_ext_s{
// OPTIONAL CALLS
/* Called just after creation with the af_cfg for the stream in which
the filter resides as input parameter this call can be used by the
filter to initialize itself */
#define AF_CONTROL_POST_CREATE 0x00000100 | AF_CONTROL_OPTIONAL
// Called just before destruction of a filter
#define AF_CONTROL_PRE_DESTROY 0x00000200 | AF_CONTROL_OPTIONAL