summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjep <jep@2b0047a9-a6d8-0310-accf-f7200b2a168c>2013-09-02 16:56:53 +0000
committerjep <jep@2b0047a9-a6d8-0310-accf-f7200b2a168c>2013-09-02 16:56:53 +0000
commit0c5b6fe61e1728e3f89b80a6181ca136c2986d0f (patch)
tree709125e32e292274d919b3d4f07ebc6de63bb61e
parentc13b90401648eb9c3e3851d10df22df3ce35bfac (diff)
* src/mp3-c.c: (III_huffman_decode):
Fixes decoding of some mpeg 2.5 clips. git-svn-id: https://core.fluendo.com/gstreamer/svn/trunk/gst-fluendo-mp3@2499 2b0047a9-a6d8-0310-accf-f7200b2a168c
-rw-r--r--ChangeLog5
-rw-r--r--src/mp3-c.c18
2 files changed, 18 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index dec7e7e..38f072f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2013-09-02 Josep Torra <josep@fluendo.com>
+ * src/mp3-c.c: (III_huffman_decode):
+ Fixes decoding of some mpeg 2.5 clips.
+
+2013-09-02 Josep Torra <josep@fluendo.com>
+
* src/mp3-c.c: (III_dequantize_sample):
* src/mp3-ipp.c: (ipp_decode_mp3):
Fix debugging code.
diff --git a/src/mp3-c.c b/src/mp3-c.c
index 8f80f88..5c0fc0a 100644
--- a/src/mp3-c.c
+++ b/src/mp3-c.c
@@ -556,13 +556,21 @@ III_huffman_decode (gint is[SBLIMIT][SSLIMIT], III_side_info_t * si,
sfreq = sfb_offset[fr_ps->header.version] + fr_ps->header.srate_idx;
/* Find region boundary for short block case. */
- if ((gi->window_switching_flag) && (gi->block_type == 2)) {
- /* Region2. */
- region1Start = 36; /* sfb[9/3]*3=36 */
- region2Start = 576; /* No Region2 for short block case. */
- } else { /* Find region boundary for long block case. */
+ if (!gi->window_switching_flag || (gi->block_type != 2 &&
+ !(fr_ps->header.version == MPEG_VERSION_2_5))) {
region1Start = sfBandIndex[sfreq].l[gi->region0_count + 1]; /* MI */
region2Start = sfBandIndex[sfreq].l[gi->region0_count + gi->region1_count + 2]; /* MI */
+ } else { /* Find region boundary for long block case. */
+ if (gi->block_type == 2) {
+ if (fr_ps->header.version == MPEG_VERSION_2_5) {
+ region1Start = 72; /* sfb[9/3]*3=36 */
+ } else {
+ region1Start = 36; /* sfb[9/3]*3=36 */
+ }
+ } else {
+ region1Start = 108; /* sfb[9/3]*3=36 */
+ }
+ region2Start = 576; /* No Region2 for short block case. */
}
/* Read bigvalues area. */