mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:07:45 +00:00
LibAudio: Fix 32-bit/64-bit mixup in FLAC sign extend
The bit magic for two's complement sign extension was only sign extending to 32-bit signed. This issue was exposed by the last commit, where now we actually use the 64-bit return value.
This commit is contained in:
parent
59c7ce3d54
commit
952c633a65
1 changed files with 2 additions and 2 deletions
|
@ -768,7 +768,7 @@ ErrorOr<Vector<i64>, LoaderError> FlacLoaderPlugin::decode_custom_lpc(FlacSubfra
|
||||||
// read coefficients
|
// read coefficients
|
||||||
for (auto i = 0; i < subframe.order; ++i) {
|
for (auto i = 0; i < subframe.order; ++i) {
|
||||||
u64 raw_coefficient = LOADER_TRY(bit_input.read_bits<u64>(lpc_precision));
|
u64 raw_coefficient = LOADER_TRY(bit_input.read_bits<u64>(lpc_precision));
|
||||||
i64 coefficient = static_cast<i64>(sign_extend(raw_coefficient, lpc_precision));
|
i64 coefficient = sign_extend(raw_coefficient, lpc_precision);
|
||||||
coefficients.unchecked_append(coefficient);
|
coefficients.unchecked_append(coefficient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -970,7 +970,7 @@ i64 sign_extend(u32 n, u8 size)
|
||||||
{
|
{
|
||||||
// negative
|
// negative
|
||||||
if ((n & (1 << (size - 1))) > 0) {
|
if ((n & (1 << (size - 1))) > 0) {
|
||||||
return static_cast<i64>(n | (0xffffffff << size));
|
return static_cast<i64>(n | (0xffffffffffffffffLL << size));
|
||||||
}
|
}
|
||||||
// positive
|
// positive
|
||||||
return n;
|
return n;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue