librempeg/libavutil/replaygain.h
Alessandro Ghedini 8542f9c4f1 replaygain: correctly parse peak values
According to the ReplayGain spec, the peak amplitude may overflow and may result
in peak amplitude values greater than 1.0 with psychoacoustically coded audio,
such as MP3. Fully compliant decoders must allow peak overflows.

Additionally, having peak values in the 0<->UINT32_MAX scale makes it more
difficult for applications to actually use the peak values (e.g. when
implementing clipping prevention) since values have to be rescaled down.

This patch corrects the peak parsing by removing the rescaling of the decoded
values between 0 and UINT32_MAX and the 1.0 upper limit.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-04-04 17:40:19 +02:00

52 lines
1.6 KiB
C

/*
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_REPLAYGAIN_H
#define AVUTIL_REPLAYGAIN_H
#include <stdint.h>
/**
* ReplayGain information (see
* http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification).
* The size of this struct is a part of the public ABI.
*/
typedef struct AVReplayGain {
/**
* Track replay gain in microbels (divide by 100000 to get the value in dB).
* Should be set to INT32_MIN when unknown.
*/
int32_t track_gain;
/**
* Peak track amplitude, with 100000 representing full scale (but values
* may overflow). 0 when unknown.
*/
uint32_t track_peak;
/**
* Same as track_gain, but for the whole album.
*/
int32_t album_gain;
/**
* Same as track_peak, but for the whole album,
*/
uint32_t album_peak;
} AVReplayGain;
#endif /* AVUTIL_REPLAYGAIN_H */