summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohamed Tarek <mt@rockbox.org>2010-07-14 19:37:52 +0000
committerMohamed Tarek <mt@rockbox.org>2010-07-14 19:37:52 +0000
commitd63abfc7eb7db5eb36b325198fbb6ceaf8778685 (patch)
treedc9496f504711569180fd9c5a91cf6e748815869
parent16284ae8aef30ec67d7fd9c34519bce17d64ab3a (diff)
downloadrockbox-d63abfc7eb7db5eb36b325198fbb6ceaf8778685.tar.gz
rockbox-d63abfc7eb7db5eb36b325198fbb6ceaf8778685.zip
Add WMA Pro to the main build. WMA Pro now plays on target and decodes in 151% realtime in a 320kbps sample on a sansa e200. Lots of cleanup still need to be done, and optimisations should start soon too.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27417 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/SOURCES1
-rw-r--r--apps/codecs/codecs.make4
-rw-r--r--apps/codecs/libwmapro/SOURCES2
-rw-r--r--apps/codecs/libwmapro/bitstream.c26
-rw-r--r--apps/codecs/libwmapro/get_bits.h6
-rw-r--r--apps/codecs/libwmapro/libavutil/avutil.h2
-rw-r--r--apps/codecs/libwmapro/libavutil/bswap.h13
-rw-r--r--apps/codecs/libwmapro/libavutil/internal.h19
-rw-r--r--apps/codecs/libwmapro/libavutil/intreadwrite.h18
-rw-r--r--apps/codecs/libwmapro/libavutil/log.c9
-rw-r--r--apps/codecs/libwmapro/libavutil/log.h2
-rw-r--r--apps/codecs/libwmapro/libavutil/mathematics.c4
-rw-r--r--apps/codecs/libwmapro/mathops.h14
-rw-r--r--apps/codecs/libwmapro/put_bits.h2
-rw-r--r--apps/codecs/libwmapro/wma.c3
-rw-r--r--apps/codecs/libwmapro/wma.h88
-rw-r--r--apps/codecs/libwmapro/wmapro_mdct.c1
-rw-r--r--apps/codecs/libwmapro/wmaprodec.c71
-rw-r--r--apps/codecs/wmapro.c2
19 files changed, 81 insertions, 206 deletions
diff --git a/apps/codecs/SOURCES b/apps/codecs/SOURCES
index ca50529aed..1c484c4dcc 100644
--- a/apps/codecs/SOURCES
+++ b/apps/codecs/SOURCES
@@ -16,6 +16,7 @@ atrac3_rm.c
16atrac3_oma.c 16atrac3_oma.c
17mpc.c 17mpc.c
18wma.c 18wma.c
19wmapro.c
19sid.c 20sid.c
20ape.c 21ape.c
21nsf.c 22nsf.c
diff --git a/apps/codecs/codecs.make b/apps/codecs/codecs.make
index c137426591..49407db6b8 100644
--- a/apps/codecs/codecs.make
+++ b/apps/codecs/codecs.make
@@ -37,6 +37,7 @@ include $(APPSDIR)/codecs/libspeex/libspeex.make
37include $(APPSDIR)/codecs/libtremor/libtremor.make 37include $(APPSDIR)/codecs/libtremor/libtremor.make
38include $(APPSDIR)/codecs/libwavpack/libwavpack.make 38include $(APPSDIR)/codecs/libwavpack/libwavpack.make
39include $(APPSDIR)/codecs/libwma/libwma.make 39include $(APPSDIR)/codecs/libwma/libwma.make
40include $(APPSDIR)/codecs/libwmapro/libwmapro.make
40include $(APPSDIR)/codecs/libcook/libcook.make 41include $(APPSDIR)/codecs/libcook/libcook.make
41include $(APPSDIR)/codecs/librm/librm.make 42include $(APPSDIR)/codecs/librm/librm.make
42include $(APPSDIR)/codecs/libatrac/libatrac.make 43include $(APPSDIR)/codecs/libatrac/libatrac.make
@@ -58,7 +59,7 @@ CODEC_CRT0 := $(CODECDIR)/codec_crt0.o
58CODECLIBS := $(DEMACLIB) $(A52LIB) $(ALACLIB) $(ASAPLIB) \ 59CODECLIBS := $(DEMACLIB) $(A52LIB) $(ALACLIB) $(ASAPLIB) \
59 $(FAADLIB) $(FFMPEGFLACLIB) $(M4ALIB) $(MADLIB) $(MUSEPACKLIB) \ 60 $(FAADLIB) $(FFMPEGFLACLIB) $(M4ALIB) $(MADLIB) $(MUSEPACKLIB) \
60 $(SPCLIB) $(SPEEXLIB) $(TREMORLIB) $(WAVPACKLIB) $(WMALIB) $(COOKLIB) \ 61 $(SPCLIB) $(SPEEXLIB) $(TREMORLIB) $(WAVPACKLIB) $(WMALIB) $(COOKLIB) \
61 $(ATRACLIB) \ 62 $(ATRACLIB) $(WMAPROLIB) \
62 $(CODECLIB) 63 $(CODECLIB)
63 64
64$(CODECS): $(CODEC_CRT0) $(CODECLINK_LDS) 65$(CODECS): $(CODEC_CRT0) $(CODECLINK_LDS)
@@ -83,6 +84,7 @@ $(CODECDIR)/shorten.codec : $(CODECDIR)/libffmpegFLAC.a
83$(CODECDIR)/ape-pre.map : $(CODECDIR)/libdemac-pre.a 84$(CODECDIR)/ape-pre.map : $(CODECDIR)/libdemac-pre.a
84$(CODECDIR)/ape.codec : $(CODECDIR)/libdemac.a 85$(CODECDIR)/ape.codec : $(CODECDIR)/libdemac.a
85$(CODECDIR)/wma.codec : $(CODECDIR)/libwma.a $(CODECDIR)/libasf.a 86$(CODECDIR)/wma.codec : $(CODECDIR)/libwma.a $(CODECDIR)/libasf.a
87$(CODECDIR)/wmapro.codec : $(CODECDIR)/libwmapro.a $(CODECDIR)/libasf.a
86$(CODECDIR)/wavpack_enc.codec: $(CODECDIR)/libwavpack.a 88$(CODECDIR)/wavpack_enc.codec: $(CODECDIR)/libwavpack.a
87$(CODECDIR)/asap.codec : $(CODECDIR)/libasap.a 89$(CODECDIR)/asap.codec : $(CODECDIR)/libasap.a
88$(CODECDIR)/cook.codec : $(CODECDIR)/libcook.a $(CODECDIR)/librm.a 90$(CODECDIR)/cook.codec : $(CODECDIR)/libcook.a $(CODECDIR)/librm.a
diff --git a/apps/codecs/libwmapro/SOURCES b/apps/codecs/libwmapro/SOURCES
index 1d5909bf9a..cfb1a97d4c 100644
--- a/apps/codecs/libwmapro/SOURCES
+++ b/apps/codecs/libwmapro/SOURCES
@@ -3,6 +3,4 @@ wma.c
3mdct_tables.c 3mdct_tables.c
4bitstream.c 4bitstream.c
5wmapro_mdct.c 5wmapro_mdct.c
6libavutil/log.c
7libavutil/mem.c
8libavutil/mathematics.c 6libavutil/mathematics.c
diff --git a/apps/codecs/libwmapro/bitstream.c b/apps/codecs/libwmapro/bitstream.c
index deb1d631e2..4ae9727ac0 100644
--- a/apps/codecs/libwmapro/bitstream.c
+++ b/apps/codecs/libwmapro/bitstream.c
@@ -32,6 +32,8 @@
32#include "get_bits.h" 32#include "get_bits.h"
33#include "put_bits.h" 33#include "put_bits.h"
34 34
35#define av_log(...)
36
35const uint8_t ff_log2_run[32]={ 37const uint8_t ff_log2_run[32]={
36 0, 0, 0, 0, 1, 1, 1, 1, 38 0, 0, 0, 0, 1, 1, 1, 1,
37 2, 2, 2, 2, 3, 3, 3, 3, 39 2, 2, 2, 2, 3, 3, 3, 3,
@@ -108,10 +110,10 @@ static int alloc_table(VLC *vlc, int size, int use_static)
108 vlc->table_size += size; 110 vlc->table_size += size;
109 if (vlc->table_size > vlc->table_allocated) { 111 if (vlc->table_size > vlc->table_allocated) {
110 if(use_static) 112 if(use_static)
111 abort(); //cant do anything, init_vlc() is used with too little memory 113 return -1; //cant do anything, init_vlc() is used with too little memory
112 vlc->table_allocated += (1 << vlc->bits); 114 vlc->table_allocated += (1 << vlc->bits);
113 vlc->table = av_realloc(vlc->table, 115 //vlc->table = av_realloc(vlc->table,
114 sizeof(VLC_TYPE) * 2 * vlc->table_allocated); 116 // sizeof(VLC_TYPE) * 2 * vlc->table_allocated);
115 if (!vlc->table) 117 if (!vlc->table)
116 return -1; 118 return -1;
117 } 119 }
@@ -218,14 +220,14 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes,
218 if (n <= 0) 220 if (n <= 0)
219 break; 221 break;
220 code = codes[k].code; 222 code = codes[k].code;
221 if (code >> (32 - table_nb_bits) != code_prefix) 223 if (code >> (32 - table_nb_bits) != (unsigned)code_prefix)
222 break; 224 break;
223 codes[k].bits = n; 225 codes[k].bits = n;
224 codes[k].code = code << table_nb_bits; 226 codes[k].code = code << table_nb_bits;
225 subtable_bits = FFMAX(subtable_bits, n); 227 subtable_bits = FFMAX(subtable_bits, n);
226 } 228 }
227 subtable_bits = FFMIN(subtable_bits, table_nb_bits); 229 subtable_bits = FFMIN(subtable_bits, table_nb_bits);
228 j = (flags & INIT_VLC_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : code_prefix; 230 j = (flags & INIT_VLC_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : (unsigned)code_prefix;
229 table[j][1] = -subtable_bits; 231 table[j][1] = -subtable_bits;
230#ifdef DEBUG_VLC 232#ifdef DEBUG_VLC
231 av_log(NULL,AV_LOG_DEBUG,"%4x: n=%d (subtable)\n", 233 av_log(NULL,AV_LOG_DEBUG,"%4x: n=%d (subtable)\n",
@@ -284,7 +286,7 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
284 if(vlc->table_size && vlc->table_size == vlc->table_allocated){ 286 if(vlc->table_size && vlc->table_size == vlc->table_allocated){
285 return 0; 287 return 0;
286 }else if(vlc->table_size){ 288 }else if(vlc->table_size){
287 abort(); // fatal error, we are called on a partially initialized table 289 return -1; // fatal error, we are called on a partially initialized table
288 } 290 }
289 }else { 291 }else {
290 vlc->table = NULL; 292 vlc->table = NULL;
@@ -321,17 +323,11 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
321 nb_codes = j; 323 nb_codes = j;
322 324
323 if (build_table(vlc, nb_bits, nb_codes, buf, flags) < 0) { 325 if (build_table(vlc, nb_bits, nb_codes, buf, flags) < 0) {
324 av_freep(&vlc->table); 326 //av_freep(&vlc->table);
325 return -1; 327 return -1;
326 } 328 }
327 if((flags & INIT_VLC_USE_NEW_STATIC) && vlc->table_size != vlc->table_allocated) 329 //if((flags & INIT_VLC_USE_NEW_STATIC) && vlc->table_size != vlc->table_allocated)
328 av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); 330 // av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated);
329 return 0; 331 return 0;
330} 332}
331 333
332
333void free_vlc(VLC *vlc)
334{
335 av_freep(&vlc->table);
336}
337
diff --git a/apps/codecs/libwmapro/get_bits.h b/apps/codecs/libwmapro/get_bits.h
index a21d05210f..ecbfc6967b 100644
--- a/apps/codecs/libwmapro/get_bits.h
+++ b/apps/codecs/libwmapro/get_bits.h
@@ -40,13 +40,7 @@
40#endif 40#endif
41 41
42#if !defined(LIBMPEG2_BITSTREAM_READER) && !defined(A32_BITSTREAM_READER) && !defined(ALT_BITSTREAM_READER) 42#if !defined(LIBMPEG2_BITSTREAM_READER) && !defined(A32_BITSTREAM_READER) && !defined(ALT_BITSTREAM_READER)
43# if ARCH_ARM && !HAVE_FAST_UNALIGNED
44# define A32_BITSTREAM_READER
45# else
46# define ALT_BITSTREAM_READER 43# define ALT_BITSTREAM_READER
47//#define LIBMPEG2_BITSTREAM_READER
48//#define A32_BITSTREAM_READER
49# endif
50#endif 44#endif
51 45
52/* bit input */ 46/* bit input */
diff --git a/apps/codecs/libwmapro/libavutil/avutil.h b/apps/codecs/libwmapro/libavutil/avutil.h
index 1b858f1fe6..fd6e313b59 100644
--- a/apps/codecs/libwmapro/libavutil/avutil.h
+++ b/apps/codecs/libwmapro/libavutil/avutil.h
@@ -79,7 +79,7 @@ enum AVMediaType {
79}; 79};
80 80
81#include "common.h" 81#include "common.h"
82#include "error.h" 82//#include "error.h"
83#include "mathematics.h" 83#include "mathematics.h"
84//#include "rational.h" 84//#include "rational.h"
85//#include "intfloat_readwrite.h" 85//#include "intfloat_readwrite.h"
diff --git a/apps/codecs/libwmapro/libavutil/bswap.h b/apps/codecs/libwmapro/libavutil/bswap.h
index 5743e126b8..e15501778b 100644
--- a/apps/codecs/libwmapro/libavutil/bswap.h
+++ b/apps/codecs/libwmapro/libavutil/bswap.h
@@ -30,18 +30,6 @@
30//#include "config.h" 30//#include "config.h"
31#include "attributes.h" 31#include "attributes.h"
32 32
33#if ARCH_ARM
34# include "arm/bswap.h"
35#elif ARCH_AVR32
36# include "avr32/bswap.h"
37#elif ARCH_BFIN
38# include "bfin/bswap.h"
39#elif ARCH_SH4
40# include "sh4/bswap.h"
41#elif ARCH_X86
42# include "x86/bswap.h"
43#endif
44
45#ifndef bswap_16 33#ifndef bswap_16
46static av_always_inline av_const uint16_t bswap_16(uint16_t x) 34static av_always_inline av_const uint16_t bswap_16(uint16_t x)
47{ 35{
@@ -82,6 +70,7 @@ static inline uint64_t av_const bswap_64(uint64_t x)
82// be2me ... big-endian to machine-endian 70// be2me ... big-endian to machine-endian
83// le2me ... little-endian to machine-endian 71// le2me ... little-endian to machine-endian
84 72
73#define HAVE_BIGENDIAN 0
85#if HAVE_BIGENDIAN 74#if HAVE_BIGENDIAN
86#define be2me_16(x) (x) 75#define be2me_16(x) (x)
87#define be2me_32(x) (x) 76#define be2me_32(x) (x)
diff --git a/apps/codecs/libwmapro/libavutil/internal.h b/apps/codecs/libwmapro/libavutil/internal.h
index 97087e462a..87a4d3ec10 100644
--- a/apps/codecs/libwmapro/libavutil/internal.h
+++ b/apps/codecs/libwmapro/libavutil/internal.h
@@ -55,7 +55,8 @@
55#endif 55#endif
56 56
57#ifndef av_alias 57#ifndef av_alias
58#if HAVE_ATTRIBUTE_MAY_ALIAS && (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(3,3) 58//#if HAVE_ATTRIBUTE_MAY_ALIAS && (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(3,3)
59#if 0
59# define av_alias __attribute__((may_alias)) 60# define av_alias __attribute__((may_alias))
60#else 61#else
61# define av_alias 62# define av_alias
@@ -106,7 +107,8 @@
106#define LABEL_MANGLE(a) EXTERN_PREFIX #a 107#define LABEL_MANGLE(a) EXTERN_PREFIX #a
107 108
108// Use rip-relative addressing if compiling PIC code on x86-64. 109// Use rip-relative addressing if compiling PIC code on x86-64.
109#if ARCH_X86_64 && defined(PIC) 110//#if ARCH_X86_64 && defined(PIC)
111#if 0
110# define LOCAL_MANGLE(a) #a "(%%rip)" 112# define LOCAL_MANGLE(a) #a "(%%rip)"
111#else 113#else
112# define LOCAL_MANGLE(a) #a 114# define LOCAL_MANGLE(a) #a
@@ -127,7 +129,8 @@
127 129
128/* math */ 130/* math */
129 131
130#if ARCH_X86 132//#if ARCH_X86
133#if 0
131#define MASK_ABS(mask, level)\ 134#define MASK_ABS(mask, level)\
132 __asm__ volatile(\ 135 __asm__ volatile(\
133 "cltd \n\t"\ 136 "cltd \n\t"\
@@ -198,10 +201,10 @@
198 * without modification. Used to disable the definition of strings 201 * without modification. Used to disable the definition of strings
199 * (for example AVCodec long_names). 202 * (for example AVCodec long_names).
200 */ 203 */
201#if CONFIG_SMALL 204//#if CONFIG_SMALL
202# define NULL_IF_CONFIG_SMALL(x) NULL 205//# define NULL_IF_CONFIG_SMALL(x) NULL
203#else 206//#else
204# define NULL_IF_CONFIG_SMALL(x) x 207//# define NULL_IF_CONFIG_SMALL(x) x
205#endif 208//#endif
206 209
207#endif /* AVUTIL_INTERNAL_H */ 210#endif /* AVUTIL_INTERNAL_H */
diff --git a/apps/codecs/libwmapro/libavutil/intreadwrite.h b/apps/codecs/libwmapro/libavutil/intreadwrite.h
index 87098d707d..a88ffa80f6 100644
--- a/apps/codecs/libwmapro/libavutil/intreadwrite.h
+++ b/apps/codecs/libwmapro/libavutil/intreadwrite.h
@@ -52,24 +52,10 @@ typedef union {
52 * as inline functions. 52 * as inline functions.
53 */ 53 */
54 54
55#if ARCH_ARM
56# include "arm/intreadwrite.h"
57#elif ARCH_AVR32
58# include "avr32/intreadwrite.h"
59#elif ARCH_MIPS
60# include "mips/intreadwrite.h"
61#elif ARCH_PPC
62# include "ppc/intreadwrite.h"
63#elif ARCH_TOMI
64# include "tomi/intreadwrite.h"
65#elif ARCH_X86
66# include "x86/intreadwrite.h"
67#endif
68
69/* 55/*
70 * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. 56 * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers.
71 */ 57 */
72 58#define HAVE_BIGENDIAN 0
73#if HAVE_BIGENDIAN 59#if HAVE_BIGENDIAN
74 60
75# if defined(AV_RN16) && !defined(AV_RB16) 61# if defined(AV_RN16) && !defined(AV_RB16)
@@ -172,6 +158,8 @@ typedef union {
172 158
173#endif /* !HAVE_BIGENDIAN */ 159#endif /* !HAVE_BIGENDIAN */
174 160
161#define HAVE_ATTRIBUTE_PACKED 0
162#define HAVE_FAST_UNALIGNED 0
175/* 163/*
176 * Define AV_[RW]N helper macros to simplify definitions not provided 164 * Define AV_[RW]N helper macros to simplify definitions not provided
177 * by per-arch headers. 165 * by per-arch headers.
diff --git a/apps/codecs/libwmapro/libavutil/log.c b/apps/codecs/libwmapro/libavutil/log.c
index 6cbe0da8b8..f93a0d6677 100644
--- a/apps/codecs/libwmapro/libavutil/log.c
+++ b/apps/codecs/libwmapro/libavutil/log.c
@@ -26,13 +26,16 @@
26 26
27#include "avutil.h" 27#include "avutil.h"
28#include "log.h" 28#include "log.h"
29/* disable sprintf functions */
30#define snprintf(...)
31#define vsnprintf snprintf
29 32
30#if LIBAVUTIL_VERSION_MAJOR > 50 33#if LIBAVUTIL_VERSION_MAJOR > 50
31static 34static
32#endif 35#endif
33int av_log_level = AV_LOG_INFO; 36int av_log_level = AV_LOG_INFO;
34 37
35void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) 38void av_log_default_callback(void* ptr, int level)
36{ 39{
37 static int print_prefix=1; 40 static int print_prefix=1;
38 static int count; 41 static int count;
@@ -61,9 +64,9 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
61 strcpy(prev, line); 64 strcpy(prev, line);
62} 65}
63 66
64static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback; 67static void (*av_log_callback)(void*, int = av_log_default_callback;
65 68
66void av_log(void* avcl, int level, const char *fmt, ...) 69void av_log(void* avcl, int level)
67{ 70{
68 va_list vl; 71 va_list vl;
69 va_start(vl, fmt); 72 va_start(vl, fmt);
diff --git a/apps/codecs/libwmapro/libavutil/log.h b/apps/codecs/libwmapro/libavutil/log.h
index b0a1493607..43228e4985 100644
--- a/apps/codecs/libwmapro/libavutil/log.h
+++ b/apps/codecs/libwmapro/libavutil/log.h
@@ -110,6 +110,6 @@ void av_vlog(void*, int level, const char *fmt, va_list);
110int av_log_get_level(void); 110int av_log_get_level(void);
111void av_log_set_level(int); 111void av_log_set_level(int);
112void av_log_set_callback(void (*)(void*, int, const char*, va_list)); 112void av_log_set_callback(void (*)(void*, int, const char*, va_list));
113void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl); 113void av_log_default_callback(void* ptr, int level);
114 114
115#endif /* AVUTIL_LOG_H */ 115#endif /* AVUTIL_LOG_H */
diff --git a/apps/codecs/libwmapro/libavutil/mathematics.c b/apps/codecs/libwmapro/libavutil/mathematics.c
index 7af0104516..f607d68b6e 100644
--- a/apps/codecs/libwmapro/libavutil/mathematics.c
+++ b/apps/codecs/libwmapro/libavutil/mathematics.c
@@ -103,13 +103,13 @@ int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd){
103 a0 = a0*b0 + t1a; 103 a0 = a0*b0 + t1a;
104 a1 = a1*b1 + (t1>>32) + (a0<t1a); 104 a1 = a1*b1 + (t1>>32) + (a0<t1a);
105 a0 += r; 105 a0 += r;
106 a1 += a0<r; 106 a1 += a0<(unsigned)r;
107 107
108 for(i=63; i>=0; i--){ 108 for(i=63; i>=0; i--){
109// int o= a1 & 0x8000000000000000ULL; 109// int o= a1 & 0x8000000000000000ULL;
110 a1+= a1 + ((a0>>i)&1); 110 a1+= a1 + ((a0>>i)&1);
111 t1+=t1; 111 t1+=t1;
112 if(/*o || */c <= a1){ 112 if(/*o || */(unsigned)c <= a1){
113 a1 -= c; 113 a1 -= c;
114 t1++; 114 t1++;
115 } 115 }
diff --git a/apps/codecs/libwmapro/mathops.h b/apps/codecs/libwmapro/mathops.h
index 149910bb1d..f6555dda21 100644
--- a/apps/codecs/libwmapro/mathops.h
+++ b/apps/codecs/libwmapro/mathops.h
@@ -24,20 +24,6 @@
24 24
25#include "libavutil/common.h" 25#include "libavutil/common.h"
26 26
27#if ARCH_ARM
28# include "arm/mathops.h"
29#elif ARCH_AVR32
30# include "avr32/mathops.h"
31#elif ARCH_BFIN
32# include "bfin/mathops.h"
33#elif ARCH_MIPS
34# include "mips/mathops.h"
35#elif ARCH_PPC
36# include "ppc/mathops.h"
37#elif ARCH_X86
38# include "x86/mathops.h"
39#endif
40
41/* generic implementation */ 27/* generic implementation */
42 28
43#ifndef MULL 29#ifndef MULL
diff --git a/apps/codecs/libwmapro/put_bits.h b/apps/codecs/libwmapro/put_bits.h
index 9f66256b79..91401ff3fa 100644
--- a/apps/codecs/libwmapro/put_bits.h
+++ b/apps/codecs/libwmapro/put_bits.h
@@ -37,7 +37,7 @@
37 37
38//#define ALT_BITSTREAM_WRITER 38//#define ALT_BITSTREAM_WRITER
39//#define ALIGNED_BITSTREAM_WRITER 39//#define ALIGNED_BITSTREAM_WRITER
40 40#define HAVE_FAST_UNALIGNED 0
41/* buf and buf_end must be present and used by every alternative writer. */ 41/* buf and buf_end must be present and used by every alternative writer. */
42typedef struct PutBitContext { 42typedef struct PutBitContext {
43#ifdef ALT_BITSTREAM_WRITER 43#ifdef ALT_BITSTREAM_WRITER
diff --git a/apps/codecs/libwmapro/wma.c b/apps/codecs/libwmapro/wma.c
index b606f59dbf..30fb9e022a 100644
--- a/apps/codecs/libwmapro/wma.c
+++ b/apps/codecs/libwmapro/wma.c
@@ -467,7 +467,8 @@ unsigned int ff_wma_get_large_val(GetBitContext* gb)
467 * @param coef_nb_bits number of bits for escaped level codes 467 * @param coef_nb_bits number of bits for escaped level codes
468 * @return 0 on success, -1 otherwise 468 * @return 0 on success, -1 otherwise
469 */ 469 */
470int ff_wma_run_level_decode(AVCodecContext* avctx, GetBitContext* gb, 470#define av_log(...)
471int ff_wma_run_level_decode(GetBitContext* gb,
471 VLC *vlc, 472 VLC *vlc,
472 const int32_t *level_table, const uint16_t *run_table, 473 const int32_t *level_table, const uint16_t *run_table,
473 int version, int32_t *ptr, int offset, 474 int version, int32_t *ptr, int offset,
diff --git a/apps/codecs/libwmapro/wma.h b/apps/codecs/libwmapro/wma.h
index d23b7ea02f..e4a1601515 100644
--- a/apps/codecs/libwmapro/wma.h
+++ b/apps/codecs/libwmapro/wma.h
@@ -24,8 +24,6 @@
24 24
25#include "get_bits.h" 25#include "get_bits.h"
26#include "put_bits.h" 26#include "put_bits.h"
27#include "dsputil.h"
28#include "fft.h"
29 27
30/* size of blocks */ 28/* size of blocks */
31#define BLOCK_MIN_BITS 7 29#define BLOCK_MIN_BITS 7
@@ -62,90 +60,6 @@ typedef struct CoefVLCTable {
62 const uint16_t *levels; ///< table to build run/level tables 60 const uint16_t *levels; ///< table to build run/level tables
63} CoefVLCTable; 61} CoefVLCTable;
64 62
65typedef struct WMACodecContext {
66 AVCodecContext* avctx;
67 GetBitContext gb;
68 PutBitContext pb;
69 int sample_rate;
70 int nb_channels;
71 int bit_rate;
72 int version; ///< 1 = 0x160 (WMAV1), 2 = 0x161 (WMAV2)
73 int block_align;
74 int use_bit_reservoir;
75 int use_variable_block_len;
76 int use_exp_vlc; ///< exponent coding: 0 = lsp, 1 = vlc + delta
77 int use_noise_coding; ///< true if perceptual noise is added
78 int byte_offset_bits;
79 VLC exp_vlc;
80 int exponent_sizes[BLOCK_NB_SIZES];
81 uint16_t exponent_bands[BLOCK_NB_SIZES][25];
82 int high_band_start[BLOCK_NB_SIZES]; ///< index of first coef in high band
83 int coefs_start; ///< first coded coef
84 int coefs_end[BLOCK_NB_SIZES]; ///< max number of coded coefficients
85 int exponent_high_sizes[BLOCK_NB_SIZES];
86 int exponent_high_bands[BLOCK_NB_SIZES][HIGH_BAND_MAX_SIZE];
87 VLC hgain_vlc;
88
89 /* coded values in high bands */
90 int high_band_coded[MAX_CHANNELS][HIGH_BAND_MAX_SIZE];
91 int high_band_values[MAX_CHANNELS][HIGH_BAND_MAX_SIZE];
92
93 /* there are two possible tables for spectral coefficients */
94//FIXME the following 3 tables should be shared between decoders
95 VLC coef_vlc[2];
96 uint16_t *run_table[2];
97 float *level_table[2];
98 uint16_t *int_table[2];
99 const CoefVLCTable *coef_vlcs[2];
100 /* frame info */
101 int frame_len; ///< frame length in samples
102 int frame_len_bits; ///< frame_len = 1 << frame_len_bits
103 int nb_block_sizes; ///< number of block sizes
104 /* block info */
105 int reset_block_lengths;
106 int block_len_bits; ///< log2 of current block length
107 int next_block_len_bits; ///< log2 of next block length
108 int prev_block_len_bits; ///< log2 of prev block length
109 int block_len; ///< block length in samples
110 int block_num; ///< block number in current frame
111 int block_pos; ///< current position in frame
112 uint8_t ms_stereo; ///< true if mid/side stereo mode
113 uint8_t channel_coded[MAX_CHANNELS]; ///< true if channel is coded
114 int exponents_bsize[MAX_CHANNELS]; ///< log2 ratio frame/exp. length
115 DECLARE_ALIGNED(16, float, exponents)[MAX_CHANNELS][BLOCK_MAX_SIZE];
116 float max_exponent[MAX_CHANNELS];
117 WMACoef coefs1[MAX_CHANNELS][BLOCK_MAX_SIZE];
118 DECLARE_ALIGNED(16, float, coefs)[MAX_CHANNELS][BLOCK_MAX_SIZE];
119 DECLARE_ALIGNED(16, FFTSample, output)[BLOCK_MAX_SIZE * 2];
120 FFTContext mdct_ctx[BLOCK_NB_SIZES];
121 float *windows[BLOCK_NB_SIZES];
122 /* output buffer for one frame and the last for IMDCT windowing */
123 DECLARE_ALIGNED(16, float, frame_out)[MAX_CHANNELS][BLOCK_MAX_SIZE * 2];
124 /* last frame info */
125 uint8_t last_superframe[MAX_CODED_SUPERFRAME_SIZE + 4]; /* padding added */
126 int last_bitoffset;
127 int last_superframe_len;
128 float noise_table[NOISE_TAB_SIZE];
129 int noise_index;
130 float noise_mult; /* XXX: suppress that and integrate it in the noise array */
131 /* lsp_to_curve tables */
132 float lsp_cos_table[BLOCK_MAX_SIZE];
133 float lsp_pow_e_table[256];
134 float lsp_pow_m_table1[(1 << LSP_POW_BITS)];
135 float lsp_pow_m_table2[(1 << LSP_POW_BITS)];
136 DSPContext dsp;
137
138#ifdef TRACE
139 int frame_count;
140#endif
141} WMACodecContext;
142
143extern const uint16_t ff_wma_critical_freqs[25];
144extern const uint16_t ff_wma_hgain_huffcodes[37];
145extern const uint8_t ff_wma_hgain_huffbits[37];
146extern const float ff_wma_lsp_codebook[NB_LSP_COEFS][16];
147extern const uint32_t ff_aac_scalefactor_code[121];
148extern const uint8_t ff_aac_scalefactor_bits[121];
149 63
150int av_cold ff_wma_get_frame_len_bits(int sample_rate, int version, 64int av_cold ff_wma_get_frame_len_bits(int sample_rate, int version,
151 unsigned int decode_flags); 65 unsigned int decode_flags);
@@ -153,7 +67,7 @@ int ff_wma_init(AVCodecContext * avctx, int flags2);
153int ff_wma_total_gain_to_bits(int total_gain); 67int ff_wma_total_gain_to_bits(int total_gain);
154int ff_wma_end(AVCodecContext *avctx); 68int ff_wma_end(AVCodecContext *avctx);
155unsigned int ff_wma_get_large_val(GetBitContext* gb); 69unsigned int ff_wma_get_large_val(GetBitContext* gb);
156int ff_wma_run_level_decode(AVCodecContext* avctx, GetBitContext* gb, 70int ff_wma_run_level_decode(GetBitContext* gb,
157 VLC *vlc, 71 VLC *vlc,
158 const int32_t *level_table, const uint16_t *run_table, 72 const int32_t *level_table, const uint16_t *run_table,
159 int version, int32_t *ptr, int offset, 73 int version, int32_t *ptr, int offset,
diff --git a/apps/codecs/libwmapro/wmapro_mdct.c b/apps/codecs/libwmapro/wmapro_mdct.c
index aaa95dccdf..8f651d224a 100644
--- a/apps/codecs/libwmapro/wmapro_mdct.c
+++ b/apps/codecs/libwmapro/wmapro_mdct.c
@@ -4,6 +4,7 @@
4#include "../lib/mdct_lookup.h" /* for revtab */ 4#include "../lib/mdct_lookup.h" /* for revtab */
5#include "../lib/fft.h" /* for FFT data structures */ 5#include "../lib/fft.h" /* for FFT data structures */
6#include "codeclib.h" 6#include "codeclib.h"
7#define ROCKBOX_BIG_ENDIAN 0
7#include "../lib/codeclib_misc.h" /* for XNPROD31 */ 8#include "../lib/codeclib_misc.h" /* for XNPROD31 */
8#include "wmapro_math.h" 9#include "wmapro_math.h"
9 10
diff --git a/apps/codecs/libwmapro/wmaprodec.c b/apps/codecs/libwmapro/wmaprodec.c
index 8a8171aeb6..2dd2a6a1e4 100644
--- a/apps/codecs/libwmapro/wmaprodec.c
+++ b/apps/codecs/libwmapro/wmaprodec.c
@@ -103,6 +103,13 @@
103/* Uncomment the following line to enable some debug output */ 103/* Uncomment the following line to enable some debug output */
104//#define WMAPRO_DUMP_CTX_EN 104//#define WMAPRO_DUMP_CTX_EN
105 105
106#undef DEBUGF
107#ifdef WMAPRO_DUMP_CTX_EN
108# define DEBUGF printf
109#else
110# define DEBUGF(...)
111#endif
112
106/* Some defines to make it compile */ 113/* Some defines to make it compile */
107#define AVERROR_INVALIDDATA -1 114#define AVERROR_INVALIDDATA -1
108#define AVERROR_PATCHWELCOME -2 115#define AVERROR_PATCHWELCOME -2
@@ -177,7 +184,6 @@ typedef struct {
177typedef struct WMAProDecodeCtx { 184typedef struct WMAProDecodeCtx {
178 /* generic decoder variables */ 185 /* generic decoder variables */
179 AVCodecContext* avctx; ///< codec context for av_log 186 AVCodecContext* avctx; ///< codec context for av_log
180 DSPContext dsp; ///< accelerated DSP functions
181 uint8_t frame_data[MAX_FRAMESIZE + 187 uint8_t frame_data[MAX_FRAMESIZE +
182 FF_INPUT_BUFFER_PADDING_SIZE];///< compressed frame data 188 FF_INPUT_BUFFER_PADDING_SIZE];///< compressed frame data
183 PutBitContext pb; ///< context for filling the frame_data buffer 189 PutBitContext pb; ///< context for filling the frame_data buffer
@@ -236,6 +242,8 @@ typedef struct WMAProDecodeCtx {
236 WMAProChannelCtx channel[WMAPRO_MAX_CHANNELS]; ///< per channel data 242 WMAProChannelCtx channel[WMAPRO_MAX_CHANNELS]; ///< per channel data
237} WMAProDecodeCtx; 243} WMAProDecodeCtx;
238 244
245/* static decode context, to avoid malloc */
246static WMAProDecodeCtx globWMAProDecCtx;
239 247
240/** 248/**
241 *@brief helper function to print the most important members of the context 249 *@brief helper function to print the most important members of the context
@@ -264,7 +272,7 @@ static void av_cold dump_context(WMAProDecodeCtx *s)
264 */ 272 */
265av_cold int decode_init(AVCodecContext *avctx) 273av_cold int decode_init(AVCodecContext *avctx)
266{ 274{
267 avctx->priv_data = malloc(sizeof(WMAProDecodeCtx)); 275 avctx->priv_data = &globWMAProDecCtx;
268 memset(avctx->priv_data, 0, sizeof(WMAProDecodeCtx)); 276 memset(avctx->priv_data, 0, sizeof(WMAProDecodeCtx));
269 WMAProDecodeCtx *s = avctx->priv_data; 277 WMAProDecodeCtx *s = avctx->priv_data;
270 uint8_t *edata_ptr = avctx->extradata; 278 uint8_t *edata_ptr = avctx->extradata;
@@ -276,8 +284,6 @@ av_cold int decode_init(AVCodecContext *avctx)
276 s->avctx = avctx; 284 s->avctx = avctx;
277 init_put_bits(&s->pb, s->frame_data, MAX_FRAMESIZE); 285 init_put_bits(&s->pb, s->frame_data, MAX_FRAMESIZE);
278 286
279 avctx->sample_fmt = SAMPLE_FMT_FLT;
280
281 if (avctx->extradata_size >= 18) { 287 if (avctx->extradata_size >= 18) {
282 s->decode_flags = AV_RL16(edata_ptr+14); 288 s->decode_flags = AV_RL16(edata_ptr+14);
283 channel_mask = AV_RL32(edata_ptr+2); 289 channel_mask = AV_RL32(edata_ptr+2);
@@ -288,7 +294,7 @@ av_cold int decode_init(AVCodecContext *avctx)
288 dprintf(avctx, "\n"); 294 dprintf(avctx, "\n");
289 295
290 } else { 296 } else {
291 av_log_ask_for_sample(avctx, "Unknown extradata size\n"); 297 DEBUGF("Unknown extradata size\n");
292 return AVERROR_INVALIDDATA; 298 return AVERROR_INVALIDDATA;
293 } 299 }
294 300
@@ -301,7 +307,7 @@ av_cold int decode_init(AVCodecContext *avctx)
301 s->len_prefix = (s->decode_flags & 0x40); 307 s->len_prefix = (s->decode_flags & 0x40);
302 308
303 if (!s->len_prefix) { 309 if (!s->len_prefix) {
304 av_log_ask_for_sample(avctx, "no length prefix\n"); 310 DEBUGF("no length prefix\n");
305 return AVERROR_INVALIDDATA; 311 return AVERROR_INVALIDDATA;
306 } 312 }
307 313
@@ -325,7 +331,7 @@ av_cold int decode_init(AVCodecContext *avctx)
325 s->dynamic_range_compression = (s->decode_flags & 0x80); 331 s->dynamic_range_compression = (s->decode_flags & 0x80);
326 332
327 if (s->max_num_subframes > MAX_SUBFRAMES) { 333 if (s->max_num_subframes > MAX_SUBFRAMES) {
328 av_log(avctx, AV_LOG_ERROR, "invalid number of subframes %i\n", 334 DEBUGF("invalid number of subframes %i\n",
329 s->max_num_subframes); 335 s->max_num_subframes);
330 return AVERROR_INVALIDDATA; 336 return AVERROR_INVALIDDATA;
331 } 337 }
@@ -344,10 +350,10 @@ av_cold int decode_init(AVCodecContext *avctx)
344 } 350 }
345 351
346 if (s->num_channels < 0) { 352 if (s->num_channels < 0) {
347 av_log(avctx, AV_LOG_ERROR, "invalid number of channels %d\n", s->num_channels); 353 DEBUGF("invalid number of channels %d\n", s->num_channels);
348 return AVERROR_INVALIDDATA; 354 return AVERROR_INVALIDDATA;
349 } else if (s->num_channels > WMAPRO_MAX_CHANNELS) { 355 } else if (s->num_channels > WMAPRO_MAX_CHANNELS) {
350 av_log_ask_for_sample(avctx, "unsupported number of channels\n"); 356 DEBUGF("unsupported number of channels\n");
351 return AVERROR_PATCHWELCOME; 357 return AVERROR_PATCHWELCOME;
352 } 358 }
353 359
@@ -437,8 +443,6 @@ av_cold int decode_init(AVCodecContext *avctx)
437#ifdef WMAPRO_DUMP_CTX_EN 443#ifdef WMAPRO_DUMP_CTX_EN
438 dump_context(s); 444 dump_context(s);
439#endif 445#endif
440
441 avctx->channel_layout = channel_mask;
442 return 0; 446 return 0;
443} 447}
444 448
@@ -469,7 +473,7 @@ static int decode_subframe_length(WMAProDecodeCtx *s, int offset)
469 /** sanity check the length */ 473 /** sanity check the length */
470 if (subframe_len < s->min_samples_per_subframe || 474 if (subframe_len < s->min_samples_per_subframe ||
471 subframe_len > s->samples_per_frame) { 475 subframe_len > s->samples_per_frame) {
472 av_log(s->avctx, AV_LOG_ERROR, "broken frame: subframe_len %i\n", 476 DEBUGF("broken frame: subframe_len %i\n",
473 subframe_len); 477 subframe_len);
474 return AVERROR_INVALIDDATA; 478 return AVERROR_INVALIDDATA;
475 } 479 }
@@ -546,16 +550,15 @@ static int decode_tilehdr(WMAProDecodeCtx *s)
546 WMAProChannelCtx* chan = &s->channel[c]; 550 WMAProChannelCtx* chan = &s->channel[c];
547 551
548 if (contains_subframe[c]) { 552 if (contains_subframe[c]) {
549 if (chan->num_subframes >= MAX_SUBFRAMES) { 553 if (chan->num_subframes >= MAX_SUBFRAMES) {
550 av_log(s->avctx, AV_LOG_ERROR, 554 DEBUGF("broken frame: num subframes > 31\n");
551 "broken frame: num subframes > 31\n");
552 return AVERROR_INVALIDDATA; 555 return AVERROR_INVALIDDATA;
553 } 556 }
554 chan->subframe_len[chan->num_subframes] = subframe_len; 557 chan->subframe_len[chan->num_subframes] = subframe_len;
555 num_samples[c] += subframe_len; 558 num_samples[c] += subframe_len;
556 ++chan->num_subframes; 559 ++chan->num_subframes;
557 if (num_samples[c] > s->samples_per_frame) { 560 if (num_samples[c] > s->samples_per_frame) {
558 av_log(s->avctx, AV_LOG_ERROR, "broken frame: " 561 DEBUGF("broken frame: "
559 "channel len > samples_per_frame\n"); 562 "channel len > samples_per_frame\n");
560 return AVERROR_INVALIDDATA; 563 return AVERROR_INVALIDDATA;
561 } 564 }
@@ -674,8 +677,7 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
674 int remaining_channels = s->channels_for_cur_subframe; 677 int remaining_channels = s->channels_for_cur_subframe;
675 678
676 if (get_bits1(&s->gb)) { 679 if (get_bits1(&s->gb)) {
677 av_log_ask_for_sample(s->avctx, 680 DEBUGF("unsupported channel transform bit\n");
678 "unsupported channel transform bit\n");
679 return AVERROR_INVALIDDATA; 681 return AVERROR_INVALIDDATA;
680 } 682 }
681 683
@@ -711,8 +713,7 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
711 if (chgroup->num_channels == 2) { 713 if (chgroup->num_channels == 2) {
712 if (get_bits1(&s->gb)) { 714 if (get_bits1(&s->gb)) {
713 if (get_bits1(&s->gb)) { 715 if (get_bits1(&s->gb)) {
714 av_log_ask_for_sample(s->avctx, 716 DEBUGF("unsupported channel transform type\n");
715 "unsupported channel transform type\n");
716 } 717 }
717 } else { 718 } else {
718 chgroup->transform = 1; 719 chgroup->transform = 1;
@@ -730,7 +731,7 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
730 } 731 }
731 } 732 }
732 } else if (chgroup->num_channels > 2) { 733 } else if (chgroup->num_channels > 2) {
733 LOGF("in wmaprodec.c: Multichannel streams still not supported\n"); 734 DEBUGF("in wmaprodec.c: Multichannel streams still not supported\n");
734 return -1; 735 return -1;
735#if 0 736#if 0
736 if (get_bits1(&s->gb)) { 737 if (get_bits1(&s->gb)) {
@@ -857,7 +858,7 @@ static int decode_coeffs(WMAProDecodeCtx *s, int c)
857 memset(&ci->coeffs[cur_coeff], 0, 858 memset(&ci->coeffs[cur_coeff], 0,
858 sizeof(*ci->coeffs) * (s->subframe_len - cur_coeff)); 859 sizeof(*ci->coeffs) * (s->subframe_len - cur_coeff));
859 860
860 if (ff_wma_run_level_decode(s->avctx, &s->gb, vlc, 861 if (ff_wma_run_level_decode(&s->gb, vlc,
861 level, run, 1, ci->coeffs, 862 level, run, 1, ci->coeffs,
862 cur_coeff, s->subframe_len, 863 cur_coeff, s->subframe_len,
863 s->subframe_len, s->esc_len, 0)) 864 s->subframe_len, s->esc_len, 0))
@@ -937,8 +938,7 @@ static int decode_scale_factors(WMAProDecodeCtx* s)
937 938
938 i += skip; 939 i += skip;
939 if (i >= s->num_bands) { 940 if (i >= s->num_bands) {
940 av_log(s->avctx, AV_LOG_ERROR, 941 DEBUGF("invalid scale factor coding\n");
941 "invalid scale factor coding\n");
942 return AVERROR_INVALIDDATA; 942 return AVERROR_INVALIDDATA;
943 } 943 }
944 s->channel[c].scale_factors[i] += (val ^ sign) - sign; 944 s->channel[c].scale_factors[i] += (val ^ sign) - sign;
@@ -1137,7 +1137,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
1137 1137
1138 if (num_fill_bits >= 0) { 1138 if (num_fill_bits >= 0) {
1139 if (get_bits_count(&s->gb) + num_fill_bits > s->num_saved_bits) { 1139 if (get_bits_count(&s->gb) + num_fill_bits > s->num_saved_bits) {
1140 av_log(s->avctx, AV_LOG_ERROR, "invalid number of fill bits\n"); 1140 DEBUGF("invalid number of fill bits\n");
1141 return AVERROR_INVALIDDATA; 1141 return AVERROR_INVALIDDATA;
1142 } 1142 }
1143 1143
@@ -1147,7 +1147,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
1147 1147
1148 /** no idea for what the following bit is used */ 1148 /** no idea for what the following bit is used */
1149 if (get_bits1(&s->gb)) { 1149 if (get_bits1(&s->gb)) {
1150 av_log_ask_for_sample(s->avctx, "reserved bit set\n"); 1150 DEBUGF("reserved bit set\n");
1151 return AVERROR_INVALIDDATA; 1151 return AVERROR_INVALIDDATA;
1152 } 1152 }
1153 1153
@@ -1165,7 +1165,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
1165 int quant_step = 90 * s->bits_per_sample >> 4; 1165 int quant_step = 90 * s->bits_per_sample >> 4;
1166 if ((get_bits1(&s->gb))) { 1166 if ((get_bits1(&s->gb))) {
1167 /** FIXME: might change run level mode decision */ 1167 /** FIXME: might change run level mode decision */
1168 av_log_ask_for_sample(s->avctx, "unsupported quant step coding\n"); 1168 DEBUGF("unsupported quant step coding\n");
1169 return AVERROR_INVALIDDATA; 1169 return AVERROR_INVALIDDATA;
1170 } 1170 }
1171 /** decode quantization step */ 1171 /** decode quantization step */
@@ -1181,7 +1181,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
1181 quant_step += ((quant + step) ^ sign) - sign; 1181 quant_step += ((quant + step) ^ sign) - sign;
1182 } 1182 }
1183 if (quant_step < 0) { 1183 if (quant_step < 0) {
1184 av_log(s->avctx, AV_LOG_DEBUG, "negative quant step\n"); 1184 DEBUGF("negative quant step\n");
1185 } 1185 }
1186 1186
1187 /** decode quantization step modifiers for every channel */ 1187 /** decode quantization step modifiers for every channel */
@@ -1245,7 +1245,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
1245 s->channel[c].scale_factor_step; 1245 s->channel[c].scale_factor_step;
1246 1246
1247 if(exp < EXP_MIN || exp > EXP_MAX) { 1247 if(exp < EXP_MIN || exp > EXP_MAX) {
1248 LOGF("in wmaprodec.c : unhandled value for exp, please report sample.\n"); 1248 DEBUGF("in wmaprodec.c : unhandled value for exp, please report sample.\n");
1249 return -1; 1249 return -1;
1250 } 1250 }
1251 const FIXED quant = QUANT(exp); 1251 const FIXED quant = QUANT(exp);
@@ -1272,7 +1272,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
1272 for (i = 0; i < s->channels_for_cur_subframe; i++) { 1272 for (i = 0; i < s->channels_for_cur_subframe; i++) {
1273 int c = s->channel_indexes_for_cur_subframe[i]; 1273 int c = s->channel_indexes_for_cur_subframe[i];
1274 if (s->channel[c].cur_subframe >= s->channel[c].num_subframes) { 1274 if (s->channel[c].cur_subframe >= s->channel[c].num_subframes) {
1275 av_log(s->avctx, AV_LOG_ERROR, "broken subframe\n"); 1275 DEBUGF("broken subframe\n");
1276 return AVERROR_INVALIDDATA; 1276 return AVERROR_INVALIDDATA;
1277 } 1277 }
1278 ++s->channel[c].cur_subframe; 1278 ++s->channel[c].cur_subframe;
@@ -1297,8 +1297,7 @@ static int decode_frame(WMAProDecodeCtx *s)
1297 /** check for potential output buffer overflow */ 1297 /** check for potential output buffer overflow */
1298 if (s->num_channels * s->samples_per_frame > s->samples_end - s->samples) { 1298 if (s->num_channels * s->samples_per_frame > s->samples_end - s->samples) {
1299 /** return an error if no frame could be decoded at all */ 1299 /** return an error if no frame could be decoded at all */
1300 av_log(s->avctx, AV_LOG_ERROR, 1300 DEBUGF("not enough space for the output samples\n");
1301 "not enough space for the output samples\n");
1302 s->packet_loss = 1; 1301 s->packet_loss = 1;
1303 return 0; 1302 return 0;
1304 } 1303 }
@@ -1317,7 +1316,7 @@ static int decode_frame(WMAProDecodeCtx *s)
1317 1316
1318 /** read postproc transform */ 1317 /** read postproc transform */
1319 if (s->num_channels > 1 && get_bits1(gb)) { 1318 if (s->num_channels > 1 && get_bits1(gb)) {
1320 av_log_ask_for_sample(s->avctx, "Unsupported postproc transform found\n"); 1319 DEBUGF("Unsupported postproc transform found\n");
1321 s->packet_loss = 1; 1320 s->packet_loss = 1;
1322 return 0; 1321 return 0;
1323 } 1322 }
@@ -1391,7 +1390,7 @@ static int decode_frame(WMAProDecodeCtx *s)
1391 1390
1392 if (len != (get_bits_count(gb) - s->frame_offset) + 2) { 1391 if (len != (get_bits_count(gb) - s->frame_offset) + 2) {
1393 /** FIXME: not sure if this is always an error */ 1392 /** FIXME: not sure if this is always an error */
1394 av_log(s->avctx, AV_LOG_ERROR, "frame[%i] would have to skip %i bits\n", 1393 DEBUGF("frame[%i] would have to skip %i bits\n",
1395 (int)s->frame_num, len - (get_bits_count(gb) - s->frame_offset) - 1); 1394 (int)s->frame_num, len - (get_bits_count(gb) - s->frame_offset) - 1);
1396 s->packet_loss = 1; 1395 s->packet_loss = 1;
1397 return 0; 1396 return 0;
@@ -1443,7 +1442,7 @@ static void save_bits(WMAProDecodeCtx *s, GetBitContext* gb, int len,
1443 buflen = (s->num_saved_bits + len + 8) >> 3; 1442 buflen = (s->num_saved_bits + len + 8) >> 3;
1444 1443
1445 if (len <= 0 || buflen > MAX_FRAMESIZE) { 1444 if (len <= 0 || buflen > MAX_FRAMESIZE) {
1446 av_log_ask_for_sample(s->avctx, "input buffer too small\n"); 1445 DEBUGF("input buffer too small\n");
1447 s->packet_loss = 1; 1446 s->packet_loss = 1;
1448 return; 1447 return;
1449 } 1448 }
@@ -1516,7 +1515,7 @@ int decode_packet(AVCodecContext *avctx,
1516 if (!s->packet_loss && 1515 if (!s->packet_loss &&
1517 ((s->packet_sequence_number + 1) & 0xF) != packet_sequence_number) { 1516 ((s->packet_sequence_number + 1) & 0xF) != packet_sequence_number) {
1518 s->packet_loss = 1; 1517 s->packet_loss = 1;
1519 av_log(avctx, AV_LOG_ERROR, "Packet loss detected! seq %x vs %x\n", 1518 DEBUGF("Packet loss detected! seq %x vs %x\n",
1520 s->packet_sequence_number, packet_sequence_number); 1519 s->packet_sequence_number, packet_sequence_number);
1521 } 1520 }
1522 s->packet_sequence_number = packet_sequence_number; 1521 s->packet_sequence_number = packet_sequence_number;
diff --git a/apps/codecs/wmapro.c b/apps/codecs/wmapro.c
index a31e63d79f..ba19e2925c 100644
--- a/apps/codecs/wmapro.c
+++ b/apps/codecs/wmapro.c
@@ -28,7 +28,7 @@ CODEC_HEADER
28#define MAXSAMPLES (1L << 12) /* Max number of samples in a wma pro subframe */ 28#define MAXSAMPLES (1L << 12) /* Max number of samples in a wma pro subframe */
29#define MAXCHANNELS 8 29#define MAXCHANNELS 8
30#define BUFSIZE MAXCHANNELS * MAXSAMPLES 30#define BUFSIZE MAXCHANNELS * MAXSAMPLES
31static int32_t decoded[BUFSIZE] IBSS_ATTR; 31int32_t decoded[BUFSIZE];
32 32
33AVCodecContext avctx; 33AVCodecContext avctx;
34AVPacket avpkt; 34AVPacket avpkt;