瀏覽代碼

LibAudio: Skip empty MP3 scale factor bands in stereo intensity process

These were intentionally set up to be at the end of the granule size,
but since the stereo intensity loop is intentionally using a <= end
comparison (that’s how the scale factor bands work), we must skip these
dummy bands which would otherwise cause an out-of-bounds index.
kleines Filmröllchen 1 年之前
父節點
當前提交
a0bcc9dd83
共有 1 個文件被更改,包括 3 次插入0 次删除
  1. 3 0
      Userland/Libraries/LibAudio/MP3Loader.cpp

+ 3 - 0
Userland/Libraries/LibAudio/MP3Loader.cpp

@@ -724,6 +724,9 @@ void MP3LoaderPlugin::process_stereo(MP3::MP3Frame& frame, size_t granule_index)
 
     auto process_intensity_stereo = [&](MP3::Tables::ScaleFactorBand const& band, float intensity_stereo_ratio) {
         for (size_t i = band.start; i <= band.end; i++) {
+            // Superflous empty scale factor band.
+            if (i >= MP3::granule_size)
+                continue;
             float const sample_left = granule_left.samples[i];
             float const coeff_l = intensity_stereo_ratio / (1 + intensity_stereo_ratio);
             float const coeff_r = 1 / (1 + intensity_stereo_ratio);