diff options
author | Tomasz Malesinski <tomal@rockbox.org> | 2006-11-26 18:31:41 +0000 |
---|---|---|
committer | Tomasz Malesinski <tomal@rockbox.org> | 2006-11-26 18:31:41 +0000 |
commit | 80da8b141c4672ca4380d66094976b6342ed5071 (patch) | |
tree | 631e9edd537ae9983524622a9e1ec82e24957280 /apps/codecs/alac.c | |
parent | 8ef3c8a342d41c2aa5e5d8370fd4e89d4d8d937e (diff) |
FS#6357, patch 1: let iramcopy and bss share the same space in codecs and
plugins. Currently, in case of plugins using IRAM bss is cleared twice,
once in the loader, once in PLUGIN_IRAM_INIT. For codecs, bss is cleared only
during codec initialization. Also, removed double variables in codecs
storing a pointer to codec_api.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11606 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/alac.c')
-rw-r--r-- | apps/codecs/alac.c | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/apps/codecs/alac.c b/apps/codecs/alac.c index 13423f4804..1c1b14a0da 100644 --- a/apps/codecs/alac.c +++ b/apps/codecs/alac.c @@ -23,21 +23,10 @@ CODEC_HEADER -#ifdef USE_IRAM -extern char iramcopy[]; -extern char iramstart[]; -extern char iramend[]; -extern char iedata[]; -extern char iend[]; -#endif - int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR; -struct codec_api* rb; -struct codec_api* ci; - /* this is the codec entry point */ -enum codec_status codec_start(struct codec_api* api) +enum codec_status codec_main(void) { size_t n; demux_res_t demux_res; @@ -53,14 +42,6 @@ enum codec_status codec_start(struct codec_api* api) int retval; /* Generic codec initialisation */ - rb = api; - ci = api; - -#ifdef USE_IRAM - rb->memcpy(iramstart, iramcopy, iramend-iramstart); - rb->memset(iedata, 0, iend - iedata); -#endif - ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, (int *)(1024*128)); @@ -69,7 +50,7 @@ enum codec_status codec_start(struct codec_api* api) next_track: - if (codec_init(api)) { + if (codec_init()) { LOGF("ALAC: Error initialising codec\n"); retval = CODEC_ERROR; goto exit; @@ -78,8 +59,8 @@ enum codec_status codec_start(struct codec_api* api) while (!*ci->taginfo_ready && !ci->stop_codec) ci->sleep(1); - ci->configure(DSP_SWITCH_FREQUENCY, (long *)(rb->id3->frequency)); - codec_set_replaygain(rb->id3); + ci->configure(DSP_SWITCH_FREQUENCY, (long *)(ci->id3->frequency)); + codec_set_replaygain(ci->id3); stream_create(&input_stream,ci); @@ -99,7 +80,7 @@ enum codec_status codec_start(struct codec_api* api) samplesdone=0; /* The main decoding loop */ while (i < demux_res.num_sample_byte_sizes) { - rb->yield(); + ci->yield(); if (ci->stop_codec || ci->new_track) { break; } @@ -132,18 +113,18 @@ enum codec_status codec_start(struct codec_api* api) } /* Decode one block - returned samples will be host-endian */ - rb->yield(); - samplesdecoded=alac_decode_frame(&alac, buffer, outputbuffer, rb->yield); + ci->yield(); + samplesdecoded=alac_decode_frame(&alac, buffer, outputbuffer, ci->yield); /* Advance codec buffer n bytes */ ci->advance_buffer(n); /* Output the audio */ - rb->yield(); + ci->yield(); while(!ci->pcmbuf_insert_split(outputbuffer[0], outputbuffer[1], samplesdecoded*sizeof(int32_t))) - rb->yield(); + ci->yield(); /* Update the elapsed-time indicator */ samplesdone+=sample_duration; |