Support opus header gain tags and match opus playback volume to other tracks when ReplayGain is enabled.

This commit is contained in:
Desuwa
2020-09-18 03:46:37 -07:00
committed by Max Kellermann
parent 7715311117
commit 23d5a2b862
5 changed files with 28 additions and 8 deletions

View File

@@ -33,12 +33,15 @@ struct OpusHead {
bool
ScanOpusHeader(const void *data, size_t size, unsigned &channels_r,
unsigned &pre_skip_r)
signed &output_gain_r, unsigned &pre_skip_r)
{
const OpusHead *h = (const OpusHead *)data;
if (size < 19 || (h->version & 0xf0) != 0)
return false;
uint16_t gain_bits = FromLE16(h->output_gain);
output_gain_r = (gain_bits & 0x8000) ? gain_bits - 0x10000 : gain_bits;
channels_r = h->channels;
pre_skip_r = FromLE16(h->pre_skip);
return true;