util/ByteOrder: add FromLE16S()

This commit is contained in:
Max Kellermann 2020-09-21 11:15:21 +02:00
parent 23d5a2b862
commit b72801abf3
2 changed files with 12 additions and 2 deletions

View File

@ -39,8 +39,7 @@ ScanOpusHeader(const void *data, size_t size, unsigned &channels_r,
if (size < 19 || (h->version & 0xf0) != 0) if (size < 19 || (h->version & 0xf0) != 0)
return false; return false;
uint16_t gain_bits = FromLE16(h->output_gain); output_gain_r = FromLE16S(h->output_gain);
output_gain_r = (gain_bits & 0x8000) ? gain_bits - 0x10000 : gain_bits;
channels_r = h->channels; channels_r = h->channels;
pre_skip_r = FromLE16(h->pre_skip); pre_skip_r = FromLE16(h->pre_skip);

View File

@ -243,4 +243,15 @@ ToLE64(uint64_t value) noexcept
return IsLittleEndian() ? value : ByteSwap64(value); return IsLittleEndian() ? value : ByteSwap64(value);
} }
/**
* Converts a 16 bit integer from little endian to the host byte order
* and returns it as a signed integer.
*/
constexpr int16_t
FromLE16S(uint16_t value) noexcept
{
/* assuming two's complement representation */
return static_cast<int16_t>(FromLE16(value));
}
#endif #endif