diff options
author | Mohamed Tarek <mt@rockbox.org> | 2010-06-21 10:48:34 +0000 |
---|---|---|
committer | Mohamed Tarek <mt@rockbox.org> | 2010-06-21 10:48:34 +0000 |
commit | 816fca820caa537a07c761f49d1f8ecf996a91ce (patch) | |
tree | 8ea2805d0536bd45c7a4f56fa39904e65829466a /apps/codecs/libwmapro | |
parent | 9297a02d4964cae7727248665e278b251cac5533 (diff) | |
download | rockbox-816fca820caa537a07c761f49d1f8ecf996a91ce.tar.gz rockbox-816fca820caa537a07c761f49d1f8ecf996a91ce.zip |
Wrote apps/codecs/wmapro.c and modified libwmapro to make the codec work in the sim. Neither libwmapro nor wmapro.c have been added to the main build yet, codecs.make should be edited to compile both with rockbox.
current status of the decoder :
- Plays and seeks in the sim
- Still in floating point
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27006 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libwmapro')
-rw-r--r-- | apps/codecs/libwmapro/SOURCES | 9 | ||||
-rw-r--r-- | apps/codecs/libwmapro/bitstream.c | 2 | ||||
-rw-r--r-- | apps/codecs/libwmapro/dsputil.h | 2 | ||||
-rw-r--r-- | apps/codecs/libwmapro/fft.c | 4 | ||||
-rw-r--r-- | apps/codecs/libwmapro/get_bits.h | 2 | ||||
-rw-r--r-- | apps/codecs/libwmapro/libavutil/internal.h | 10 | ||||
-rw-r--r-- | apps/codecs/libwmapro/libavutil/log.c | 4 | ||||
-rw-r--r-- | apps/codecs/libwmapro/libavutil/mathematics.c | 8 | ||||
-rw-r--r-- | apps/codecs/libwmapro/libwmapro.make | 18 | ||||
-rw-r--r-- | apps/codecs/libwmapro/mdct_tablegen.h | 4 | ||||
-rw-r--r-- | apps/codecs/libwmapro/put_bits.h | 10 | ||||
-rw-r--r-- | apps/codecs/libwmapro/wma.c | 4 | ||||
-rw-r--r-- | apps/codecs/libwmapro/wmaprodec.c | 33 | ||||
-rw-r--r-- | apps/codecs/libwmapro/wmaprodec.h | 6 |
14 files changed, 81 insertions, 35 deletions
diff --git a/apps/codecs/libwmapro/SOURCES b/apps/codecs/libwmapro/SOURCES new file mode 100644 index 0000000000..da2d2860d8 --- /dev/null +++ b/apps/codecs/libwmapro/SOURCES | |||
@@ -0,0 +1,9 @@ | |||
1 | wmaprodec.c | ||
2 | wma.c | ||
3 | dsputil.c | ||
4 | mdct.c | ||
5 | fft.c | ||
6 | bitstream.c | ||
7 | libavutil/log.c | ||
8 | libavutil/mem.c | ||
9 | libavutil/mathematics.c | ||
diff --git a/apps/codecs/libwmapro/bitstream.c b/apps/codecs/libwmapro/bitstream.c index 47234e10e1..deb1d631e2 100644 --- a/apps/codecs/libwmapro/bitstream.c +++ b/apps/codecs/libwmapro/bitstream.c | |||
@@ -296,7 +296,7 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, | |||
296 | av_log(NULL,AV_LOG_DEBUG,"build table nb_codes=%d\n", nb_codes); | 296 | av_log(NULL,AV_LOG_DEBUG,"build table nb_codes=%d\n", nb_codes); |
297 | #endif | 297 | #endif |
298 | 298 | ||
299 | assert(symbols_size <= 2 || !symbols); | 299 | //assert(symbols_size <= 2 || !symbols); |
300 | j = 0; | 300 | j = 0; |
301 | #define COPY(condition)\ | 301 | #define COPY(condition)\ |
302 | for (i = 0; i < nb_codes; i++) {\ | 302 | for (i = 0; i < nb_codes; i++) {\ |
diff --git a/apps/codecs/libwmapro/dsputil.h b/apps/codecs/libwmapro/dsputil.h index d1816e66ba..80bc3ab262 100644 --- a/apps/codecs/libwmapro/dsputil.h +++ b/apps/codecs/libwmapro/dsputil.h | |||
@@ -443,7 +443,7 @@ typedef struct DSPContext { | |||
443 | * @param v2 second input vector, difference output, 16-byte aligned | 443 | * @param v2 second input vector, difference output, 16-byte aligned |
444 | * @param len length of vectors, multiple of 4 | 444 | * @param len length of vectors, multiple of 4 |
445 | */ | 445 | */ |
446 | void (*butterflies_float)(float *restrict v1, float *restrict v2, int len); | 446 | void (*butterflies_float)(float * v1, float * v2, int len); |
447 | 447 | ||
448 | /* C version: convert floats from the range [384.0,386.0] to ints in [-32768,32767] | 448 | /* C version: convert floats from the range [384.0,386.0] to ints in [-32768,32767] |
449 | * simd versions: convert floats from [-32768.0,32767.0] without rescaling and arrays are 16byte aligned */ | 449 | * simd versions: convert floats from [-32768.0,32767.0] without rescaling and arrays are 16byte aligned */ |
diff --git a/apps/codecs/libwmapro/fft.c b/apps/codecs/libwmapro/fft.c index bc1b4f1796..b0e6e11cd3 100644 --- a/apps/codecs/libwmapro/fft.c +++ b/apps/codecs/libwmapro/fft.c | |||
@@ -102,11 +102,11 @@ av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse) | |||
102 | 102 | ||
103 | s->fft_permute = ff_fft_permute_c; | 103 | s->fft_permute = ff_fft_permute_c; |
104 | s->fft_calc = ff_fft_calc_c; | 104 | s->fft_calc = ff_fft_calc_c; |
105 | #if CONFIG_MDCT | 105 | //#if CONFIG_MDCT |
106 | s->imdct_calc = ff_imdct_calc_c; | 106 | s->imdct_calc = ff_imdct_calc_c; |
107 | s->imdct_half = ff_imdct_half_c; | 107 | s->imdct_half = ff_imdct_half_c; |
108 | s->mdct_calc = ff_mdct_calc_c; | 108 | s->mdct_calc = ff_mdct_calc_c; |
109 | #endif | 109 | //#endif |
110 | s->exptab1 = NULL; | 110 | s->exptab1 = NULL; |
111 | s->split_radix = 1; | 111 | s->split_radix = 1; |
112 | #if 0 | 112 | #if 0 |
diff --git a/apps/codecs/libwmapro/get_bits.h b/apps/codecs/libwmapro/get_bits.h index c325778d67..a21d05210f 100644 --- a/apps/codecs/libwmapro/get_bits.h +++ b/apps/codecs/libwmapro/get_bits.h | |||
@@ -28,7 +28,7 @@ | |||
28 | 28 | ||
29 | #include <stdint.h> | 29 | #include <stdint.h> |
30 | #include <stdlib.h> | 30 | #include <stdlib.h> |
31 | #include <assert.h> | 31 | //#include <assert.h> |
32 | #include "libavutil/bswap.h" | 32 | #include "libavutil/bswap.h" |
33 | #include "libavutil/common.h" | 33 | #include "libavutil/common.h" |
34 | #include "libavutil/intreadwrite.h" | 34 | #include "libavutil/intreadwrite.h" |
diff --git a/apps/codecs/libwmapro/libavutil/internal.h b/apps/codecs/libwmapro/libavutil/internal.h index 2b8da1d8c2..97087e462a 100644 --- a/apps/codecs/libwmapro/libavutil/internal.h +++ b/apps/codecs/libwmapro/libavutil/internal.h | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <limits.h> | 33 | #include <limits.h> |
34 | #include <stdint.h> | 34 | #include <stdint.h> |
35 | #include <stddef.h> | 35 | #include <stddef.h> |
36 | #include <assert.h> | 36 | //#include <assert.h> |
37 | //#include "config.h" | 37 | //#include "config.h" |
38 | #include "attributes.h" | 38 | #include "attributes.h" |
39 | //#include "timer.h" | 39 | //#include "timer.h" |
@@ -142,8 +142,8 @@ | |||
142 | #endif | 142 | #endif |
143 | 143 | ||
144 | /* avoid usage of dangerous/inappropriate system functions */ | 144 | /* avoid usage of dangerous/inappropriate system functions */ |
145 | #undef malloc | 145 | //#undef malloc |
146 | #define malloc please_use_av_malloc | 146 | //#define malloc please_use_av_malloc |
147 | #undef free | 147 | #undef free |
148 | #define free please_use_av_free | 148 | #define free please_use_av_free |
149 | #undef realloc | 149 | #undef realloc |
@@ -163,8 +163,8 @@ | |||
163 | #undef exit | 163 | #undef exit |
164 | #define exit exit_is_forbidden | 164 | #define exit exit_is_forbidden |
165 | #ifndef LIBAVFORMAT_BUILD | 165 | #ifndef LIBAVFORMAT_BUILD |
166 | #undef printf | 166 | //#undef printf |
167 | #define printf please_use_av_log_instead_of_printf | 167 | //#define printf please_use_av_log_instead_of_printf |
168 | #undef fprintf | 168 | #undef fprintf |
169 | #define fprintf please_use_av_log_instead_of_fprintf | 169 | #define fprintf please_use_av_log_instead_of_fprintf |
170 | #undef puts | 170 | #undef puts |
diff --git a/apps/codecs/libwmapro/libavutil/log.c b/apps/codecs/libwmapro/libavutil/log.c index 166e724b07..6cbe0da8b8 100644 --- a/apps/codecs/libwmapro/libavutil/log.c +++ b/apps/codecs/libwmapro/libavutil/log.c | |||
@@ -54,10 +54,10 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) | |||
54 | return; | 54 | return; |
55 | } | 55 | } |
56 | if(count>0){ | 56 | if(count>0){ |
57 | fprintf(stderr, " Last message repeated %d times\n", count); | 57 | //fprintf(stderr, " Last message repeated %d times\n", count); |
58 | count=0; | 58 | count=0; |
59 | } | 59 | } |
60 | fputs(line, stderr); | 60 | //fputs(line, stderr); |
61 | strcpy(prev, line); | 61 | strcpy(prev, line); |
62 | } | 62 | } |
63 | 63 | ||
diff --git a/apps/codecs/libwmapro/libavutil/mathematics.c b/apps/codecs/libwmapro/libavutil/mathematics.c index 04f3e870d1..7af0104516 100644 --- a/apps/codecs/libwmapro/libavutil/mathematics.c +++ b/apps/codecs/libwmapro/libavutil/mathematics.c | |||
@@ -23,7 +23,7 @@ | |||
23 | * miscellaneous math routines and tables | 23 | * miscellaneous math routines and tables |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include <assert.h> | 26 | //#include <assert.h> |
27 | #include <stdint.h> | 27 | #include <stdint.h> |
28 | #include <limits.h> | 28 | #include <limits.h> |
29 | #include "mathematics.h" | 29 | #include "mathematics.h" |
@@ -76,9 +76,9 @@ int64_t av_gcd(int64_t a, int64_t b){ | |||
76 | 76 | ||
77 | int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd){ | 77 | int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd){ |
78 | int64_t r=0; | 78 | int64_t r=0; |
79 | assert(c > 0); | 79 | //assert(c > 0); |
80 | assert(b >=0); | 80 | //assert(b >=0); |
81 | assert(rnd >=0 && rnd<=5 && rnd!=4); | 81 | //assert(rnd >=0 && rnd<=5 && rnd!=4); |
82 | 82 | ||
83 | if(a<0 && a != INT64_MIN) return -av_rescale_rnd(-a, b, c, rnd ^ ((rnd>>1)&1)); | 83 | if(a<0 && a != INT64_MIN) return -av_rescale_rnd(-a, b, c, rnd ^ ((rnd>>1)&1)); |
84 | 84 | ||
diff --git a/apps/codecs/libwmapro/libwmapro.make b/apps/codecs/libwmapro/libwmapro.make new file mode 100644 index 0000000000..9177eafb20 --- /dev/null +++ b/apps/codecs/libwmapro/libwmapro.make | |||
@@ -0,0 +1,18 @@ | |||
1 | # __________ __ ___. | ||
2 | # Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
3 | # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
4 | # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
5 | # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
6 | # \/ \/ \/ \/ \/ | ||
7 | # $Id$ | ||
8 | # | ||
9 | |||
10 | # libwmapro | ||
11 | WMAPROLIB := $(CODECDIR)/libwmapro.a | ||
12 | WMAPROLIB_SRC := $(call preprocess, $(APPSDIR)/codecs/libwmapro/SOURCES) | ||
13 | WMAPROLIB_OBJ := $(call c2obj, $(WMAPROLIB_SRC)) | ||
14 | OTHER_SRC += $(WMAPROLIB_SRC) | ||
15 | |||
16 | $(WMAPROLIB): $(WMAPROLIB_OBJ) | ||
17 | $(SILENT)$(shell rm -f $@) | ||
18 | $(call PRINTS,AR $(@F))$(AR) rcs $@ $^ >/dev/null | ||
diff --git a/apps/codecs/libwmapro/mdct_tablegen.h b/apps/codecs/libwmapro/mdct_tablegen.h index 9f130aa6b5..998f86f283 100644 --- a/apps/codecs/libwmapro/mdct_tablegen.h +++ b/apps/codecs/libwmapro/mdct_tablegen.h | |||
@@ -20,7 +20,7 @@ | |||
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | */ | 21 | */ |
22 | 22 | ||
23 | #include <assert.h> | 23 | //#include <assert.h> |
24 | // do not use libavutil/mathematics.h since this is compiled both | 24 | // do not use libavutil/mathematics.h since this is compiled both |
25 | // for the host and the target and config.h is only valid for the target | 25 | // for the host and the target and config.h is only valid for the target |
26 | #include <math.h> | 26 | #include <math.h> |
@@ -53,7 +53,7 @@ av_cold void ff_sine_window_init(float *window, int n) { | |||
53 | } | 53 | } |
54 | 54 | ||
55 | av_cold void ff_init_ff_sine_windows(int index) { | 55 | av_cold void ff_init_ff_sine_windows(int index) { |
56 | assert(index >= 0 && index < FF_ARRAY_ELEMS(ff_sine_windows)); | 56 | //assert(index >= 0 && index < FF_ARRAY_ELEMS(ff_sine_windows)); |
57 | #if !CONFIG_HARDCODED_TABLES | 57 | #if !CONFIG_HARDCODED_TABLES |
58 | ff_sine_window_init(ff_sine_windows[index], 1 << index); | 58 | ff_sine_window_init(ff_sine_windows[index], 1 << index); |
59 | #endif | 59 | #endif |
diff --git a/apps/codecs/libwmapro/put_bits.h b/apps/codecs/libwmapro/put_bits.h index c0139661a5..9f66256b79 100644 --- a/apps/codecs/libwmapro/put_bits.h +++ b/apps/codecs/libwmapro/put_bits.h | |||
@@ -28,7 +28,7 @@ | |||
28 | 28 | ||
29 | #include <stdint.h> | 29 | #include <stdint.h> |
30 | #include <stdlib.h> | 30 | #include <stdlib.h> |
31 | #include <assert.h> | 31 | //#include <assert.h> |
32 | #include "libavutil/bswap.h" | 32 | #include "libavutil/bswap.h" |
33 | #include "libavutil/common.h" | 33 | #include "libavutil/common.h" |
34 | #include "libavutil/intreadwrite.h" | 34 | #include "libavutil/intreadwrite.h" |
@@ -153,7 +153,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) | |||
153 | int bit_left; | 153 | int bit_left; |
154 | 154 | ||
155 | // printf("put_bits=%d %x\n", n, value); | 155 | // printf("put_bits=%d %x\n", n, value); |
156 | assert(n <= 31 && value < (1U << n)); | 156 | //assert(n <= 31 && value < (1U << n)); |
157 | 157 | ||
158 | bit_buf = s->bit_buf; | 158 | bit_buf = s->bit_buf; |
159 | bit_left = s->bit_left; | 159 | bit_left = s->bit_left; |
@@ -264,7 +264,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) | |||
264 | 264 | ||
265 | static inline void put_sbits(PutBitContext *pb, int n, int32_t value) | 265 | static inline void put_sbits(PutBitContext *pb, int n, int32_t value) |
266 | { | 266 | { |
267 | assert(n >= 0 && n <= 31); | 267 | //assert(n >= 0 && n <= 31); |
268 | 268 | ||
269 | put_bits(pb, n, value & ((1<<n)-1)); | 269 | put_bits(pb, n, value & ((1<<n)-1)); |
270 | } | 270 | } |
@@ -304,12 +304,12 @@ static inline uint8_t* put_bits_ptr(PutBitContext *s) | |||
304 | */ | 304 | */ |
305 | static inline void skip_put_bytes(PutBitContext *s, int n) | 305 | static inline void skip_put_bytes(PutBitContext *s, int n) |
306 | { | 306 | { |
307 | assert((put_bits_count(s)&7)==0); | 307 | //assert((put_bits_count(s)&7)==0); |
308 | #ifdef ALT_BITSTREAM_WRITER | 308 | #ifdef ALT_BITSTREAM_WRITER |
309 | FIXME may need some cleaning of the buffer | 309 | FIXME may need some cleaning of the buffer |
310 | s->index += n<<3; | 310 | s->index += n<<3; |
311 | #else | 311 | #else |
312 | assert(s->bit_left==32); | 312 | //assert(s->bit_left==32); |
313 | s->buf_ptr += n; | 313 | s->buf_ptr += n; |
314 | #endif | 314 | #endif |
315 | } | 315 | } |
diff --git a/apps/codecs/libwmapro/wma.c b/apps/codecs/libwmapro/wma.c index 5306634c7c..4b36c84aad 100644 --- a/apps/codecs/libwmapro/wma.c +++ b/apps/codecs/libwmapro/wma.c | |||
@@ -23,8 +23,8 @@ | |||
23 | #include "wma.h" | 23 | #include "wma.h" |
24 | //#include "wmadata.h" | 24 | //#include "wmadata.h" |
25 | 25 | ||
26 | #undef NDEBUG | 26 | //#undef NDEBUG |
27 | #include <assert.h> | 27 | //#include <assert.h> |
28 | #if 0 | 28 | #if 0 |
29 | /* XXX: use same run/length optimization as mpeg decoders */ | 29 | /* XXX: use same run/length optimization as mpeg decoders */ |
30 | //FIXME maybe split decode / encode or pass flag | 30 | //FIXME maybe split decode / encode or pass flag |
diff --git a/apps/codecs/libwmapro/wmaprodec.c b/apps/codecs/libwmapro/wmaprodec.c index 88d317d5f6..e72919434c 100644 --- a/apps/codecs/libwmapro/wmaprodec.c +++ b/apps/codecs/libwmapro/wmaprodec.c | |||
@@ -93,13 +93,11 @@ | |||
93 | #include "wmaprodata.h" | 93 | #include "wmaprodata.h" |
94 | #include "dsputil.h" | 94 | #include "dsputil.h" |
95 | #include "wma.h" | 95 | #include "wma.h" |
96 | #include "wmaprodec.h" | ||
96 | 97 | ||
97 | /* Some defines to make it compile */ | 98 | /* Some defines to make it compile */ |
98 | #define AVERROR_INVALIDDATA -1 | 99 | #define AVERROR_INVALIDDATA -1 |
99 | #define AVERROR_PATCHWELCOME -2 | 100 | #define AVERROR_PATCHWELCOME -2 |
100 | #ifndef M_PI | ||
101 | #define M_PI 3.14159265358979323846 /* pi */ | ||
102 | #endif | ||
103 | #define av_log_ask_for_sample(...) | 101 | #define av_log_ask_for_sample(...) |
104 | 102 | ||
105 | /** current decoder limitations */ | 103 | /** current decoder limitations */ |
@@ -238,8 +236,8 @@ typedef struct WMAProDecodeCtx { | |||
238 | */ | 236 | */ |
239 | static void av_cold dump_context(WMAProDecodeCtx *s) | 237 | static void av_cold dump_context(WMAProDecodeCtx *s) |
240 | { | 238 | { |
241 | #define PRINT(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %d\n", a, b); | 239 | #define PRINT(a, b) printf(" %s = %d\n", a, b); |
242 | #define PRINT_HEX(a, b) av_log(s->avctx, AV_LOG_DEBUG, " %s = %x\n", a, b); | 240 | #define PRINT_HEX(a, b) printf(" %s = %x\n", a, b); |
243 | 241 | ||
244 | PRINT("ed sample bit depth", s->bits_per_sample); | 242 | PRINT("ed sample bit depth", s->bits_per_sample); |
245 | PRINT_HEX("ed decode flags", s->decode_flags); | 243 | PRINT_HEX("ed decode flags", s->decode_flags); |
@@ -255,7 +253,7 @@ static void av_cold dump_context(WMAProDecodeCtx *s) | |||
255 | *@param avctx codec context | 253 | *@param avctx codec context |
256 | *@return 0 on success, < 0 otherwise | 254 | *@return 0 on success, < 0 otherwise |
257 | */ | 255 | */ |
258 | static av_cold int decode_end(AVCodecContext *avctx) | 256 | av_cold int decode_end(AVCodecContext *avctx) |
259 | { | 257 | { |
260 | WMAProDecodeCtx *s = avctx->priv_data; | 258 | WMAProDecodeCtx *s = avctx->priv_data; |
261 | int i; | 259 | int i; |
@@ -271,8 +269,10 @@ static av_cold int decode_end(AVCodecContext *avctx) | |||
271 | *@param avctx codec context | 269 | *@param avctx codec context |
272 | *@return 0 on success, -1 otherwise | 270 | *@return 0 on success, -1 otherwise |
273 | */ | 271 | */ |
274 | static av_cold int decode_init(AVCodecContext *avctx) | 272 | av_cold int decode_init(AVCodecContext *avctx) |
275 | { | 273 | { |
274 | avctx->priv_data = malloc(sizeof(WMAProDecodeCtx)); | ||
275 | memset(avctx->priv_data, 0, sizeof(WMAProDecodeCtx)); | ||
276 | WMAProDecodeCtx *s = avctx->priv_data; | 276 | WMAProDecodeCtx *s = avctx->priv_data; |
277 | uint8_t *edata_ptr = avctx->extradata; | 277 | uint8_t *edata_ptr = avctx->extradata; |
278 | unsigned int channel_mask; | 278 | unsigned int channel_mask; |
@@ -454,7 +454,6 @@ static av_cold int decode_init(AVCodecContext *avctx) | |||
454 | sin64[i] = sin(i*M_PI / 64.0); | 454 | sin64[i] = sin(i*M_PI / 64.0); |
455 | #if 0 | 455 | #if 0 |
456 | if (avctx->debug & FF_DEBUG_BITSTREAM) | 456 | if (avctx->debug & FF_DEBUG_BITSTREAM) |
457 | dump_context(s); | ||
458 | #endif | 457 | #endif |
459 | 458 | ||
460 | avctx->channel_layout = channel_mask; | 459 | avctx->channel_layout = channel_mask; |
@@ -1379,7 +1378,7 @@ static int decode_frame(WMAProDecodeCtx *s) | |||
1379 | if (len != (get_bits_count(gb) - s->frame_offset) + 2) { | 1378 | if (len != (get_bits_count(gb) - s->frame_offset) + 2) { |
1380 | /** FIXME: not sure if this is always an error */ | 1379 | /** FIXME: not sure if this is always an error */ |
1381 | av_log(s->avctx, AV_LOG_ERROR, "frame[%i] would have to skip %i bits\n", | 1380 | av_log(s->avctx, AV_LOG_ERROR, "frame[%i] would have to skip %i bits\n", |
1382 | s->frame_num, len - (get_bits_count(gb) - s->frame_offset) - 1); | 1381 | (int)s->frame_num, len - (get_bits_count(gb) - s->frame_offset) - 1); |
1383 | s->packet_loss = 1; | 1382 | s->packet_loss = 1; |
1384 | return 0; | 1383 | return 0; |
1385 | } | 1384 | } |
@@ -1465,7 +1464,7 @@ static void save_bits(WMAProDecodeCtx *s, GetBitContext* gb, int len, | |||
1465 | *@param avpkt input packet | 1464 | *@param avpkt input packet |
1466 | *@return number of bytes that were read from the input buffer | 1465 | *@return number of bytes that were read from the input buffer |
1467 | */ | 1466 | */ |
1468 | static int decode_packet(AVCodecContext *avctx, | 1467 | int decode_packet(AVCodecContext *avctx, |
1469 | void *data, int *data_size, AVPacket* avpkt) | 1468 | void *data, int *data_size, AVPacket* avpkt) |
1470 | { | 1469 | { |
1471 | WMAProDecodeCtx *s = avctx->priv_data; | 1470 | WMAProDecodeCtx *s = avctx->priv_data; |
@@ -1549,6 +1548,20 @@ static int decode_packet(AVCodecContext *avctx, | |||
1549 | *data_size = (int8_t *)s->samples - (int8_t *)data; | 1548 | *data_size = (int8_t *)s->samples - (int8_t *)data; |
1550 | s->packet_offset = get_bits_count(gb) & 7; | 1549 | s->packet_offset = get_bits_count(gb) & 7; |
1551 | 1550 | ||
1551 | /* Convert the pcm samples to signed 16-bit integers. This is the format that | ||
1552 | * the rockbox simulator works with. */ | ||
1553 | #ifdef ROCKBOX | ||
1554 | float* fptr = data; | ||
1555 | int32_t* ptr = data; | ||
1556 | int x; | ||
1557 | for(x = 0; x < *data_size; x++) | ||
1558 | { | ||
1559 | fptr[x] *= ((float)(INT32_MAX)); | ||
1560 | ptr[x] = (int32_t)fptr[x]; | ||
1561 | |||
1562 | } | ||
1563 | #endif | ||
1564 | |||
1552 | return (s->packet_loss) ? AVERROR_INVALIDDATA : get_bits_count(gb) >> 3; | 1565 | return (s->packet_loss) ? AVERROR_INVALIDDATA : get_bits_count(gb) >> 3; |
1553 | } | 1566 | } |
1554 | 1567 | ||
diff --git a/apps/codecs/libwmapro/wmaprodec.h b/apps/codecs/libwmapro/wmaprodec.h new file mode 100644 index 0000000000..045481b529 --- /dev/null +++ b/apps/codecs/libwmapro/wmaprodec.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #include "avcodec.h" | ||
2 | |||
3 | av_cold int decode_end(AVCodecContext *avctx); | ||
4 | av_cold int decode_init(AVCodecContext *avctx); | ||
5 | int decode_packet(AVCodecContext *avctx, | ||
6 | void *data, int *data_size, AVPacket* avpkt); | ||