quartz: Take MP3 padding bit into account when calculating the block size
Bruno Jesus
00cpxxx at gmail.com
Tue Nov 22 00:14:59 CST 2016
This is already done inside this same file at [1] and also in winemp3.acm [2]
[1] https://source.winehq.org/source/dlls/quartz/mpegsplit.c#0123
[2] https://source.winehq.org/source/dlls/winemp3.acm/mpegl3.c#0361
Fixes bug https://bugs.winehq.org/show_bug.cgi?id=41290
Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
---
dlls/quartz/mpegsplit.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/quartz/mpegsplit.c b/dlls/quartz/mpegsplit.c
index 8d42bd8..41221d4 100644
--- a/dlls/quartz/mpegsplit.c
+++ b/dlls/quartz/mpegsplit.c
@@ -367,6 +367,7 @@ static HRESULT MPEGSplitter_init_audio(MPEGSplitterImpl *This, const BYTE *heade
int freq_index;
int mode_ext;
int emphasis;
+ int padding;
int lsf = 1;
int mpeg1;
int layer;
@@ -391,6 +392,7 @@ static HRESULT MPEGSplitter_init_audio(MPEGSplitterImpl *This, const BYTE *heade
layer = 4-((header[1]>>1)&0x3);
bitrate_index = ((header[2]>>4)&0xf);
+ padding = ((header[2]>>1)&0x1);
freq_index = ((header[2]>>2)&0x3) + (mpeg1?(lsf*3):6);
mode = ((header[3]>>6)&0x3);
mode_ext = ((header[3]>>4)&0x3);
@@ -419,12 +421,12 @@ static HRESULT MPEGSplitter_init_audio(MPEGSplitterImpl *This, const BYTE *heade
if (layer == 3)
format->nBlockAlign = format->nAvgBytesPerSec * 8 * 144 /
- (format->nSamplesPerSec<<lsf) + 1;
+ (format->nSamplesPerSec<<lsf) + padding;
else if (layer == 2)
format->nBlockAlign = format->nAvgBytesPerSec * 8 * 144 /
- format->nSamplesPerSec + 1;
+ format->nSamplesPerSec + padding;
else
- format->nBlockAlign = 4 * (format->nAvgBytesPerSec * 8 * 12 / format->nSamplesPerSec + 1);
+ format->nBlockAlign = 4 * (format->nAvgBytesPerSec * 8 * 12 / format->nSamplesPerSec + padding);
format->wBitsPerSample = 0;
--
2.9.3
More information about the wine-patches
mailing list