summaryrefslogtreecommitdiff
path: root/apps/codecs/alac.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/alac.c')
-rw-r--r--apps/codecs/alac.c37
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
24CODEC_HEADER 24CODEC_HEADER
25 25
26#ifdef USE_IRAM
27extern char iramcopy[];
28extern char iramstart[];
29extern char iramend[];
30extern char iedata[];
31extern char iend[];
32#endif
33
34int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR; 26int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR;
35 27
36struct codec_api* rb;
37struct codec_api* ci;
38
39/* this is the codec entry point */ 28/* this is the codec entry point */
40enum codec_status codec_start(struct codec_api* api) 29enum 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;