MP3 Player without external hardware MP3 Player without external hardware. A software based MP3 player based on a modified version of libmad. Mono output (at the moment) via AnalogOut. Files are read from an USB drive. This is a demo program, it plays only one file at the moment. Documentation is in "main.cpp" and "config.h"
Diff: layer3.cpp
- Revision:
- 2:f28cf0afd021
- Parent:
- 0:7627c79db971
diff -r 7c923cbe9f1d -r f28cf0afd021 layer3.cpp --- a/layer3.cpp Fri Nov 26 13:05:34 2010 +0000 +++ b/layer3.cpp Sat Nov 27 17:27:33 2010 +0000 @@ -26,10 +26,6 @@ # include <stdlib.h> # include <string.h> -# ifdef HAVE_ASSERT_H -# include <assert.h> -# endif - # ifdef HAVE_LIMITS_H # include <limits.h> # else @@ -1253,7 +1249,7 @@ } } - assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT); + /* assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);*/ # if 0 && defined(DEBUG) if (bits_left < 0) @@ -2456,14 +2452,14 @@ /* long blocks */ for (sb = 0; sb < 2; ++sb, l += 18) { III_imdct_l(&xr[ch][l], output, block_type); - III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); + III_overlap(output, (frame->overlap)[ch][sb], sample, sb); } } else { /* short blocks */ for (sb = 0; sb < 2; ++sb, l += 18) { III_imdct_s(&xr[ch][l], output); - III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); + III_overlap(output, (frame->overlap)[ch][sb], sample, sb); } } @@ -2481,7 +2477,7 @@ /* long blocks */ for (sb = 2; sb < sblimit; ++sb, l += 18) { III_imdct_l(&xr[ch][l], output, channel->block_type); - III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); + III_overlap(output, (frame->overlap)[ch][sb], sample, sb); if (sb & 1) III_freqinver(sample, sb); @@ -2491,7 +2487,7 @@ /* short blocks */ for (sb = 2; sb < sblimit; ++sb, l += 18) { III_imdct_s(&xr[ch][l], output); - III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); + III_overlap(output, (frame->overlap)[ch][sb], sample, sb); if (sb & 1) III_freqinver(sample, sb); @@ -2501,7 +2497,7 @@ /* remaining (zero) subbands */ for (sb = sblimit; sb < 32; ++sb) { - III_overlap_z((*frame->overlap)[ch][sb], sample, sb); + III_overlap_z((frame->overlap)[ch][sb], sample, sb); if (sb & 1) III_freqinver(sample, sb); @@ -2530,21 +2526,17 @@ /* allocate Layer III dynamic structures */ if (stream->main_data == 0) { +#if defined(TARGET_LPC1768) + stream->main_data = (unsigned char (*)[MAD_BUFFER_MDLEN])mad_malloc(MAD_BUFFER_MDLEN); +#else stream->main_data = (unsigned char (*)[MAD_BUFFER_MDLEN])malloc(MAD_BUFFER_MDLEN); +#endif if (stream->main_data == 0) { stream->error = MAD_ERROR_NOMEM; return -1; } } - if (frame->overlap == 0) { - frame->overlap = (mad_fixed_t (*)[2][32][18])calloc(2 * 32 * 18, sizeof(mad_fixed_t)); - if (frame->overlap == 0) { - stream->error = MAD_ERROR_NOMEM; - return -1; - } - } - nch = MAD_NCHANNELS(header); si_len = (header->flags & MAD_FLAG_LSF_EXT) ? (nch == 1 ? 9 : 17) : (nch == 1 ? 17 : 32); @@ -2632,8 +2624,7 @@ *stream->main_data + stream->md_len - si.main_data_begin); if (md_len > si.main_data_begin) { - assert(stream->md_len + md_len - - si.main_data_begin <= MAD_BUFFER_MDLEN); + /*assert(stream->md_len + md_len -si.main_data_begin <= MAD_BUFFER_MDLEN); */ memcpy(*stream->main_data + stream->md_len, mad_bit_nextbyte(&stream->ptr),