On 04/04/2014 12:44 PM, Alessandro Ghedini wrote:
> This adds a new "replaygain_noclip" option to the filter, and, if enabled,
> limits the gain applied for tracks where clipping would occur.
> ---
> Renamed option to replaygain_noclip.
>
> doc/filters.texi | 5 +++++
> libavfilter/af_volume.c | 32 ++++++++++++++++++++++----------
> libavfilter/af_volume.h | 1 +
> 3 files changed, 28 insertions(+), 10 deletions(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index f986623..1ed57dd 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -639,6 +639,11 @@ Pre-amplification gain in dB to apply to the selected
> replaygain gain.
>
> Default value for @var{replaygain_preamp} is 0.0.
>
> +@item replaygain_noclip
> +Prevent clipping by limiting the gain applied.
> +
> +Default value for @var{replaygain_noclip} is 1.
> +
> @end table
>
> @subsection Examples
> diff --git a/libavfilter/af_volume.c b/libavfilter/af_volume.c
> index 823fa15..c036c9d 100644
> --- a/libavfilter/af_volume.c
> +++ b/libavfilter/af_volume.c
> @@ -61,6 +61,8 @@ static const AVOption options[] = {
> { "album", "album gain is preferred", 0, AV_OPT_TYPE_CONST,
> { .i64 = REPLAYGAIN_ALBUM }, 0, 0, A, "replaygain" },
> { "replaygain_preamp", "Apply replaygain pre-amplification",
> OFFSET(replaygain_preamp), AV_OPT_TYPE_DOUBLE, { .dbl = 0.0 },
> -15.0, 15.0, A },
> + { "replaygain_noclip", "Apply replaygain clipping prevention",
> + OFFSET(replaygain_noclip), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1,
> A },
> { NULL },
> };
>
> @@ -246,25 +248,35 @@ static int filter_frame(AVFilterLink *inlink, AVFrame
> *buf)
> if (sd && vol->replaygain != REPLAYGAIN_IGNORE) {
> if (vol->replaygain != REPLAYGAIN_DROP) {
> AVReplayGain *replaygain = (AVReplayGain*)sd->data;
> - int32_t gain;
> - float g;
> -
> - if (vol->replaygain == REPLAYGAIN_TRACK &&
> - replaygain->track_gain != INT32_MIN)
> - gain = replaygain->track_gain;
> - else if (replaygain->album_gain != INT32_MIN)
> - gain = replaygain->album_gain;
> - else {
> + int32_t gain = 100000;
> + uint32_t peak = 100000;
> + float g, p;
> +
> + if (vol->replaygain == REPLAYGAIN_TRACK) {
> + if (replaygain->track_gain != INT32_MIN)
> + gain = replaygain->track_gain;
> +
> + if (replaygain->track_peak != 0)
> + peak = replaygain->track_peak;
> + } else if (vol->replaygain == REPLAYGAIN_ALBUM) {
> + if (replaygain->album_gain != INT32_MIN)
> + gain = replaygain->album_gain;
> +
> + if (replaygain->album_peak != 0)
> + peak = replaygain->album_peak;
This changes existing behavior. Currently if the user option says that
track gain is preferred but the track gain is undefined, it will fall
back to album gain. After your patch that is no longer the case.
-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel