summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/libfaad/Makefile.am1
-rw-r--r--contrib/libfaad/analysis.h9
-rw-r--r--contrib/libfaad/bits.c156
-rw-r--r--contrib/libfaad/bits.h162
-rw-r--r--contrib/libfaad/cfft.c29
-rw-r--r--contrib/libfaad/cfft.h9
-rw-r--r--contrib/libfaad/cfft_tab.h17
-rw-r--r--contrib/libfaad/codebook/hcb.h9
-rw-r--r--contrib/libfaad/codebook/hcb_1.h9
-rw-r--r--contrib/libfaad/codebook/hcb_10.h9
-rw-r--r--contrib/libfaad/codebook/hcb_11.h9
-rw-r--r--contrib/libfaad/codebook/hcb_2.h9
-rw-r--r--contrib/libfaad/codebook/hcb_3.h9
-rw-r--r--contrib/libfaad/codebook/hcb_4.h9
-rw-r--r--contrib/libfaad/codebook/hcb_5.h9
-rw-r--r--contrib/libfaad/codebook/hcb_6.h9
-rw-r--r--contrib/libfaad/codebook/hcb_7.h9
-rw-r--r--contrib/libfaad/codebook/hcb_8.h9
-rw-r--r--contrib/libfaad/codebook/hcb_9.h9
-rw-r--r--contrib/libfaad/codebook/hcb_sf.h9
-rw-r--r--contrib/libfaad/common.c23
-rw-r--r--contrib/libfaad/common.h106
-rw-r--r--contrib/libfaad/decoder.c125
-rw-r--r--contrib/libfaad/decoder.h9
-rw-r--r--contrib/libfaad/diff_from_faad2-2.6.1.patch11
-rw-r--r--contrib/libfaad/diff_to_faad2_cvs.patch101
-rw-r--r--contrib/libfaad/drc.c9
-rw-r--r--contrib/libfaad/drc.h9
-rw-r--r--contrib/libfaad/drm_dec.c117
-rw-r--r--contrib/libfaad/drm_dec.h11
-rw-r--r--contrib/libfaad/error.c16
-rw-r--r--contrib/libfaad/error.h11
-rw-r--r--contrib/libfaad/filtbank.c9
-rw-r--r--contrib/libfaad/filtbank.h9
-rw-r--r--contrib/libfaad/fixed.h28
-rw-r--r--contrib/libfaad/hcr.c33
-rw-r--r--contrib/libfaad/huffman.c9
-rw-r--r--contrib/libfaad/huffman.h9
-rw-r--r--contrib/libfaad/ic_predict.c20
-rw-r--r--contrib/libfaad/ic_predict.h9
-rw-r--r--contrib/libfaad/iq_table.h9
-rw-r--r--contrib/libfaad/is.c11
-rw-r--r--contrib/libfaad/is.h9
-rw-r--r--contrib/libfaad/kbd_win.h9
-rw-r--r--contrib/libfaad/lt_predict.c14
-rw-r--r--contrib/libfaad/lt_predict.h9
-rw-r--r--contrib/libfaad/mdct.c11
-rw-r--r--contrib/libfaad/mdct.h9
-rw-r--r--contrib/libfaad/mdct_tab.h9
-rw-r--r--contrib/libfaad/mp4.c25
-rw-r--r--contrib/libfaad/mp4.h9
-rw-r--r--contrib/libfaad/ms.c11
-rw-r--r--contrib/libfaad/ms.h9
-rwxr-xr-x[-rw-r--r--]contrib/libfaad/neaacdec.h (renamed from contrib/libfaad/faad.h)130
-rw-r--r--contrib/libfaad/output.c71
-rw-r--r--contrib/libfaad/output.h9
-rw-r--r--contrib/libfaad/pns.c34
-rw-r--r--contrib/libfaad/pns.h12
-rw-r--r--contrib/libfaad/ps_dec.c159
-rw-r--r--contrib/libfaad/ps_dec.h9
-rw-r--r--contrib/libfaad/ps_syntax.c22
-rw-r--r--contrib/libfaad/ps_tables.h19
-rw-r--r--contrib/libfaad/pulse.c12
-rw-r--r--contrib/libfaad/pulse.h9
-rw-r--r--contrib/libfaad/rvlc.c9
-rw-r--r--contrib/libfaad/rvlc.h9
-rw-r--r--contrib/libfaad/sbr_dct.c838
-rw-r--r--contrib/libfaad/sbr_dct.h9
-rw-r--r--contrib/libfaad/sbr_dec.c106
-rw-r--r--contrib/libfaad/sbr_dec.h19
-rw-r--r--contrib/libfaad/sbr_e_nf.c9
-rw-r--r--contrib/libfaad/sbr_e_nf.h9
-rw-r--r--contrib/libfaad/sbr_fbt.c9
-rw-r--r--contrib/libfaad/sbr_fbt.h9
-rw-r--r--contrib/libfaad/sbr_hfadj.c54
-rw-r--r--contrib/libfaad/sbr_hfadj.h15
-rw-r--r--contrib/libfaad/sbr_hfgen.c10
-rw-r--r--contrib/libfaad/sbr_hfgen.h9
-rw-r--r--contrib/libfaad/sbr_huff.c9
-rw-r--r--contrib/libfaad/sbr_huff.h9
-rw-r--r--contrib/libfaad/sbr_noise.h9
-rw-r--r--contrib/libfaad/sbr_qmf.c27
-rw-r--r--contrib/libfaad/sbr_qmf.h9
-rw-r--r--contrib/libfaad/sbr_qmf_c.h17
-rw-r--r--contrib/libfaad/sbr_syntax.c71
-rw-r--r--contrib/libfaad/sbr_syntax.h12
-rw-r--r--contrib/libfaad/sbr_tf_grid.c9
-rw-r--r--contrib/libfaad/sbr_tf_grid.h9
-rw-r--r--contrib/libfaad/sine_win.h9
-rw-r--r--contrib/libfaad/specrec.c174
-rw-r--r--contrib/libfaad/specrec.h9
-rw-r--r--contrib/libfaad/ssr.c9
-rw-r--r--contrib/libfaad/ssr.h9
-rw-r--r--contrib/libfaad/ssr_fb.c9
-rw-r--r--contrib/libfaad/ssr_fb.h15
-rw-r--r--contrib/libfaad/ssr_ipqf.c9
-rw-r--r--contrib/libfaad/ssr_ipqf.h15
-rw-r--r--contrib/libfaad/ssr_win.h15
-rw-r--r--contrib/libfaad/structs.h28
-rw-r--r--contrib/libfaad/syntax.c308
-rw-r--r--contrib/libfaad/syntax.h16
-rw-r--r--contrib/libfaad/tns.c19
-rw-r--r--contrib/libfaad/tns.h9
103 files changed, 2293 insertions, 1459 deletions
diff --git a/contrib/libfaad/Makefile.am b/contrib/libfaad/Makefile.am
index 835457e0c..5dc9da0a3 100644
--- a/contrib/libfaad/Makefile.am
+++ b/contrib/libfaad/Makefile.am
@@ -94,6 +94,7 @@ libfaad_la_SOURCES = \
structs.h \
syntax.h \
tns.h \
+ neaacdec.h \
codebook/hcb.h \
codebook/hcb_1.h \
codebook/hcb_2.h \
diff --git a/contrib/libfaad/analysis.h b/contrib/libfaad/analysis.h
index 810a95f3b..50e43fa04 100644
--- a/contrib/libfaad/analysis.h
+++ b/contrib/libfaad/analysis.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: analysis.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: analysis.h,v 1.18 2007/11/01 12:33:29 menno Exp $
**/
#ifndef __ANALYSIS_H__
diff --git a/contrib/libfaad/bits.c b/contrib/libfaad/bits.c
index ae273c7d8..dc14d7a03 100644
--- a/contrib/libfaad/bits.c
+++ b/contrib/libfaad/bits.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,17 +19,19 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: bits.c,v 1.9 2005/10/29 23:57:06 tmmm Exp $
+** $Id: bits.c,v 1.44 2007/11/01 12:33:29 menno Exp $
**/
#include "common.h"
#include "structs.h"
#include <stdlib.h>
-#include <string.h>
#include "bits.h"
/* initialize buffer, call once before first getbits or showbits */
@@ -40,25 +42,38 @@ void faad_initbits(bitfile *ld, const void *_buffer, const uint32_t buffer_size)
if (ld == NULL)
return;
- memset(ld, 0, sizeof(bitfile));
+ // useless
+ //memset(ld, 0, sizeof(bitfile));
if (buffer_size == 0 || _buffer == NULL)
{
ld->error = 1;
- ld->no_more_reading = 1;
return;
}
- ld->buffer = faad_malloc((buffer_size+12)*sizeof(uint8_t));
- memset(ld->buffer, 0, (buffer_size+12)*sizeof(uint8_t));
- memcpy(ld->buffer, _buffer, buffer_size*sizeof(uint8_t));
+ ld->buffer = _buffer;
ld->buffer_size = buffer_size;
+ ld->bytes_left = buffer_size;
- tmp = getdword((uint32_t*)ld->buffer);
+ if (ld->bytes_left >= 4)
+ {
+ tmp = getdword((uint32_t*)ld->buffer);
+ ld->bytes_left -= 4;
+ } else {
+ tmp = getdword_n((uint32_t*)ld->buffer, ld->bytes_left);
+ ld->bytes_left = 0;
+ }
ld->bufa = tmp;
- tmp = getdword((uint32_t*)ld->buffer + 1);
+ if (ld->bytes_left >= 4)
+ {
+ tmp = getdword((uint32_t*)ld->buffer + 1);
+ ld->bytes_left -= 4;
+ } else {
+ tmp = getdword_n((uint32_t*)ld->buffer + 1, ld->bytes_left);
+ ld->bytes_left = 0;
+ }
ld->bufb = tmp;
ld->start = (uint32_t*)ld->buffer;
@@ -66,21 +81,12 @@ void faad_initbits(bitfile *ld, const void *_buffer, const uint32_t buffer_size)
ld->bits_left = 32;
- ld->bytes_used = 0;
- ld->no_more_reading = 0;
ld->error = 0;
}
void faad_endbits(bitfile *ld)
{
- if (ld)
- {
- if (ld->buffer)
- {
- faad_free(ld->buffer);
- ld->buffer = NULL;
- }
- }
+ // void
}
uint32_t faad_get_processed_bits(bitfile *ld)
@@ -90,12 +96,12 @@ uint32_t faad_get_processed_bits(bitfile *ld)
uint8_t faad_byte_align(bitfile *ld)
{
- uint8_t remainder = (uint8_t)((32 - ld->bits_left) % 8);
+ int remainder = (32 - ld->bits_left) & 0x7;
if (remainder)
{
faad_flushbits(ld, 8 - remainder);
- return (8 - remainder);
+ return (uint8_t)(8 - remainder);
}
return 0;
}
@@ -105,20 +111,22 @@ void faad_flushbits_ex(bitfile *ld, uint32_t bits)
uint32_t tmp;
ld->bufa = ld->bufb;
- if (ld->no_more_reading == 0)
+ if (ld->bytes_left >= 4)
{
tmp = getdword(ld->tail);
- ld->tail++;
+ ld->bytes_left -= 4;
} else {
- tmp = 0;
+ tmp = getdword_n(ld->tail, ld->bytes_left);
+ ld->bytes_left = 0;
}
ld->bufb = tmp;
+ ld->tail++;
ld->bits_left += (32 - bits);
- ld->bytes_used += 4;
- if (ld->bytes_used == ld->buffer_size)
- ld->no_more_reading = 1;
- if (ld->bytes_used > ld->buffer_size)
- ld->error = 1;
+ //ld->bytes_left -= 4;
+// if (ld->bytes_left == 0)
+// ld->no_more_reading = 1;
+// if (ld->bytes_left < 0)
+// ld->error = 1;
}
/* rewind to beginning */
@@ -126,30 +134,79 @@ void faad_rewindbits(bitfile *ld)
{
uint32_t tmp;
- tmp = ld->start[0];
-#ifndef ARCH_IS_BIG_ENDIAN
- BSWAP(tmp);
-#endif
+ ld->bytes_left = ld->buffer_size;
+
+ if (ld->bytes_left >= 4)
+ {
+ tmp = getdword((uint32_t*)&ld->start[0]);
+ ld->bytes_left -= 4;
+ } else {
+ tmp = getdword_n((uint32_t*)&ld->start[0], ld->bytes_left);
+ ld->bytes_left = 0;
+ }
ld->bufa = tmp;
- tmp = ld->start[1];
-#ifndef ARCH_IS_BIG_ENDIAN
- BSWAP(tmp);
-#endif
+ if (ld->bytes_left >= 4)
+ {
+ tmp = getdword((uint32_t*)&ld->start[1]);
+ ld->bytes_left -= 4;
+ } else {
+ tmp = getdword_n((uint32_t*)&ld->start[1], ld->bytes_left);
+ ld->bytes_left = 0;
+ }
ld->bufb = tmp;
+
ld->bits_left = 32;
ld->tail = &ld->start[2];
- ld->bytes_used = 0;
- ld->no_more_reading = 0;
+}
+
+/* reset to a certain point */
+void faad_resetbits(bitfile *ld, int bits)
+{
+ uint32_t tmp;
+ int words = bits >> 5;
+ int remainder = bits & 0x1F;
+
+ ld->bytes_left = ld->buffer_size - words*4;
+
+ if (ld->bytes_left >= 4)
+ {
+ tmp = getdword(&ld->start[words]);
+ ld->bytes_left -= 4;
+ } else {
+ tmp = getdword_n(&ld->start[words], ld->bytes_left);
+ ld->bytes_left = 0;
+ }
+ ld->bufa = tmp;
+
+ if (ld->bytes_left >= 4)
+ {
+ tmp = getdword(&ld->start[words+1]);
+ ld->bytes_left -= 4;
+ } else {
+ tmp = getdword_n(&ld->start[words+1], ld->bytes_left);
+ ld->bytes_left = 0;
+ }
+ ld->bufb = tmp;
+
+ ld->bits_left = 32 - remainder;
+ ld->tail = &ld->start[words+2];
+
+ /* recheck for reading too many bytes */
+ ld->error = 0;
+// if (ld->bytes_left == 0)
+// ld->no_more_reading = 1;
+// if (ld->bytes_left < 0)
+// ld->error = 1;
}
uint8_t *faad_getbitbuffer(bitfile *ld, uint32_t bits
DEBUGDEC)
{
- uint16_t i;
- uint8_t temp;
- uint16_t bytes = (uint16_t)bits / 8;
- uint8_t remainder = (uint8_t)bits % 8;
+ int i;
+ unsigned int temp;
+ int bytes = bits >> 3;
+ int remainder = bits & 0x7;
uint8_t *buffer = (uint8_t*)faad_malloc((bytes+1)*sizeof(uint8_t));
@@ -160,9 +217,9 @@ uint8_t *faad_getbitbuffer(bitfile *ld, uint32_t bits
if (remainder)
{
- temp = (uint8_t)faad_getbits(ld, remainder DEBUGVAR(print,var,dbg)) << (8-remainder);
+ temp = faad_getbits(ld, remainder DEBUGVAR(print,var,dbg)) << (8-remainder);
- buffer[bytes] = temp;
+ buffer[bytes] = (uint8_t)temp;
}
return buffer;
@@ -207,7 +264,8 @@ void faad_initbits_rev(bitfile *ld, void *buffer,
if (ld->bits_left == 0)
ld->bits_left = 32;
- ld->bytes_used = 0;
- ld->no_more_reading = 0;
+ ld->bytes_left = ld->buffer_size;
ld->error = 0;
}
+
+/* EOF */
diff --git a/contrib/libfaad/bits.h b/contrib/libfaad/bits.h
index 05460f0cc..e303e8e72 100644
--- a/contrib/libfaad/bits.h
+++ b/contrib/libfaad/bits.h
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: bits.h,v 1.11 2005/10/30 01:21:53 tmmm Exp $
+** $Id: bits.h,v 1.45 2007/11/01 12:33:29 menno Exp $
**/
#ifndef __BITS_H__
@@ -37,8 +40,10 @@ extern "C" {
#include <stdio.h>
#endif
-#define BYTE_NUMBIT 8
-#define bit2byte(a) ((a+7)/BYTE_NUMBIT)
+#define BYTE_NUMBIT 8
+#define BYTE_NUMBIT_LD 3
+//#define bit2byte(a) ((a+7)/BYTE_NUMBIT)
+#define bit2byte(a) ((a+7)>>BYTE_NUMBIT_LD)
typedef struct _bitfile
{
@@ -47,25 +52,16 @@ typedef struct _bitfile
uint32_t bufb;
uint32_t bits_left;
uint32_t buffer_size; /* size of the buffer in bytes */
- uint32_t bytes_used;
- uint8_t no_more_reading;
+ uint32_t bytes_left;
uint8_t error;
uint32_t *tail;
uint32_t *start;
- void *buffer;
+ const void *buffer;
} bitfile;
-#if defined(_MSC_VER)
-#define BSWAP(a) __asm mov eax,a __asm bswap eax __asm mov a, eax
-#elif defined(LINUX) || defined(DJGPP) || defined (__MINGW32__) || defined (__CYGWIN__)
-#define BSWAP(a) __asm__ ( "bswapl %0\n" : "=r" (a) : "0" (a) )
-#else
-#define BSWAP(a) \
- ((a) = ( ((a)&0xff)<<24) | (((a)&0xff00)<<8) | (((a)>>8)&0xff00) | (((a)>>24)&0xff))
-#endif
-
-static uint32_t bitmask[] = {
+#if 0
+static uint32_t const bitmask[] = {
0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF,
0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,
0x1FFFF, 0x3FFFF, 0x7FFFF, 0xFFFFF, 0x1FFFFF, 0x3FFFFF,
@@ -74,6 +70,7 @@ static uint32_t bitmask[] = {
/* added bitmask 32, correct?!?!?! */
, 0xFFFFFFFF
};
+#endif
void faad_initbits(bitfile *ld, const void *buffer, const uint32_t buffer_size);
void faad_endbits(bitfile *ld);
@@ -83,6 +80,7 @@ uint8_t faad_byte_align(bitfile *ld);
uint32_t faad_get_processed_bits(bitfile *ld);
void faad_flushbits_ex(bitfile *ld, uint32_t bits);
void faad_rewindbits(bitfile *ld);
+void faad_resetbits(bitfile *ld, int bits);
uint8_t *faad_getbitbuffer(bitfile *ld, uint32_t bits
DEBUGDEC);
#ifdef DRM
@@ -93,7 +91,6 @@ uint32_t faad_origbitbuffer_size(bitfile *ld);
/* circumvent memory alignment errors on ARM */
static INLINE uint32_t getdword(void *mem)
{
-#ifdef ARM
uint32_t tmp;
#ifndef ARCH_IS_BIG_ENDIAN
((uint8_t*)&tmp)[0] = ((uint8_t*)mem)[3];
@@ -108,25 +105,52 @@ static INLINE uint32_t getdword(void *mem)
#endif
return tmp;
-#else
- uint32_t tmp;
- tmp = *(uint32_t*)mem;
+}
+
+/* reads only n bytes from the stream instead of the standard 4 */
+static /*INLINE*/ uint32_t getdword_n(void *mem, int n)
+{
+ uint32_t tmp = 0;
#ifndef ARCH_IS_BIG_ENDIAN
- BSWAP(tmp);
+ switch (n)
+ {
+ case 3:
+ ((uint8_t*)&tmp)[1] = ((uint8_t*)mem)[2];
+ case 2:
+ ((uint8_t*)&tmp)[2] = ((uint8_t*)mem)[1];
+ case 1:
+ ((uint8_t*)&tmp)[3] = ((uint8_t*)mem)[0];
+ default:
+ break;
+ }
+#else
+ switch (n)
+ {
+ case 3:
+ ((uint8_t*)&tmp)[2] = ((uint8_t*)mem)[2];
+ case 2:
+ ((uint8_t*)&tmp)[1] = ((uint8_t*)mem)[1];
+ case 1:
+ ((uint8_t*)&tmp)[0] = ((uint8_t*)mem)[0];
+ default:
+ break;
+ }
#endif
+
return tmp;
-#endif
}
static INLINE uint32_t faad_showbits(bitfile *ld, uint32_t bits)
{
if (bits <= ld->bits_left)
{
- return (ld->bufa >> (ld->bits_left - bits)) & bitmask[bits];
+ //return (ld->bufa >> (ld->bits_left - bits)) & bitmask[bits];
+ return (ld->bufa << (32 - ld->bits_left)) >> (32 - bits);
}
bits -= ld->bits_left;
- return ((ld->bufa & bitmask[ld->bits_left]) << bits) | (ld->bufb >> (32 - bits));
+ //return ((ld->bufa & bitmask[ld->bits_left]) << bits) | (ld->bufb >> (32 - bits));
+ return ((ld->bufa & ((1<<ld->bits_left)-1)) << bits) | (ld->bufb >> (32 - bits));
}
static INLINE void faad_flushbits(bitfile *ld, uint32_t bits)
@@ -144,11 +168,11 @@ static INLINE void faad_flushbits(bitfile *ld, uint32_t bits)
}
/* return next n bits (right adjusted) */
-static INLINE uint32_t faad_getbits(bitfile *ld, uint32_t n DEBUGDEC)
+static /*INLINE*/ uint32_t faad_getbits(bitfile *ld, uint32_t n DEBUGDEC)
{
uint32_t ret;
- if (ld->no_more_reading || n == 0)
+ if (n == 0)
return 0;
ret = faad_showbits(ld, n);
@@ -230,22 +254,23 @@ static INLINE void faad_flushbits_rev(bitfile *ld, uint32_t bits)
ld->start--;
ld->bits_left += (32 - bits);
- ld->bytes_used += 4;
- if (ld->bytes_used == ld->buffer_size)
- ld->no_more_reading = 1;
- if (ld->bytes_used > ld->buffer_size)
+ if (ld->bytes_left < 4)
+ {
ld->error = 1;
+ ld->bytes_left = 0;
+ } else {
+ ld->bytes_left -= 4;
+ }
+// if (ld->bytes_left == 0)
+// ld->no_more_reading = 1;
}
}
-static INLINE uint32_t faad_getbits_rev(bitfile *ld, uint32_t n
+static /*INLINE*/ uint32_t faad_getbits_rev(bitfile *ld, uint32_t n
DEBUGDEC)
{
uint32_t ret;
- if (ld->no_more_reading)
- return 0;
-
if (n == 0)
return 0;
@@ -261,28 +286,73 @@ static INLINE uint32_t faad_getbits_rev(bitfile *ld, uint32_t n
}
#ifdef DRM
+/* CRC lookup table for G8 polynome in DRM standard */
+static const uint8_t crc_table_G8[256] = {
+ 0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53,
+ 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb,
+ 0xcd, 0xd0, 0xf7, 0xea, 0xb9, 0xa4, 0x83, 0x9e,
+ 0x25, 0x38, 0x1f, 0x2, 0x51, 0x4c, 0x6b, 0x76,
+ 0x87, 0x9a, 0xbd, 0xa0, 0xf3, 0xee, 0xc9, 0xd4,
+ 0x6f, 0x72, 0x55, 0x48, 0x1b, 0x6, 0x21, 0x3c,
+ 0x4a, 0x57, 0x70, 0x6d, 0x3e, 0x23, 0x4, 0x19,
+ 0xa2, 0xbf, 0x98, 0x85, 0xd6, 0xcb, 0xec, 0xf1,
+ 0x13, 0xe, 0x29, 0x34, 0x67, 0x7a, 0x5d, 0x40,
+ 0xfb, 0xe6, 0xc1, 0xdc, 0x8f, 0x92, 0xb5, 0xa8,
+ 0xde, 0xc3, 0xe4, 0xf9, 0xaa, 0xb7, 0x90, 0x8d,
+ 0x36, 0x2b, 0xc, 0x11, 0x42, 0x5f, 0x78, 0x65,
+ 0x94, 0x89, 0xae, 0xb3, 0xe0, 0xfd, 0xda, 0xc7,
+ 0x7c, 0x61, 0x46, 0x5b, 0x8, 0x15, 0x32, 0x2f,
+ 0x59, 0x44, 0x63, 0x7e, 0x2d, 0x30, 0x17, 0xa,
+ 0xb1, 0xac, 0x8b, 0x96, 0xc5, 0xd8, 0xff, 0xe2,
+ 0x26, 0x3b, 0x1c, 0x1, 0x52, 0x4f, 0x68, 0x75,
+ 0xce, 0xd3, 0xf4, 0xe9, 0xba, 0xa7, 0x80, 0x9d,
+ 0xeb, 0xf6, 0xd1, 0xcc, 0x9f, 0x82, 0xa5, 0xb8,
+ 0x3, 0x1e, 0x39, 0x24, 0x77, 0x6a, 0x4d, 0x50,
+ 0xa1, 0xbc, 0x9b, 0x86, 0xd5, 0xc8, 0xef, 0xf2,
+ 0x49, 0x54, 0x73, 0x6e, 0x3d, 0x20, 0x7, 0x1a,
+ 0x6c, 0x71, 0x56, 0x4b, 0x18, 0x5, 0x22, 0x3f,
+ 0x84, 0x99, 0xbe, 0xa3, 0xf0, 0xed, 0xca, 0xd7,
+ 0x35, 0x28, 0xf, 0x12, 0x41, 0x5c, 0x7b, 0x66,
+ 0xdd, 0xc0, 0xe7, 0xfa, 0xa9, 0xb4, 0x93, 0x8e,
+ 0xf8, 0xe5, 0xc2, 0xdf, 0x8c, 0x91, 0xb6, 0xab,
+ 0x10, 0xd, 0x2a, 0x37, 0x64, 0x79, 0x5e, 0x43,
+ 0xb2, 0xaf, 0x88, 0x95, 0xc6, 0xdb, 0xfc, 0xe1,
+ 0x5a, 0x47, 0x60, 0x7d, 0x2e, 0x33, 0x14, 0x9,
+ 0x7f, 0x62, 0x45, 0x58, 0xb, 0x16, 0x31, 0x2c,
+ 0x97, 0x8a, 0xad, 0xb0, 0xe3, 0xfe, 0xd9, 0xc4,
+};
+
static uint8_t faad_check_CRC(bitfile *ld, uint16_t len)
{
- uint8_t CRC;
- uint16_t r=255; /* Initialize to all ones */
+ int bytes, rem;
+ unsigned int CRC;
+ unsigned int r=255; /* Initialize to all ones */
/* CRC polynome used x^8 + x^4 + x^3 + x^2 +1 */
#define GPOLY 0435
faad_rewindbits(ld);
- CRC = (uint8_t) ~faad_getbits(ld, 8
- DEBUGVAR(1,999,"faad_check_CRC(): CRC")); /* CRC is stored inverted */
+ CRC = (unsigned int) ~faad_getbits(ld, 8
+ DEBUGVAR(1,999,"faad_check_CRC(): CRC")) & 0xFF; /* CRC is stored inverted */
+
+ bytes = len >> 3;
+ rem = len & 0x7;
- for (; len>0; len--)
+ for (; bytes > 0; bytes--)
+ {
+ r = crc_table_G8[( r ^ faad_getbits(ld, 8 DEBUGVAR(1,998,"")) ) & 0xFF];
+ }
+ for (; rem > 0; rem--)
{
r = ( (r << 1) ^ (( ( faad_get1bit(ld
DEBUGVAR(1,998,"")) & 1) ^ ((r >> 7) & 1)) * GPOLY )) & 0xFF;
}
if (r != CRC)
+ // if (0)
{
- return 8;
+ return 28;
} else {
return 0;
}
diff --git a/contrib/libfaad/cfft.c b/contrib/libfaad/cfft.c
index 61cac2fd5..5b01d75d3 100644
--- a/contrib/libfaad/cfft.c
+++ b/contrib/libfaad/cfft.c
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: cfft.c,v 1.12 2006/09/26 18:00:31 dgp85 Exp $
+** $Id: cfft.c,v 1.35 2007/11/01 12:33:29 menno Exp $
**/
/*
@@ -546,7 +549,7 @@ static void passf5(const uint16_t ido, const uint16_t l1, const complex_t *cc,
ComplexMult(&RE(c4), &RE(c5),
ti12, ti11, RE(t5), RE(t4));
ComplexMult(&IM(c4), &IM(c5),
- ti12, ti12, IM(t5), IM(t4));
+ ti12, ti11, IM(t5), IM(t4));
RE(ch[ah+l1]) = RE(c2) + IM(c5);
IM(ch[ah+l1]) = IM(c2) - RE(c5);
@@ -648,7 +651,7 @@ static void passf5(const uint16_t ido, const uint16_t l1, const complex_t *cc,
ComplexMult(&RE(c4), &RE(c5),
ti12, ti11, RE(t5), RE(t4));
ComplexMult(&IM(c4), &IM(c5),
- ti12, ti12, IM(t5), IM(t4));
+ ti12, ti11, IM(t5), IM(t4));
IM(d2) = IM(c2) - RE(c5);
IM(d3) = IM(c3) - RE(c4);
@@ -992,13 +995,11 @@ cfft_info *cffti(uint16_t n)
void cfftu(cfft_info *cfft)
{
- if ( ! cfft ) return;
-
- faad_free(cfft->work);
+ if (cfft->work) faad_free(cfft->work);
#ifndef FIXED_POINT
- faad_free(cfft->tab);
+ if (cfft->tab) faad_free(cfft->tab);
#endif
- faad_free(cfft);
+ if (cfft) faad_free(cfft);
}
diff --git a/contrib/libfaad/cfft.h b/contrib/libfaad/cfft.h
index a29537bed..dc89cdc85 100644
--- a/contrib/libfaad/cfft.h
+++ b/contrib/libfaad/cfft.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: cfft.h,v 1.9 2005/10/29 23:57:06 tmmm Exp $
+** $Id: cfft.h,v 1.24 2007/11/01 12:33:29 menno Exp $
**/
#ifndef __CFFT_H__
diff --git a/contrib/libfaad/cfft_tab.h b/contrib/libfaad/cfft_tab.h
index 072a991f1..80b1b75be 100644
--- a/contrib/libfaad/cfft_tab.h
+++ b/contrib/libfaad/cfft_tab.h
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: cfft_tab.h,v 1.6 2005/10/29 23:57:06 tmmm Exp $
+** $Id: cfft_tab.h,v 1.21 2007/11/01 12:33:29 menno Exp $
**/
#ifndef __CFFT_TAB_H__
diff --git a/contrib/libfaad/codebook/hcb.h b/contrib/libfaad/codebook/hcb.h
index 96093300c..29bbca4f8 100644
--- a/contrib/libfaad/codebook/hcb.h
+++ b/contrib/libfaad/codebook/hcb.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb.h,v 1.6 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb.h,v 1.8 2007/11/01 12:34:10 menno Exp $
**/
#ifndef __HCB_H__
diff --git a/contrib/libfaad/codebook/hcb_1.h b/contrib/libfaad/codebook/hcb_1.h
index 220299c55..f6632c230 100644
--- a/contrib/libfaad/codebook/hcb_1.h
+++ b/contrib/libfaad/codebook/hcb_1.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_1.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_1.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* 2-step huffman table HCB_1 */
diff --git a/contrib/libfaad/codebook/hcb_10.h b/contrib/libfaad/codebook/hcb_10.h
index 60bcab90a..87e621df5 100644
--- a/contrib/libfaad/codebook/hcb_10.h
+++ b/contrib/libfaad/codebook/hcb_10.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_10.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_10.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* 2-step huffman table HCB_10 */
diff --git a/contrib/libfaad/codebook/hcb_11.h b/contrib/libfaad/codebook/hcb_11.h
index bd4f647e6..509a1d684 100644
--- a/contrib/libfaad/codebook/hcb_11.h
+++ b/contrib/libfaad/codebook/hcb_11.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_11.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_11.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* 2-step huffman table HCB_11 */
diff --git a/contrib/libfaad/codebook/hcb_2.h b/contrib/libfaad/codebook/hcb_2.h
index 6aff6b12b..8edfe525d 100644
--- a/contrib/libfaad/codebook/hcb_2.h
+++ b/contrib/libfaad/codebook/hcb_2.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_2.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_2.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* 2-step huffman table HCB_2 */
diff --git a/contrib/libfaad/codebook/hcb_3.h b/contrib/libfaad/codebook/hcb_3.h
index 25b54da90..e9481e198 100644
--- a/contrib/libfaad/codebook/hcb_3.h
+++ b/contrib/libfaad/codebook/hcb_3.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_3.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_3.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* Binary search huffman table HCB_3 */
diff --git a/contrib/libfaad/codebook/hcb_4.h b/contrib/libfaad/codebook/hcb_4.h
index 9378b0980..c2b43e005 100644
--- a/contrib/libfaad/codebook/hcb_4.h
+++ b/contrib/libfaad/codebook/hcb_4.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_4.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_4.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* 2-step huffman table HCB_4 */
diff --git a/contrib/libfaad/codebook/hcb_5.h b/contrib/libfaad/codebook/hcb_5.h
index 7e50207e3..ca7c473bf 100644
--- a/contrib/libfaad/codebook/hcb_5.h
+++ b/contrib/libfaad/codebook/hcb_5.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_5.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_5.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* Binary search huffman table HCB_5 */
diff --git a/contrib/libfaad/codebook/hcb_6.h b/contrib/libfaad/codebook/hcb_6.h
index 12417d997..2181d63d5 100644
--- a/contrib/libfaad/codebook/hcb_6.h
+++ b/contrib/libfaad/codebook/hcb_6.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_6.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_6.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* 2-step huffman table HCB_6 */
diff --git a/contrib/libfaad/codebook/hcb_7.h b/contrib/libfaad/codebook/hcb_7.h
index e5392326d..54c85c11d 100644
--- a/contrib/libfaad/codebook/hcb_7.h
+++ b/contrib/libfaad/codebook/hcb_7.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_7.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_7.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* Binary search huffman table HCB_7 */
diff --git a/contrib/libfaad/codebook/hcb_8.h b/contrib/libfaad/codebook/hcb_8.h
index 951743bed..6e3f1009e 100644
--- a/contrib/libfaad/codebook/hcb_8.h
+++ b/contrib/libfaad/codebook/hcb_8.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_8.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_8.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* 2-step huffman table HCB_8 */
diff --git a/contrib/libfaad/codebook/hcb_9.h b/contrib/libfaad/codebook/hcb_9.h
index daccf6197..bdba2c222 100644
--- a/contrib/libfaad/codebook/hcb_9.h
+++ b/contrib/libfaad/codebook/hcb_9.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_9.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_9.h,v 1.5 2007/11/01 12:34:11 menno Exp $
**/
/* Binary search huffman table HCB_9 */
diff --git a/contrib/libfaad/codebook/hcb_sf.h b/contrib/libfaad/codebook/hcb_sf.h
index 494053177..3c02b3d84 100644
--- a/contrib/libfaad/codebook/hcb_sf.h
+++ b/contrib/libfaad/codebook/hcb_sf.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcb_sf.h,v 1.4 2005/10/29 23:57:08 tmmm Exp $
+** $Id: hcb_sf.h,v 1.7 2007/11/01 12:34:11 menno Exp $
**/
/* Binary search huffman table HCB_SF */
diff --git a/contrib/libfaad/common.c b/contrib/libfaad/common.c
index 8c0d93e95..595605586 100644
--- a/contrib/libfaad/common.c
+++ b/contrib/libfaad/common.c
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: common.c,v 1.8 2005/10/29 23:57:06 tmmm Exp $
+** $Id: common.c,v 1.26 2007/11/01 12:33:30 menno Exp $
**/
/* just some common functions that could be used anywhere */
@@ -229,16 +232,16 @@ static uint32_t __r2 = 1;
* which gives a period of 18.410.713.077.675.721.215. The result is the
* XORed values of both generators.
*/
-uint32_t random_int(void)
+uint32_t ne_rng(uint32_t *__r1, uint32_t *__r2)
{
uint32_t t1, t2, t3, t4;
- t3 = t1 = __r1; t4 = t2 = __r2; // Parity calculation is done via table lookup, this is also available
+ t3 = t1 = *__r1; t4 = t2 = *__r2; // Parity calculation is done via table lookup, this is also available
t1 &= 0xF5; t2 >>= 25; // on CPUs without parity, can be implemented in C and avoid unpredictable
t1 = Parity [t1]; t2 &= 0x63; // jumps and slow rotate through the carry flag operations.
t1 <<= 31; t2 = Parity [t2];
- return (__r1 = (t3 >> 1) | t1 ) ^ (__r2 = (t4 + t4) | t2 );
+ return (*__r1 = (t3 >> 1) | t1 ) ^ (*__r2 = (t4 + t4) | t2 );
}
uint32_t ones32(uint32_t x)
diff --git a/contrib/libfaad/common.h b/contrib/libfaad/common.h
index 8244a8143..4d2769526 100644
--- a/contrib/libfaad/common.h
+++ b/contrib/libfaad/common.h
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: common.h,v 1.17 2006/06/17 20:43:57 dgp85 Exp $
+** $Id: common.h,v 1.72 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __COMMON_H__
@@ -32,13 +35,16 @@
extern "C" {
#endif
-#ifdef __CYGWIN__
-#define __STRICT_ANSI__
+#ifdef HAVE_CONFIG_H
+# include <config.h>
#endif
-#include "../include/config.h"
-
+#if 1
#define INLINE __inline
+#else
+#define INLINE inline
+#endif
+
#if 0 //defined(_WIN32) && !defined(_WIN32_WCE)
#define ALIGN __declspec(align(16))
#else
@@ -63,10 +69,13 @@ extern "C" {
/* Use if target platform has address generators with autoincrement */
//#define PREFER_POINTERS
-#if defined(_WIN32_WCE) || defined(__arm__)
+#ifdef _WIN32_WCE
#define FIXED_POINT
#endif
+#ifdef __BFIN__
+#define FIXED_POINT
+#endif
#define ERROR_RESILIENCE
@@ -79,8 +88,6 @@ extern "C" {
#define LTP_DEC
/* Allow decoding of LD profile AAC */
#define LD_DEC
-/* Allow decoding of scalable profiles */
-//#define SCALABLE_DEC
/* Allow decoding of Digital Radio Mondiale (DRM) */
//#define DRM
//#define DRM_PS
@@ -114,20 +121,25 @@ extern "C" {
//#define SBR_LOW_POWER
#define PS_DEC
+#ifdef SBR_LOW_POWER
+#undef PS_DEC
+#endif
+
/* FIXED POINT: No MAIN decoding */
#ifdef FIXED_POINT
# ifdef MAIN_DEC
# undef MAIN_DEC
# endif
-# ifdef SBR_DEC
-# undef SBR_DEC
-# endif
#endif // FIXED_POINT
#ifdef DRM
-# ifndef SCALABLE_DEC
-# define SCALABLE_DEC
+# ifndef ALLOW_SMALL_FRAMELENGTH
+# define ALLOW_SMALL_FRAMELENGTH
# endif
+# undef LD_DEC
+# undef LTP_DEC
+# undef MAIN_DEC
+# undef SSR_DEC
#endif
@@ -152,6 +164,23 @@ extern "C" {
/* END COMPILE TIME DEFINITIONS */
+#if defined(_WIN32) && !defined(__MINGW32__)
+
+#include <stdlib.h>
+
+typedef unsigned __int64 uint64_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int16 uint16_t;
+typedef unsigned __int8 uint8_t;
+typedef __int64 int64_t;
+typedef __int32 int32_t;
+typedef __int16 int16_t;
+typedef __int8 int8_t;
+typedef float float32_t;
+
+
+#else
+
#include <stdio.h>
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
@@ -176,8 +205,6 @@ extern "C" {
#if HAVE_STRINGS_H
# include <strings.h>
#endif
-
-/* precedence defining int-types by header files for all platforms */
#if HAVE_INTTYPES_H
# include <inttypes.h>
#else
@@ -185,30 +212,23 @@ extern "C" {
# include <stdint.h>
# else
/* we need these... */
-# ifdef WIN32
-typedef unsigned __int64 uint64_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int16 uint16_t;
-typedef unsigned __int8 uint8_t;
-typedef __int64 int64_t;
-typedef __int32 int32_t;
-typedef __int16 int16_t;
-typedef __int8 int8_t;
-# else /* WIN32 */
-typedef float float32_t;
+#ifndef __TCS__
typedef unsigned long long uint64_t;
+typedef long long int64_t;
+#else
+typedef unsigned long uint64_t;
+typedef long int64_t;
+#endif
typedef unsigned long uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;
-typedef long long int64_t;
typedef long int32_t;
typedef short int16_t;
typedef char int8_t;
-# endif /* WIN32 */
# endif
#endif
#if HAVE_UNISTD_H
-# include <unistd.h>
+//# include <unistd.h>
#endif
#ifndef HAVE_FLOAT32_T
@@ -229,6 +249,8 @@ char *strchr(), *strrchr();
# endif
#endif
+#endif
+
#ifdef WORDS_BIGENDIAN
#define ARCH_IS_BIG_ENDIAN
#endif
@@ -289,7 +311,6 @@ char *strchr(), *strrchr();
}
-#ifndef HAVE_LRINTF
#if defined(_WIN32) && !defined(__MINGW32__)
#define HAS_LRINTF
static INLINE int lrintf(float f)
@@ -302,7 +323,9 @@ char *strchr(), *strrchr();
}
return i;
}
- #elif (defined(__i386__) && defined(__GNUC__))
+ #elif (defined(__i386__) && defined(__GNUC__) && \
+ !defined(__CYGWIN__) && !defined(__MINGW32__))
+ #ifndef HAVE_LRINTF
#define HAS_LRINTF
// from http://www.stereopsis.com/FPU.html
static INLINE int lrintf(float f)
@@ -315,8 +338,9 @@ char *strchr(), *strrchr();
: "m" (f));
return i;
}
+ #endif /* HAVE_LRINTF */
#endif
-#endif
+
#ifdef __ICL /* only Intel C compiler has fmath ??? */
@@ -331,8 +355,6 @@ char *strchr(), *strrchr();
#else
-#include <math.h>
-
#ifdef HAVE_LRINTF
# define HAS_LRINTF
# define _ISOC9X_SOURCE 1
@@ -341,6 +363,8 @@ char *strchr(), *strrchr();
# define __USE_ISOC99 1
#endif
+ #include <math.h>
+
#ifdef HAVE_SINF
# define sin sinf
#error
@@ -380,7 +404,7 @@ typedef real_t complex_t[2];
/* common functions */
uint8_t cpu_has_sse(void);
-uint32_t random_int(void);
+uint32_t ne_rng(uint32_t *__r1, uint32_t *__r2);
uint32_t ones32(uint32_t x);
uint32_t floor_log2(uint32_t x);
uint32_t wl_min_lzc(uint32_t x);
diff --git a/contrib/libfaad/decoder.c b/contrib/libfaad/decoder.c
index 33aee247e..7fb4b1965 100644
--- a/contrib/libfaad/decoder.c
+++ b/contrib/libfaad/decoder.c
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: decoder.c,v 1.10 2005/10/29 23:57:06 tmmm Exp $
+** $Id: decoder.c,v 1.111 2007/11/01 12:33:30 menno Exp $
**/
#include "common.h"
@@ -90,6 +93,7 @@ uint32_t NEAACDECAPI NeAACDecGetCapabilities(void)
return cap;
}
+const unsigned char mes[] = { 0x67,0x20,0x61,0x20,0x20,0x20,0x6f,0x20,0x72,0x20,0x65,0x20,0x6e,0x20,0x20,0x20,0x74,0x20,0x68,0x20,0x67,0x20,0x69,0x20,0x72,0x20,0x79,0x20,0x70,0x20,0x6f,0x20,0x63 };
NeAACDecHandle NEAACDECAPI NeAACDecOpen(void)
{
uint8_t i;
@@ -100,6 +104,7 @@ NeAACDecHandle NEAACDECAPI NeAACDecOpen(void)
memset(hDecoder, 0, sizeof(NeAACDecStruct));
+ hDecoder->cmes = mes;
hDecoder->config.outputFormat = FAAD_FMT_16BIT;
hDecoder->config.defObjectType = MAIN;
hDecoder->config.defSampleRate = 44100; /* Default: 44.1kHz */
@@ -116,6 +121,9 @@ NeAACDecHandle NEAACDECAPI NeAACDecOpen(void)
hDecoder->frame = 0;
hDecoder->sample_buffer = NULL;
+ hDecoder->__r1 = 1;
+ hDecoder->__r2 = 1;
+
for (i = 0; i < MAX_CHANNELS; i++)
{
hDecoder->window_shape_prev[i] = 0;
@@ -194,6 +202,7 @@ uint8_t NEAACDECAPI NeAACDecSetConfiguration(NeAACDecHandle hDecoder,
return 0;
}
+
int32_t NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder, uint8_t *buffer,
uint32_t buffer_size,
uint32_t *samplerate, uint8_t *channels)
@@ -203,6 +212,7 @@ int32_t NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder, uint8_t *buffer,
adif_header adif;
adts_header adts;
+
if ((hDecoder == NULL) || (samplerate == NULL) || (channels == NULL))
return -1;
@@ -257,7 +267,6 @@ int32_t NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder, uint8_t *buffer,
}
faad_endbits(&ld);
}
- hDecoder->channelConfiguration = *channels;
#if (defined(PS_DEC) || defined(DRM_PS))
/* check if we have a mono file */
@@ -268,6 +277,8 @@ int32_t NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder, uint8_t *buffer,
}
#endif
+ hDecoder->channelConfiguration = *channels;
+
#ifdef SBR_DEC
/* implicit signalling */
if (*samplerate <= 24000 && !(hDecoder->config.dontUpSampleImplicitSBR))
@@ -422,8 +433,8 @@ int8_t NEAACDECAPI NeAACDecInitDRM(NeAACDecHandle *hDecoder, uint32_t samplerate
if ((channels == DRMCH_MONO) || (channels == DRMCH_STEREO))
(*hDecoder)->sbr_present_flag = 0;
else
- (*hDecoder)->sbr_present_flag = 1;
-#endif
+ (*hDecoder)->sbr_present_flag = 1;
+#endif
(*hDecoder)->fb = filter_bank_init((*hDecoder)->frameLength);
@@ -525,8 +536,14 @@ static void create_channel_config(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hI
chdir = hInfo->num_front_channels;
if (chdir & 1)
{
+#if (defined(PS_DEC) || defined(DRM_PS))
+ /* When PS is enabled output is always stereo */
+ hInfo->channel_position[chpos++] = FRONT_CHANNEL_LEFT;
+ hInfo->channel_position[chpos++] = FRONT_CHANNEL_RIGHT;
+#else
hInfo->channel_position[chpos++] = FRONT_CHANNEL_CENTER;
chdir--;
+#endif
}
for (i = 0; i < chdir; i += 2)
{
@@ -565,8 +582,15 @@ static void create_channel_config(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hI
switch (hDecoder->channelConfiguration)
{
case 1:
+#if (defined(PS_DEC) || defined(DRM_PS))
+ /* When PS is enabled output is always stereo */
+ hInfo->num_front_channels = 2;
+ hInfo->channel_position[0] = FRONT_CHANNEL_LEFT;
+ hInfo->channel_position[1] = FRONT_CHANNEL_RIGHT;
+#else
hInfo->num_front_channels = 1;
hInfo->channel_position[0] = FRONT_CHANNEL_CENTER;
+#endif
break;
case 2:
hInfo->num_front_channels = 2;
@@ -722,13 +746,25 @@ void* NEAACDECAPI NeAACDecDecode2(NeAACDecHandle hDecoder,
sample_buffer, sample_buffer_size);
}
+#ifdef DRM
+
+#define ERROR_STATE_INIT 6
+
+static void conceal_output(NeAACDecHandle hDecoder, uint16_t frame_len,
+ uint8_t out_ch, void *sample_buffer)
+{
+ return;
+}
+#endif
+
static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
uint8_t *buffer, uint32_t buffer_size,
void **sample_buffer2, uint32_t sample_buffer_size)
{
+ uint16_t i;
uint8_t channels = 0;
uint8_t output_channels = 0;
- bitfile ld;
+ bitfile ld = {0};
uint32_t bitsconsumed;
uint16_t frame_len;
void *sample_buffer;
@@ -753,6 +789,33 @@ static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
memset(hInfo, 0, sizeof(NeAACDecFrameInfo));
memset(hDecoder->internal_channel, 0, MAX_CHANNELS*sizeof(hDecoder->internal_channel[0]));
+#ifdef USE_TIME_LIMIT
+ if ((TIME_LIMIT * get_sample_rate(hDecoder->sf_index)) > hDecoder->TL_count)
+ {
+ hDecoder->TL_count += 1024;
+ } else {
+ hInfo->error = (NUM_ERROR_MESSAGES-1);
+ goto error;
+ }
+#endif
+
+
+ /* check for some common metadata tag types in the bitstream
+ * No need to return an error
+ */
+ /* ID3 */
+ if (buffer_size >= 128)
+ {
+ if (memcmp(buffer, "TAG", 3) == 0)
+ {
+ /* found it */
+ hInfo->bytesconsumed = 128; /* 128 bytes fixed size */
+ /* no error, but no output either */
+ return NULL;
+ }
+ }
+
+
/* initialize the bitstream */
faad_initbits(&ld, buffer, buffer_size);
@@ -780,7 +843,7 @@ static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
/* We do not support stereo right now */
if (0) //(hDecoder->channelConfiguration == 2)
{
- hInfo->error = 8; // Throw CRC error
+ hInfo->error = 28; // Throw CRC error
goto error;
}
@@ -808,14 +871,14 @@ static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
#endif
/* decode the complete bitstream */
-#ifdef SCALABLE_DEC
- if ((hDecoder->object_type == 6) || (hDecoder->object_type == DRM_ER_LC))
+#ifdef DRM
+ if (/*(hDecoder->object_type == 6) ||*/ (hDecoder->object_type == DRM_ER_LC))
{
- aac_scalable_main_element(hDecoder, hInfo, &ld, &hDecoder->pce, hDecoder->drc);
+ DRM_aac_scalable_main_element(hDecoder, hInfo, &ld, &hDecoder->pce, hDecoder->drc);
} else {
#endif
raw_data_block(hDecoder, hInfo, &ld, &hDecoder->pce, hDecoder->drc);
-#ifdef SCALABLE_DEC
+#ifdef DRM
}
#endif
@@ -978,10 +1041,16 @@ static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
}
#endif
+
sample_buffer = output_to_PCM(hDecoder, hDecoder->time_out, sample_buffer,
output_channels, frame_len, hDecoder->config.outputFormat);
+#ifdef DRM
+ //conceal_output(hDecoder, frame_len, output_channels, sample_buffer);
+#endif
+
+
hDecoder->postSeekResetFlag = 0;
hDecoder->frame++;
@@ -1013,6 +1082,30 @@ static void* aac_frame_decode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
error:
+
+#ifdef DRM
+ hDecoder->error_state = ERROR_STATE_INIT;
+#endif
+
+ /* reset filterbank state */
+ for (i = 0; i < MAX_CHANNELS; i++)
+ {
+ if (hDecoder->fb_intermed[i] != NULL)
+ {
+ memset(hDecoder->fb_intermed[i], 0, hDecoder->frameLength*sizeof(real_t));
+ }
+ }
+#ifdef SBR_DEC
+ for (i = 0; i < MAX_SYNTAX_ELEMENTS; i++)
+ {
+ if (hDecoder->sbr[i] != NULL)
+ {
+ sbrReset(hDecoder->sbr[i]);
+ }
+ }
+#endif
+
+
faad_endbits(&ld);
/* cleanup */
diff --git a/contrib/libfaad/decoder.h b/contrib/libfaad/decoder.h
index 5a3a2663f..a4cb567d2 100644
--- a/contrib/libfaad/decoder.h
+++ b/contrib/libfaad/decoder.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: decoder.h,v 1.9 2005/10/29 23:57:06 tmmm Exp $
+** $Id: decoder.h,v 1.48 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __DECODER_H__
diff --git a/contrib/libfaad/diff_from_faad2-2.6.1.patch b/contrib/libfaad/diff_from_faad2-2.6.1.patch
new file mode 100644
index 000000000..fbb02ea39
--- /dev/null
+++ b/contrib/libfaad/diff_from_faad2-2.6.1.patch
@@ -0,0 +1,11 @@
+--- faad2/libfaad/common.h 2007-11-01 13:33:30.000000000 +0100
++++ faad2/libfaad/common.h 2007-11-01 18:51:01.480721384 +0100
+@@ -36,7 +36,7 @@
+ #endif
+
+ #ifdef HAVE_CONFIG_H
+-# include "../config.h"
++# include <config.h>
+ #endif
+
+ #if 1
diff --git a/contrib/libfaad/diff_to_faad2_cvs.patch b/contrib/libfaad/diff_to_faad2_cvs.patch
deleted file mode 100644
index 0d8490f2e..000000000
--- a/contrib/libfaad/diff_to_faad2_cvs.patch
+++ /dev/null
@@ -1,101 +0,0 @@
---- faad2-cvs-15092004/libfaad/common.h 2004-09-08 03:43:12.000000000 -0600
-+++ libfaad/common.h 2005-10-29 19:21:53.000000000 -0600
-@@ -147,23 +147,6 @@
-
- /* END COMPILE TIME DEFINITIONS */
-
--#if defined(_WIN32) && !defined(__MINGW32__)
--
--#include <stdlib.h>
--
--typedef unsigned __int64 uint64_t;
--typedef unsigned __int32 uint32_t;
--typedef unsigned __int16 uint16_t;
--typedef unsigned __int8 uint8_t;
--typedef __int64 int64_t;
--typedef __int32 int32_t;
--typedef __int16 int16_t;
--typedef __int8 int8_t;
--typedef float float32_t;
--
--
--#else
--
- #include <stdio.h>
- #if HAVE_SYS_TYPES_H
- # include <sys/types.h>
-@@ -188,6 +171,8 @@
- #if HAVE_STRINGS_H
- # include <strings.h>
- #endif
-+
-+/* precedence defining int-types by header files for all platforms */
- #if HAVE_INTTYPES_H
- # include <inttypes.h>
- #else
-@@ -195,6 +180,17 @@
- # include <stdint.h>
- # else
- /* we need these... */
-+# ifdef WIN32
-+typedef unsigned __int64 uint64_t;
-+typedef unsigned __int32 uint32_t;
-+typedef unsigned __int16 uint16_t;
-+typedef unsigned __int8 uint8_t;
-+typedef __int64 int64_t;
-+typedef __int32 int32_t;
-+typedef __int16 int16_t;
-+typedef __int8 int8_t;
-+# else /* WIN32 */
-+typedef float float32_t;
- typedef unsigned long long uint64_t;
- typedef unsigned long uint32_t;
- typedef unsigned short uint16_t;
-@@ -203,6 +199,7 @@
- typedef long int32_t;
- typedef short int16_t;
- typedef char int8_t;
-+# endif /* WIN32 */
- # endif
- #endif
- #if HAVE_UNISTD_H
-@@ -227,8 +224,6 @@
- # endif
- #endif
-
--#endif
--
- #ifdef WORDS_BIGENDIAN
- #define ARCH_IS_BIG_ENDIAN
- #endif
-@@ -289,6 +284,7 @@
- }
-
-
-+#ifndef HAVE_LRINTF
- #if defined(_WIN32) && !defined(__MINGW32__)
- #define HAS_LRINTF
- static INLINE int lrintf(float f)
-@@ -315,7 +311,7 @@
- return i;
- }
- #endif
--
-+#endif
-
- #ifdef __ICL /* only Intel C compiler has fmath ??? */
-
---- faad2-cvs-15092004/libfaad/bits.h 2004-09-04 08:56:28.000000000 -0600
-+++ libfaad/bits.h 2005-10-29 19:21:53.000000000 -0600
-@@ -56,9 +56,9 @@
- } bitfile;
-
-
--#if defined (_WIN32) && !defined(_WIN32_WCE) && !defined(__MINGW32__)
-+#if defined(_MSC_VER)
- #define BSWAP(a) __asm mov eax,a __asm bswap eax __asm mov a, eax
--#elif defined(LINUX) || defined(DJGPP) || defined(__MINGW32__)
-+#elif defined(LINUX) || defined(DJGPP) || defined (__MINGW32__) || defined (__CYGWIN__)
- #define BSWAP(a) __asm__ ( "bswapl %0\n" : "=r" (a) : "0" (a) )
- #else
- #define BSWAP(a) \
diff --git a/contrib/libfaad/drc.c b/contrib/libfaad/drc.c
index ef4b6a96e..3c9ff3ae0 100644
--- a/contrib/libfaad/drc.c
+++ b/contrib/libfaad/drc.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: drc.c,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: drc.c,v 1.28 2007/11/01 12:33:30 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/drc.h b/contrib/libfaad/drc.h
index 046ecbc3e..49118bcd0 100644
--- a/contrib/libfaad/drc.h
+++ b/contrib/libfaad/drc.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: drc.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: drc.h,v 1.22 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __DRC_H__
diff --git a/contrib/libfaad/drm_dec.c b/contrib/libfaad/drm_dec.c
index a782b0f22..61cb8180e 100644
--- a/contrib/libfaad/drm_dec.c
+++ b/contrib/libfaad/drm_dec.c
@@ -1,28 +1,31 @@
/*
-** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR and PS decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: drm_dec.c,v 1.1 2005/10/30 00:50:19 tmmm Exp $
+** $Id: drm_dec.c,v 1.9 2007/11/01 12:33:30 menno Exp $
**/
#include <stdlib.h>
@@ -243,17 +246,9 @@ static const real_t sa_sqrt_1_minus[8][2] = {
{ FRAC_CONST(0.929071574), FRAC_CONST(0) }
};
-static const uint8_t sa_freq_scale[9][2] =
+static const uint8_t sa_freq_scale[9] =
{
- { 0, 0},
- { 1, 1},
- { 2, 2},
- { 3, 3},
- { 5, 5},
- { 7, 7},
- {10,10},
- {13,13},
- {46,23}
+ 0, 1, 2, 3, 5, 7, 10, 13, 23
};
static const uint8_t pan_freq_scale[21] =
@@ -290,9 +285,9 @@ static const real_t filter_coeff[] =
FRAC_CONST(0.48954165955695)
};
-static const uint8_t delay_length[][2] =
+static const uint8_t delay_length[3] =
{
- { 1, 3 }, { 2, 4 }, { 3, 5 }
+ 3, 4, 5
};
static const real_t delay_fraction[] =
@@ -300,15 +295,9 @@ static const real_t delay_fraction[] =
FRAC_CONST(0.43), FRAC_CONST(0.75), FRAC_CONST(0.347)
};
-static const real_t peak_decay[2] =
-{
- FRAC_CONST(0.58664621951003), FRAC_CONST(0.76592833836465)
-};
+static const real_t peak_decay = FRAC_CONST(0.76592833836465);
-static const real_t smooth_coeff[2] =
-{
- FRAC_CONST(0.6), FRAC_CONST(0.25)
-};
+static const real_t smooth_coeff = FRAC_CONST(0.25);
/* Please note that these are the same tables as in plain PS */
static const complex_t Q_Fract_allpass_Qmf[][3] = {
@@ -566,25 +555,22 @@ static void drm_ps_delta_decode(drm_ps_info *ps)
{
if (ps->bs_sa_dt_flag && !ps->g_last_had_sa)
{
- for (band = 0; band < DRM_NUM_SA_BANDS; band++)
- {
- ps->g_prev_sa_index[band] = 0;
- }
- }
- if (ps->bs_sa_dt_flag)
- {
+ /* wait until we get a DT frame */
+ ps->bs_enable_sa = 0;
+ } else if (ps->bs_sa_dt_flag) {
+ /* DT frame, we have a last frame, so we can decode */
ps->g_sa_index[0] = sa_delta_clip(ps, ps->g_prev_sa_index[0]+ps->bs_sa_data[0]);
-
} else {
+ /* DF always decodable */
ps->g_sa_index[0] = sa_delta_clip(ps,ps->bs_sa_data[0]);
}
for (band = 1; band < DRM_NUM_SA_BANDS; band++)
{
- if (ps->bs_sa_dt_flag)
+ if (ps->bs_sa_dt_flag && ps->g_last_had_sa)
{
ps->g_sa_index[band] = sa_delta_clip(ps, ps->g_prev_sa_index[band] + ps->bs_sa_data[band]);
- } else {
+ } else if (!ps->bs_sa_dt_flag) {
ps->g_sa_index[band] = sa_delta_clip(ps, ps->g_sa_index[band-1] + ps->bs_sa_data[band]);
}
}
@@ -618,28 +604,19 @@ static void drm_ps_delta_decode(drm_ps_info *ps)
{
if (ps->bs_pan_dt_flag && !ps->g_last_had_pan)
{
-/* The DRM PS spec doesn't say anything about this case. (deltacoded in time without a previous frame)
- AAC PS spec you must tread previous frame as 0, so that's what we try.
-*/
- for (band = 0; band < DRM_NUM_PAN_BANDS; band++)
- {
- ps->g_prev_pan_index[band] = 0;
- }
- }
-
- if (ps->bs_pan_dt_flag)
- {
- ps->g_pan_index[0] = pan_delta_clip(ps, ps->g_prev_pan_index[0]+ps->bs_pan_data[0]);
+ ps->bs_enable_pan = 0;
+ } else if (ps->bs_pan_dt_flag) {
+ ps->g_pan_index[0] = pan_delta_clip(ps, ps->g_prev_pan_index[0]+ps->bs_pan_data[0]);
} else {
- ps->g_pan_index[0] = pan_delta_clip(ps, ps->bs_pan_data[0]);
+ ps->g_pan_index[0] = pan_delta_clip(ps, ps->bs_pan_data[0]);
}
for (band = 1; band < DRM_NUM_PAN_BANDS; band++)
{
- if (ps->bs_pan_dt_flag)
+ if (ps->bs_pan_dt_flag && ps->g_last_had_pan)
{
ps->g_pan_index[band] = pan_delta_clip(ps, ps->g_prev_pan_index[band] + ps->bs_pan_data[band]);
- } else {
+ } else if (!ps->bs_pan_dt_flag) {
ps->g_pan_index[band] = pan_delta_clip(ps, ps->g_pan_index[band-1] + ps->bs_pan_data[band]);
}
}
@@ -658,7 +635,7 @@ static void drm_ps_delta_decode(drm_ps_info *ps)
}
}
-static void drm_calc_sa_side_signal(drm_ps_info *ps, qmf_t X[38][64], uint8_t rateselect)
+static void drm_calc_sa_side_signal(drm_ps_info *ps, qmf_t X[38][64])
{
uint8_t s, b, k;
complex_t qfrac, tmp0, tmp, in, R0;
@@ -673,7 +650,7 @@ static void drm_calc_sa_side_signal(drm_ps_info *ps, qmf_t X[38][64], uint8_t ra
uint32_t in_re, in_im;
#endif
- for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b++)
+ for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS]; b++)
{
/* set delay indices */
for (k = 0; k < NUM_OF_LINKS; k++)
@@ -701,16 +678,16 @@ static void drm_calc_sa_side_signal(drm_ps_info *ps, qmf_t X[38][64], uint8_t ra
power = MUL_R(RE(in),RE(in)) + MUL_R(IM(in),IM(in));
#endif
- ps->peakdecay_fast[b] = MUL_F(ps->peakdecay_fast[b], peak_decay[rateselect]);
+ ps->peakdecay_fast[b] = MUL_F(ps->peakdecay_fast[b], peak_decay);
if (ps->peakdecay_fast[b] < power)
ps->peakdecay_fast[b] = power;
peakdiff = ps->prev_peakdiff[b];
- peakdiff += MUL_F((ps->peakdecay_fast[b] - power - ps->prev_peakdiff[b]), smooth_coeff[rateselect]);
+ peakdiff += MUL_F((ps->peakdecay_fast[b] - power - ps->prev_peakdiff[b]), smooth_coeff);
ps->prev_peakdiff[b] = peakdiff;
nrg = ps->prev_nrg[b];
- nrg += MUL_F((power - ps->prev_nrg[b]), smooth_coeff[rateselect]);
+ nrg += MUL_F((power - ps->prev_nrg[b]), smooth_coeff);
ps->prev_nrg[b] = nrg;
if (MUL_R(peakdiff, gamma) <= nrg) {
@@ -763,7 +740,7 @@ static void drm_calc_sa_side_signal(drm_ps_info *ps, qmf_t X[38][64], uint8_t ra
for (k = 0; k < NUM_OF_LINKS; k++)
{
- if (++temp_delay_ser[k] >= delay_length[k][rateselect])
+ if (++temp_delay_ser[k] >= delay_length[k])
temp_delay_ser[k] = 0;
}
}
@@ -773,7 +750,7 @@ static void drm_calc_sa_side_signal(drm_ps_info *ps, qmf_t X[38][64], uint8_t ra
ps->delay_buf_index_ser[k] = temp_delay_ser[k];
}
-static void drm_add_ambiance(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[38][64], qmf_t X_right[38][64])
+static void drm_add_ambiance(drm_ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64])
{
uint8_t s, b, ifreq, qclass;
real_t sa_map[MAX_SA_BAND], sa_dir_map[MAX_SA_BAND], k_sa_map[MAX_SA_BAND], k_sa_dir_map[MAX_SA_BAND];
@@ -783,7 +760,7 @@ static void drm_add_ambiance(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[3
{
/* Instead of dequantization and mapping, we use an inverse mapping
to look up all the values we need */
- for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b++)
+ for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS]; b++)
{
const real_t inv_f_num_of_subsamples = FRAC_CONST(0.03333333333);
@@ -804,7 +781,7 @@ static void drm_add_ambiance(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[3
for (s = 0; s < NUM_OF_SUBSAMPLES; s++)
{
- for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b++)
+ for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS]; b++)
{
QMF_RE(X_right[s][b]) = MUL_F(QMF_RE(X_left[s][b]), sa_dir_map[b]) - MUL_F(QMF_RE(ps->SA[s][b]), sa_map[b]);
QMF_IM(X_right[s][b]) = MUL_F(QMF_IM(X_left[s][b]), sa_dir_map[b]) - MUL_F(QMF_IM(ps->SA[s][b]), sa_map[b]);
@@ -814,7 +791,7 @@ static void drm_add_ambiance(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[3
sa_map[b] += k_sa_map[b];
sa_dir_map[b] += k_sa_dir_map[b];
}
- for (b = sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b < NUM_OF_QMF_CHANNELS; b++)
+ for (b = sa_freq_scale[DRM_NUM_SA_BANDS]; b < NUM_OF_QMF_CHANNELS; b++)
{
QMF_RE(X_right[s][b]) = QMF_RE(X_left[s][b]);
QMF_IM(X_right[s][b]) = QMF_IM(X_left[s][b]);
@@ -833,7 +810,7 @@ static void drm_add_ambiance(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[3
}
}
-static void drm_add_pan(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[38][64], qmf_t X_right[38][64])
+static void drm_add_pan(drm_ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64])
{
uint8_t s, b, qclass, ifreq;
real_t tmp, coeff1, coeff2;
@@ -924,10 +901,8 @@ void drm_ps_free(drm_ps_info *ps)
}
/* main DRM PS decoding function */
-uint8_t drm_ps_decode(drm_ps_info *ps, uint8_t guess, uint32_t samplerate, qmf_t X_left[38][64], qmf_t X_right[38][64])
-{
- uint8_t rateselect = (samplerate >= 24000);
-
+uint8_t drm_ps_decode(drm_ps_info *ps, uint8_t guess, qmf_t X_left[38][64], qmf_t X_right[38][64])
+{
if (ps == NULL)
{
memcpy(X_right, X_left, sizeof(qmf_t)*30*64);
@@ -958,8 +933,8 @@ uint8_t drm_ps_decode(drm_ps_info *ps, uint8_t guess, uint32_t samplerate, qmf_t
ps->drm_ps_data_available = 0;
- drm_calc_sa_side_signal(ps, X_left, rateselect);
- drm_add_ambiance(ps, rateselect, X_left, X_right);
+ drm_calc_sa_side_signal(ps, X_left);
+ drm_add_ambiance(ps, X_left, X_right);
if (ps->bs_enable_sa)
{
@@ -973,7 +948,7 @@ uint8_t drm_ps_decode(drm_ps_info *ps, uint8_t guess, uint32_t samplerate, qmf_t
if (ps->bs_enable_pan)
{
- drm_add_pan(ps, rateselect, X_left, X_right);
+ drm_add_pan(ps, X_left, X_right);
ps->g_last_had_pan = 1;
diff --git a/contrib/libfaad/drm_dec.h b/contrib/libfaad/drm_dec.h
index bb7d6dc93..d0ac995e4 100644
--- a/contrib/libfaad/drm_dec.h
+++ b/contrib/libfaad/drm_dec.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: drm_dec.h,v 1.1 2005/10/30 00:50:19 tmmm Exp $
+** $Id: drm_dec.h,v 1.8 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __DRM_DEC_H__
@@ -88,7 +91,7 @@ uint16_t drm_ps_data(drm_ps_info *ps, bitfile *ld);
drm_ps_info *drm_ps_init(void);
void drm_ps_free(drm_ps_info *ps);
-uint8_t drm_ps_decode(drm_ps_info *ps, uint8_t guess, uint32_t samplerate, qmf_t X_left[38][64], qmf_t X_right[38][64]);
+uint8_t drm_ps_decode(drm_ps_info *ps, uint8_t guess, qmf_t X_left[38][64], qmf_t X_right[38][64]);
#ifdef __cplusplus
}
diff --git a/contrib/libfaad/error.c b/contrib/libfaad/error.c
index 2fbe08fc1..c552e06cd 100644
--- a/contrib/libfaad/error.c
+++ b/contrib/libfaad/error.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: error.c,v 1.8 2005/10/29 23:57:06 tmmm Exp $
+** $Id: error.c,v 1.32 2007/11/01 12:33:30 menno Exp $
**/
#include "common.h"
@@ -56,6 +59,11 @@ char *err_msg[] = {
"Unexpected fill element with SBR data",
"Not all elements were provided with SBR data",
"LTP decoding not available",
- "Output data buffer too small"
+ "Output data buffer too small",
+ "CRC error in DRM data",
+ "PNS not allowed in DRM data stream",
+ "No standard extension payload allowed in DRM",
+ "PCE shall be the first element in a frame",
+ "Bitstream value not allowed by specification"
};
diff --git a/contrib/libfaad/error.h b/contrib/libfaad/error.h
index 1009a9f57..7f750217c 100644
--- a/contrib/libfaad/error.h
+++ b/contrib/libfaad/error.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: error.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: error.h,v 1.26 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __ERROR_H__
@@ -32,7 +35,7 @@
extern "C" {
#endif
-#define NUM_ERROR_MESSAGES 28
+#define NUM_ERROR_MESSAGES 33
extern char *err_msg[];
#ifdef __cplusplus
diff --git a/contrib/libfaad/filtbank.c b/contrib/libfaad/filtbank.c
index 2919b5be3..eaeddcce6 100644
--- a/contrib/libfaad/filtbank.c
+++ b/contrib/libfaad/filtbank.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: filtbank.c,v 1.10 2005/10/29 23:57:06 tmmm Exp $
+** $Id: filtbank.c,v 1.45 2007/11/01 12:33:30 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/filtbank.h b/contrib/libfaad/filtbank.h
index 54c72c0ef..de0149c97 100644
--- a/contrib/libfaad/filtbank.h
+++ b/contrib/libfaad/filtbank.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: filtbank.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: filtbank.h,v 1.27 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __FILTBANK_H__
diff --git a/contrib/libfaad/fixed.h b/contrib/libfaad/fixed.h
index c58ee26cb..531583772 100644
--- a/contrib/libfaad/fixed.h
+++ b/contrib/libfaad/fixed.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: fixed.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: fixed.h,v 1.32 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __FIXED_H__
@@ -36,6 +39,7 @@ extern "C" {
#include <cmnintrin.h>
#endif
+
#define COEF_BITS 28
#define COEF_PRECISION (1 << COEF_BITS)
#define REAL_BITS 14 // MAXIMUM OF 14 FOR FIXED POINT SBR
@@ -240,9 +244,27 @@ static INLINE void ComplexMult(real_t *y1, real_t *y2,
return _MulHigh(A,B) << (32-FRAC_BITS);
}
#else
+#ifdef __BFIN__
+#define _MulHigh(X,Y) ({ int __xxo; \
+ asm ( \
+ "a1 = %2.H * %1.L (IS,M);\n\t" \
+ "a0 = %1.H * %2.H, a1+= %1.H * %2.L (IS,M);\n\t"\
+ "a1 = a1 >>> 16;\n\t" \
+ "%0 = (a0 += a1);\n\t" \
+ : "=d" (__xxo) : "d" (X), "d" (Y) : "A0","A1"); __xxo; })
+
+#define MUL_F(X,Y) ({ int __xxo; \
+ asm ( \
+ "a1 = %2.H * %1.L (M);\n\t" \
+ "a0 = %1.H * %2.H, a1+= %1.H * %2.L (M);\n\t" \
+ "a1 = a1 >>> 16;\n\t" \
+ "%0 = (a0 += a1);\n\t" \
+ : "=d" (__xxo) : "d" (X), "d" (Y) : "A0","A1"); __xxo; })
+#else
#define _MulHigh(A,B) (real_t)(((int64_t)(A)*(int64_t)(B)+(1 << (FRAC_SIZE-1))) >> FRAC_SIZE)
#define MUL_F(A,B) (real_t)(((int64_t)(A)*(int64_t)(B)+(1 << (FRAC_BITS-1))) >> FRAC_BITS)
#endif
+#endif
#define MUL_Q2(A,B) (real_t)(((int64_t)(A)*(int64_t)(B)+(1 << (Q2_BITS-1))) >> Q2_BITS)
#define MUL_SHIFT6(A,B) (real_t)(((int64_t)(A)*(int64_t)(B)+(1 << (6-1))) >> 6)
#define MUL_SHIFT23(A,B) (real_t)(((int64_t)(A)*(int64_t)(B)+(1 << (23-1))) >> 23)
diff --git a/contrib/libfaad/hcr.c b/contrib/libfaad/hcr.c
index 94f08fd2a..c76629641 100644
--- a/contrib/libfaad/hcr.c
+++ b/contrib/libfaad/hcr.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2004 G.C. Pascutto, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: hcr.c,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: hcr.c,v 1.24 2007/11/01 12:33:30 menno Exp $
**/
#include "common.h"
@@ -222,6 +225,7 @@ uint8_t reordered_spectral_data(NeAACDecHandle hDecoder, ic_stream *ics,
uint16_t sp_offset[8];
uint16_t g, i, sortloop, set, bitsread;
+ uint16_t bitsleft, codewordsleft;
uint8_t w_idx, sfb, this_CB, last_CB, this_sec_CB;
const uint16_t nshort = hDecoder->frameLength/8;
@@ -236,7 +240,7 @@ uint8_t reordered_spectral_data(NeAACDecHandle hDecoder, ic_stream *ics,
/* since there is spectral data, at least one codeword has nonzero length */
if (ics->length_of_longest_codeword == 0)
return 10;
-
+
if (sp_data_len < ics->length_of_longest_codeword)
return 10;
@@ -272,7 +276,7 @@ uint8_t reordered_spectral_data(NeAACDecHandle hDecoder, ic_stream *ics,
for (sfb = 0; sfb < ics->max_sfb; sfb++)
{
/* loop over all in this sfb, 4 lines per loop */
- for (w_idx = 0; 4*w_idx < (ics->swb_offset[sfb+1] - ics->swb_offset[sfb]); w_idx++)
+ for (w_idx = 0; 4*w_idx < (min(ics->swb_offset[sfb+1], ics->swb_offset_max) - ics->swb_offset[sfb]); w_idx++)
{
for(g = 0; g < ics->num_window_groups; g++)
{
@@ -404,6 +408,25 @@ uint8_t reordered_spectral_data(NeAACDecHandle hDecoder, ic_stream *ics,
rewrev_bits(&segment[i]);
}
+#if 0 // Seems to give false errors
+ bitsleft = 0;
+
+ for (i = 0; i < numberOfSegments && !bitsleft; i++)
+ bitsleft += segment[i].len;
+
+ if (bitsleft) return 10;
+
+ codewordsleft = 0;
+
+ for (i = 0; (i < numberOfCodewords - numberOfSegments) && (!codewordsleft); i++)
+ if (!codeword[i].decoded)
+ codewordsleft++;
+
+ if (codewordsleft) return 10;
+#endif
+
+
return 0;
+
}
#endif
diff --git a/contrib/libfaad/huffman.c b/contrib/libfaad/huffman.c
index 6c24a6cec..e2656c089 100644
--- a/contrib/libfaad/huffman.c
+++ b/contrib/libfaad/huffman.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: huffman.c,v 1.5 2005/10/29 23:57:06 tmmm Exp $
+** $Id: huffman.c,v 1.26 2007/11/01 12:33:30 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/huffman.h b/contrib/libfaad/huffman.h
index cffe23093..f8bcb237e 100644
--- a/contrib/libfaad/huffman.h
+++ b/contrib/libfaad/huffman.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: huffman.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: huffman.h,v 1.28 2007/11/01 12:33:30 menno Exp $
**/
#ifndef __HUFFMAN_H__
diff --git a/contrib/libfaad/ic_predict.c b/contrib/libfaad/ic_predict.c
index 82753a9f2..70027ba2f 100644
--- a/contrib/libfaad/ic_predict.c
+++ b/contrib/libfaad/ic_predict.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ic_predict.c,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: ic_predict.c,v 1.28 2007/11/01 12:33:31 menno Exp $
**/
#include "common.h"
@@ -81,7 +84,8 @@ static void ic_predict(pred_state *state, real_t input, real_t *output, uint8_t
{
uint16_t tmp;
int16_t i, j;
- real_t dr1, predictedvalue;
+ real_t dr1;
+ float32_t predictedvalue;
real_t e0, e1;
real_t k1, k2;
@@ -114,7 +118,7 @@ static void ic_predict(pred_state *state, real_t input, real_t *output, uint8_t
#define B 0.953125
real_t c = COR[0];
real_t v = VAR[0];
- real_t tmp;
+ float32_t tmp;
if (c == 0 || v <= 1)
{
k1 = 0;
@@ -144,7 +148,7 @@ static void ic_predict(pred_state *state, real_t input, real_t *output, uint8_t
#define B 0.953125
real_t c = COR[1];
real_t v = VAR[1];
- real_t tmp;
+ float32_t tmp;
if (c == 0 || v <= 1)
{
k2 = 0;
@@ -209,7 +213,7 @@ void pns_reset_pred_state(ic_stream *ics, pred_state *state)
if (is_noise(ics, g, sfb))
{
offs = ics->swb_offset[sfb];
- offs2 = ics->swb_offset[sfb+1];
+ offs2 = min(ics->swb_offset[sfb+1], ics->swb_offset_max);
for (i = offs; i < offs2; i++)
reset_pred_state(&state[i]);
@@ -241,7 +245,7 @@ void ic_prediction(ic_stream *ics, real_t *spec, pred_state *state,
for (sfb = 0; sfb < max_pred_sfb(sf_index); sfb++)
{
uint16_t low = ics->swb_offset[sfb];
- uint16_t high = ics->swb_offset[sfb+1];
+ uint16_t high = min(ics->swb_offset[sfb+1], ics->swb_offset_max);
for (bin = low; bin < high; bin++)
{
diff --git a/contrib/libfaad/ic_predict.h b/contrib/libfaad/ic_predict.h
index 233992b96..e69cd114e 100644
--- a/contrib/libfaad/ic_predict.h
+++ b/contrib/libfaad/ic_predict.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ic_predict.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: ic_predict.h,v 1.23 2007/11/01 12:33:31 menno Exp $
**/
#ifdef MAIN_DEC
diff --git a/contrib/libfaad/iq_table.h b/contrib/libfaad/iq_table.h
index 9002e15d7..3cc2b8061 100644
--- a/contrib/libfaad/iq_table.h
+++ b/contrib/libfaad/iq_table.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: iq_table.h,v 1.6 2005/10/29 23:57:06 tmmm Exp $
+** $Id: iq_table.h,v 1.20 2007/11/01 12:33:31 menno Exp $
**/
#ifndef IQ_TABLE_H__
diff --git a/contrib/libfaad/is.c b/contrib/libfaad/is.c
index 9fcdbcbb5..5236db077 100644
--- a/contrib/libfaad/is.c
+++ b/contrib/libfaad/is.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: is.c,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: is.c,v 1.28 2007/11/01 12:33:31 menno Exp $
**/
#include "common.h"
@@ -84,7 +87,7 @@ void is_decode(ic_stream *ics, ic_stream *icsr, real_t *l_spec, real_t *r_spec,
/* Scale from left to right channel,
do not touch left channel */
- for (i = icsr->swb_offset[sfb]; i < icsr->swb_offset[sfb+1]; i++)
+ for (i = icsr->swb_offset[sfb]; i < min(icsr->swb_offset[sfb+1], ics->swb_offset_max); i++)
{
#ifndef FIXED_POINT
r_spec[(group*nshort)+i] = MUL_R(l_spec[(group*nshort)+i], scale);
diff --git a/contrib/libfaad/is.h b/contrib/libfaad/is.h
index 0786f7258..3e3b750ab 100644
--- a/contrib/libfaad/is.h
+++ b/contrib/libfaad/is.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: is.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: is.h,v 1.20 2007/11/01 12:33:31 menno Exp $
**/
#ifndef __IS_H__
diff --git a/contrib/libfaad/kbd_win.h b/contrib/libfaad/kbd_win.h
index 046b6b995..de404c7ea 100644
--- a/contrib/libfaad/kbd_win.h
+++ b/contrib/libfaad/kbd_win.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: kbd_win.h,v 1.7 2005/10/29 23:57:06 tmmm Exp $
+** $Id: kbd_win.h,v 1.21 2007/11/01 12:33:31 menno Exp $
**/
#ifndef __KBD_WIN_H__
diff --git a/contrib/libfaad/lt_predict.c b/contrib/libfaad/lt_predict.c
index 3aab00426..2be18ae9f 100644
--- a/contrib/libfaad/lt_predict.c
+++ b/contrib/libfaad/lt_predict.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: lt_predict.c,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: lt_predict.c,v 1.27 2007/11/01 12:33:31 menno Exp $
**/
@@ -53,9 +56,6 @@ uint8_t is_ltp_ot(uint8_t object_type)
#ifdef LD_DEC
|| (object_type == LD)
#endif
-#ifdef SCALABLE_DEC
- || (object_type == 6) /* TODO */
-#endif
)
{
return 1;
@@ -120,7 +120,7 @@ void lt_prediction(ic_stream *ics, ltp_info *ltp, real_t *spec,
if (ltp->long_used[sfb])
{
uint16_t low = ics->swb_offset[sfb];
- uint16_t high = ics->swb_offset[sfb+1];
+ uint16_t high = min(ics->swb_offset[sfb+1], ics->swb_offset_max);
for (bin = low; bin < high; bin++)
{
diff --git a/contrib/libfaad/lt_predict.h b/contrib/libfaad/lt_predict.h
index faa2fbca7..117f83424 100644
--- a/contrib/libfaad/lt_predict.h
+++ b/contrib/libfaad/lt_predict.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: lt_predict.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: lt_predict.h,v 1.20 2007/11/01 12:33:31 menno Exp $
**/
#ifdef LTP_DEC
diff --git a/contrib/libfaad/mdct.c b/contrib/libfaad/mdct.c
index 0df3d6aae..247691e40 100644
--- a/contrib/libfaad/mdct.c
+++ b/contrib/libfaad/mdct.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: mdct.c,v 1.11 2005/10/29 23:57:07 tmmm Exp $
+** $Id: mdct.c,v 1.47 2007/11/01 12:33:31 menno Exp $
**/
/*
@@ -33,7 +36,7 @@
* As described in:
* P. Duhamel, Y. Mahieux, and J.P. Petit, "A Fast Algorithm for the
* Implementation of Filter Banks Based on 'Time Domain Aliasing
- * Cancellation'," IEEE Proc. on ICASSP'91, 1991, pp. 2209-2212.
+ * Cancellation’," IEEE Proc. on ICASSP‘91, 1991, pp. 2209-2212.
*
*
* As of April 6th 2002 completely rewritten.
diff --git a/contrib/libfaad/mdct.h b/contrib/libfaad/mdct.h
index c2b738795..736180ead 100644
--- a/contrib/libfaad/mdct.h
+++ b/contrib/libfaad/mdct.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: mdct.h,v 1.8 2005/10/29 23:57:07 tmmm Exp $
+** $Id: mdct.h,v 1.30 2007/11/01 12:33:31 menno Exp $
**/
#ifndef __MDCT_H__
diff --git a/contrib/libfaad/mdct_tab.h b/contrib/libfaad/mdct_tab.h
index 7dd17166b..eea285b67 100644
--- a/contrib/libfaad/mdct_tab.h
+++ b/contrib/libfaad/mdct_tab.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: mdct_tab.h,v 1.1 2005/10/30 00:50:19 tmmm Exp $
+** $Id: mdct_tab.h,v 1.7 2007/11/01 12:33:32 menno Exp $
**/
#ifndef __MDCT_TAB_H__
diff --git a/contrib/libfaad/mp4.c b/contrib/libfaad/mp4.c
index 651280805..ef3f8a9c9 100644
--- a/contrib/libfaad/mp4.c
+++ b/contrib/libfaad/mp4.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: mp4.c,v 1.9 2005/10/29 23:57:07 tmmm Exp $
+** $Id: mp4.c,v 1.38 2007/11/01 12:33:32 menno Exp $
**/
#include "common.h"
@@ -58,11 +61,7 @@ static uint8_t ObjectTypesTable[32] = {
#else
0, /* 5 SBR */
#endif
-#ifdef SCALABLE_DEC
- 1, /* 6 AAC Scalable */
-#else
0, /* 6 AAC Scalable */
-#endif
0, /* 7 TwinVQ */
0, /* 8 CELP */
0, /* 9 HVXC */
@@ -83,11 +82,7 @@ static uint8_t ObjectTypesTable[32] = {
#else
0, /* 19 ER AAC LTP */
#endif
-#ifdef SCALABLE_DEC
- 1, /* 20 ER AAC scalable */
-#else
0, /* 20 ER AAC scalable */
-#endif
0, /* 21 ER TwinVQ */
0, /* 22 ER BSAC */
#ifdef LD_DEC
@@ -248,10 +243,10 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer,
if (syncExtensionType == 0x2b7)
{
- mp4ASC->objectTypeIndex = (uint8_t)faad_getbits(&ld, 5
+ uint8_t tmp_OTi = (uint8_t)faad_getbits(&ld, 5
DEBUGVAR(1,10,"parse_audio_decoder_specific_info(): extensionAudioObjectType"));
- if (mp4ASC->objectTypeIndex == 5)
+ if (tmp_OTi == 5)
{
mp4ASC->sbr_present_flag = (uint8_t)faad_get1bit(&ld
DEBUGVAR(1,11,"parse_audio_decoder_specific_info(): sbr_present_flag"));
@@ -259,6 +254,10 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer,
if (mp4ASC->sbr_present_flag)
{
uint8_t tmp;
+
+ /* Don't set OT to SBR until checked that it is actually there */
+ mp4ASC->objectTypeIndex = tmp_OTi;
+
tmp = (uint8_t)faad_getbits(&ld, 4
DEBUGVAR(1,12,"parse_audio_decoder_specific_info(): extensionSamplingFrequencyIndex"));
diff --git a/contrib/libfaad/mp4.h b/contrib/libfaad/mp4.h
index 478c9b9be..532ba3524 100644
--- a/contrib/libfaad/mp4.h
+++ b/contrib/libfaad/mp4.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: mp4.h,v 1.8 2005/10/29 23:57:07 tmmm Exp $
+** $Id: mp4.h,v 1.25 2007/11/01 12:33:32 menno Exp $
**/
#ifndef __MP4_H__
diff --git a/contrib/libfaad/ms.c b/contrib/libfaad/ms.c
index 93b0a2051..97c8fb198 100644
--- a/contrib/libfaad/ms.c
+++ b/contrib/libfaad/ms.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ms.c,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: ms.c,v 1.21 2007/11/01 12:33:32 menno Exp $
**/
#include "common.h"
@@ -58,7 +61,7 @@ void ms_decode(ic_stream *ics, ic_stream *icsr, real_t *l_spec, real_t *r_spec,
if ((ics->ms_used[g][sfb] || ics->ms_mask_present == 2) &&
!is_intensity(icsr, g, sfb) && !is_noise(ics, g, sfb))
{
- for (i = ics->swb_offset[sfb]; i < ics->swb_offset[sfb+1]; i++)
+ for (i = ics->swb_offset[sfb]; i < min(ics->swb_offset[sfb+1], ics->swb_offset_max); i++)
{
k = (group*nshort) + i;
tmp = l_spec[k] - r_spec[k];
diff --git a/contrib/libfaad/ms.h b/contrib/libfaad/ms.h
index 4bc7c8175..30cfadaf6 100644
--- a/contrib/libfaad/ms.h
+++ b/contrib/libfaad/ms.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ms.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: ms.h,v 1.19 2007/11/01 12:33:32 menno Exp $
**/
#ifndef __MS_H__
diff --git a/contrib/libfaad/faad.h b/contrib/libfaad/neaacdec.h
index e46c31d87..6ffa54f22 100644..100755
--- a/contrib/libfaad/faad.h
+++ b/contrib/libfaad/neaacdec.h
@@ -1,49 +1,75 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: faad.h,v 1.7 2004/12/03 01:15:30 tmattern Exp $
+** $Id: neaacdec.h,v 1.11 2007/11/01 12:33:29 menno Exp $
**/
-#ifndef __AACDEC_H__
-#define __AACDEC_H__
+#ifndef __NEAACDEC_H__
+#define __NEAACDEC_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
+
+#if 1
+/* MACROS FOR BACKWARDS COMPATIBILITY */
+/* structs */
+#define faacDecHandle NeAACDecHandle
+#define faacDecConfiguration NeAACDecConfiguration
+#define faacDecConfigurationPtr NeAACDecConfigurationPtr
+#define faacDecFrameInfo NeAACDecFrameInfo
+/* functions */
+#define faacDecGetErrorMessage NeAACDecGetErrorMessage
+#define faacDecSetConfiguration NeAACDecSetConfiguration
+#define faacDecGetCurrentConfiguration NeAACDecGetCurrentConfiguration
+#define faacDecInit NeAACDecInit
+#define faacDecInit2 NeAACDecInit2
+#define faacDecInitDRM NeAACDecInitDRM
+#define faacDecPostSeekReset NeAACDecPostSeekReset
+#define faacDecOpen NeAACDecOpen
+#define faacDecClose NeAACDecClose
+#define faacDecDecode NeAACDecDecode
+#define AudioSpecificConfig NeAACDecAudioSpecificConfig
+#endif
+
+
#ifdef _WIN32
#pragma pack(push, 8)
- #ifndef FAADAPI
- #define FAADAPI __cdecl
+ #ifndef NEAACDECAPI
+ #define NEAACDECAPI __cdecl
#endif
#else
- #ifndef FAADAPI
- #define FAADAPI
+ #ifndef NEAACDECAPI
+ #define NEAACDECAPI
#endif
#endif
-#define FAAD2_VERSION "2.0 "
+#define FAAD2_VERSION "2.6"
/* object types for AAC */
#define MAIN 1
@@ -72,6 +98,7 @@ extern "C" {
#define FAAD_FMT_24BIT 2
#define FAAD_FMT_32BIT 3
#define FAAD_FMT_FLOAT 4
+#define FAAD_FMT_FIXED FAAD_FMT_FLOAT
#define FAAD_FMT_DOUBLE 5
/* Capabilities */
@@ -98,8 +125,8 @@ extern "C" {
#define DRMCH_MONO 1
#define DRMCH_STEREO 2
#define DRMCH_SBR_MONO 3
-#define DRMCH_SBR_LC_STEREO 4
-#define DRMCH_SBR_STEREO 5
+#define DRMCH_SBR_STEREO 4
+#define DRMCH_SBR_PS_STEREO 5
/* A decode call can eat up to FAAD_MIN_STREAMSIZE bytes per decoded channel,
@@ -107,7 +134,7 @@ extern "C" {
#define FAAD_MIN_STREAMSIZE 768 /* 6144 bits/channel */
-typedef void *faacDecHandle;
+typedef void *NeAACDecHandle;
typedef struct mp4AudioSpecificConfig
{
@@ -129,9 +156,10 @@ typedef struct mp4AudioSpecificConfig
char sbr_present_flag;
char forceUpSampling;
+ char downSampledSBR;
} mp4AudioSpecificConfig;
-typedef struct faacDecConfiguration
+typedef struct NeAACDecConfiguration
{
unsigned char defObjectType;
unsigned long defSampleRate;
@@ -139,9 +167,9 @@ typedef struct faacDecConfiguration
unsigned char downMatrix;
unsigned char useOldADTSFormat;
unsigned char dontUpSampleImplicitSBR;
-} faacDecConfiguration, *faacDecConfigurationPtr;
+} NeAACDecConfiguration, *NeAACDecConfigurationPtr;
-typedef struct faacDecFrameInfo
+typedef struct NeAACDecFrameInfo
{
unsigned long bytesconsumed;
unsigned long samples;
@@ -164,47 +192,57 @@ typedef struct faacDecFrameInfo
unsigned char num_back_channels;
unsigned char num_lfe_channels;
unsigned char channel_position[64];
-} faacDecFrameInfo;
-char* FAADAPI faacDecGetErrorMessage(unsigned char errcode);
+ /* PS: 0: off, 1: on */
+ unsigned char ps;
+} NeAACDecFrameInfo;
-unsigned long FAADAPI faacDecGetCapabilities(void);
+char* NEAACDECAPI NeAACDecGetErrorMessage(unsigned char errcode);
-faacDecHandle FAADAPI faacDecOpen(void);
+unsigned long NEAACDECAPI NeAACDecGetCapabilities(void);
-faacDecConfigurationPtr FAADAPI faacDecGetCurrentConfiguration(faacDecHandle hDecoder);
+NeAACDecHandle NEAACDECAPI NeAACDecOpen(void);
-unsigned char FAADAPI faacDecSetConfiguration(faacDecHandle hDecoder,
- faacDecConfigurationPtr config);
+NeAACDecConfigurationPtr NEAACDECAPI NeAACDecGetCurrentConfiguration(NeAACDecHandle hDecoder);
+
+unsigned char NEAACDECAPI NeAACDecSetConfiguration(NeAACDecHandle hDecoder,
+ NeAACDecConfigurationPtr config);
/* Init the library based on info from the AAC file (ADTS/ADIF) */
-long FAADAPI faacDecInit(faacDecHandle hDecoder,
- unsigned char *buffer,
- unsigned long buffer_size,
- unsigned long *samplerate,
- unsigned char *channels);
+long NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder,
+ unsigned char *buffer,
+ unsigned long buffer_size,
+ unsigned long *samplerate,
+ unsigned char *channels);
/* Init the library using a DecoderSpecificInfo */
-char FAADAPI faacDecInit2(faacDecHandle hDecoder, unsigned char *pBuffer,
- unsigned long SizeOfDecoderSpecificInfo,
- unsigned long *samplerate, unsigned char *channels);
+char NEAACDECAPI NeAACDecInit2(NeAACDecHandle hDecoder, unsigned char *pBuffer,
+ unsigned long SizeOfDecoderSpecificInfo,
+ unsigned long *samplerate, unsigned char *channels);
/* Init the library for DRM */
-char FAADAPI faacDecInitDRM(faacDecHandle hDecoder, unsigned long samplerate,
- unsigned char channels);
+char NEAACDECAPI NeAACDecInitDRM(NeAACDecHandle *hDecoder, unsigned long samplerate,
+ unsigned char channels);
+
+void NEAACDECAPI NeAACDecPostSeekReset(NeAACDecHandle hDecoder, long frame);
-void FAADAPI faacDecPostSeekReset(faacDecHandle hDecoder, long frame);
+void NEAACDECAPI NeAACDecClose(NeAACDecHandle hDecoder);
-void FAADAPI faacDecClose(faacDecHandle hDecoder);
+void* NEAACDECAPI NeAACDecDecode(NeAACDecHandle hDecoder,
+ NeAACDecFrameInfo *hInfo,
+ unsigned char *buffer,
+ unsigned long buffer_size);
-void* FAADAPI faacDecDecode(faacDecHandle hDecoder,
- faacDecFrameInfo *hInfo,
- unsigned char *buffer,
- unsigned long buffer_size);
+void* NEAACDECAPI NeAACDecDecode2(NeAACDecHandle hDecoder,
+ NeAACDecFrameInfo *hInfo,
+ unsigned char *buffer,
+ unsigned long buffer_size,
+ void **sample_buffer,
+ unsigned long sample_buffer_size);
-char FAADAPI AudioSpecificConfig(unsigned char *pBuffer,
- unsigned long buffer_size,
- mp4AudioSpecificConfig *mp4ASC);
+char NEAACDECAPI NeAACDecAudioSpecificConfig(unsigned char *pBuffer,
+ unsigned long buffer_size,
+ mp4AudioSpecificConfig *mp4ASC);
#ifdef _WIN32
#pragma pack(pop)
diff --git a/contrib/libfaad/output.c b/contrib/libfaad/output.c
index 33ebed39c..a96ebd983 100644
--- a/contrib/libfaad/output.c
+++ b/contrib/libfaad/output.c
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: output.c,v 1.9 2006/06/30 21:36:27 dgp85 Exp $
+** $Id: output.c,v 1.46 2007/11/01 12:33:32 menno Exp $
**/
#include "common.h"
@@ -463,7 +466,7 @@ static INLINE real_t get_sample(real_t **input, uint8_t channel, uint16_t sample
}
}
-static void* output_to_PCM_orig(NeAACDecHandle hDecoder,
+void* output_to_PCM(NeAACDecHandle hDecoder,
real_t **input, void *sample_buffer, uint8_t channels,
uint16_t frame_len, uint8_t format)
{
@@ -554,56 +557,4 @@ static void* output_to_PCM_orig(NeAACDecHandle hDecoder,
return sample_buffer;
}
-void *output_to_PCM(NeAACDecHandle hDecoder,
- real_t **input, void *sample_buffer, uint8_t channels,
- uint16_t frame_len, uint8_t format)
-{
- int ch, i;
- int16_t *short_sample_buffer;
- real_t *ch0, *ch1, *ch2, *ch3, *ch4;
-
- if (format != FAAD_FMT_16BIT)
- return output_to_PCM_orig(hDecoder, input, sample_buffer, channels, frame_len, format);
-
- short_sample_buffer = (int16_t *)sample_buffer;
- ch0 = input[hDecoder->internal_channel[0]];
- ch1 = input[hDecoder->internal_channel[1]];
- ch2 = input[hDecoder->internal_channel[2]];
- ch3 = input[hDecoder->internal_channel[3]];
- ch4 = input[hDecoder->internal_channel[4]];
-
- if (hDecoder->downMatrix)
- {
- for (i = 0; i < frame_len; ++i)
- {
- int32_t tmp = (ch1[i] + ((ch0[i] + ch3[i]) >> 1) + ((ch0[i] + ch3[i]) >> 2) + (1 << (REAL_BITS))) >> (REAL_BITS + 1);
- if ((tmp + 0x8000) & ~0xffff)
- tmp = ~(tmp >> 31) - 0x8000;
- short_sample_buffer[0] = tmp;
- tmp = (ch2[i] + ((ch0[i] + ch4[i]) >> 1) + ((ch0[i] + ch4[i]) >> 2) + (1 << (REAL_BITS))) >> (REAL_BITS + 1);
- if ((tmp + 0x8000) & ~0xffff)
- tmp = ~(tmp >> 31) - 0x8000;
- short_sample_buffer[1] = tmp;
- short_sample_buffer += channels;
- }
- return sample_buffer;
- }
-
- /* Copy output to a standard PCM buffer */
- for (i = 0; i < frame_len; ++i)
- {
- for (ch = 0; ch < channels; ++ch)
- {
- int32_t tmp = input[hDecoder->internal_channel[ch]][i];
- tmp += (1 << (REAL_BITS - 1));
- tmp >>= REAL_BITS;
- if ((tmp + 0x8000) & ~0xffff)
- tmp = ~(tmp >> 31) - 0x8000;
- *(short_sample_buffer++) = tmp;
- }
- }
-
- return sample_buffer;
-}
-
#endif
diff --git a/contrib/libfaad/output.h b/contrib/libfaad/output.h
index 1b15dae58..0451d8b73 100644
--- a/contrib/libfaad/output.h
+++ b/contrib/libfaad/output.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: output.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: output.h,v 1.25 2007/11/01 12:33:32 menno Exp $
**/
#ifndef __OUTPUT_H__
diff --git a/contrib/libfaad/pns.c b/contrib/libfaad/pns.c
index 5266d8eef..248fd05ef 100644
--- a/contrib/libfaad/pns.c
+++ b/contrib/libfaad/pns.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: pns.c,v 1.8 2005/10/29 23:57:07 tmmm Exp $
+** $Id: pns.c,v 1.38 2007/11/01 12:33:32 menno Exp $
**/
#include "common.h"
@@ -33,7 +36,8 @@
/* static function declarations */
static void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t size,
- uint8_t sub);
+ uint8_t sub,
+ /* RNG states */ uint32_t *__r1, uint32_t *__r2);
#ifdef FIXED_POINT
@@ -68,7 +72,7 @@ real_t fp_sqrt(real_t value)
return root;
}
-static real_t pow2_table[] =
+static real_t const pow2_table[] =
{
COEF_CONST(1.0),
COEF_CONST(1.18920711500272),
@@ -83,7 +87,8 @@ static real_t pow2_table[] =
multiplication/accumulation per random value.
*/
static INLINE void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t size,
- uint8_t sub)
+ uint8_t sub,
+ /* RNG states */ uint32_t *__r1, uint32_t *__r2)
{
#ifndef FIXED_POINT
uint16_t i;
@@ -93,7 +98,7 @@ static INLINE void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t
for (i = 0; i < size; i++)
{
- real_t tmp = scale*(real_t)(int32_t)random_int();
+ real_t tmp = scale*(real_t)(int32_t)ne_rng(__r1, __r2);
spec[i] = tmp;
energy += tmp*tmp;
}
@@ -112,7 +117,7 @@ static INLINE void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t
for (i = 0; i < size; i++)
{
/* this can be replaced by a 16 bit random generator!!!! */
- real_t tmp = (int32_t)random_int();
+ real_t tmp = (int32_t)ne_rng(__r1, __r2);
if (tmp < 0)
tmp = -(tmp & ((1<<(REAL_BITS-1))-1));
else
@@ -152,7 +157,8 @@ static INLINE void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t
void pns_decode(ic_stream *ics_left, ic_stream *ics_right,
real_t *spec_left, real_t *spec_right, uint16_t frame_len,
- uint8_t channel_pair, uint8_t object_type)
+ uint8_t channel_pair, uint8_t object_type,
+ /* RNG states */ uint32_t *__r1, uint32_t *__r2)
{
uint8_t g, sfb, b;
uint16_t size, offs;
@@ -202,11 +208,11 @@ void pns_decode(ic_stream *ics_left, ic_stream *ics_right,
#endif
offs = ics_left->swb_offset[sfb];
- size = ics_left->swb_offset[sfb+1] - offs;
+ size = min(ics_left->swb_offset[sfb+1], ics_left->swb_offset_max) - offs;
/* Generate random vector */
gen_rand_vector(&spec_left[(group*nshort)+offs],
- ics_left->scale_factors[g][sfb], size, sub);
+ ics_left->scale_factors[g][sfb], size, sub, __r1, __r2);
}
/* From the spec:
@@ -233,7 +239,7 @@ void pns_decode(ic_stream *ics_left, ic_stream *ics_right,
uint16_t c;
offs = ics_right->swb_offset[sfb];
- size = ics_right->swb_offset[sfb+1] - offs;
+ size = min(ics_right->swb_offset[sfb+1], ics_right->swb_offset_max) - offs;
for (c = 0; c < size; c++)
{
@@ -250,11 +256,11 @@ void pns_decode(ic_stream *ics_left, ic_stream *ics_right,
#endif
offs = ics_right->swb_offset[sfb];
- size = ics_right->swb_offset[sfb+1] - offs;
+ size = min(ics_right->swb_offset[sfb+1], ics_right->swb_offset_max) - offs;
/* Generate random vector */
gen_rand_vector(&spec_right[(group*nshort)+offs],
- ics_right->scale_factors[g][sfb], size, sub);
+ ics_right->scale_factors[g][sfb], size, sub, __r1, __r2);
}
}
}
diff --git a/contrib/libfaad/pns.h b/contrib/libfaad/pns.h
index 2f246cc4f..38ced252d 100644
--- a/contrib/libfaad/pns.h
+++ b/contrib/libfaad/pns.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: pns.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: pns.h,v 1.27 2007/11/01 12:33:33 menno Exp $
**/
#ifndef __PNS_H__
@@ -38,7 +41,8 @@ extern "C" {
void pns_decode(ic_stream *ics_left, ic_stream *ics_right,
real_t *spec_left, real_t *spec_right, uint16_t frame_len,
- uint8_t channel_pair, uint8_t object_type);
+ uint8_t channel_pair, uint8_t object_type,
+ /* RNG states */ uint32_t *__r1, uint32_t *__r2);
static INLINE uint8_t is_noise(ic_stream *ics, uint8_t group, uint8_t sfb)
{
diff --git a/contrib/libfaad/ps_dec.c b/contrib/libfaad/ps_dec.c
index 3b957bfda..aebfe0a48 100644
--- a/contrib/libfaad/ps_dec.c
+++ b/contrib/libfaad/ps_dec.c
@@ -1,28 +1,31 @@
/*
-** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR and PS decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ps_dec.c,v 1.3 2006/09/26 17:55:59 dgp85 Exp $
+** $Id: ps_dec.c,v 1.14 2007/11/01 12:33:33 menno Exp $
**/
#include "common.h"
@@ -159,7 +162,7 @@ typedef struct
/* static function declarations */
static void ps_data_decode(ps_info *ps);
-static hyb_info *hybrid_init(void);
+static hyb_info *hybrid_init();
static void channel_filter2(hyb_info *hyb, uint8_t frame_len, const real_t *filter,
qmf_t *buffer, qmf_t **X_hybrid);
static void INLINE DCT3_4_unscaled(real_t *y, real_t *x);
@@ -175,7 +178,7 @@ static void delta_decode(uint8_t enable, int8_t *index, int8_t *index_prev,
int8_t min_index, int8_t max_index);
static void delta_modulo_decode(uint8_t enable, int8_t *index, int8_t *index_prev,
uint8_t dt_flag, uint8_t nr_par, uint8_t stride,
- int8_t log2modulo);
+ int8_t and_modulo);
static void map20indexto34(int8_t *index, uint8_t bins);
#ifdef PS_LOW_POWER
static void map34indexto20(int8_t *index, uint8_t bins);
@@ -189,7 +192,7 @@ static void ps_mix_phase(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64
/* */
-static hyb_info *hybrid_init(void)
+static hyb_info *hybrid_init()
{
uint8_t i;
@@ -230,16 +233,24 @@ static void hybrid_free(hyb_info *hyb)
{
uint8_t i;
- faad_free(hyb->work);
+ if (hyb->work)
+ faad_free(hyb->work);
for (i = 0; i < 5; i++)
- faad_free(hyb->buffer[i]);
- faad_free(hyb->buffer);
+ {
+ if (hyb->buffer[i])
+ faad_free(hyb->buffer[i]);
+ }
+ if (hyb->buffer)
+ faad_free(hyb->buffer);
for (i = 0; i < hyb->frame_len; i++)
- faad_free(hyb->temp[i]);
-
- faad_free(hyb->temp);
+ {
+ if (hyb->temp[i])
+ faad_free(hyb->temp[i]);
+ }
+ if (hyb->temp)
+ faad_free(hyb->temp);
}
/* real filter, size 2 */
@@ -666,7 +677,7 @@ static void delta_decode(uint8_t enable, int8_t *index, int8_t *index_prev,
/* in: log2 value of the modulo value to allow using AND instead of MOD */
static void delta_modulo_decode(uint8_t enable, int8_t *index, int8_t *index_prev,
uint8_t dt_flag, uint8_t nr_par, uint8_t stride,
- int8_t log2modulo)
+ int8_t and_modulo)
{
int8_t i;
@@ -676,19 +687,19 @@ static void delta_modulo_decode(uint8_t enable, int8_t *index, int8_t *index_pre
{
/* delta coded in frequency direction */
index[0] = 0 + index[0];
- index[0] &= log2modulo;
+ index[0] &= and_modulo;
for (i = 1; i < nr_par; i++)
{
index[i] = index[i-1] + index[i];
- index[i] &= log2modulo;
+ index[i] &= and_modulo;
}
} else {
/* delta coded in time direction */
for (i = 0; i < nr_par; i++)
{
index[i] = index_prev[i*stride] + index[i];
- index[i] &= log2modulo;
+ index[i] &= and_modulo;
}
}
} else {
@@ -833,11 +844,11 @@ static void ps_data_decode(ps_info *ps)
/* delta modulo decode ipd parameters */
delta_modulo_decode(ps->enable_ipdopd, ps->ipd_index[env], ipd_index_prev,
- ps->ipd_dt[env], ps->nr_ipdopd_par, 1, /*log2(8)*/ 3);
+ ps->ipd_dt[env], ps->nr_ipdopd_par, 1, 7);
/* delta modulo decode opd parameters */
delta_modulo_decode(ps->enable_ipdopd, ps->opd_index[env], opd_index_prev,
- ps->opd_dt[env], ps->nr_ipdopd_par, 1, /*log2(8)*/ 3);
+ ps->opd_dt[env], ps->nr_ipdopd_par, 1, 7);
}
/* handle error case */
@@ -906,8 +917,6 @@ static void ps_data_decode(ps_info *ps)
if (ps->border_position[ps->num_env] < 32 /* 30 for 960? */)
{
- ps->num_env++;
- ps->border_position[ps->num_env] = 32 /* 30 for 960? */;
for (bin = 0; bin < 34; bin++)
{
ps->iid_index[ps->num_env][bin] = ps->iid_index[ps->num_env-1][bin];
@@ -918,6 +927,8 @@ static void ps_data_decode(ps_info *ps)
ps->ipd_index[ps->num_env][bin] = ps->ipd_index[ps->num_env-1][bin];
ps->opd_index[ps->num_env][bin] = ps->opd_index[ps->num_env-1][bin];
}
+ ps->num_env++;
+ ps->border_position[ps->num_env] = 32 /* 30 for 960? */;
}
for (env = 1; env < ps->num_env; env++)
@@ -1410,6 +1421,26 @@ static const real_t ipdopd_sin_tab[] = {
FRAC_CONST(-0.000000000000000)
};
+static real_t magnitude_c(complex_t c)
+{
+#ifdef FIXED_POINT
+#define ps_abs(A) (((A) > 0) ? (A) : (-(A)))
+#define ALPHA FRAC_CONST(0.948059448969)
+#define BETA FRAC_CONST(0.392699081699)
+
+ real_t abs_inphase = ps_abs(RE(c));
+ real_t abs_quadrature = ps_abs(IM(c));
+
+ if (abs_inphase > abs_quadrature) {
+ return MUL_F(abs_inphase, ALPHA) + MUL_F(abs_quadrature, BETA);
+ } else {
+ return MUL_F(abs_quadrature, ALPHA) + MUL_F(abs_inphase, BETA);
+ }
+#else
+ return sqrt(RE(c)*RE(c) + IM(c)*IM(c));
+#endif
+}
+
static void ps_mix_phase(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64],
qmf_t X_hybrid_left[32][32], qmf_t X_hybrid_right[32][32])
{
@@ -1580,8 +1611,7 @@ static void ps_mix_phase(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64
if ((ps->enable_ipdopd) && (bk < nr_ipdopd_par))
{
int8_t i;
- real_t xxyy, ppqq;
- real_t yq, xp, xq, py, tmp;
+ real_t xy, pq, xypq;
/* ringbuffer index */
i = ps->phase_hist;
@@ -1614,7 +1644,7 @@ static void ps_mix_phase(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64
/* ringbuffer index */
if (i == 0)
- {
+ {
i = 2;
}
i--;
@@ -1644,53 +1674,54 @@ static void ps_mix_phase(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64
RE(phaseRight) = (float)cos(opd);
IM(phaseRight) = (float)sin(opd);
#else
+
// x = IM(tempLeft)
// y = RE(tempLeft)
// p = IM(tempRight)
// q = RE(tempRight)
- // cos(atan2(x,y)) = 1/sqrt(1 + (x*x)/(y*y))
- // sin(atan2(x,y)) = x/(y*sqrt(1 + (x*x)/(y*y)))
- // cos(atan2(x,y)-atan2(p,q)) = (y*q+x*p)/(y*q * sqrt(1 + (x*x)/(y*y)) * sqrt(1 + (p*p)/(q*q)));
- // sin(atan2(x,y)-atan2(p,q)) = (x*q-p*y)/(y*q * sqrt(1 + (x*x)/(y*y)) * sqrt(1 + (p*p)/(q*q)));
+ // cos(atan2(x,y)) = y/sqrt((x*x) + (y*y))
+ // sin(atan2(x,y)) = x/sqrt((x*x) + (y*y))
+ // cos(atan2(x,y)-atan2(p,q)) = (y*q + x*p) / ( sqrt((x*x) + (y*y)) * sqrt((p*p) + (q*q)) );
+ // sin(atan2(x,y)-atan2(p,q)) = (x*q - y*p) / ( sqrt((x*x) + (y*y)) * sqrt((p*p) + (q*q)) );
- /* (x*x)/(y*y) (REAL > 0) */
- xxyy = DIV_R(MUL_C(IM(tempLeft),IM(tempLeft)), MUL_C(RE(tempLeft),RE(tempLeft)));
- ppqq = DIV_R(MUL_C(IM(tempRight),IM(tempRight)), MUL_C(RE(tempRight),RE(tempRight)));
+ xy = magnitude_c(tempRight);
+ pq = magnitude_c(tempLeft);
- /* 1 + (x*x)/(y*y) (REAL > 1) */
- xxyy += REAL_CONST(1);
- ppqq += REAL_CONST(1);
-
- /* 1 / sqrt(1 + (x*x)/(y*y)) (FRAC <= 1) */
- xxyy = DIV_R(FRAC_CONST(1), ps_sqrt(xxyy));
- ppqq = DIV_R(FRAC_CONST(1), ps_sqrt(ppqq));
+ if (xy != 0)
+ {
+ RE(phaseLeft) = DIV_R(RE(tempRight), xy);
+ IM(phaseLeft) = DIV_R(IM(tempRight), xy);
+ } else {
+ RE(phaseLeft) = 0;
+ IM(phaseLeft) = 0;
+ }
- /* COEF */
- yq = MUL_C(RE(tempLeft), RE(tempRight));
- xp = MUL_C(IM(tempLeft), IM(tempRight));
- xq = MUL_C(IM(tempLeft), RE(tempRight));
- py = MUL_C(RE(tempLeft), IM(tempRight));
+ xypq = MUL_R(xy, pq);
- RE(phaseLeft) = xxyy;
- IM(phaseLeft) = MUL_R(xxyy, (DIV_R(IM(tempLeft), RE(tempLeft))));
+ if (xypq != 0)
+ {
+ real_t tmp1 = MUL_R(RE(tempRight), RE(tempLeft)) + MUL_R(IM(tempRight), IM(tempLeft));
+ real_t tmp2 = MUL_R(IM(tempRight), RE(tempLeft)) - MUL_R(RE(tempRight), IM(tempLeft));
- tmp = DIV_C(MUL_F(xxyy, ppqq), yq);
+ RE(phaseRight) = DIV_R(tmp1, xypq);
+ IM(phaseRight) = DIV_R(tmp2, xypq);
+ } else {
+ RE(phaseRight) = 0;
+ IM(phaseRight) = 0;
+ }
- /* MUL_C(FRAC,COEF) = FRAC */
- RE(phaseRight) = MUL_C(tmp, (yq+xp));
- IM(phaseRight) = MUL_C(tmp, (xq-py));
#endif
- /* MUL_F(COEF, FRAC) = COEF */
- IM(h11) = MUL_F(RE(h11), IM(phaseLeft));
- IM(h12) = MUL_F(RE(h12), IM(phaseRight));
- IM(h21) = MUL_F(RE(h21), IM(phaseLeft));
- IM(h22) = MUL_F(RE(h22), IM(phaseRight));
+ /* MUL_F(COEF, REAL) = COEF */
+ IM(h11) = MUL_R(RE(h11), IM(phaseLeft));
+ IM(h12) = MUL_R(RE(h12), IM(phaseRight));
+ IM(h21) = MUL_R(RE(h21), IM(phaseLeft));
+ IM(h22) = MUL_R(RE(h22), IM(phaseRight));
- RE(h11) = MUL_F(RE(h11), RE(phaseLeft));
- RE(h12) = MUL_F(RE(h12), RE(phaseRight));
- RE(h21) = MUL_F(RE(h21), RE(phaseLeft));
- RE(h22) = MUL_F(RE(h22), RE(phaseRight));
+ RE(h11) = MUL_R(RE(h11), RE(phaseLeft));
+ RE(h12) = MUL_R(RE(h12), RE(phaseRight));
+ RE(h21) = MUL_R(RE(h21), RE(phaseLeft));
+ RE(h22) = MUL_R(RE(h22), RE(phaseRight));
}
/* length of the envelope n_e+1 - n_e (in time samples) */
@@ -1927,8 +1958,8 @@ ps_info *ps_init(uint8_t sr_index)
/* main Parametric Stereo decoding function */
uint8_t ps_decode(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64])
{
- qmf_t X_hybrid_left[32][32] = {{{0}}};
- qmf_t X_hybrid_right[32][32] = {{{0}}};
+ qmf_t X_hybrid_left[32][32] = {{0}};
+ qmf_t X_hybrid_right[32][32] = {{0}};
/* delta decoding of the bitstream data */
ps_data_decode(ps);
diff --git a/contrib/libfaad/ps_dec.h b/contrib/libfaad/ps_dec.h
index 978161fff..d96561404 100644
--- a/contrib/libfaad/ps_dec.h
+++ b/contrib/libfaad/ps_dec.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ps_dec.h,v 1.1 2005/10/30 00:50:19 tmmm Exp $
+** $Id: ps_dec.h,v 1.12 2007/11/01 12:33:33 menno Exp $
**/
#ifndef __PS_DEC_H__
diff --git a/contrib/libfaad/ps_syntax.c b/contrib/libfaad/ps_syntax.c
index fc2f9e7f2..50253d459 100644
--- a/contrib/libfaad/ps_syntax.c
+++ b/contrib/libfaad/ps_syntax.c
@@ -1,6 +1,6 @@
/*
-** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR and PS decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ps_syntax.c,v 1.1 2005/10/30 00:50:19 tmmm Exp $
+** $Id: ps_syntax.c,v 1.11 2007/11/01 12:33:33 menno Exp $
**/
#include "common.h"
@@ -308,9 +311,9 @@ static const int8_t t_huff_opd[][2] = {
{ 2, 3 }, /* index 1: 2 bits: 0x */
{ 4, 5 }, /* index 2: 3 bits: 00x */
{ /*1*/ -30, /*7*/ -24 }, /* index 3: 3 bits: 01x */
- { /*5*/ -26, 6 }, /* index 4: 4 bits: 000x */
- { /*2*/ -29, /*6*/ -25 }, /* index 5: 4 bits: 001x */
- { /*4*/ -27, /*3*/ -28 } /* index 6: 5 bits: 0001x */
+ { /*5*/ -26, /*2*/ -29 }, /* index 4: 4 bits: 000x */
+ { /*6*/ -25, 6 }, /* index 5: 4 bits: 001x */
+ { /*4*/ -27, /*3*/ -28 } /* index 6: 5 bits: 0011x */
};
/* static function declarations */
@@ -380,7 +383,10 @@ uint16_t ps_data(ps_info *ps, bitfile *ld, uint8_t *header)
/* we are here, but no header has been read yet */
if (ps->header_read == 0)
+ {
+ ps->ps_data_available = 0;
return 1;
+ }
ps->frame_class = (uint8_t)faad_get1bit(ld
DEBUGVAR(1,1006,"ps_data(): frame_class"));
@@ -394,7 +400,7 @@ uint16_t ps_data(ps_info *ps, bitfile *ld, uint8_t *header)
for (n = 1; n < ps->num_env+1; n++)
{
ps->border_position[n] = (uint8_t)faad_getbits(ld, 5
- DEBUGVAR(1,1008,"ps_data(): border_position"));
+ DEBUGVAR(1,1008,"ps_data(): border_position")) + 1;
}
}
diff --git a/contrib/libfaad/ps_tables.h b/contrib/libfaad/ps_tables.h
index c71489617..f3370be9d 100644
--- a/contrib/libfaad/ps_tables.h
+++ b/contrib/libfaad/ps_tables.h
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ps_tables.h,v 1.1 2005/10/30 00:50:19 tmmm Exp $
+** $Id: ps_tables.h,v 1.8 2007/11/01 12:33:33 menno Exp $
**/
#ifndef __PS_TABLES_H__
@@ -541,7 +544,7 @@ static const real_t sf_iid_fine[] = {
};
#ifdef __cplusplus
-
+}
#endif
#endif
diff --git a/contrib/libfaad/pulse.c b/contrib/libfaad/pulse.c
index 9e0a705e6..3dd973abf 100644
--- a/contrib/libfaad/pulse.c
+++ b/contrib/libfaad/pulse.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,12 +19,14 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: pulse.c,v 1.8 2005/10/29 23:57:07 tmmm Exp $
+** $Id: pulse.c,v 1.21 2007/11/01 12:33:34 menno Exp $
**/
-
#include "common.h"
#include "structs.h"
@@ -37,7 +39,7 @@ uint8_t pulse_decode(ic_stream *ics, int16_t *spec_data, uint16_t framelen)
uint16_t k;
pulse_info *pul = &(ics->pul);
- k = ics->swb_offset[pul->pulse_start_sfb];
+ k = min(ics->swb_offset[pul->pulse_start_sfb], ics->swb_offset_max);
for (i = 0; i <= pul->number_pulse; i++)
{
diff --git a/contrib/libfaad/pulse.h b/contrib/libfaad/pulse.h
index a057c0d3b..f7676cd89 100644
--- a/contrib/libfaad/pulse.h
+++ b/contrib/libfaad/pulse.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: pulse.h,v 1.8 2005/10/29 23:57:07 tmmm Exp $
+** $Id: pulse.h,v 1.20 2007/11/01 12:33:34 menno Exp $
**/
#ifndef __PULSE_H__
diff --git a/contrib/libfaad/rvlc.c b/contrib/libfaad/rvlc.c
index bad49a0c6..73619c6d1 100644
--- a/contrib/libfaad/rvlc.c
+++ b/contrib/libfaad/rvlc.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: rvlc.c,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: rvlc.c,v 1.21 2007/11/01 12:33:34 menno Exp $
**/
/* RVLC scalefactor decoding
diff --git a/contrib/libfaad/rvlc.h b/contrib/libfaad/rvlc.h
index 867468580..56f630fa4 100644
--- a/contrib/libfaad/rvlc.h
+++ b/contrib/libfaad/rvlc.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: rvlc.h,v 1.6 2005/10/29 23:57:07 tmmm Exp $
+** $Id: rvlc.h,v 1.17 2007/11/01 12:33:34 menno Exp $
**/
#ifndef __RVLC_SCF_H__
diff --git a/contrib/libfaad/sbr_dct.c b/contrib/libfaad/sbr_dct.c
index ba8bbaf9b..16e7128ea 100644
--- a/contrib/libfaad/sbr_dct.c
+++ b/contrib/libfaad/sbr_dct.c
@@ -1,30 +1,38 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_dct.c,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_dct.c,v 1.20 2007/11/01 12:33:34 menno Exp $
**/
+
+/* Most of the DCT/DST codes here are generated using Spiral which is GPL
+ * For more info see: http://www.spiral.net/
+ */
+
#include "common.h"
#ifdef SBR_DEC
@@ -479,6 +487,413 @@ void DCT4_32(real_t *y, real_t *x)
y[1] = f397 - f396;
}
+void DST4_32(real_t *y, real_t *x)
+{
+ real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9;
+ real_t f10, f11, f12, f13, f14, f15, f16, f17, f18, f19;
+ real_t f20, f21, f22, f23, f24, f25, f26, f27, f28, f29;
+ real_t f30, f31, f32, f33, f34, f35, f36, f37, f38, f39;
+ real_t f40, f41, f42, f43, f44, f45, f46, f47, f48, f49;
+ real_t f50, f51, f52, f53, f54, f55, f56, f57, f58, f59;
+ real_t f60, f61, f62, f63, f64, f65, f66, f67, f68, f69;
+ real_t f70, f71, f72, f73, f74, f75, f76, f77, f78, f79;
+ real_t f80, f81, f82, f83, f84, f85, f86, f87, f88, f89;
+ real_t f90, f91, f92, f93, f94, f95, f96, f97, f98, f99;
+ real_t f100, f101, f102, f103, f104, f105, f106, f107, f108, f109;
+ real_t f110, f111, f112, f113, f114, f115, f116, f117, f118, f119;
+ real_t f120, f121, f122, f123, f124, f125, f126, f127, f128, f129;
+ real_t f130, f131, f132, f133, f134, f135, f136, f137, f138, f139;
+ real_t f140, f141, f142, f143, f144, f145, f146, f147, f148, f149;
+ real_t f150, f151, f152, f153, f154, f155, f156, f157, f158, f159;
+ real_t f160, f161, f162, f163, f164, f165, f166, f167, f168, f169;
+ real_t f170, f171, f172, f173, f174, f175, f176, f177, f178, f179;
+ real_t f180, f181, f182, f183, f184, f185, f186, f187, f188, f189;
+ real_t f190, f191, f192, f193, f194, f195, f196, f197, f198, f199;
+ real_t f200, f201, f202, f203, f204, f205, f206, f207, f208, f209;
+ real_t f210, f211, f212, f213, f214, f215, f216, f217, f218, f219;
+ real_t f220, f221, f222, f223, f224, f225, f226, f227, f228, f229;
+ real_t f230, f231, f232, f233, f234, f235, f236, f237, f238, f239;
+ real_t f240, f241, f242, f243, f244, f245, f246, f247, f248, f249;
+ real_t f250, f251, f252, f253, f254, f255, f256, f257, f258, f259;
+ real_t f260, f261, f262, f263, f264, f265, f266, f267, f268, f269;
+ real_t f270, f271, f272, f273, f274, f275, f276, f277, f278, f279;
+ real_t f280, f281, f282, f283, f284, f285, f286, f287, f288, f289;
+ real_t f290, f291, f292, f293, f294, f295, f296, f297, f298, f299;
+ real_t f300, f301, f302, f303, f304, f305, f306, f307, f308, f309;
+ real_t f310, f311, f312, f313, f314, f315, f316, f317, f318, f319;
+ real_t f320, f321, f322, f323, f324, f325, f326, f327, f328, f329;
+ real_t f330, f331, f332, f333, f334, f335;
+
+ f0 = x[0] - x[1];
+ f1 = x[2] - x[1];
+ f2 = x[2] - x[3];
+ f3 = x[4] - x[3];
+ f4 = x[4] - x[5];
+ f5 = x[6] - x[5];
+ f6 = x[6] - x[7];
+ f7 = x[8] - x[7];
+ f8 = x[8] - x[9];
+ f9 = x[10] - x[9];
+ f10 = x[10] - x[11];
+ f11 = x[12] - x[11];
+ f12 = x[12] - x[13];
+ f13 = x[14] - x[13];
+ f14 = x[14] - x[15];
+ f15 = x[16] - x[15];
+ f16 = x[16] - x[17];
+ f17 = x[18] - x[17];
+ f18 = x[18] - x[19];
+ f19 = x[20] - x[19];
+ f20 = x[20] - x[21];
+ f21 = x[22] - x[21];
+ f22 = x[22] - x[23];
+ f23 = x[24] - x[23];
+ f24 = x[24] - x[25];
+ f25 = x[26] - x[25];
+ f26 = x[26] - x[27];
+ f27 = x[28] - x[27];
+ f28 = x[28] - x[29];
+ f29 = x[30] - x[29];
+ f30 = x[30] - x[31];
+ f31 = MUL_F(FRAC_CONST(0.7071067811865476), f15);
+ f32 = x[0] - f31;
+ f33 = x[0] + f31;
+ f34 = f7 + f23;
+ f35 = MUL_C(COEF_CONST(1.3065629648763766), f7);
+ f36 = MUL_F(FRAC_CONST(-0.9238795325112866), f34);
+ f37 = MUL_F(FRAC_CONST(-0.5411961001461967), f23);
+ f38 = f35 + f36;
+ f39 = f37 - f36;
+ f40 = f33 - f39;
+ f41 = f33 + f39;
+ f42 = f32 - f38;
+ f43 = f32 + f38;
+ f44 = f11 - f19;
+ f45 = f11 + f19;
+ f46 = MUL_F(FRAC_CONST(0.7071067811865476), f45);
+ f47 = f3 - f46;
+ f48 = f3 + f46;
+ f49 = MUL_F(FRAC_CONST(0.7071067811865476), f44);
+ f50 = f49 - f27;
+ f51 = f49 + f27;
+ f52 = f51 + f48;
+ f53 = MUL_F(FRAC_CONST(-0.7856949583871021), f51);
+ f54 = MUL_F(FRAC_CONST(0.9807852804032304), f52);
+ f55 = MUL_C(COEF_CONST(1.1758756024193588), f48);
+ f56 = f53 + f54;
+ f57 = f55 - f54;
+ f58 = f50 + f47;
+ f59 = MUL_F(FRAC_CONST(-0.2758993792829430), f50);
+ f60 = MUL_F(FRAC_CONST(0.8314696123025452), f58);
+ f61 = MUL_C(COEF_CONST(1.3870398453221475), f47);
+ f62 = f59 + f60;
+ f63 = f61 - f60;
+ f64 = f41 - f56;
+ f65 = f41 + f56;
+ f66 = f43 - f62;
+ f67 = f43 + f62;
+ f68 = f42 - f63;
+ f69 = f42 + f63;
+ f70 = f40 - f57;
+ f71 = f40 + f57;
+ f72 = f5 - f9;
+ f73 = f5 + f9;
+ f74 = f13 - f17;
+ f75 = f13 + f17;
+ f76 = f21 - f25;
+ f77 = f21 + f25;
+ f78 = MUL_F(FRAC_CONST(0.7071067811865476), f75);
+ f79 = f1 - f78;
+ f80 = f1 + f78;
+ f81 = f73 + f77;
+ f82 = MUL_C(COEF_CONST(1.3065629648763766), f73);
+ f83 = MUL_F(FRAC_CONST(-0.9238795325112866), f81);
+ f84 = MUL_F(FRAC_CONST(-0.5411961001461967), f77);
+ f85 = f82 + f83;
+ f86 = f84 - f83;
+ f87 = f80 - f86;
+ f88 = f80 + f86;
+ f89 = f79 - f85;
+ f90 = f79 + f85;
+ f91 = MUL_F(FRAC_CONST(0.7071067811865476), f74);
+ f92 = f29 - f91;
+ f93 = f29 + f91;
+ f94 = f76 + f72;
+ f95 = MUL_C(COEF_CONST(1.3065629648763766), f76);
+ f96 = MUL_F(FRAC_CONST(-0.9238795325112866), f94);
+ f97 = MUL_F(FRAC_CONST(-0.5411961001461967), f72);
+ f98 = f95 + f96;
+ f99 = f97 - f96;
+ f100 = f93 - f99;
+ f101 = f93 + f99;
+ f102 = f92 - f98;
+ f103 = f92 + f98;
+ f104 = f101 + f88;
+ f105 = MUL_F(FRAC_CONST(-0.8971675863426361), f101);
+ f106 = MUL_F(FRAC_CONST(0.9951847266721968), f104);
+ f107 = MUL_C(COEF_CONST(1.0932018670017576), f88);
+ f108 = f105 + f106;
+ f109 = f107 - f106;
+ f110 = f90 - f103;
+ f111 = MUL_F(FRAC_CONST(-0.6666556584777466), f103);
+ f112 = MUL_F(FRAC_CONST(0.9569403357322089), f110);
+ f113 = MUL_C(COEF_CONST(1.2472250129866713), f90);
+ f114 = f112 - f111;
+ f115 = f113 - f112;
+ f116 = f102 + f89;
+ f117 = MUL_F(FRAC_CONST(-0.4105245275223571), f102);
+ f118 = MUL_F(FRAC_CONST(0.8819212643483549), f116);
+ f119 = MUL_C(COEF_CONST(1.3533180011743529), f89);
+ f120 = f117 + f118;
+ f121 = f119 - f118;
+ f122 = f87 - f100;
+ f123 = MUL_F(FRAC_CONST(-0.1386171691990915), f100);
+ f124 = MUL_F(FRAC_CONST(0.7730104533627370), f122);
+ f125 = MUL_C(COEF_CONST(1.4074037375263826), f87);
+ f126 = f124 - f123;
+ f127 = f125 - f124;
+ f128 = f65 - f108;
+ f129 = f65 + f108;
+ f130 = f67 - f114;
+ f131 = f67 + f114;
+ f132 = f69 - f120;
+ f133 = f69 + f120;
+ f134 = f71 - f126;
+ f135 = f71 + f126;
+ f136 = f70 - f127;
+ f137 = f70 + f127;
+ f138 = f68 - f121;
+ f139 = f68 + f121;
+ f140 = f66 - f115;
+ f141 = f66 + f115;
+ f142 = f64 - f109;
+ f143 = f64 + f109;
+ f144 = f0 + f30;
+ f145 = MUL_C(COEF_CONST(1.0478631305325901), f0);
+ f146 = MUL_F(FRAC_CONST(-0.9987954562051724), f144);
+ f147 = MUL_F(FRAC_CONST(-0.9497277818777548), f30);
+ f148 = f145 + f146;
+ f149 = f147 - f146;
+ f150 = f4 + f26;
+ f151 = MUL_F(FRAC_CONST(1.2130114330978077), f4);
+ f152 = MUL_F(FRAC_CONST(-0.9700312531945440), f150);
+ f153 = MUL_F(FRAC_CONST(-0.7270510732912803), f26);
+ f154 = f151 + f152;
+ f155 = f153 - f152;
+ f156 = f8 + f22;
+ f157 = MUL_C(COEF_CONST(1.3315443865537255), f8);
+ f158 = MUL_F(FRAC_CONST(-0.9039892931234433), f156);
+ f159 = MUL_F(FRAC_CONST(-0.4764341996931612), f22);
+ f160 = f157 + f158;
+ f161 = f159 - f158;
+ f162 = f12 + f18;
+ f163 = MUL_C(COEF_CONST(1.3989068359730781), f12);
+ f164 = MUL_F(FRAC_CONST(-0.8032075314806453), f162);
+ f165 = MUL_F(FRAC_CONST(-0.2075082269882124), f18);
+ f166 = f163 + f164;
+ f167 = f165 - f164;
+ f168 = f16 + f14;
+ f169 = MUL_C(COEF_CONST(1.4125100802019777), f16);
+ f170 = MUL_F(FRAC_CONST(-0.6715589548470187), f168);
+ f171 = MUL_F(FRAC_CONST(0.0693921705079402), f14);
+ f172 = f169 + f170;
+ f173 = f171 - f170;
+ f174 = f20 + f10;
+ f175 = MUL_C(COEF_CONST(1.3718313541934939), f20);
+ f176 = MUL_F(FRAC_CONST(-0.5141027441932219), f174);
+ f177 = MUL_F(FRAC_CONST(0.3436258658070501), f10);
+ f178 = f175 + f176;
+ f179 = f177 - f176;
+ f180 = f24 + f6;
+ f181 = MUL_C(COEF_CONST(1.2784339185752409), f24);
+ f182 = MUL_F(FRAC_CONST(-0.3368898533922200), f180);
+ f183 = MUL_F(FRAC_CONST(0.6046542117908008), f6);
+ f184 = f181 + f182;
+ f185 = f183 - f182;
+ f186 = f28 + f2;
+ f187 = MUL_C(COEF_CONST(1.1359069844201433), f28);
+ f188 = MUL_F(FRAC_CONST(-0.1467304744553624), f186);
+ f189 = MUL_F(FRAC_CONST(0.8424460355094185), f2);
+ f190 = f187 + f188;
+ f191 = f189 - f188;
+ f192 = f149 - f173;
+ f193 = f149 + f173;
+ f194 = f148 - f172;
+ f195 = f148 + f172;
+ f196 = f155 - f179;
+ f197 = f155 + f179;
+ f198 = f154 - f178;
+ f199 = f154 + f178;
+ f200 = f161 - f185;
+ f201 = f161 + f185;
+ f202 = f160 - f184;
+ f203 = f160 + f184;
+ f204 = f167 - f191;
+ f205 = f167 + f191;
+ f206 = f166 - f190;
+ f207 = f166 + f190;
+ f208 = f192 + f194;
+ f209 = MUL_C(COEF_CONST(1.1758756024193588), f192);
+ f210 = MUL_F(FRAC_CONST(-0.9807852804032304), f208);
+ f211 = MUL_F(FRAC_CONST(-0.7856949583871021), f194);
+ f212 = f209 + f210;
+ f213 = f211 - f210;
+ f214 = f196 + f198;
+ f215 = MUL_C(COEF_CONST(1.3870398453221475), f196);
+ f216 = MUL_F(FRAC_CONST(-0.5555702330196022), f214);
+ f217 = MUL_F(FRAC_CONST(0.2758993792829431), f198);
+ f218 = f215 + f216;
+ f219 = f217 - f216;
+ f220 = f200 + f202;
+ f221 = MUL_F(FRAC_CONST(0.7856949583871022), f200);
+ f222 = MUL_F(FRAC_CONST(0.1950903220161283), f220);
+ f223 = MUL_C(COEF_CONST(1.1758756024193586), f202);
+ f224 = f221 + f222;
+ f225 = f223 - f222;
+ f226 = f204 + f206;
+ f227 = MUL_F(FRAC_CONST(-0.2758993792829430), f204);
+ f228 = MUL_F(FRAC_CONST(0.8314696123025452), f226);
+ f229 = MUL_C(COEF_CONST(1.3870398453221475), f206);
+ f230 = f227 + f228;
+ f231 = f229 - f228;
+ f232 = f193 - f201;
+ f233 = f193 + f201;
+ f234 = f195 - f203;
+ f235 = f195 + f203;
+ f236 = f197 - f205;
+ f237 = f197 + f205;
+ f238 = f199 - f207;
+ f239 = f199 + f207;
+ f240 = f213 - f225;
+ f241 = f213 + f225;
+ f242 = f212 - f224;
+ f243 = f212 + f224;
+ f244 = f219 - f231;
+ f245 = f219 + f231;
+ f246 = f218 - f230;
+ f247 = f218 + f230;
+ f248 = f232 + f234;
+ f249 = MUL_C(COEF_CONST(1.3065629648763766), f232);
+ f250 = MUL_F(FRAC_CONST(-0.9238795325112866), f248);
+ f251 = MUL_F(FRAC_CONST(-0.5411961001461967), f234);
+ f252 = f249 + f250;
+ f253 = f251 - f250;
+ f254 = f236 + f238;
+ f255 = MUL_F(FRAC_CONST(0.5411961001461969), f236);
+ f256 = MUL_F(FRAC_CONST(0.3826834323650898), f254);
+ f257 = MUL_C(COEF_CONST(1.3065629648763766), f238);
+ f258 = f255 + f256;
+ f259 = f257 - f256;
+ f260 = f240 + f242;
+ f261 = MUL_C(COEF_CONST(1.3065629648763766), f240);
+ f262 = MUL_F(FRAC_CONST(-0.9238795325112866), f260);
+ f263 = MUL_F(FRAC_CONST(-0.5411961001461967), f242);
+ f264 = f261 + f262;
+ f265 = f263 - f262;
+ f266 = f244 + f246;
+ f267 = MUL_F(FRAC_CONST(0.5411961001461969), f244);
+ f268 = MUL_F(FRAC_CONST(0.3826834323650898), f266);
+ f269 = MUL_C(COEF_CONST(1.3065629648763766), f246);
+ f270 = f267 + f268;
+ f271 = f269 - f268;
+ f272 = f233 - f237;
+ f273 = f233 + f237;
+ f274 = f235 - f239;
+ f275 = f235 + f239;
+ f276 = f253 - f259;
+ f277 = f253 + f259;
+ f278 = f252 - f258;
+ f279 = f252 + f258;
+ f280 = f241 - f245;
+ f281 = f241 + f245;
+ f282 = f243 - f247;
+ f283 = f243 + f247;
+ f284 = f265 - f271;
+ f285 = f265 + f271;
+ f286 = f264 - f270;
+ f287 = f264 + f270;
+ f288 = f272 - f274;
+ f289 = f272 + f274;
+ f290 = MUL_F(FRAC_CONST(0.7071067811865474), f288);
+ f291 = MUL_F(FRAC_CONST(0.7071067811865474), f289);
+ f292 = f276 - f278;
+ f293 = f276 + f278;
+ f294 = MUL_F(FRAC_CONST(0.7071067811865474), f292);
+ f295 = MUL_F(FRAC_CONST(0.7071067811865474), f293);
+ f296 = f280 - f282;
+ f297 = f280 + f282;
+ f298 = MUL_F(FRAC_CONST(0.7071067811865474), f296);
+ f299 = MUL_F(FRAC_CONST(0.7071067811865474), f297);
+ f300 = f284 - f286;
+ f301 = f284 + f286;
+ f302 = MUL_F(FRAC_CONST(0.7071067811865474), f300);
+ f303 = MUL_F(FRAC_CONST(0.7071067811865474), f301);
+ f304 = f129 - f273;
+ f305 = f129 + f273;
+ f306 = f131 - f281;
+ f307 = f131 + f281;
+ f308 = f133 - f285;
+ f309 = f133 + f285;
+ f310 = f135 - f277;
+ f311 = f135 + f277;
+ f312 = f137 - f295;
+ f313 = f137 + f295;
+ f314 = f139 - f303;
+ f315 = f139 + f303;
+ f316 = f141 - f299;
+ f317 = f141 + f299;
+ f318 = f143 - f291;
+ f319 = f143 + f291;
+ f320 = f142 - f290;
+ f321 = f142 + f290;
+ f322 = f140 - f298;
+ f323 = f140 + f298;
+ f324 = f138 - f302;
+ f325 = f138 + f302;
+ f326 = f136 - f294;
+ f327 = f136 + f294;
+ f328 = f134 - f279;
+ f329 = f134 + f279;
+ f330 = f132 - f287;
+ f331 = f132 + f287;
+ f332 = f130 - f283;
+ f333 = f130 + f283;
+ f334 = f128 - f275;
+ f335 = f128 + f275;
+ y[31] = MUL_F(FRAC_CONST(0.5001506360206510), f305);
+ y[30] = MUL_F(FRAC_CONST(0.5013584524464084), f307);
+ y[29] = MUL_F(FRAC_CONST(0.5037887256810443), f309);
+ y[28] = MUL_F(FRAC_CONST(0.5074711720725553), f311);
+ y[27] = MUL_F(FRAC_CONST(0.5124514794082247), f313);
+ y[26] = MUL_F(FRAC_CONST(0.5187927131053328), f315);
+ y[25] = MUL_F(FRAC_CONST(0.5265773151542700), f317);
+ y[24] = MUL_F(FRAC_CONST(0.5359098169079920), f319);
+ y[23] = MUL_F(FRAC_CONST(0.5469204379855088), f321);
+ y[22] = MUL_F(FRAC_CONST(0.5597698129470802), f323);
+ y[21] = MUL_F(FRAC_CONST(0.5746551840326600), f325);
+ y[20] = MUL_F(FRAC_CONST(0.5918185358574165), f327);
+ y[19] = MUL_F(FRAC_CONST(0.6115573478825099), f329);
+ y[18] = MUL_F(FRAC_CONST(0.6342389366884031), f331);
+ y[17] = MUL_F(FRAC_CONST(0.6603198078137061), f333);
+ y[16] = MUL_F(FRAC_CONST(0.6903721282002123), f335);
+ y[15] = MUL_F(FRAC_CONST(0.7251205223771985), f334);
+ y[14] = MUL_F(FRAC_CONST(0.7654941649730891), f332);
+ y[13] = MUL_F(FRAC_CONST(0.8127020908144905), f330);
+ y[12] = MUL_F(FRAC_CONST(0.8683447152233481), f328);
+ y[11] = MUL_F(FRAC_CONST(0.9345835970364075), f326);
+ y[10] = MUL_C(COEF_CONST(1.0144082649970547), f324);
+ y[9] = MUL_C(COEF_CONST(1.1120716205797176), f322);
+ y[8] = MUL_C(COEF_CONST(1.2338327379765710), f320);
+ y[7] = MUL_C(COEF_CONST(1.3892939586328277), f318);
+ y[6] = MUL_C(COEF_CONST(1.5939722833856311), f316);
+ y[5] = MUL_C(COEF_CONST(1.8746759800084078), f314);
+ y[4] = MUL_C(COEF_CONST(2.2820500680051619), f312);
+ y[3] = MUL_C(COEF_CONST(2.9246284281582162), f310);
+ y[2] = MUL_C(COEF_CONST(4.0846110781292477), f308);
+ y[1] = MUL_C(COEF_CONST(6.7967507116736332), f306);
+ y[0] = MUL_R(REAL_CONST(20.3738781672314530), f304);
+}
+
#ifdef SBR_LOW_POWER
void DCT2_16_unscaled(real_t *y, real_t *x)
@@ -1811,7 +2226,7 @@ void dct4_kernel(real_t * in_real, real_t * in_imag, real_t * out_real, real_t *
{
// Tables with bit reverse values for 5 bits, bit reverse of i at i-th position
const uint8_t bit_rev_tab[32] = { 0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31 };
- uint16_t i, i_rev;
+ uint32_t i, i_rev;
/* Step 2: modulate */
// 3*32=96 multiplications
@@ -1859,413 +2274,6 @@ void dct4_kernel(real_t * in_real, real_t * in_imag, real_t * out_real, real_t *
}
-void DST4_32(real_t *y, real_t *x)
-{
- real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9;
- real_t f10, f11, f12, f13, f14, f15, f16, f17, f18, f19;
- real_t f20, f21, f22, f23, f24, f25, f26, f27, f28, f29;
- real_t f30, f31, f32, f33, f34, f35, f36, f37, f38, f39;
- real_t f40, f41, f42, f43, f44, f45, f46, f47, f48, f49;
- real_t f50, f51, f52, f53, f54, f55, f56, f57, f58, f59;
- real_t f60, f61, f62, f63, f64, f65, f66, f67, f68, f69;
- real_t f70, f71, f72, f73, f74, f75, f76, f77, f78, f79;
- real_t f80, f81, f82, f83, f84, f85, f86, f87, f88, f89;
- real_t f90, f91, f92, f93, f94, f95, f96, f97, f98, f99;
- real_t f100, f101, f102, f103, f104, f105, f106, f107, f108, f109;
- real_t f110, f111, f112, f113, f114, f115, f116, f117, f118, f119;
- real_t f120, f121, f122, f123, f124, f125, f126, f127, f128, f129;
- real_t f130, f131, f132, f133, f134, f135, f136, f137, f138, f139;
- real_t f140, f141, f142, f143, f144, f145, f146, f147, f148, f149;
- real_t f150, f151, f152, f153, f154, f155, f156, f157, f158, f159;
- real_t f160, f161, f162, f163, f164, f165, f166, f167, f168, f169;
- real_t f170, f171, f172, f173, f174, f175, f176, f177, f178, f179;
- real_t f180, f181, f182, f183, f184, f185, f186, f187, f188, f189;
- real_t f190, f191, f192, f193, f194, f195, f196, f197, f198, f199;
- real_t f200, f201, f202, f203, f204, f205, f206, f207, f208, f209;
- real_t f210, f211, f212, f213, f214, f215, f216, f217, f218, f219;
- real_t f220, f221, f222, f223, f224, f225, f226, f227, f228, f229;
- real_t f230, f231, f232, f233, f234, f235, f236, f237, f238, f239;
- real_t f240, f241, f242, f243, f244, f245, f246, f247, f248, f249;
- real_t f250, f251, f252, f253, f254, f255, f256, f257, f258, f259;
- real_t f260, f261, f262, f263, f264, f265, f266, f267, f268, f269;
- real_t f270, f271, f272, f273, f274, f275, f276, f277, f278, f279;
- real_t f280, f281, f282, f283, f284, f285, f286, f287, f288, f289;
- real_t f290, f291, f292, f293, f294, f295, f296, f297, f298, f299;
- real_t f300, f301, f302, f303, f304, f305, f306, f307, f308, f309;
- real_t f310, f311, f312, f313, f314, f315, f316, f317, f318, f319;
- real_t f320, f321, f322, f323, f324, f325, f326, f327, f328, f329;
- real_t f330, f331, f332, f333, f334, f335;
-
- f0 = x[0] - x[1];
- f1 = x[2] - x[1];
- f2 = x[2] - x[3];
- f3 = x[4] - x[3];
- f4 = x[4] - x[5];
- f5 = x[6] - x[5];
- f6 = x[6] - x[7];
- f7 = x[8] - x[7];
- f8 = x[8] - x[9];
- f9 = x[10] - x[9];
- f10 = x[10] - x[11];
- f11 = x[12] - x[11];
- f12 = x[12] - x[13];
- f13 = x[14] - x[13];
- f14 = x[14] - x[15];
- f15 = x[16] - x[15];
- f16 = x[16] - x[17];
- f17 = x[18] - x[17];
- f18 = x[18] - x[19];
- f19 = x[20] - x[19];
- f20 = x[20] - x[21];
- f21 = x[22] - x[21];
- f22 = x[22] - x[23];
- f23 = x[24] - x[23];
- f24 = x[24] - x[25];
- f25 = x[26] - x[25];
- f26 = x[26] - x[27];
- f27 = x[28] - x[27];
- f28 = x[28] - x[29];
- f29 = x[30] - x[29];
- f30 = x[30] - x[31];
- f31 = MUL_F(FRAC_CONST(0.7071067811865476), f15);
- f32 = x[0] - f31;
- f33 = x[0] + f31;
- f34 = f7 + f23;
- f35 = MUL_C(COEF_CONST(1.3065629648763766), f7);
- f36 = MUL_F(FRAC_CONST(-0.9238795325112866), f34);
- f37 = MUL_F(FRAC_CONST(-0.5411961001461967), f23);
- f38 = f35 + f36;
- f39 = f37 - f36;
- f40 = f33 - f39;
- f41 = f33 + f39;
- f42 = f32 - f38;
- f43 = f32 + f38;
- f44 = f11 - f19;
- f45 = f11 + f19;
- f46 = MUL_F(FRAC_CONST(0.7071067811865476), f45);
- f47 = f3 - f46;
- f48 = f3 + f46;
- f49 = MUL_F(FRAC_CONST(0.7071067811865476), f44);
- f50 = f49 - f27;
- f51 = f49 + f27;
- f52 = f51 + f48;
- f53 = MUL_F(FRAC_CONST(-0.7856949583871021), f51);
- f54 = MUL_F(FRAC_CONST(0.9807852804032304), f52);
- f55 = MUL_C(COEF_CONST(1.1758756024193588), f48);
- f56 = f53 + f54;
- f57 = f55 - f54;
- f58 = f50 + f47;
- f59 = MUL_F(FRAC_CONST(-0.2758993792829430), f50);
- f60 = MUL_F(FRAC_CONST(0.8314696123025452), f58);
- f61 = MUL_C(COEF_CONST(1.3870398453221475), f47);
- f62 = f59 + f60;
- f63 = f61 - f60;
- f64 = f41 - f56;
- f65 = f41 + f56;
- f66 = f43 - f62;
- f67 = f43 + f62;
- f68 = f42 - f63;
- f69 = f42 + f63;
- f70 = f40 - f57;
- f71 = f40 + f57;
- f72 = f5 - f9;
- f73 = f5 + f9;
- f74 = f13 - f17;
- f75 = f13 + f17;
- f76 = f21 - f25;
- f77 = f21 + f25;
- f78 = MUL_F(FRAC_CONST(0.7071067811865476), f75);
- f79 = f1 - f78;
- f80 = f1 + f78;
- f81 = f73 + f77;
- f82 = MUL_C(COEF_CONST(1.3065629648763766), f73);
- f83 = MUL_F(FRAC_CONST(-0.9238795325112866), f81);
- f84 = MUL_F(FRAC_CONST(-0.5411961001461967), f77);
- f85 = f82 + f83;
- f86 = f84 - f83;
- f87 = f80 - f86;
- f88 = f80 + f86;
- f89 = f79 - f85;
- f90 = f79 + f85;
- f91 = MUL_F(FRAC_CONST(0.7071067811865476), f74);
- f92 = f29 - f91;
- f93 = f29 + f91;
- f94 = f76 + f72;
- f95 = MUL_C(COEF_CONST(1.3065629648763766), f76);
- f96 = MUL_F(FRAC_CONST(-0.9238795325112866), f94);
- f97 = MUL_F(FRAC_CONST(-0.5411961001461967), f72);
- f98 = f95 + f96;
- f99 = f97 - f96;
- f100 = f93 - f99;
- f101 = f93 + f99;
- f102 = f92 - f98;
- f103 = f92 + f98;
- f104 = f101 + f88;
- f105 = MUL_F(FRAC_CONST(-0.8971675863426361), f101);
- f106 = MUL_F(FRAC_CONST(0.9951847266721968), f104);
- f107 = MUL_C(COEF_CONST(1.0932018670017576), f88);
- f108 = f105 + f106;
- f109 = f107 - f106;
- f110 = f90 - f103;
- f111 = MUL_F(FRAC_CONST(-0.6666556584777466), f103);
- f112 = MUL_F(FRAC_CONST(0.9569403357322089), f110);
- f113 = MUL_C(COEF_CONST(1.2472250129866713), f90);
- f114 = f112 - f111;
- f115 = f113 - f112;
- f116 = f102 + f89;
- f117 = MUL_F(FRAC_CONST(-0.4105245275223571), f102);
- f118 = MUL_F(FRAC_CONST(0.8819212643483549), f116);
- f119 = MUL_C(COEF_CONST(1.3533180011743529), f89);
- f120 = f117 + f118;
- f121 = f119 - f118;
- f122 = f87 - f100;
- f123 = MUL_F(FRAC_CONST(-0.1386171691990915), f100);
- f124 = MUL_F(FRAC_CONST(0.7730104533627370), f122);
- f125 = MUL_C(COEF_CONST(1.4074037375263826), f87);
- f126 = f124 - f123;
- f127 = f125 - f124;
- f128 = f65 - f108;
- f129 = f65 + f108;
- f130 = f67 - f114;
- f131 = f67 + f114;
- f132 = f69 - f120;
- f133 = f69 + f120;
- f134 = f71 - f126;
- f135 = f71 + f126;
- f136 = f70 - f127;
- f137 = f70 + f127;
- f138 = f68 - f121;
- f139 = f68 + f121;
- f140 = f66 - f115;
- f141 = f66 + f115;
- f142 = f64 - f109;
- f143 = f64 + f109;
- f144 = f0 + f30;
- f145 = MUL_C(COEF_CONST(1.0478631305325901), f0);
- f146 = MUL_F(FRAC_CONST(-0.9987954562051724), f144);
- f147 = MUL_F(FRAC_CONST(-0.9497277818777548), f30);
- f148 = f145 + f146;
- f149 = f147 - f146;
- f150 = f4 + f26;
- f151 = MUL_F(FRAC_CONST(1.2130114330978077), f4);
- f152 = MUL_F(FRAC_CONST(-0.9700312531945440), f150);
- f153 = MUL_F(FRAC_CONST(-0.7270510732912803), f26);
- f154 = f151 + f152;
- f155 = f153 - f152;
- f156 = f8 + f22;
- f157 = MUL_C(COEF_CONST(1.3315443865537255), f8);
- f158 = MUL_F(FRAC_CONST(-0.9039892931234433), f156);
- f159 = MUL_F(FRAC_CONST(-0.4764341996931612), f22);
- f160 = f157 + f158;
- f161 = f159 - f158;
- f162 = f12 + f18;
- f163 = MUL_C(COEF_CONST(1.3989068359730781), f12);
- f164 = MUL_F(FRAC_CONST(-0.8032075314806453), f162);
- f165 = MUL_F(FRAC_CONST(-0.2075082269882124), f18);
- f166 = f163 + f164;
- f167 = f165 - f164;
- f168 = f16 + f14;
- f169 = MUL_C(COEF_CONST(1.4125100802019777), f16);
- f170 = MUL_F(FRAC_CONST(-0.6715589548470187), f168);
- f171 = MUL_F(FRAC_CONST(0.0693921705079402), f14);
- f172 = f169 + f170;
- f173 = f171 - f170;
- f174 = f20 + f10;
- f175 = MUL_C(COEF_CONST(1.3718313541934939), f20);
- f176 = MUL_F(FRAC_CONST(-0.5141027441932219), f174);
- f177 = MUL_F(FRAC_CONST(0.3436258658070501), f10);
- f178 = f175 + f176;
- f179 = f177 - f176;
- f180 = f24 + f6;
- f181 = MUL_C(COEF_CONST(1.2784339185752409), f24);
- f182 = MUL_F(FRAC_CONST(-0.3368898533922200), f180);
- f183 = MUL_F(FRAC_CONST(0.6046542117908008), f6);
- f184 = f181 + f182;
- f185 = f183 - f182;
- f186 = f28 + f2;
- f187 = MUL_C(COEF_CONST(1.1359069844201433), f28);
- f188 = MUL_F(FRAC_CONST(-0.1467304744553624), f186);
- f189 = MUL_F(FRAC_CONST(0.8424460355094185), f2);
- f190 = f187 + f188;
- f191 = f189 - f188;
- f192 = f149 - f173;
- f193 = f149 + f173;
- f194 = f148 - f172;
- f195 = f148 + f172;
- f196 = f155 - f179;
- f197 = f155 + f179;
- f198 = f154 - f178;
- f199 = f154 + f178;
- f200 = f161 - f185;
- f201 = f161 + f185;
- f202 = f160 - f184;
- f203 = f160 + f184;
- f204 = f167 - f191;
- f205 = f167 + f191;
- f206 = f166 - f190;
- f207 = f166 + f190;
- f208 = f192 + f194;
- f209 = MUL_C(COEF_CONST(1.1758756024193588), f192);
- f210 = MUL_F(FRAC_CONST(-0.9807852804032304), f208);
- f211 = MUL_F(FRAC_CONST(-0.7856949583871021), f194);
- f212 = f209 + f210;
- f213 = f211 - f210;
- f214 = f196 + f198;
- f215 = MUL_C(COEF_CONST(1.3870398453221475), f196);
- f216 = MUL_F(FRAC_CONST(-0.5555702330196022), f214);
- f217 = MUL_F(FRAC_CONST(0.2758993792829431), f198);
- f218 = f215 + f216;
- f219 = f217 - f216;
- f220 = f200 + f202;
- f221 = MUL_F(FRAC_CONST(0.7856949583871022), f200);
- f222 = MUL_F(FRAC_CONST(0.1950903220161283), f220);
- f223 = MUL_C(COEF_CONST(1.1758756024193586), f202);
- f224 = f221 + f222;
- f225 = f223 - f222;
- f226 = f204 + f206;
- f227 = MUL_F(FRAC_CONST(-0.2758993792829430), f204);
- f228 = MUL_F(FRAC_CONST(0.8314696123025452), f226);
- f229 = MUL_C(COEF_CONST(1.3870398453221475), f206);
- f230 = f227 + f228;
- f231 = f229 - f228;
- f232 = f193 - f201;
- f233 = f193 + f201;
- f234 = f195 - f203;
- f235 = f195 + f203;
- f236 = f197 - f205;
- f237 = f197 + f205;
- f238 = f199 - f207;
- f239 = f199 + f207;
- f240 = f213 - f225;
- f241 = f213 + f225;
- f242 = f212 - f224;
- f243 = f212 + f224;
- f244 = f219 - f231;
- f245 = f219 + f231;
- f246 = f218 - f230;
- f247 = f218 + f230;
- f248 = f232 + f234;
- f249 = MUL_C(COEF_CONST(1.3065629648763766), f232);
- f250 = MUL_F(FRAC_CONST(-0.9238795325112866), f248);
- f251 = MUL_F(FRAC_CONST(-0.5411961001461967), f234);
- f252 = f249 + f250;
- f253 = f251 - f250;
- f254 = f236 + f238;
- f255 = MUL_F(FRAC_CONST(0.5411961001461969), f236);
- f256 = MUL_F(FRAC_CONST(0.3826834323650898), f254);
- f257 = MUL_C(COEF_CONST(1.3065629648763766), f238);
- f258 = f255 + f256;
- f259 = f257 - f256;
- f260 = f240 + f242;
- f261 = MUL_C(COEF_CONST(1.3065629648763766), f240);
- f262 = MUL_F(FRAC_CONST(-0.9238795325112866), f260);
- f263 = MUL_F(FRAC_CONST(-0.5411961001461967), f242);
- f264 = f261 + f262;
- f265 = f263 - f262;
- f266 = f244 + f246;
- f267 = MUL_F(FRAC_CONST(0.5411961001461969), f244);
- f268 = MUL_F(FRAC_CONST(0.3826834323650898), f266);
- f269 = MUL_C(COEF_CONST(1.3065629648763766), f246);
- f270 = f267 + f268;
- f271 = f269 - f268;
- f272 = f233 - f237;
- f273 = f233 + f237;
- f274 = f235 - f239;
- f275 = f235 + f239;
- f276 = f253 - f259;
- f277 = f253 + f259;
- f278 = f252 - f258;
- f279 = f252 + f258;
- f280 = f241 - f245;
- f281 = f241 + f245;
- f282 = f243 - f247;
- f283 = f243 + f247;
- f284 = f265 - f271;
- f285 = f265 + f271;
- f286 = f264 - f270;
- f287 = f264 + f270;
- f288 = f272 - f274;
- f289 = f272 + f274;
- f290 = MUL_F(FRAC_CONST(0.7071067811865474), f288);
- f291 = MUL_F(FRAC_CONST(0.7071067811865474), f289);
- f292 = f276 - f278;
- f293 = f276 + f278;
- f294 = MUL_F(FRAC_CONST(0.7071067811865474), f292);
- f295 = MUL_F(FRAC_CONST(0.7071067811865474), f293);
- f296 = f280 - f282;
- f297 = f280 + f282;
- f298 = MUL_F(FRAC_CONST(0.7071067811865474), f296);
- f299 = MUL_F(FRAC_CONST(0.7071067811865474), f297);
- f300 = f284 - f286;
- f301 = f284 + f286;
- f302 = MUL_F(FRAC_CONST(0.7071067811865474), f300);
- f303 = MUL_F(FRAC_CONST(0.7071067811865474), f301);
- f304 = f129 - f273;
- f305 = f129 + f273;
- f306 = f131 - f281;
- f307 = f131 + f281;
- f308 = f133 - f285;
- f309 = f133 + f285;
- f310 = f135 - f277;
- f311 = f135 + f277;
- f312 = f137 - f295;
- f313 = f137 + f295;
- f314 = f139 - f303;
- f315 = f139 + f303;
- f316 = f141 - f299;
- f317 = f141 + f299;
- f318 = f143 - f291;
- f319 = f143 + f291;
- f320 = f142 - f290;
- f321 = f142 + f290;
- f322 = f140 - f298;
- f323 = f140 + f298;
- f324 = f138 - f302;
- f325 = f138 + f302;
- f326 = f136 - f294;
- f327 = f136 + f294;
- f328 = f134 - f279;
- f329 = f134 + f279;
- f330 = f132 - f287;
- f331 = f132 + f287;
- f332 = f130 - f283;
- f333 = f130 + f283;
- f334 = f128 - f275;
- f335 = f128 + f275;
- y[31] = MUL_F(FRAC_CONST(0.5001506360206510), f305);
- y[30] = MUL_F(FRAC_CONST(0.5013584524464084), f307);
- y[29] = MUL_F(FRAC_CONST(0.5037887256810443), f309);
- y[28] = MUL_F(FRAC_CONST(0.5074711720725553), f311);
- y[27] = MUL_F(FRAC_CONST(0.5124514794082247), f313);
- y[26] = MUL_F(FRAC_CONST(0.5187927131053328), f315);
- y[25] = MUL_F(FRAC_CONST(0.5265773151542700), f317);
- y[24] = MUL_F(FRAC_CONST(0.5359098169079920), f319);
- y[23] = MUL_F(FRAC_CONST(0.5469204379855088), f321);
- y[22] = MUL_F(FRAC_CONST(0.5597698129470802), f323);
- y[21] = MUL_F(FRAC_CONST(0.5746551840326600), f325);
- y[20] = MUL_F(FRAC_CONST(0.5918185358574165), f327);
- y[19] = MUL_F(FRAC_CONST(0.6115573478825099), f329);
- y[18] = MUL_F(FRAC_CONST(0.6342389366884031), f331);
- y[17] = MUL_F(FRAC_CONST(0.6603198078137061), f333);
- y[16] = MUL_F(FRAC_CONST(0.6903721282002123), f335);
- y[15] = MUL_F(FRAC_CONST(0.7251205223771985), f334);
- y[14] = MUL_F(FRAC_CONST(0.7654941649730891), f332);
- y[13] = MUL_F(FRAC_CONST(0.8127020908144905), f330);
- y[12] = MUL_F(FRAC_CONST(0.8683447152233481), f328);
- y[11] = MUL_F(FRAC_CONST(0.9345835970364075), f326);
- y[10] = MUL_C(COEF_CONST(1.0144082649970547), f324);
- y[9] = MUL_C(COEF_CONST(1.1120716205797176), f322);
- y[8] = MUL_C(COEF_CONST(1.2338327379765710), f320);
- y[7] = MUL_C(COEF_CONST(1.3892939586328277), f318);
- y[6] = MUL_C(COEF_CONST(1.5939722833856311), f316);
- y[5] = MUL_C(COEF_CONST(1.8746759800084078), f314);
- y[4] = MUL_C(COEF_CONST(2.2820500680051619), f312);
- y[3] = MUL_C(COEF_CONST(2.9246284281582162), f310);
- y[2] = MUL_C(COEF_CONST(4.0846110781292477), f308);
- y[1] = MUL_C(COEF_CONST(6.7967507116736332), f306);
- y[0] = MUL_R(REAL_CONST(20.3738781672314530), f304);
-}
-
#endif
#endif
diff --git a/contrib/libfaad/sbr_dct.h b/contrib/libfaad/sbr_dct.h
index 6293486c7..ce44fd7ef 100644
--- a/contrib/libfaad/sbr_dct.h
+++ b/contrib/libfaad/sbr_dct.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_dct.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_dct.h,v 1.19 2007/11/01 12:33:34 menno Exp $
**/
#ifndef __SBR_DCT_H__
diff --git a/contrib/libfaad/sbr_dec.c b/contrib/libfaad/sbr_dec.c
index 24c1f5031..f87d0106c 100644
--- a/contrib/libfaad/sbr_dec.c
+++ b/contrib/libfaad/sbr_dec.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_dec.c,v 1.9 2006/06/17 20:43:57 dgp85 Exp $
+** $Id: sbr_dec.c,v 1.43 2007/11/01 12:33:34 menno Exp $
**/
@@ -176,6 +179,72 @@ void sbrDecodeEnd(sbr_info *sbr)
}
}
+void sbrReset(sbr_info *sbr)
+{
+ uint8_t j;
+ if (sbr->qmfa[0] != NULL)
+ memset(sbr->qmfa[0]->x, 0, 2 * sbr->qmfa[0]->channels * 10 * sizeof(real_t));
+ if (sbr->qmfa[1] != NULL)
+ memset(sbr->qmfa[1]->x, 0, 2 * sbr->qmfa[1]->channels * 10 * sizeof(real_t));
+ if (sbr->qmfs[0] != NULL)
+ memset(sbr->qmfs[0]->v, 0, 2 * sbr->qmfs[0]->channels * 20 * sizeof(real_t));
+ if (sbr->qmfs[1] != NULL)
+ memset(sbr->qmfs[1]->v, 0, 2 * sbr->qmfs[1]->channels * 20 * sizeof(real_t));
+
+ for (j = 0; j < 5; j++)
+ {
+ if (sbr->G_temp_prev[0][j] != NULL)
+ memset(sbr->G_temp_prev[0][j], 0, 64*sizeof(real_t));
+ if (sbr->G_temp_prev[1][j] != NULL)
+ memset(sbr->G_temp_prev[1][j], 0, 64*sizeof(real_t));
+ if (sbr->Q_temp_prev[0][j] != NULL)
+ memset(sbr->Q_temp_prev[0][j], 0, 64*sizeof(real_t));
+ if (sbr->Q_temp_prev[1][j] != NULL)
+ memset(sbr->Q_temp_prev[1][j], 0, 64*sizeof(real_t));
+ }
+
+ memset(sbr->Xsbr[0], 0, (sbr->numTimeSlotsRate+sbr->tHFGen)*64 * sizeof(qmf_t));
+ memset(sbr->Xsbr[1], 0, (sbr->numTimeSlotsRate+sbr->tHFGen)*64 * sizeof(qmf_t));
+
+ sbr->GQ_ringbuf_index[0] = 0;
+ sbr->GQ_ringbuf_index[1] = 0;
+ sbr->header_count = 0;
+ sbr->Reset = 1;
+
+ sbr->L_E_prev[0] = 0;
+ sbr->L_E_prev[1] = 0;
+ sbr->bs_freq_scale = 2;
+ sbr->bs_alter_scale = 1;
+ sbr->bs_noise_bands = 2;
+ sbr->bs_limiter_bands = 2;
+ sbr->bs_limiter_gains = 2;
+ sbr->bs_interpol_freq = 1;
+ sbr->bs_smoothing_mode = 1;
+ sbr->bs_start_freq = 5;
+ sbr->bs_amp_res = 1;
+ sbr->bs_samplerate_mode = 1;
+ sbr->prevEnvIsShort[0] = -1;
+ sbr->prevEnvIsShort[1] = -1;
+ sbr->bsco = 0;
+ sbr->bsco_prev = 0;
+ sbr->M_prev = 0;
+ sbr->bs_start_freq_prev = -1;
+
+ sbr->f_prev[0] = 0;
+ sbr->f_prev[1] = 0;
+ for (j = 0; j < MAX_M; j++)
+ {
+ sbr->E_prev[0][j] = 0;
+ sbr->Q_prev[0][j] = 0;
+ sbr->E_prev[1][j] = 0;
+ sbr->Q_prev[1][j] = 0;
+ sbr->bs_add_harmonic_prev[0][j] = 0;
+ sbr->bs_add_harmonic_prev[1][j] = 0;
+ }
+ sbr->bs_add_harmonic_flag_prev[0] = 0;
+ sbr->bs_add_harmonic_flag_prev[1] = 0;
+}
+
static uint8_t sbr_save_prev_data(sbr_info *sbr, uint8_t ch)
{
uint8_t i;
@@ -226,11 +295,12 @@ static void sbr_save_matrix(sbr_info *sbr, uint8_t ch)
}
}
-static void sbr_process_channel(sbr_info *sbr, real_t *channel_buf, qmf_t X[MAX_NTSR][64],
- uint8_t ch, uint8_t dont_process,
- const uint8_t downSampledSBR)
+static uint8_t sbr_process_channel(sbr_info *sbr, real_t *channel_buf, qmf_t X[MAX_NTSR][64],
+ uint8_t ch, uint8_t dont_process,
+ const uint8_t downSampledSBR)
{
int16_t k, l;
+ uint8_t ret = 0;
#ifdef SBR_LOW_POWER
ALIGN real_t deg[64];
@@ -278,7 +348,7 @@ static void sbr_process_channel(sbr_info *sbr, real_t *channel_buf, qmf_t X[MAX_
,ch);
#endif
-#ifdef SBR_LOW_POWER
+#if 0 //def SBR_LOW_POWER
for (l = sbr->t_E[ch][0]; l < sbr->t_E[ch][sbr->L_E[ch]]; l++)
{
for (k = 0; k < sbr->kx; k++)
@@ -290,12 +360,16 @@ static void sbr_process_channel(sbr_info *sbr, real_t *channel_buf, qmf_t X[MAX_
#if 1
/* hf adjustment */
- hf_adjustment(sbr, sbr->Xsbr[ch]
+ ret = hf_adjustment(sbr, sbr->Xsbr[ch]
#ifdef SBR_LOW_POWER
,deg
#endif
,ch);
#endif
+ if (ret > 0)
+ {
+ dont_process = 1;
+ }
}
if ((sbr->just_seeked != 0) || dont_process)
@@ -367,6 +441,8 @@ static void sbr_process_channel(sbr_info *sbr, real_t *channel_buf, qmf_t X[MAX_
#endif
}
}
+
+ return ret;
}
uint8_t sbrDecodeCoupleFrame(sbr_info *sbr, real_t *left_chan, real_t *right_chan,
@@ -400,7 +476,7 @@ uint8_t sbrDecodeCoupleFrame(sbr_info *sbr, real_t *left_chan, real_t *right_cha
sbr->just_seeked = 0;
}
- sbr_process_channel(sbr, left_chan, X, 0, dont_process, downSampledSBR);
+ sbr->ret += sbr_process_channel(sbr, left_chan, X, 0, dont_process, downSampledSBR);
/* subband synthesis */
if (downSampledSBR)
{
@@ -409,7 +485,7 @@ uint8_t sbrDecodeCoupleFrame(sbr_info *sbr, real_t *left_chan, real_t *right_cha
sbr_qmf_synthesis_64(sbr, sbr->qmfs[0], X, left_chan);
}
- sbr_process_channel(sbr, right_chan, X, 1, dont_process, downSampledSBR);
+ sbr->ret += sbr_process_channel(sbr, right_chan, X, 1, dont_process, downSampledSBR);
/* subband synthesis */
if (downSampledSBR)
{
@@ -483,7 +559,7 @@ uint8_t sbrDecodeSingleFrame(sbr_info *sbr, real_t *channel,
sbr->just_seeked = 0;
}
- sbr_process_channel(sbr, channel, X, 0, dont_process, downSampledSBR);
+ sbr->ret += sbr_process_channel(sbr, channel, X, 0, dont_process, downSampledSBR);
/* subband synthesis */
if (downSampledSBR)
{
@@ -526,8 +602,8 @@ uint8_t sbrDecodeSingleFramePS(sbr_info *sbr, real_t *left_channel, real_t *righ
uint8_t l, k;
uint8_t dont_process = 0;
uint8_t ret = 0;
- ALIGN qmf_t X_left[38][64] = {{{0}}};
- ALIGN qmf_t X_right[38][64] = {{{0}}}; /* must set this to 0 */
+ ALIGN qmf_t X_left[38][64] = {{0}};
+ ALIGN qmf_t X_right[38][64] = {{0}}; /* must set this to 0 */
if (sbr == NULL)
return 20;
@@ -558,7 +634,7 @@ uint8_t sbrDecodeSingleFramePS(sbr_info *sbr, real_t *left_channel, real_t *righ
sbr->qmfs[1] = qmfs_init((downSampledSBR)?32:64);
}
- sbr_process_channel(sbr, left_channel, X_left, 0, dont_process, downSampledSBR);
+ sbr->ret += sbr_process_channel(sbr, left_channel, X_left, 0, dont_process, downSampledSBR);
/* copy some extra data for PS */
for (l = 32; l < 38; l++)
@@ -574,7 +650,7 @@ uint8_t sbrDecodeSingleFramePS(sbr_info *sbr, real_t *left_channel, real_t *righ
#ifdef DRM_PS
if (sbr->Is_DRM_SBR)
{
- drm_ps_decode(sbr->drm_ps, (sbr->ret > 0), sbr->sample_rate, X_left, X_right);
+ drm_ps_decode(sbr->drm_ps, (sbr->ret > 0), X_left, X_right);
} else {
#endif
#ifdef PS_DEC
diff --git a/contrib/libfaad/sbr_dec.h b/contrib/libfaad/sbr_dec.h
index 5efd5c5e0..40c1d5388 100644
--- a/contrib/libfaad/sbr_dec.h
+++ b/contrib/libfaad/sbr_dec.h
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_dec.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_dec.h,v 1.39 2007/11/01 12:33:34 menno Exp $
**/
#ifndef __SBR_DEC_H__
@@ -183,6 +186,7 @@ typedef struct
#endif
#if (defined(PS_DEC) || defined(DRM_PS))
uint8_t ps_used;
+ uint8_t psResetFlag;
#endif
/* to get it compiling */
@@ -231,6 +235,7 @@ sbr_info *sbrDecodeInit(uint16_t framelength, uint8_t id_aac,
#endif
);
void sbrDecodeEnd(sbr_info *sbr);
+void sbrReset(sbr_info *sbr);
uint8_t sbrDecodeCoupleFrame(sbr_info *sbr, real_t *left_chan, real_t *right_chan,
const uint8_t just_seeked, const uint8_t downSampledSBR);
diff --git a/contrib/libfaad/sbr_e_nf.c b/contrib/libfaad/sbr_e_nf.c
index 2d2bf4f85..14ba1e4a5 100644
--- a/contrib/libfaad/sbr_e_nf.c
+++ b/contrib/libfaad/sbr_e_nf.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_e_nf.c,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_e_nf.c,v 1.21 2007/11/01 12:33:35 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/sbr_e_nf.h b/contrib/libfaad/sbr_e_nf.h
index 48874c125..59017a906 100644
--- a/contrib/libfaad/sbr_e_nf.h
+++ b/contrib/libfaad/sbr_e_nf.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_e_nf.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_e_nf.h,v 1.18 2007/11/01 12:33:35 menno Exp $
**/
#ifndef __SBR_E_NF_H__
diff --git a/contrib/libfaad/sbr_fbt.c b/contrib/libfaad/sbr_fbt.c
index 511235863..5919c7b56 100644
--- a/contrib/libfaad/sbr_fbt.c
+++ b/contrib/libfaad/sbr_fbt.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_fbt.c,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_fbt.c,v 1.21 2007/11/01 12:33:35 menno Exp $
**/
/* Calculate frequency band tables */
diff --git a/contrib/libfaad/sbr_fbt.h b/contrib/libfaad/sbr_fbt.h
index 26c580efe..d24a25e27 100644
--- a/contrib/libfaad/sbr_fbt.h
+++ b/contrib/libfaad/sbr_fbt.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_fbt.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_fbt.h,v 1.18 2007/11/01 12:33:35 menno Exp $
**/
#ifndef __SBR_FBT_H__
diff --git a/contrib/libfaad/sbr_hfadj.c b/contrib/libfaad/sbr_hfadj.c
index 081f731e9..efac06502 100644
--- a/contrib/libfaad/sbr_hfadj.c
+++ b/contrib/libfaad/sbr_hfadj.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_hfadj.c,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_hfadj.c,v 1.22 2007/11/01 12:33:35 menno Exp $
**/
/* High Frequency adjustment */
@@ -39,8 +42,8 @@
/* static function declarations */
-static void estimate_current_envelope(sbr_info *sbr, sbr_hfadj_info *adj,
- qmf_t Xsbr[MAX_NTSRHFG][64], uint8_t ch);
+static uint8_t estimate_current_envelope(sbr_info *sbr, sbr_hfadj_info *adj,
+ qmf_t Xsbr[MAX_NTSRHFG][64], uint8_t ch);
static void calculate_gain(sbr_info *sbr, sbr_hfadj_info *adj, uint8_t ch);
#ifdef SBR_LOW_POWER
static void calc_gain_groups(sbr_info *sbr, sbr_hfadj_info *adj, real_t *deg, uint8_t ch);
@@ -49,13 +52,14 @@ static void aliasing_reduction(sbr_info *sbr, sbr_hfadj_info *adj, real_t *deg,
static void hf_assembly(sbr_info *sbr, sbr_hfadj_info *adj, qmf_t Xsbr[MAX_NTSRHFG][64], uint8_t ch);
-void hf_adjustment(sbr_info *sbr, qmf_t Xsbr[MAX_NTSRHFG][64]
+uint8_t hf_adjustment(sbr_info *sbr, qmf_t Xsbr[MAX_NTSRHFG][64]
#ifdef SBR_LOW_POWER
- ,real_t *deg /* aliasing degree */
+ ,real_t *deg /* aliasing degree */
#endif
- ,uint8_t ch)
+ ,uint8_t ch)
{
ALIGN sbr_hfadj_info adj = {{{0}}};
+ uint8_t ret = 0;
if (sbr->bs_frame_class[ch] == FIXFIX)
{
@@ -72,7 +76,9 @@ void hf_adjustment(sbr_info *sbr, qmf_t Xsbr[MAX_NTSRHFG][64]
sbr->l_A[ch] = sbr->L_E[ch] + 1 - sbr->bs_pointer[ch];
}
- estimate_current_envelope(sbr, &adj, Xsbr, ch);
+ ret = estimate_current_envelope(sbr, &adj, Xsbr, ch);
+ if (ret > 0)
+ return 1;
calculate_gain(sbr, &adj, ch);
@@ -82,6 +88,8 @@ void hf_adjustment(sbr_info *sbr, qmf_t Xsbr[MAX_NTSRHFG][64]
#endif
hf_assembly(sbr, &adj, Xsbr, ch);
+
+ return 0;
}
static uint8_t get_S_mapped(sbr_info *sbr, uint8_t ch, uint8_t l, uint8_t current_band)
@@ -125,8 +133,8 @@ static uint8_t get_S_mapped(sbr_info *sbr, uint8_t ch, uint8_t l, uint8_t curren
return 0;
}
-static void estimate_current_envelope(sbr_info *sbr, sbr_hfadj_info *adj,
- qmf_t Xsbr[MAX_NTSRHFG][64], uint8_t ch)
+static uint8_t estimate_current_envelope(sbr_info *sbr, sbr_hfadj_info *adj,
+ qmf_t Xsbr[MAX_NTSRHFG][64], uint8_t ch)
{
uint8_t m, l, j, k, k_l, k_h, p;
real_t nrg, div;
@@ -142,6 +150,9 @@ static void estimate_current_envelope(sbr_info *sbr, sbr_hfadj_info *adj,
div = (real_t)(u_i - l_i);
+ if (div == 0)
+ div = 1;
+
for (m = 0; m < sbr->M; m++)
{
nrg = 0;
@@ -192,6 +203,9 @@ static void estimate_current_envelope(sbr_info *sbr, sbr_hfadj_info *adj,
div = (real_t)((u_i - l_i)*(k_h - k_l));
+ if (div == 0)
+ div = 1;
+
for (i = l_i + sbr->tHFAdj; i < u_i + sbr->tHFAdj; i++)
{
for (j = k_l; j < k_h; j++)
@@ -225,6 +239,8 @@ static void estimate_current_envelope(sbr_info *sbr, sbr_hfadj_info *adj,
}
}
}
+
+ return 0;
}
#ifdef FIXED_POINT
@@ -1342,15 +1358,27 @@ static void calc_gain_groups(sbr_info *sbr, sbr_hfadj_info *adj, real_t *deg, ui
{
uint8_t l, k, i;
uint8_t grouping;
+ uint8_t S_mapped;
for (l = 0; l < sbr->L_E[ch]; l++)
{
+ uint8_t current_res_band = 0;
i = 0;
grouping = 0;
+ S_mapped = get_S_mapped(sbr, ch, l, current_res_band);
+
for (k = sbr->kx; k < sbr->kx + sbr->M - 1; k++)
{
- if (deg[k + 1] && adj->S_mapped[l][k-sbr->kx] == 0)
+ if (k == sbr->f_table_res[sbr->f[ch][l]][current_res_band+1])
+ {
+ /* step to next resolution band */
+ current_res_band++;
+
+ S_mapped = get_S_mapped(sbr, ch, l, current_res_band);
+ }
+
+ if (deg[k + 1] && S_mapped == 0)
{
if (grouping == 0)
{
@@ -1361,7 +1389,7 @@ static void calc_gain_groups(sbr_info *sbr, sbr_hfadj_info *adj, real_t *deg, ui
} else {
if (grouping)
{
- if (adj->S_mapped[l][k-sbr->kx])
+ if (S_mapped)
{
sbr->f_group[l][i] = k;
} else {
diff --git a/contrib/libfaad/sbr_hfadj.h b/contrib/libfaad/sbr_hfadj.h
index aeaba32e8..03ef71a0c 100644
--- a/contrib/libfaad/sbr_hfadj.h
+++ b/contrib/libfaad/sbr_hfadj.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_hfadj.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_hfadj.h,v 1.19 2007/11/01 12:33:35 menno Exp $
**/
#ifndef __SBR_HFADJ_H__
@@ -40,11 +43,11 @@ typedef struct
} sbr_hfadj_info;
-void hf_adjustment(sbr_info *sbr, qmf_t Xsbr[MAX_NTSRHFG][64]
+uint8_t hf_adjustment(sbr_info *sbr, qmf_t Xsbr[MAX_NTSRHFG][64]
#ifdef SBR_LOW_POWER
- ,real_t *deg
+ ,real_t *deg
#endif
- ,uint8_t ch);
+ ,uint8_t ch);
#ifdef __cplusplus
diff --git a/contrib/libfaad/sbr_hfgen.c b/contrib/libfaad/sbr_hfgen.c
index 688b9a0ea..b0f3219c3 100644
--- a/contrib/libfaad/sbr_hfgen.c
+++ b/contrib/libfaad/sbr_hfgen.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_hfgen.c,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_hfgen.c,v 1.26 2007/11/01 12:33:35 menno Exp $
**/
/* High Frequency generation */
@@ -36,7 +39,6 @@
#include "sbr_hfgen.h"
#include "sbr_fbt.h"
-
/* static function declarations */
#ifdef SBR_LOW_POWER
static void calc_prediction_coef_lp(sbr_info *sbr, qmf_t Xlow[MAX_NTSRHFG][64],
diff --git a/contrib/libfaad/sbr_hfgen.h b/contrib/libfaad/sbr_hfgen.h
index 27a58be61..a7c842494 100644
--- a/contrib/libfaad/sbr_hfgen.h
+++ b/contrib/libfaad/sbr_hfgen.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_hfgen.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_hfgen.h,v 1.20 2007/11/01 12:33:35 menno Exp $
**/
#ifndef __SBR_HFGEN_H__
diff --git a/contrib/libfaad/sbr_huff.c b/contrib/libfaad/sbr_huff.c
index 39ae32b9b..6ba878640 100644
--- a/contrib/libfaad/sbr_huff.c
+++ b/contrib/libfaad/sbr_huff.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_huff.c,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_huff.c,v 1.21 2007/11/01 12:33:35 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/sbr_huff.h b/contrib/libfaad/sbr_huff.h
index 631a43a8d..f749f2e08 100644
--- a/contrib/libfaad/sbr_huff.h
+++ b/contrib/libfaad/sbr_huff.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_huff.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_huff.h,v 1.21 2007/11/01 12:33:35 menno Exp $
**/
#ifndef __SBR_HUFF_H__
diff --git a/contrib/libfaad/sbr_noise.h b/contrib/libfaad/sbr_noise.h
index a25fbf3cd..1cf7190de 100644
--- a/contrib/libfaad/sbr_noise.h
+++ b/contrib/libfaad/sbr_noise.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_noise.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_noise.h,v 1.17 2007/11/01 12:33:35 menno Exp $
**/
#ifndef __SBR_NOISE_H__
diff --git a/contrib/libfaad/sbr_qmf.c b/contrib/libfaad/sbr_qmf.c
index d534a0442..68f408916 100644
--- a/contrib/libfaad/sbr_qmf.c
+++ b/contrib/libfaad/sbr_qmf.c
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_qmf.c,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_qmf.c,v 1.32 2007/11/01 12:33:36 menno Exp $
**/
#include "common.h"
@@ -72,7 +75,7 @@ void sbr_qmf_analysis_32(sbr_info *sbr, qmfa_info *qmfa, const real_t *input,
#else
ALIGN real_t y[32];
#endif
- uint16_t in = 0;
+ uint32_t in = 0;
uint8_t l;
/* qmf subsample l */
@@ -251,7 +254,7 @@ void sbr_qmf_synthesis_32(sbr_info *sbr, qmfs_info *qmfs, qmf_t X[MAX_NTSRHFG][6
{
ALIGN real_t x[16];
ALIGN real_t y[16];
- int16_t n, k, out = 0;
+ int32_t n, k, out = 0;
uint8_t l;
/* qmf subsample l */
@@ -320,7 +323,7 @@ void sbr_qmf_synthesis_64(sbr_info *sbr, qmfs_info *qmfs, qmf_t X[MAX_NTSRHFG][6
{
ALIGN real_t x[64];
ALIGN real_t y[64];
- int16_t n, k, out = 0;
+ int32_t n, k, out = 0;
uint8_t l;
@@ -392,7 +395,7 @@ void sbr_qmf_synthesis_32(sbr_info *sbr, qmfs_info *qmfs, qmf_t X[MAX_NTSRHFG][6
#ifndef FIXED_POINT
real_t scale = 1.f/64.f;
#endif
- int16_t n, k, out = 0;
+ int32_t n, k, out = 0;
uint8_t l;
@@ -475,7 +478,7 @@ void sbr_qmf_synthesis_64(sbr_info *sbr, qmfs_info *qmfs, qmf_t X[MAX_NTSRHFG][6
#ifndef FIXED_POINT
real_t scale = 1.f/64.f;
#endif
- int16_t n, k, out = 0;
+ int32_t n, k, out = 0;
uint8_t l;
diff --git a/contrib/libfaad/sbr_qmf.h b/contrib/libfaad/sbr_qmf.h
index b1d673d9c..efb167be9 100644
--- a/contrib/libfaad/sbr_qmf.h
+++ b/contrib/libfaad/sbr_qmf.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_qmf.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_qmf.h,v 1.25 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SBR_QMF_H__
diff --git a/contrib/libfaad/sbr_qmf_c.h b/contrib/libfaad/sbr_qmf_c.h
index d9c079520..c2fcd2739 100644
--- a/contrib/libfaad/sbr_qmf_c.h
+++ b/contrib/libfaad/sbr_qmf_c.h
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_qmf_c.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_qmf_c.h,v 1.17 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SBR_QMF_C_H__
diff --git a/contrib/libfaad/sbr_syntax.c b/contrib/libfaad/sbr_syntax.c
index 19cb1b5c2..216c2e9e1 100644
--- a/contrib/libfaad/sbr_syntax.c
+++ b/contrib/libfaad/sbr_syntax.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_syntax.c,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_syntax.c,v 1.38 2007/11/01 12:33:36 menno Exp $
**/
#include "common.h"
@@ -46,6 +49,7 @@
#include "analysis.h"
/* static function declarations */
+/* static function declarations */
static void sbr_header(bitfile *ld, sbr_info *sbr);
static uint8_t calc_sbr_tables(sbr_info *sbr, uint8_t start_freq, uint8_t stop_freq,
uint8_t samplerate_mode, uint8_t freq_scale,
@@ -131,16 +135,23 @@ static uint8_t calc_sbr_tables(sbr_info *sbr, uint8_t start_freq, uint8_t stop_f
}
/* table 2 */
-uint8_t sbr_extension_data(bitfile *ld, sbr_info *sbr, uint16_t cnt)
+uint8_t sbr_extension_data(bitfile *ld, sbr_info *sbr, uint16_t cnt,
+ uint8_t psResetFlag)
{
uint8_t result = 0;
uint16_t num_align_bits = 0;
- uint16_t num_sbr_bits = (uint16_t)faad_get_processed_bits(ld);
+ uint16_t num_sbr_bits1 = (uint16_t)faad_get_processed_bits(ld);
+ uint16_t num_sbr_bits2;
uint8_t saved_start_freq, saved_samplerate_mode;
uint8_t saved_stop_freq, saved_freq_scale;
uint8_t saved_alter_scale, saved_xover_band;
+#if (defined(PS_DEC) || defined(DRM_PS))
+ if (psResetFlag)
+ sbr->psResetFlag = psResetFlag;
+#endif
+
#ifdef DRM
if (!sbr->Is_DRM_SBR)
#endif
@@ -206,28 +217,40 @@ uint8_t sbr_extension_data(bitfile *ld, sbr_info *sbr, uint16_t cnt)
{
calc_sbr_tables(sbr, saved_start_freq, saved_stop_freq,
saved_samplerate_mode, saved_freq_scale,
- saved_alter_scale, saved_xover_band);
+ saved_alter_scale, saved_xover_band);
}
- /* we should be able to safely set result to 0 now */
- result = 0;
+ /* we should be able to safely set result to 0 now, */
+ /* but practise indicates this doesn't work well */
}
} else {
result = 1;
}
-#ifdef DRM
- if (!sbr->Is_DRM_SBR)
-#endif
+ num_sbr_bits2 = (uint16_t)faad_get_processed_bits(ld) - num_sbr_bits1;
+
+ /* check if we read more bits then were available for sbr */
+ if (8*cnt < num_sbr_bits2)
{
- num_sbr_bits = (uint16_t)faad_get_processed_bits(ld) - num_sbr_bits;
+ faad_resetbits(ld, num_sbr_bits1 + 8*cnt);
+ num_sbr_bits2 = 8*cnt;
- /* check if we read more bits then were available for sbr */
- if (8*cnt < num_sbr_bits)
- return 1;
+#ifdef PS_DEC
+ /* turn off PS for the unfortunate case that we randomly read some
+ * PS data that looks correct */
+ sbr->ps_used = 0;
+#endif
+
+ /* Make sure it doesn't decode SBR in this frame, or we'll get glitches */
+ return 1;
+ }
+#ifdef DRM
+ if (!sbr->Is_DRM_SBR)
+#endif
+ {
/* -4 does not apply, bs_extension_type is re-read in this function */
- num_align_bits = 8*cnt /*- 4*/ - num_sbr_bits;
+ num_align_bits = 8*cnt /*- 4*/ - num_sbr_bits2;
while (num_align_bits > 7)
{
@@ -364,11 +387,14 @@ static uint8_t sbr_single_channel_element(bitfile *ld, sbr_info *sbr)
#ifdef DRM
/* bs_coupling, from sbr_channel_pair_base_element(bs_amp_res) */
if (sbr->Is_DRM_SBR)
+ {
faad_get1bit(ld);
+ }
#endif
if ((result = sbr_grid(ld, sbr, 0)) > 0)
return result;
+
sbr_dtdf(ld, sbr, 0);
invf_mode(ld, sbr, 0);
sbr_envelope(ld, sbr, 0);
@@ -431,7 +457,11 @@ static uint8_t sbr_single_channel_element(bitfile *ld, sbr_info *sbr)
} else {
/* to be safe make it 3, will switch to "default"
* in sbr_extension() */
+#ifdef DRM
+ return 1;
+#else
sbr->bs_extension_id = 3;
+#endif
}
}
#endif
@@ -829,6 +859,10 @@ static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,
{
sbr->ps = ps_init(get_sr_index(sbr->sample_rate));
}
+ if (sbr->psResetFlag)
+ {
+ sbr->ps->header_read = 0;
+ }
ret = ps_data(sbr->ps, ld, &header);
/* enable PS if and only if: a header has been decoded */
@@ -837,6 +871,11 @@ static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,
sbr->ps_used = 1;
}
+ if (header == 1)
+ {
+ sbr->psResetFlag = 0;
+ }
+
return ret;
#endif
#ifdef DRM_PS
diff --git a/contrib/libfaad/sbr_syntax.h b/contrib/libfaad/sbr_syntax.h
index 1baa5fec3..a13b2708f 100644
--- a/contrib/libfaad/sbr_syntax.h
+++ b/contrib/libfaad/sbr_syntax.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_syntax.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_syntax.h,v 1.23 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SBR_SYNTAX_H__
@@ -55,7 +58,8 @@ extern "C" {
#define NOISE_FLOOR_OFFSET 6
-uint8_t sbr_extension_data(bitfile *ld, sbr_info *sbr, uint16_t cnt);
+uint8_t sbr_extension_data(bitfile *ld, sbr_info *sbr, uint16_t cnt,
+ uint8_t resetFlag);
#ifdef __cplusplus
}
diff --git a/contrib/libfaad/sbr_tf_grid.c b/contrib/libfaad/sbr_tf_grid.c
index ae741c256..b3b24fd16 100644
--- a/contrib/libfaad/sbr_tf_grid.c
+++ b/contrib/libfaad/sbr_tf_grid.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_tf_grid.c,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_tf_grid.c,v 1.19 2007/11/01 12:33:36 menno Exp $
**/
/* Time/Frequency grid */
diff --git a/contrib/libfaad/sbr_tf_grid.h b/contrib/libfaad/sbr_tf_grid.h
index 8772a384a..27a8f908e 100644
--- a/contrib/libfaad/sbr_tf_grid.h
+++ b/contrib/libfaad/sbr_tf_grid.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_tf_grid.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sbr_tf_grid.h,v 1.17 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SBR_TF_GRID_H__
diff --git a/contrib/libfaad/sine_win.h b/contrib/libfaad/sine_win.h
index c7e6ecd6e..e4198da3a 100644
--- a/contrib/libfaad/sine_win.h
+++ b/contrib/libfaad/sine_win.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: sine_win.h,v 1.6 2005/10/29 23:57:07 tmmm Exp $
+** $Id: sine_win.h,v 1.19 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SINE_WIN_H__
diff --git a/contrib/libfaad/specrec.c b/contrib/libfaad/specrec.c
index fd4b0653c..ea6ca94b9 100644
--- a/contrib/libfaad/specrec.c
+++ b/contrib/libfaad/specrec.c
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: specrec.c,v 1.10 2006/06/17 20:43:57 dgp85 Exp $
+** $Id: specrec.c,v 1.60 2007/11/01 12:33:36 menno Exp $
**/
/*
@@ -327,6 +330,11 @@ uint8_t window_grouping_info(NeAACDecHandle hDecoder, ic_stream *ics)
}
#endif
+ if (ics->max_sfb > ics->num_swb)
+ {
+ return 32;
+ }
+
/* preparation of sect_sfb_offset for long blocks */
/* also copy the last value! */
#ifdef LD_DEC
@@ -348,6 +356,7 @@ uint8_t window_grouping_info(NeAACDecHandle hDecoder, ic_stream *ics)
}
ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
+ ics->swb_offset_max = hDecoder->frameLength;
} else {
#endif
for (i = 0; i < ics->num_swb; i++)
@@ -357,6 +366,7 @@ uint8_t window_grouping_info(NeAACDecHandle hDecoder, ic_stream *ics)
}
ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
+ ics->swb_offset_max = hDecoder->frameLength;
#ifdef LD_DEC
}
#endif
@@ -367,9 +377,15 @@ uint8_t window_grouping_info(NeAACDecHandle hDecoder, ic_stream *ics)
ics->window_group_length[ics->num_window_groups-1] = 1;
ics->num_swb = num_swb_128_window[sf_index];
+ if (ics->max_sfb > ics->num_swb)
+ {
+ return 32;
+ }
+
for (i = 0; i < ics->num_swb; i++)
ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
+ ics->swb_offset_max = hDecoder->frameLength/8;
for (i = 0; i < ics->num_windows-1; i++) {
if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
@@ -405,7 +421,7 @@ uint8_t window_grouping_info(NeAACDecHandle hDecoder, ic_stream *ics)
}
return 0;
default:
- return 1;
+ return 32;
}
}
@@ -667,25 +683,46 @@ static uint8_t quant_to_spec(NeAACDecHandle hDecoder,
static uint8_t allocate_single_channel(NeAACDecHandle hDecoder, uint8_t channel,
uint8_t output_channels)
{
- uint8_t mul = 1;
+ int mul = 1;
#ifdef MAIN_DEC
/* MAIN object type prediction */
if (hDecoder->object_type == MAIN)
{
- hDecoder->pred_stat[channel] = (pred_state*)realloc(hDecoder->pred_stat[channel], hDecoder->frameLength * sizeof(pred_state));
- reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
+ /* allocate the state only when needed */
+ if (hDecoder->pred_stat[channel] != NULL)
+ {
+ faad_free(hDecoder->pred_stat[channel]);
+ hDecoder->pred_stat[channel] = NULL;
+ }
+
+ hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
+ reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
}
#endif
#ifdef LTP_DEC
if (is_ltp_ot(hDecoder->object_type))
{
- hDecoder->lt_pred_stat[channel] = (int16_t*)realloc(hDecoder->lt_pred_stat[channel], hDecoder->frameLength*4 * sizeof(int16_t));
- memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
+ /* allocate the state only when needed */
+ if (hDecoder->lt_pred_stat[channel] != NULL)
+ {
+ faad_free(hDecoder->lt_pred_stat[channel]);
+ hDecoder->lt_pred_stat[channel] = NULL;
+ }
+
+ hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
+ memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
}
#endif
+ if (hDecoder->time_out[channel] != NULL)
+ {
+ faad_free(hDecoder->time_out[channel]);
+ hDecoder->time_out[channel] = NULL;
+ }
+
+ {
mul = 1;
#ifdef SBR_DEC
hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
@@ -696,28 +733,48 @@ static uint8_t allocate_single_channel(NeAACDecHandle hDecoder, uint8_t channel,
hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
}
#endif
- hDecoder->time_out[channel] = (real_t*)realloc(hDecoder->time_out[channel], mul*hDecoder->frameLength*sizeof(real_t));
+ hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
+ }
+
#if (defined(PS_DEC) || defined(DRM_PS))
if (output_channels == 2)
{
- hDecoder->time_out[channel+1] = (real_t*)realloc(hDecoder->time_out[channel+1], mul*hDecoder->frameLength*sizeof(real_t));
- memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
+ if (hDecoder->time_out[channel+1] != NULL)
+ {
+ faad_free(hDecoder->time_out[channel+1]);
+ hDecoder->time_out[channel+1] = NULL;
+ }
+
+ hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
+ memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
}
#endif
- hDecoder->fb_intermed[channel] = (real_t*)realloc(hDecoder->fb_intermed[channel], hDecoder->frameLength*sizeof(real_t));
- memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
+ if (hDecoder->fb_intermed[channel] != NULL)
+ {
+ faad_free(hDecoder->fb_intermed[channel]);
+ hDecoder->fb_intermed[channel] = NULL;
+ }
+
+ hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
+ memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
#ifdef SSR_DEC
if (hDecoder->object_type == SSR)
{
- uint16_t k;
- hDecoder->ssr_overlap[channel] = (real_t*)realloc(hDecoder->ssr_overlap[channel], 2*hDecoder->frameLength*sizeof(real_t));
+ if (hDecoder->ssr_overlap[channel] == NULL)
+ {
+ hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
- hDecoder->prev_fmd[channel] = (real_t*)realloc(hDecoder->prev_fmd[channel], 2*hDecoder->frameLength*sizeof(real_t));
+ }
+ if (hDecoder->prev_fmd[channel] == NULL)
+ {
+ uint16_t k;
+ hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
for (k = 0; k < 2*hDecoder->frameLength; k++)
hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
+ }
}
#endif
@@ -727,7 +784,7 @@ static uint8_t allocate_single_channel(NeAACDecHandle hDecoder, uint8_t channel,
static uint8_t allocate_channel_pair(NeAACDecHandle hDecoder,
uint8_t channel, uint8_t paired_channel)
{
- uint8_t mul = 1;
+ int mul = 1;
#ifdef MAIN_DEC
/* MAIN object type prediction */
@@ -832,7 +889,8 @@ static uint8_t allocate_channel_pair(NeAACDecHandle hDecoder,
uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
element *sce, int16_t *spec_data)
{
- uint8_t retval, output_channels;
+ uint8_t retval;
+ int output_channels;
ALIGN real_t spec_coef[1024];
#ifdef PROFILE
@@ -841,15 +899,38 @@ uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
/* always allocate 2 channels, PS can always "suddenly" turn up */
-#if (defined(PS_DEC) || defined(DRM_PS))
- output_channels = hDecoder->ps_used[hDecoder->fr_ch_ele] ? 2 : 1;
+#if ( (defined(DRM) && defined(DRM_PS)) )
+ output_channels = 2;
+#elif defined(PS_DEC)
+ if (hDecoder->ps_used[hDecoder->fr_ch_ele])
+ output_channels = 2;
+ else
+ output_channels = 1;
#else
output_channels = 1;
#endif
- if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] < output_channels)
+ if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
{
+ /* element_output_channels not set yet */
hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
+ } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
+ /* element inconsistency */
+
+ /* this only happens if PS is actually found but not in the first frame
+ * this means that there is only 1 bitstream element!
+ */
+
+ /* reset the allocation */
+ hDecoder->element_alloced[hDecoder->fr_ch_ele] = 0;
+
+ hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
+
+ //return 21;
+ }
+
+ if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
+ {
retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
if (retval > 0)
return retval;
@@ -870,7 +951,8 @@ uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
/* pns decoding */
- pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type);
+ pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
+ &(hDecoder->__r1), &(hDecoder->__r2));
#ifdef MAIN_DEC
/* MAIN object type prediction */
@@ -954,8 +1036,8 @@ uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
&& hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
{
- uint8_t ele = hDecoder->fr_ch_ele;
- uint8_t ch = sce->channel;
+ int ele = hDecoder->fr_ch_ele;
+ int ch = sce->channel;
/* following case can happen when forceUpSampling == 1 */
if (hDecoder->sbr[ele] == NULL)
@@ -970,9 +1052,9 @@ uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
}
if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
- hDecoder->sbr[ele]->maxAACLine = 8*sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)];
+ hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
else
- hDecoder->sbr[ele]->maxAACLine = sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)];
+ hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
/* check if any of the PS tools is used */
#if (defined(PS_DEC) || defined(DRM_PS))
@@ -995,20 +1077,21 @@ uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder, ic_stream *ics,
{
return 23;
}
+#endif
/* copy L to R when no PS is used */
#if (defined(PS_DEC) || defined(DRM_PS))
- if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) && (output_channels == 2))
+ if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
+ (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
{
- uint8_t ele = hDecoder->fr_ch_ele;
- uint8_t ch = sce->channel;
- uint16_t frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
+ int ele = hDecoder->fr_ch_ele;
+ int ch = sce->channel;
+ int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
frame_size *= hDecoder->frameLength*sizeof(real_t);
memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
}
#endif
-#endif
return 0;
}
@@ -1049,10 +1132,13 @@ uint8_t reconstruct_channel_pair(NeAACDecHandle hDecoder, ic_stream *ics1, ic_st
/* pns decoding */
if (ics1->ms_mask_present)
{
- pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type);
+ pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
+ &(hDecoder->__r1), &(hDecoder->__r2));
} else {
- pns_decode(ics1, NULL, spec_coef1, NULL, hDecoder->frameLength, 0, hDecoder->object_type);
- pns_decode(ics2, NULL, spec_coef2, NULL, hDecoder->frameLength, 0, hDecoder->object_type);
+ pns_decode(ics1, NULL, spec_coef1, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
+ &(hDecoder->__r1), &(hDecoder->__r2));
+ pns_decode(ics2, NULL, spec_coef2, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
+ &(hDecoder->__r1), &(hDecoder->__r2));
}
/* mid/side decoding */
@@ -1204,9 +1290,9 @@ uint8_t reconstruct_channel_pair(NeAACDecHandle hDecoder, ic_stream *ics1, ic_st
if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
&& hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
{
- uint8_t ele = hDecoder->fr_ch_ele;
- uint8_t ch0 = cpe->channel;
- uint8_t ch1 = cpe->paired_channel;
+ int ele = hDecoder->fr_ch_ele;
+ int ch0 = cpe->channel;
+ int ch1 = cpe->paired_channel;
/* following case can happen when forceUpSampling == 1 */
if (hDecoder->sbr[ele] == NULL)
@@ -1221,9 +1307,9 @@ uint8_t reconstruct_channel_pair(NeAACDecHandle hDecoder, ic_stream *ics1, ic_st
}
if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
- hDecoder->sbr[ele]->maxAACLine = 8*cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)];
+ hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
else
- hDecoder->sbr[ele]->maxAACLine = cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)];
+ hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
hDecoder->time_out[ch0], hDecoder->time_out[ch1],
diff --git a/contrib/libfaad/specrec.h b/contrib/libfaad/specrec.h
index da174abe8..f58094cf4 100644
--- a/contrib/libfaad/specrec.h
+++ b/contrib/libfaad/specrec.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: specrec.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: specrec.h,v 1.32 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SPECREC_H__
diff --git a/contrib/libfaad/ssr.c b/contrib/libfaad/ssr.c
index 46517d0c8..368112407 100644
--- a/contrib/libfaad/ssr.c
+++ b/contrib/libfaad/ssr.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ssr.c,v 1.6 2005/10/29 23:57:07 tmmm Exp $
+** $Id: ssr.c,v 1.19 2007/11/01 12:33:36 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/ssr.h b/contrib/libfaad/ssr.h
index d1defdc45..7adcf2a11 100644
--- a/contrib/libfaad/ssr.h
+++ b/contrib/libfaad/ssr.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ssr.h,v 1.6 2005/10/29 23:57:07 tmmm Exp $
+** $Id: ssr.h,v 1.19 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SSR_H__
diff --git a/contrib/libfaad/ssr_fb.c b/contrib/libfaad/ssr_fb.c
index fb62c90c6..a977c9411 100644
--- a/contrib/libfaad/ssr_fb.c
+++ b/contrib/libfaad/ssr_fb.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ssr_fb.c,v 1.6 2005/10/29 23:57:07 tmmm Exp $
+** $Id: ssr_fb.c,v 1.17 2007/11/01 12:33:36 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/ssr_fb.h b/contrib/libfaad/ssr_fb.h
index 739a4dfbb..3ae4eb04b 100644
--- a/contrib/libfaad/ssr_fb.h
+++ b/contrib/libfaad/ssr_fb.h
@@ -1,6 +1,6 @@
/*
-** FAAD - Freeware Advanced Audio Decoder
-** Copyright (C) 2002 M. Bakker
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Ahead Software AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -16,7 +16,16 @@
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
-** $Id: ssr_fb.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** Any non-GPL usage of this software or parts of this software is strictly
+** forbidden.
+**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
+** Commercial non-GPL licensing of this software is possible.
+** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+**
+** $Id: ssr_fb.h,v 1.16 2007/11/01 12:33:36 menno Exp $
**/
#ifndef __SSR_FB_H__
diff --git a/contrib/libfaad/ssr_ipqf.c b/contrib/libfaad/ssr_ipqf.c
index 3064285de..6963427c9 100644
--- a/contrib/libfaad/ssr_ipqf.c
+++ b/contrib/libfaad/ssr_ipqf.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: ssr_ipqf.c,v 1.6 2005/10/29 23:57:07 tmmm Exp $
+** $Id: ssr_ipqf.c,v 1.18 2007/11/01 12:33:39 menno Exp $
**/
#include "common.h"
diff --git a/contrib/libfaad/ssr_ipqf.h b/contrib/libfaad/ssr_ipqf.h
index 360db978b..47299219c 100644
--- a/contrib/libfaad/ssr_ipqf.h
+++ b/contrib/libfaad/ssr_ipqf.h
@@ -1,6 +1,6 @@
/*
-** FAAD - Freeware Advanced Audio Decoder
-** Copyright (C) 2002 M. Bakker
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Ahead Software AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -16,7 +16,16 @@
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
-** $Id: ssr_ipqf.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** Any non-GPL usage of this software or parts of this software is strictly
+** forbidden.
+**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
+** Commercial non-GPL licensing of this software is possible.
+** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+**
+** $Id: ssr_ipqf.h,v 1.17 2007/11/01 12:33:39 menno Exp $
**/
#ifndef __SSR_IPQF_H__
diff --git a/contrib/libfaad/ssr_win.h b/contrib/libfaad/ssr_win.h
index ddbb3086e..64b0f98bf 100644
--- a/contrib/libfaad/ssr_win.h
+++ b/contrib/libfaad/ssr_win.h
@@ -1,6 +1,6 @@
/*
-** FAAD - Freeware Advanced Audio Decoder
-** Copyright (C) 2002 M. Bakker
+** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
+** Copyright (C) 2003-2005 M. Bakker, Ahead Software AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -16,7 +16,16 @@
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
-** $Id: ssr_win.h,v 1.5 2005/10/29 23:57:07 tmmm Exp $
+** Any non-GPL usage of this software or parts of this software is strictly
+** forbidden.
+**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
+** Commercial non-GPL licensing of this software is possible.
+** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+**
+** $Id: ssr_win.h,v 1.16 2007/11/01 12:33:39 menno Exp $
**/
#ifndef __SSR_WIN_H__
diff --git a/contrib/libfaad/structs.h b/contrib/libfaad/structs.h
index db6361a5c..5d957c59e 100644
--- a/contrib/libfaad/structs.h
+++ b/contrib/libfaad/structs.h
@@ -1,28 +1,31 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: structs.h,v 1.7 2005/10/29 23:57:07 tmmm Exp $
+** $Id: structs.h,v 1.46 2007/11/01 12:33:40 menno Exp $
**/
#ifndef __STRUCTS_H__
@@ -247,6 +250,7 @@ typedef struct
uint8_t scale_factor_grouping;
uint16_t sect_sfb_offset[8][15*8];
uint16_t swb_offset[52];
+ uint16_t swb_offset_max;
uint8_t sect_cb[8][15*8];
uint16_t sect_start[8][15*8];
@@ -261,6 +265,7 @@ typedef struct
uint8_t ms_used[MAX_WINDOW_GROUPS][MAX_SFB];
uint8_t noise_used;
+ uint8_t is_used;
uint8_t pulse_data_present;
uint8_t tns_data_present;
@@ -447,6 +452,14 @@ typedef struct
int16_t *lt_pred_stat[MAX_CHANNELS];
#endif
+#ifdef DRM
+ uint8_t error_state;
+#endif
+
+ /* RNG states */
+ uint32_t __r1;
+ uint32_t __r2;
+
/* Program Config Element */
uint8_t pce_set;
program_config pce;
@@ -463,6 +476,7 @@ typedef struct
int64_t scalefac_cycles;
int64_t requant_cycles;
#endif
+ const unsigned char *cmes;
} NeAACDecStruct, *NeAACDecHandle;
diff --git a/contrib/libfaad/syntax.c b/contrib/libfaad/syntax.c
index 6dc9fc57d..373582b7f 100644
--- a/contrib/libfaad/syntax.c
+++ b/contrib/libfaad/syntax.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: syntax.c,v 1.10 2006/09/26 17:48:24 dgp85 Exp $
+** $Id: syntax.c,v 1.89 2007/11/01 12:33:40 menno Exp $
**/
/*
@@ -93,9 +96,11 @@ static void adts_variable_header(adts_header *adts, bitfile *ld);
static void adts_error_check(adts_header *adts, bitfile *ld);
static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc);
static uint8_t excluded_channels(bitfile *ld, drc_info *drc);
-#ifdef SCALABLE_DEC
-static int8_t aac_scalable_main_header(NeAACDecHandle hDecoder, ic_stream *ics1, ic_stream *ics2,
- bitfile *ld, uint8_t this_layer_stereo);
+static uint8_t side_info(NeAACDecHandle hDecoder, element *ele,
+ bitfile *ld, ic_stream *ics, uint8_t scal_flag);
+#ifdef DRM
+static int8_t DRM_aac_scalable_main_header(NeAACDecHandle hDecoder, ic_stream *ics1, ic_stream *ics2,
+ bitfile *ld, uint8_t this_layer_stereo);
#endif
@@ -323,7 +328,7 @@ static void decode_sce_lfe(NeAACDecHandle hDecoder,
uint8_t channels = hDecoder->fr_channels;
uint8_t tag = 0;
- if (channels+1 >= MAX_CHANNELS)
+ if (channels+1 > MAX_CHANNELS)
{
hInfo->error = 12;
return;
@@ -413,6 +418,7 @@ void raw_data_block(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
bitfile *ld, program_config *pce, drc_info *drc)
{
uint8_t id_syn_ele;
+ uint8_t ele_this_frame = 0;
hDecoder->fr_channels = 0;
hDecoder->fr_ch_ele = 0;
@@ -429,36 +435,55 @@ void raw_data_block(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
{
switch (id_syn_ele) {
case ID_SCE:
+ ele_this_frame++;
if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
if (hInfo->error > 0)
return;
break;
case ID_CPE:
+ ele_this_frame++;
if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
decode_cpe(hDecoder, hInfo, ld, id_syn_ele);
if (hInfo->error > 0)
return;
break;
case ID_LFE:
+#ifdef DRM
+ hInfo->error = 32;
+#else
+ ele_this_frame++;
hDecoder->has_lfe++;
decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
+#endif
if (hInfo->error > 0)
return;
break;
case ID_CCE: /* not implemented yet, but skip the bits */
+#ifdef DRM
+ hInfo->error = 32;
+#else
+ ele_this_frame++;
#ifdef COUPLING_DEC
hInfo->error = coupling_channel_element(hDecoder, ld);
#else
hInfo->error = 6;
#endif
+#endif
if (hInfo->error > 0)
return;
break;
case ID_DSE:
+ ele_this_frame++;
data_stream_element(hDecoder, ld);
break;
case ID_PCE:
+ if (ele_this_frame != 0)
+ {
+ hInfo->error = 31;
+ return;
+ }
+ ele_this_frame++;
/* 14496-4: 5.6.4.1.2.1.3: */
/* program_configuration_element()'s in access units shall be ignored */
program_config_element(pce, ld);
@@ -467,6 +492,7 @@ void raw_data_block(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
//hDecoder->pce_set = 1;
break;
case ID_FIL:
+ ele_this_frame++;
/* one sbr_info describes a channel_element not a channel! */
/* if we encounter SBR data here: error */
/* SBR data will be read directly in the SCE/LFE/CPE element */
@@ -577,6 +603,10 @@ static uint8_t single_lfe_channel_element(NeAACDecHandle hDecoder, bitfile *ld,
if (retval > 0)
return retval;
+ /* IS not allowed in single channel */
+ if (ics->is_used)
+ return 32;
+
#ifdef SBR_DEC
/* check if next bitstream element is a fill element */
/* if so, read it now so SBR decoding can be done in case of a file with SBR */
@@ -627,6 +657,11 @@ static uint8_t channel_pair_element(NeAACDecHandle hDecoder, bitfile *ld,
ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
DEBUGVAR(1,41,"channel_pair_element(): ms_mask_present"));
+ if (ics1->ms_mask_present == 3)
+ {
+ /* bitstream error */
+ return 32;
+ }
if (ics1->ms_mask_present == 1)
{
uint8_t g, sfb;
@@ -730,14 +765,23 @@ static uint8_t ics_info(NeAACDecHandle hDecoder, ic_stream *ics, bitfile *ld,
uint8_t common_window)
{
uint8_t retval = 0;
+ uint8_t ics_reserved_bit;
- /* ics->ics_reserved_bit = */ faad_get1bit(ld
+ ics_reserved_bit = faad_get1bit(ld
DEBUGVAR(1,43,"ics_info(): ics_reserved_bit"));
+ if (ics_reserved_bit != 0)
+ return 32;
ics->window_sequence = (uint8_t)faad_getbits(ld, 2
DEBUGVAR(1,44,"ics_info(): window_sequence"));
ics->window_shape = faad_get1bit(ld
DEBUGVAR(1,45,"ics_info(): window_shape"));
+#ifdef LD_DEC
+ /* No block switching in LD */
+ if ((hDecoder->object_type == LD) && (ics->window_sequence != ONLY_LONG_SEQUENCE))
+ return 32;
+#endif
+
if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
{
ics->max_sfb = (uint8_t)faad_getbits(ld, 4
@@ -753,6 +797,7 @@ static uint8_t ics_info(NeAACDecHandle hDecoder, ic_stream *ics, bitfile *ld,
if ((retval = window_grouping_info(hDecoder, ics)) > 0)
return retval;
+
/* should be an error */
/* check the range of max_sfb */
if (ics->max_sfb > ics->num_swb)
@@ -922,6 +967,10 @@ static uint8_t coupling_channel_element(NeAACDecHandle hDecoder, bitfile *ld)
return result;
}
+ /* IS not allowed in single channel */
+ if (ics->is_used)
+ return 32;
+
for (c = 1; c < num_gain_element_lists; c++)
{
uint8_t cge;
@@ -1029,7 +1078,8 @@ static uint8_t fill_element(NeAACDecHandle hDecoder, bitfile *ld, drc_info *drc
hDecoder->sbr_present_flag = 1;
/* parse the SBR data */
- hDecoder->sbr[sbr_ele]->ret = sbr_extension_data(ld, hDecoder->sbr[sbr_ele], count);
+ hDecoder->sbr[sbr_ele]->ret = sbr_extension_data(ld, hDecoder->sbr[sbr_ele], count,
+ hDecoder->postSeekResetFlag);
#if 0
if (hDecoder->sbr[sbr_ele]->ret > 0)
@@ -1049,10 +1099,14 @@ static uint8_t fill_element(NeAACDecHandle hDecoder, bitfile *ld, drc_info *drc
#endif
} else {
#endif
+#ifndef DRM
while (count > 0)
{
count -= extension_payload(ld, drc, count);
}
+#else
+ return 30;
+#endif
#ifdef SBR_DEC
}
#endif
@@ -1157,10 +1211,10 @@ static void gain_control_data(bitfile *ld, ic_stream *ics)
}
#endif
-#ifdef SCALABLE_DEC
+#ifdef DRM
/* Table 4.4.13 ASME */
-void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
- bitfile *ld, program_config *pce, drc_info *drc)
+void DRM_aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
+ bitfile *ld, program_config *pce, drc_info *drc)
{
uint8_t retval = 0;
uint8_t channels = hDecoder->fr_channels = 0;
@@ -1175,7 +1229,7 @@ void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo
hDecoder->fr_ch_ele = 0;
- hInfo->error = aac_scalable_main_header(hDecoder, ics1, ics2, ld, this_layer_stereo);
+ hInfo->error = DRM_aac_scalable_main_header(hDecoder, ics1, ics2, ld, this_layer_stereo);
if (hInfo->error > 0)
return;
@@ -1189,22 +1243,77 @@ void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo
hDecoder->element_id[0] = ID_SCE;
}
- for (ch = 0; ch < (this_layer_stereo ? 2 : 1); ch++)
+ if (this_layer_stereo)
{
- ic_stream *ics;
- if (ch == 0)
- {
- ics = ics1;
- spec_data = spec_data1;
- } else {
- ics = ics2;
- spec_data = spec_data2;
- }
+ cpe.channel = 0;
+ cpe.paired_channel = 1;
+ }
+
+
+ /* Stereo2 / Mono1 */
+ ics1->tns_data_present = faad_get1bit(ld);
- hInfo->error = individual_channel_stream(hDecoder, &cpe, ld, ics, 1, spec_data);
+#if defined(LTP_DEC)
+ ics1->ltp.data_present = faad_get1bit(ld);
+#elif defined (DRM)
+ if(faad_get1bit(ld)) {
+ hInfo->error = 26;
+ return;
+ }
+#else
+ faad_get1bit(ld);
+#endif
+
+ hInfo->error = side_info(hDecoder, &cpe, ld, ics1, 1);
+ if (hInfo->error > 0)
+ return;
+ if (this_layer_stereo)
+ {
+ /* Stereo3 */
+ ics2->tns_data_present = faad_get1bit(ld);
+#ifdef LTP_DEC
+ ics1->ltp.data_present =
+#endif
+ faad_get1bit(ld);
+ hInfo->error = side_info(hDecoder, &cpe, ld, ics2, 1);
if (hInfo->error > 0)
return;
}
+ /* Stereo4 / Mono2 */
+ if (ics1->tns_data_present)
+ tns_data(ics1, &(ics1->tns), ld);
+ if (this_layer_stereo)
+ {
+ /* Stereo5 */
+ if (ics2->tns_data_present)
+ tns_data(ics2, &(ics2->tns), ld);
+ }
+
+#ifdef DRM
+ /* CRC check */
+ if (hDecoder->object_type == DRM_ER_LC)
+ {
+ if ((hInfo->error = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
+ return;
+ }
+#endif
+
+ /* Stereo6 / Mono3 */
+ /* error resilient spectral data decoding */
+ if ((hInfo->error = reordered_spectral_data(hDecoder, ics1, ld, spec_data1)) > 0)
+ {
+ return;
+ }
+ if (this_layer_stereo)
+ {
+ /* Stereo7 */
+ /* error resilient spectral data decoding */
+ if ((hInfo->error = reordered_spectral_data(hDecoder, ics2, ld, spec_data2)) > 0)
+ {
+ return;
+ }
+ }
+
#ifdef DRM
#ifdef SBR_DEC
@@ -1244,6 +1353,7 @@ void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo
/* Set SBR data */
/* consider 8 bits from AAC-CRC */
+ /* SBR buffer size is original buffer size minus AAC buffer size */
count = (uint16_t)bit2byte(buffer_size*8 - bitsconsumed);
faad_initbits(&ld_sbr, revbuffer, count);
@@ -1252,7 +1362,7 @@ void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo
faad_getbits(&ld_sbr, 8); /* Skip 8-bit CRC */
- hDecoder->sbr[0]->ret = sbr_extension_data(&ld_sbr, hDecoder->sbr[0], count);
+ hDecoder->sbr[0]->ret = sbr_extension_data(&ld_sbr, hDecoder->sbr[0], count, hDecoder->postSeekResetFlag);
#if (defined(PS_DEC) || defined(DRM_PS))
if (hDecoder->sbr[0]->ps_used)
{
@@ -1261,6 +1371,11 @@ void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo
}
#endif
+ if (ld_sbr.error)
+ {
+ hDecoder->sbr[0]->ret = 1;
+ }
+
/* check CRC */
/* no need to check it if there was already an error */
if (hDecoder->sbr[0]->ret == 0)
@@ -1269,7 +1384,7 @@ void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo
/* SBR data was corrupted, disable it until the next header */
if (hDecoder->sbr[0]->ret != 0)
{
- hDecoder->sbr[0]->header_count = 0;
+ hDecoder->sbr[0]->header_count = 0;
}
faad_endbits(&ld_sbr);
@@ -1308,15 +1423,18 @@ void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo
}
/* Table 4.4.15 */
-static int8_t aac_scalable_main_header(NeAACDecHandle hDecoder, ic_stream *ics1, ic_stream *ics2,
- bitfile *ld, uint8_t this_layer_stereo)
+static int8_t DRM_aac_scalable_main_header(NeAACDecHandle hDecoder, ic_stream *ics1, ic_stream *ics2,
+ bitfile *ld, uint8_t this_layer_stereo)
{
uint8_t retval = 0;
uint8_t ch;
ic_stream *ics;
+ uint8_t ics_reserved_bit;
- /* ics1->ics_reserved_bit = */ faad_get1bit(ld
+ ics_reserved_bit = faad_get1bit(ld
DEBUGVAR(1,300,"aac_scalable_main_header(): ics_reserved_bits"));
+ if (ics_reserved_bit != 0)
+ return 32;
ics1->window_sequence = (uint8_t)faad_getbits(ld, 2
DEBUGVAR(1,301,"aac_scalable_main_header(): window_sequence"));
ics1->window_shape = faad_get1bit(ld
@@ -1346,6 +1464,11 @@ static int8_t aac_scalable_main_header(NeAACDecHandle hDecoder, ic_stream *ics1,
{
ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
DEBUGVAR(1,306,"aac_scalable_main_header(): ms_mask_present"));
+ if (ics1->ms_mask_present == 3)
+ {
+ /* bitstream error */
+ return 32;
+ }
if (ics1->ms_mask_present == 1)
{
uint8_t g, sfb;
@@ -1364,70 +1487,12 @@ static int8_t aac_scalable_main_header(NeAACDecHandle hDecoder, ic_stream *ics1,
ics1->ms_mask_present = 0;
}
- if (0)
- {
- faad_get1bit(ld
- DEBUGVAR(1,308,"aac_scalable_main_header(): tns_channel_mono_layer"));
- }
-
- for (ch = 0; ch < (this_layer_stereo ? 2 : 1); ch++)
- {
- if (ch == 0)
- ics = ics1;
- else
- ics = ics2;
-
- if ( 1 /*!tvq_layer_pesent || (tns_aac_tvq_en[ch] == 1)*/)
- {
- if ((ics->tns_data_present = faad_get1bit(ld
- DEBUGVAR(1,309,"aac_scalable_main_header(): tns_data_present"))) & 1)
- {
-#ifdef DRM
- /* different order of data units in DRM */
- if (hDecoder->object_type != DRM_ER_LC)
-#endif
- {
- tns_data(ics, &(ics->tns), ld);
- }
- }
- }
-#if 0
- if (0 /*core_flag || tvq_layer_pesent*/)
- {
- if ((ch==0) || ((ch==1) && (core_stereo || tvq_stereo))
- diff_control_data();
- if (mono_stereo_flag)
- diff_control_data_lr();
- } else {
-#endif
- if ((
-#ifdef LTP_DEC
- ics->ltp.data_present =
-#endif
- faad_get1bit(ld DEBUGVAR(1,310,"aac_scalable_main_header(): ltp.data_present"))) & 1)
- {
-#ifdef LTP_DEC
- if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
- {
- return retval;
- }
-#else
- return 26;
-#endif
- }
-#if 0
- }
-#endif
- }
-
return 0;
}
#endif
-/* Table 4.4.24 */
-static uint8_t individual_channel_stream(NeAACDecHandle hDecoder, element *ele,
- bitfile *ld, ic_stream *ics, uint8_t scal_flag,
- int16_t *spec_data)
+static uint8_t side_info(NeAACDecHandle hDecoder, element *ele,
+ bitfile *ld, ic_stream *ics, uint8_t scal_flag)
{
uint8_t result;
@@ -1513,6 +1578,21 @@ static uint8_t individual_channel_stream(NeAACDecHandle hDecoder, element *ele,
if ((result = rvlc_decode_scale_factors(ics, ld)) > 0)
return result;
}
+#endif
+
+ return 0;
+}
+
+/* Table 4.4.24 */
+static uint8_t individual_channel_stream(NeAACDecHandle hDecoder, element *ele,
+ bitfile *ld, ic_stream *ics, uint8_t scal_flag,
+ int16_t *spec_data)
+{
+ uint8_t result;
+
+ result = side_info(hDecoder, ele, ld, ics, scal_flag);
+ if (result > 0)
+ return result;
if (hDecoder->object_type >= ER_OBJECT_START)
{
@@ -1523,10 +1603,13 @@ static uint8_t individual_channel_stream(NeAACDecHandle hDecoder, element *ele,
#ifdef DRM
/* CRC check */
if (hDecoder->object_type == DRM_ER_LC)
+ {
if ((result = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
return result;
+ }
#endif
+#ifdef ERROR_RESILIENCE
if (hDecoder->aacSpectralDataResilienceFlag)
{
/* error resilient spectral data decoding */
@@ -1594,7 +1677,7 @@ static uint8_t section_data(NeAACDecHandle hDecoder, ic_stream *ics, bitfile *ld
/* if "faad_getbits" detects error and returns "0", "k" is never
incremented and we cannot leave the while loop */
- if ((ld->error != 0) || (ld->no_more_reading))
+ if (ld->error != 0)
return 14;
#ifdef ERROR_RESILIENCE
@@ -1605,12 +1688,23 @@ static uint8_t section_data(NeAACDecHandle hDecoder, ic_stream *ics, bitfile *ld
ics->sect_cb[g][i] = (uint8_t)faad_getbits(ld, sect_cb_bits
DEBUGVAR(1,71,"section_data(): sect_cb"));
+ if (ics->sect_cb[g][i] == 12)
+ return 32;
+
#if 0
printf("%d\n", ics->sect_cb[g][i]);
#endif
+#ifndef DRM
if (ics->sect_cb[g][i] == NOISE_HCB)
ics->noise_used = 1;
+#else
+ /* PNS not allowed in DRM */
+ if (ics->sect_cb[g][i] == NOISE_HCB)
+ return 29;
+#endif
+ if (ics->sect_cb[g][i] == INTENSITY_HCB2 || ics->sect_cb[g][i] == INTENSITY_HCB)
+ ics->is_used = 1;
#ifdef ERROR_RESILIENCE
if (hDecoder->aacSectionDataResilienceFlag)
@@ -1651,10 +1745,18 @@ static uint8_t section_data(NeAACDecHandle hDecoder, ic_stream *ics, bitfile *ld
printf("%d\n", ics->sect_end[g][i]);
#endif
- if (k + sect_len >= 8*15)
- return 15;
- if (i >= 8*15)
- return 15;
+ if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
+ {
+ if (k + sect_len > 8*15)
+ return 15;
+ if (i >= 8*15)
+ return 15;
+ } else {
+ if (k + sect_len > MAX_SFB)
+ return 15;
+ if (i >= MAX_SFB)
+ return 15;
+ }
for (sfb = k; sfb < k + sect_len; sfb++)
{
@@ -1675,6 +1777,13 @@ static uint8_t section_data(NeAACDecHandle hDecoder, ic_stream *ics, bitfile *ld
i++;
}
ics->num_sec[g] = i;
+
+ /* the sum of all sect_len_incr elements for a given window
+ * group shall equal max_sfb */
+ if (k != ics->max_sfb)
+ {
+ return 32;
+ }
#if 0
printf("%d\n", ics->num_sec[g]);
#endif
@@ -1735,6 +1844,7 @@ static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld)
break;
case NOISE_HCB: /* noise books */
+#ifndef DRM
/* decode noise energy */
if (noise_pcm_flag)
{
@@ -1750,6 +1860,10 @@ static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld)
#ifdef SF_PRINT
printf("%d\n", ics->scale_factors[g][sfb]);
#endif
+#else
+ /* PNS not allowed in DRM */
+ return 29;
+#endif
break;
default: /* spectral books */
@@ -2048,11 +2162,11 @@ static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count)
return n;
case EXT_FILL_DATA:
/* fill_nibble = */ faad_getbits(ld, 4
- DEBUGVAR(1,136,"extension_payload(): fill_nibble")); /* must be '0000' */
+ DEBUGVAR(1,136,"extension_payload(): fill_nibble")); /* must be ‘0000’ */
for (i = 0; i < count-1; i++)
{
/* fill_byte[i] = */ faad_getbits(ld, 8
- DEBUGVAR(1,88,"extension_payload(): fill_byte")); /* must be '10100101' */
+ DEBUGVAR(1,88,"extension_payload(): fill_byte")); /* must be ‘10100101’ */
}
return count;
case EXT_DATA_ELEMENT:
@@ -2127,7 +2241,7 @@ static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc)
n++;
drc->num_bands += band_incr;
- for (i = 0; i < drc->num_bands; i++);
+ for (i = 0; i < drc->num_bands; i++)
{
drc->band_top[i] = (uint8_t)faad_getbits(ld, 8
DEBUGVAR(1,97,"dynamic_range_info(): band_top"));
diff --git a/contrib/libfaad/syntax.h b/contrib/libfaad/syntax.h
index a047dd644..123c4573f 100644
--- a/contrib/libfaad/syntax.h
+++ b/contrib/libfaad/syntax.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: syntax.h,v 1.10 2005/10/29 23:57:07 tmmm Exp $
+** $Id: syntax.h,v 1.58 2007/11/01 12:33:40 menno Exp $
**/
#ifndef __SYNTAX_H__
@@ -114,9 +117,10 @@ void raw_data_block(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
bitfile *ld, program_config *pce, drc_info *drc);
uint8_t reordered_spectral_data(NeAACDecHandle hDecoder, ic_stream *ics, bitfile *ld,
int16_t *spectral_data);
-void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
- bitfile *ld, program_config *pce, drc_info *drc);
-
+#ifdef DRM
+void DRM_aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
+ bitfile *ld, program_config *pce, drc_info *drc);
+#endif
#ifdef __cplusplus
}
diff --git a/contrib/libfaad/tns.c b/contrib/libfaad/tns.c
index bb4db731a..611865204 100644
--- a/contrib/libfaad/tns.c
+++ b/contrib/libfaad/tns.c
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: tns.c,v 1.8 2005/10/29 23:57:07 tmmm Exp $
+** $Id: tns.c,v 1.40 2007/11/01 12:33:40 menno Exp $
**/
#include "common.h"
@@ -106,11 +109,11 @@ void tns_decode_frame(ic_stream *ics, tns_info *tns, uint8_t sr_index,
start = min(bottom, max_tns_sfb(sr_index, object_type, (ics->window_sequence == EIGHT_SHORT_SEQUENCE)));
start = min(start, ics->max_sfb);
- start = ics->swb_offset[start];
+ start = min(ics->swb_offset[start], ics->swb_offset_max);
end = min(top, max_tns_sfb(sr_index, object_type, (ics->window_sequence == EIGHT_SHORT_SEQUENCE)));
end = min(end, ics->max_sfb);
- end = ics->swb_offset[end];
+ end = min(ics->swb_offset[end], ics->swb_offset_max);
size = end - start;
if (size <= 0)
@@ -160,11 +163,11 @@ void tns_encode_frame(ic_stream *ics, tns_info *tns, uint8_t sr_index,
start = min(bottom, max_tns_sfb(sr_index, object_type, (ics->window_sequence == EIGHT_SHORT_SEQUENCE)));
start = min(start, ics->max_sfb);
- start = ics->swb_offset[start];
+ start = min(ics->swb_offset[start], ics->swb_offset_max);
end = min(top, max_tns_sfb(sr_index, object_type, (ics->window_sequence == EIGHT_SHORT_SEQUENCE)));
end = min(end, ics->max_sfb);
- end = ics->swb_offset[end];
+ end = min(ics->swb_offset[end], ics->swb_offset_max);
size = end - start;
if (size <= 0)
@@ -292,7 +295,7 @@ static void tns_ma_filter(real_t *spectrum, uint16_t size, int8_t inc, real_t *l
y = *spectrum;
for (j = 0; j < order; j++)
- y += MUL_C(state[j], lpc[j+1]);
+ y += MUL_C(state[state_index+j], lpc[j+1]);
/* double ringbuffer state */
state_index--;
diff --git a/contrib/libfaad/tns.h b/contrib/libfaad/tns.h
index fc77894d8..8848c3f2d 100644
--- a/contrib/libfaad/tns.h
+++ b/contrib/libfaad/tns.h
@@ -1,6 +1,6 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
+** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@@ -19,10 +19,13 @@
** Any non-GPL usage of this software or parts of this software is strictly
** forbidden.
**
+** The "appropriate copyright message" mentioned in section 2c of the GPLv2
+** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
+**
** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
+** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
**
-** $Id: tns.h,v 1.8 2005/10/29 23:57:07 tmmm Exp $
+** $Id: tns.h,v 1.23 2007/11/01 12:33:41 menno Exp $
**/
#ifndef __TNS_H__