audio_core: hle: mf: fix a regression...
... where the sample copying logic is incorrect due to the wrong usage of `std::array`
This commit is contained in:
parent
6332e57069
commit
c91f5029ff
|
@ -16,8 +16,8 @@ struct ADTSData {
|
||||||
u32 samplerate;
|
u32 samplerate;
|
||||||
};
|
};
|
||||||
|
|
||||||
ADTSData ParseADTS(char* buffer);
|
ADTSData ParseADTS(const char* buffer);
|
||||||
|
|
||||||
// last two bytes of MF AAC decoder user data
|
// last two bytes of MF AAC decoder user data
|
||||||
// see https://docs.microsoft.com/en-us/windows/desktop/medfound/aac-decoder#example-media-types
|
// see https://docs.microsoft.com/en-us/windows/desktop/medfound/aac-decoder#example-media-types
|
||||||
u16 MFGetAACTag(ADTSData input);
|
u16 MFGetAACTag(const ADTSData input);
|
||||||
|
|
|
@ -8,7 +8,7 @@ constexpr std::array<u32, 16> freq_table = {96000, 88200, 64000, 48000, 44100, 3
|
||||||
16000, 12000, 11025, 8000, 7350, 0, 0, 0};
|
16000, 12000, 11025, 8000, 7350, 0, 0, 0};
|
||||||
constexpr std::array<u8, 8> channel_table = {0, 1, 2, 3, 4, 5, 6, 8};
|
constexpr std::array<u8, 8> channel_table = {0, 1, 2, 3, 4, 5, 6, 8};
|
||||||
|
|
||||||
ADTSData ParseADTS(char* buffer) {
|
ADTSData ParseADTS(const char* buffer) {
|
||||||
u32 tmp = 0;
|
u32 tmp = 0;
|
||||||
ADTSData out;
|
ADTSData out;
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ ADTSData ParseADTS(char* buffer) {
|
||||||
// Frame length flag (1 bit)
|
// Frame length flag (1 bit)
|
||||||
// Depends on core coder (1 bit)
|
// Depends on core coder (1 bit)
|
||||||
// Extension flag (1 bit)
|
// Extension flag (1 bit)
|
||||||
u16 MFGetAACTag(ADTSData input) {
|
u16 MFGetAACTag(const ADTSData input) {
|
||||||
u16 tag = 0;
|
u16 tag = 0;
|
||||||
|
|
||||||
tag |= input.profile << 11;
|
tag |= input.profile << 11;
|
||||||
|
|
|
@ -116,12 +116,14 @@ MFOutputState WMFDecoder::Impl::DecodingLoop(ADTSData adts_header,
|
||||||
|
|
||||||
// the following was taken from ffmpeg version of the decoder
|
// the following was taken from ffmpeg version of the decoder
|
||||||
f32 val_f32;
|
f32 val_f32;
|
||||||
for (size_t i = 0; i < output_buffer->size(); i++) {
|
for (size_t i = 0; i < output_buffer->size(); ) {
|
||||||
for (std::size_t channel = 0; channel < adts_header.channels; channel++) {
|
for (std::size_t channel = 0; channel < adts_header.channels; channel++) {
|
||||||
val_f32 = output_buffer->at(i);
|
val_f32 = output_buffer->at(i);
|
||||||
s16 val = static_cast<s16>(0x7FFF * val_f32);
|
s16 val = static_cast<s16>(0x7FFF * val_f32);
|
||||||
out_streams[channel].push_back(val & 0xFF);
|
out_streams[channel].push_back(val & 0xFF);
|
||||||
out_streams[channel].push_back(val >> 8);
|
out_streams[channel].push_back(val >> 8);
|
||||||
|
// i is incremented on per channel basis
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue