diff options
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 @@ | |||
23 | 23 | ||
24 | CODEC_HEADER | 24 | CODEC_HEADER |
25 | 25 | ||
26 | #ifdef USE_IRAM | ||
27 | extern char iramcopy[]; | ||
28 | extern char iramstart[]; | ||
29 | extern char iramend[]; | ||
30 | extern char iedata[]; | ||
31 | extern char iend[]; | ||
32 | #endif | ||
33 | |||
34 | int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR; | 26 | int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR; |
35 | 27 | ||
36 | struct codec_api* rb; | ||
37 | struct codec_api* ci; | ||
38 | |||
39 | /* this is the codec entry point */ | 28 | /* this is the codec entry point */ |
40 | enum codec_status codec_start(struct codec_api* api) | 29 | enum codec_status codec_main(void) |
41 | { | 30 | { |
42 | size_t n; | 31 | size_t n; |
43 | demux_res_t demux_res; | 32 | demux_res_t demux_res; |
@@ -53,14 +42,6 @@ enum codec_status codec_start(struct codec_api* api) | |||
53 | int retval; | 42 | int retval; |
54 | 43 | ||
55 | /* Generic codec initialisation */ | 44 | /* Generic codec initialisation */ |
56 | rb = api; | ||
57 | ci = api; | ||
58 | |||
59 | #ifdef USE_IRAM | ||
60 | rb->memcpy(iramstart, iramcopy, iramend-iramstart); | ||
61 | rb->memset(iedata, 0, iend - iedata); | ||
62 | #endif | ||
63 | |||
64 | ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); | 45 | ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); |
65 | ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, (int *)(1024*128)); | 46 | ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, (int *)(1024*128)); |
66 | 47 | ||
@@ -69,7 +50,7 @@ enum codec_status codec_start(struct codec_api* api) | |||
69 | 50 | ||
70 | next_track: | 51 | next_track: |
71 | 52 | ||
72 | if (codec_init(api)) { | 53 | if (codec_init()) { |
73 | LOGF("ALAC: Error initialising codec\n"); | 54 | LOGF("ALAC: Error initialising codec\n"); |
74 | retval = CODEC_ERROR; | 55 | retval = CODEC_ERROR; |
75 | goto exit; | 56 | goto exit; |
@@ -78,8 +59,8 @@ enum codec_status codec_start(struct codec_api* api) | |||
78 | while (!*ci->taginfo_ready && !ci->stop_codec) | 59 | while (!*ci->taginfo_ready && !ci->stop_codec) |
79 | ci->sleep(1); | 60 | ci->sleep(1); |
80 | 61 | ||
81 | ci->configure(DSP_SWITCH_FREQUENCY, (long *)(rb->id3->frequency)); | 62 | ci->configure(DSP_SWITCH_FREQUENCY, (long *)(ci->id3->frequency)); |
82 | codec_set_replaygain(rb->id3); | 63 | codec_set_replaygain(ci->id3); |
83 | 64 | ||
84 | stream_create(&input_stream,ci); | 65 | stream_create(&input_stream,ci); |
85 | 66 | ||
@@ -99,7 +80,7 @@ enum codec_status codec_start(struct codec_api* api) | |||
99 | samplesdone=0; | 80 | samplesdone=0; |
100 | /* The main decoding loop */ | 81 | /* The main decoding loop */ |
101 | while (i < demux_res.num_sample_byte_sizes) { | 82 | while (i < demux_res.num_sample_byte_sizes) { |
102 | rb->yield(); | 83 | ci->yield(); |
103 | if (ci->stop_codec || ci->new_track) { | 84 | if (ci->stop_codec || ci->new_track) { |
104 | break; | 85 | break; |
105 | } | 86 | } |
@@ -132,18 +113,18 @@ enum codec_status codec_start(struct codec_api* api) | |||
132 | } | 113 | } |
133 | 114 | ||
134 | /* Decode one block - returned samples will be host-endian */ | 115 | /* Decode one block - returned samples will be host-endian */ |
135 | rb->yield(); | 116 | ci->yield(); |
136 | samplesdecoded=alac_decode_frame(&alac, buffer, outputbuffer, rb->yield); | 117 | samplesdecoded=alac_decode_frame(&alac, buffer, outputbuffer, ci->yield); |
137 | 118 | ||
138 | /* Advance codec buffer n bytes */ | 119 | /* Advance codec buffer n bytes */ |
139 | ci->advance_buffer(n); | 120 | ci->advance_buffer(n); |
140 | 121 | ||
141 | /* Output the audio */ | 122 | /* Output the audio */ |
142 | rb->yield(); | 123 | ci->yield(); |
143 | while(!ci->pcmbuf_insert_split(outputbuffer[0], | 124 | while(!ci->pcmbuf_insert_split(outputbuffer[0], |
144 | outputbuffer[1], | 125 | outputbuffer[1], |
145 | samplesdecoded*sizeof(int32_t))) | 126 | samplesdecoded*sizeof(int32_t))) |
146 | rb->yield(); | 127 | ci->yield(); |
147 | 128 | ||
148 | /* Update the elapsed-time indicator */ | 129 | /* Update the elapsed-time indicator */ |
149 | samplesdone+=sample_duration; | 130 | samplesdone+=sample_duration; |