summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-09-01 12:15:43 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-09-01 12:15:43 +0000
commit4db3e8965270dfe813a14c5ee9bcd0b645eb2edf (patch)
treeff785e25196226037c509428497b95f0e1e219b9
parentd67d6a8462e02770d81d6a01f3193d0a2050fbe2 (diff)
downloadrockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.tar.gz
rockbox-4db3e8965270dfe813a14c5ee9bcd0b645eb2edf.zip
Shuffle some functions around so that interfacing with playback.c in particular isn't required. Though playback does finish the audio init, pcm doesn't care who does it.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30403 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playback.c13
-rw-r--r--apps/playback.h1
-rw-r--r--apps/radio/radio.c2
-rw-r--r--apps/recorder/recording.c2
-rw-r--r--firmware/export/pcm-internal.h1
-rw-r--r--firmware/export/pcm.h1
-rw-r--r--firmware/pcm.c31
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c2
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c2
-rw-r--r--firmware/target/arm/pcm-pp.c2
-rw-r--r--firmware/target/arm/pcm-telechips.c10
-rw-r--r--firmware/target/arm/pnx0101/pcm-pnx0101.c2
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c2
-rw-r--r--firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c2
-rw-r--r--firmware/target/arm/s5l8700/pcm-s5l8700.c2
-rw-r--r--firmware/target/arm/s5l8702/pcm-s5l8702.c2
-rw-r--r--firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c2
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c2
-rw-r--r--firmware/target/coldfire/pcm-coldfire.c2
-rw-r--r--firmware/target/hosted/android/pcm-android.c2
-rw-r--r--firmware/target/hosted/maemo/pcm-gstreamer.c2
-rw-r--r--firmware/target/hosted/sdl/pcm-sdl.c2
-rw-r--r--firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c2
23 files changed, 57 insertions, 34 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 9fd25b975d..dbe28dd1c4 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -183,8 +183,7 @@ static struct albumart_slot
183/* Buffer and thread state tracking */ 183/* Buffer and thread state tracking */
184static enum filling_state 184static enum filling_state
185{ 185{
186 STATE_BOOT = 0, /* audio thread is not ready yet */ 186 STATE_IDLE = 0, /* audio is stopped: nothing to do */
187 STATE_IDLE, /* audio is stopped: nothing to do */
188 STATE_FILLING, /* adding tracks to the buffer */ 187 STATE_FILLING, /* adding tracks to the buffer */
189 STATE_FULL, /* can't add any more tracks */ 188 STATE_FULL, /* can't add any more tracks */
190 STATE_END_OF_PLAYLIST, /* all remaining tracks have been added */ 189 STATE_END_OF_PLAYLIST, /* all remaining tracks have been added */
@@ -194,7 +193,7 @@ static enum filling_state
194#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 193#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
195 STATE_USB, /* USB mode, ignore most messages */ 194 STATE_USB, /* USB mode, ignore most messages */
196#endif 195#endif
197} filling = STATE_BOOT; 196} filling = STATE_IDLE;
198 197
199/* Track info - holds information about each track in the buffer */ 198/* Track info - holds information about each track in the buffer */
200struct track_info 199struct track_info
@@ -2917,8 +2916,6 @@ static void audio_thread(void)
2917 2916
2918 pcm_postinit(); 2917 pcm_postinit();
2919 2918
2920 filling = STATE_IDLE;
2921
2922 while (1) 2919 while (1)
2923 { 2920 {
2924 switch (filling) 2921 switch (filling)
@@ -3717,12 +3714,6 @@ unsigned long audio_prev_elapsed(void)
3717 return prev_track_elapsed; 3714 return prev_track_elapsed;
3718} 3715}
3719 3716
3720/* Is the audio thread ready to accept commands? */
3721bool audio_is_thread_ready(void)
3722{
3723 return filling != STATE_BOOT;
3724}
3725
3726/* Return total file buffer length after accounting for the talk buf */ 3717/* Return total file buffer length after accounting for the talk buf */
3727size_t audio_get_filebuflen(void) 3718size_t audio_get_filebuflen(void)
3728{ 3719{
diff --git a/apps/playback.h b/apps/playback.h
index 793055f98c..6e57c03fad 100644
--- a/apps/playback.h
+++ b/apps/playback.h
@@ -70,7 +70,6 @@ struct bufopen_bitmap_data {
70#endif 70#endif
71 71
72/* Functions */ 72/* Functions */
73bool audio_is_thread_ready(void);
74int audio_track_count(void); 73int audio_track_count(void);
75long audio_filebufused(void); 74long audio_filebufused(void);
76void audio_pre_ff_rewind(void); 75void audio_pre_ff_rewind(void);
diff --git a/apps/radio/radio.c b/apps/radio/radio.c
index 1a77709f9c..4524707289 100644
--- a/apps/radio/radio.c
+++ b/apps/radio/radio.c
@@ -418,7 +418,7 @@ void radio_screen(void)
418 /* turn on radio */ 418 /* turn on radio */
419#if CONFIG_CODEC == SWCODEC 419#if CONFIG_CODEC == SWCODEC
420 /* This should be done before touching audio settings */ 420 /* This should be done before touching audio settings */
421 while (!audio_is_thread_ready()) 421 while (!pcm_is_initialized())
422 sleep(0); 422 sleep(0);
423 423
424 audio_set_input_source(AUDIO_SRC_FMRADIO, 424 audio_set_input_source(AUDIO_SRC_FMRADIO,
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 453b2fc42d..d706899b1c 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -1074,7 +1074,7 @@ bool recording_screen(bool no_source)
1074 1074
1075#if CONFIG_CODEC == SWCODEC 1075#if CONFIG_CODEC == SWCODEC
1076 /* This should be done before touching audio settings */ 1076 /* This should be done before touching audio settings */
1077 while (!audio_is_thread_ready()) 1077 while (!pcm_is_initialized())
1078 sleep(0); 1078 sleep(0);
1079 1079
1080 /* recording_menu gets messed up: so prevent manus talking */ 1080 /* recording_menu gets messed up: so prevent manus talking */
diff --git a/firmware/export/pcm-internal.h b/firmware/export/pcm-internal.h
index bae6a368fa..16e2aeae4d 100644
--- a/firmware/export/pcm-internal.h
+++ b/firmware/export/pcm-internal.h
@@ -66,6 +66,7 @@ extern volatile bool pcm_paused;
66void pcm_play_dma_lock(void); 66void pcm_play_dma_lock(void);
67void pcm_play_dma_unlock(void); 67void pcm_play_dma_unlock(void);
68void pcm_play_dma_init(void) INIT_ATTR; 68void pcm_play_dma_init(void) INIT_ATTR;
69void pcm_play_dma_postinit(void);
69void pcm_play_dma_start(const void *addr, size_t size); 70void pcm_play_dma_start(const void *addr, size_t size);
70void pcm_play_dma_stop(void); 71void pcm_play_dma_stop(void);
71void pcm_play_dma_pause(bool pause); 72void pcm_play_dma_pause(bool pause);
diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h
index 22c5ef350e..fb6581b119 100644
--- a/firmware/export/pcm.h
+++ b/firmware/export/pcm.h
@@ -76,6 +76,7 @@ void pcm_play_unlock(void);
76 76
77void pcm_init(void) INIT_ATTR; 77void pcm_init(void) INIT_ATTR;
78void pcm_postinit(void); 78void pcm_postinit(void);
79bool pcm_is_initialized(void);
79 80
80/* This is for playing "raw" PCM data */ 81/* This is for playing "raw" PCM data */
81void pcm_play_data(pcm_play_callback_type get_more, 82void pcm_play_data(pcm_play_callback_type get_more,
diff --git a/firmware/pcm.c b/firmware/pcm.c
index c2ebc67687..b0a91fb64e 100644
--- a/firmware/pcm.c
+++ b/firmware/pcm.c
@@ -43,6 +43,7 @@
43 * Semi-private - 43 * Semi-private -
44 * pcm_play_get_more_callback 44 * pcm_play_get_more_callback
45 * pcm_play_dma_init 45 * pcm_play_dma_init
46 * pcm_play_dma_postinit
46 * pcm_play_dma_start 47 * pcm_play_dma_start
47 * pcm_play_dma_stop 48 * pcm_play_dma_stop
48 * pcm_play_dma_pause 49 * pcm_play_dma_pause
@@ -79,6 +80,9 @@
79 * 80 *
80 */ 81 */
81 82
83/* 'true' when all stages of pcm initialization have completed */
84static bool pcm_is_ready = false;
85
82/* the registered callback function to ask for more mp3 data */ 86/* the registered callback function to ask for more mp3 data */
83static pcm_play_callback_type pcm_callback_for_more SHAREDBSS_ATTR = NULL; 87static pcm_play_callback_type pcm_callback_for_more SHAREDBSS_ATTR = NULL;
84void (* pcm_play_dma_started)(void) SHAREDBSS_ATTR = NULL; 88void (* pcm_play_dma_started)(void) SHAREDBSS_ATTR = NULL;
@@ -105,6 +109,12 @@ static void pcm_play_stopped(void)
105 pcm_playing = false; 109 pcm_playing = false;
106} 110}
107 111
112static void pcm_wait_for_init(void)
113{
114 while (!pcm_is_ready)
115 sleep(0);
116}
117
108/** 118/**
109 * Perform peak calculation on a buffer of packed 16-bit samples. 119 * Perform peak calculation on a buffer of packed 16-bit samples.
110 * 120 *
@@ -230,6 +240,23 @@ void pcm_init(void)
230 pcm_play_dma_init(); 240 pcm_play_dma_init();
231} 241}
232 242
243/* Finish delayed init */
244void pcm_postinit(void)
245{
246 logf("pcm_postinit");
247
248 logf(" pcm_play_dma_postinit");
249
250 pcm_play_dma_postinit();
251
252 pcm_is_ready = true;
253}
254
255bool pcm_is_initialized(void)
256{
257 return pcm_is_ready;
258}
259
233/* Common code to pcm_play_data and pcm_play_pause */ 260/* Common code to pcm_play_data and pcm_play_pause */
234static void pcm_play_data_start(unsigned char *start, size_t size) 261static void pcm_play_data_start(unsigned char *start, size_t size)
235{ 262{
@@ -402,6 +429,8 @@ void pcm_apply_settings(void)
402{ 429{
403 logf("pcm_apply_settings"); 430 logf("pcm_apply_settings");
404 431
432 pcm_wait_for_init();
433
405 if (pcm_sampr != pcm_curr_sampr) 434 if (pcm_sampr != pcm_curr_sampr)
406 { 435 {
407 logf(" pcm_dma_apply_settings"); 436 logf(" pcm_dma_apply_settings");
@@ -487,6 +516,8 @@ void pcm_init_recording(void)
487{ 516{
488 logf("pcm_init_recording"); 517 logf("pcm_init_recording");
489 518
519 pcm_wait_for_init();
520
490 /* Stop the beasty before attempting recording */ 521 /* Stop the beasty before attempting recording */
491 mixer_reset(); 522 mixer_reset();
492 523
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index a89a47d400..f82b373ade 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -181,7 +181,7 @@ void pcm_play_dma_init(void)
181 audiohw_preinit(); 181 audiohw_preinit();
182} 182}
183 183
184void pcm_postinit(void) 184void pcm_play_dma_postinit(void)
185{ 185{
186 audiohw_postinit(); 186 audiohw_postinit();
187} 187}
diff --git a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
index 1f6eef435a..65571a4ee2 100644
--- a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
+++ b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c
@@ -247,7 +247,7 @@ void pcm_play_dma_init(void)
247 audiohw_init(); 247 audiohw_init();
248} 248}
249 249
250void pcm_postinit(void) 250void pcm_play_dma_postinit(void)
251{ 251{
252 audiohw_postinit(); 252 audiohw_postinit();
253} 253}
diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c
index 704296d407..c35a824a25 100644
--- a/firmware/target/arm/pcm-pp.c
+++ b/firmware/target/arm/pcm-pp.c
@@ -527,7 +527,7 @@ void pcm_play_dma_init(void)
527 IISCONFIG |= IIS_TXFIFOEN; 527 IISCONFIG |= IIS_TXFIFOEN;
528} 528}
529 529
530void pcm_postinit(void) 530void void pcm_play_dma_postinit(void)
531{ 531{
532 audiohw_postinit(); 532 audiohw_postinit();
533} 533}
diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c
index aff43171f6..ae4aa5ef38 100644
--- a/firmware/target/arm/pcm-telechips.c
+++ b/firmware/target/arm/pcm-telechips.c
@@ -57,11 +57,6 @@ struct dma_data dma_play_data SHAREDBSS_ATTR =
57 .state = 0 57 .state = 0
58}; 58};
59 59
60void pcm_postinit(void)
61{
62 audiohw_postinit();
63}
64
65const void * pcm_play_dma_get_peak_buffer(int *count) 60const void * pcm_play_dma_get_peak_buffer(int *count)
66{ 61{
67 unsigned long addr = (unsigned long)dma_play_data.p; 62 unsigned long addr = (unsigned long)dma_play_data.p;
@@ -110,6 +105,11 @@ void pcm_play_dma_init(void)
110#endif 105#endif
111} 106}
112 107
108void pcm_play_dma_postinit(void)
109{
110 audiohw_postinit();
111}
112
113void pcm_dma_apply_settings(void) 113void pcm_dma_apply_settings(void)
114{ 114{
115} 115}
diff --git a/firmware/target/arm/pnx0101/pcm-pnx0101.c b/firmware/target/arm/pnx0101/pcm-pnx0101.c
index d4c17454ed..89d56af374 100644
--- a/firmware/target/arm/pnx0101/pcm-pnx0101.c
+++ b/firmware/target/arm/pnx0101/pcm-pnx0101.c
@@ -190,7 +190,7 @@ void pcm_init(void)
190 DMAR10(1) |= 1; 190 DMAR10(1) |= 1;
191} 191}
192 192
193void pcm_postinit(void) 193void pcm_play_dma_postinit(void)
194{ 194{
195 audiohw_postinit(); 195 audiohw_postinit();
196} 196}
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
index 33194ae5d9..b133639e12 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c
@@ -94,7 +94,7 @@ void pcm_play_dma_init(void)
94 bitset32(&INTMOD, DMA2_MASK); 94 bitset32(&INTMOD, DMA2_MASK);
95} 95}
96 96
97void pcm_postinit(void) 97void pcm_play_dma_postinit(void)
98{ 98{
99 audiohw_postinit(); 99 audiohw_postinit();
100} 100}
diff --git a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
index 0c69c1e6d3..20332c12f8 100644
--- a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
+++ b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
@@ -120,7 +120,7 @@ void pcm_play_dma_init(void)
120 bitset32(&INTMOD, DMA2_MASK); 120 bitset32(&INTMOD, DMA2_MASK);
121} 121}
122 122
123void pcm_postinit(void) 123void pcm_play_dma_postinit(void)
124{ 124{
125 audiohw_postinit(); 125 audiohw_postinit();
126} 126}
diff --git a/firmware/target/arm/s5l8700/pcm-s5l8700.c b/firmware/target/arm/s5l8700/pcm-s5l8700.c
index 14c515ec47..6d733e0ff1 100644
--- a/firmware/target/arm/s5l8700/pcm-s5l8700.c
+++ b/firmware/target/arm/s5l8700/pcm-s5l8700.c
@@ -262,7 +262,7 @@ void pcm_play_dma_init(void)
262 audiohw_preinit(); 262 audiohw_preinit();
263} 263}
264 264
265void pcm_postinit(void) 265void pcm_play_dma_postinit(void)
266{ 266{
267 audiohw_postinit(); 267 audiohw_postinit();
268} 268}
diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c
index dbadf3bac0..c3df77f14f 100644
--- a/firmware/target/arm/s5l8702/pcm-s5l8702.c
+++ b/firmware/target/arm/s5l8702/pcm-s5l8702.c
@@ -152,7 +152,7 @@ void pcm_play_dma_init(void)
152 audiohw_preinit(); 152 audiohw_preinit();
153} 153}
154 154
155void pcm_postinit(void) 155void pcm_play_dma_postinit(void)
156{ 156{
157 audiohw_postinit(); 157 audiohw_postinit();
158} 158}
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
index 5ec62cf876..1fda5fe045 100644
--- a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
+++ b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
@@ -44,7 +44,7 @@ void pcm_play_dma_init(void)
44// dsp_init(); 44// dsp_init();
45} 45}
46 46
47void pcm_postinit(void) 47void pcm_play_dma_postinit(void)
48{ 48{
49 audiohw_postinit(); 49 audiohw_postinit();
50 50
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
index 90c342e868..c507428c57 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c
@@ -35,7 +35,7 @@
35 */ 35 */
36static void *start; 36static void *start;
37 37
38void pcm_postinit(void) 38void pcm_play_dma_postinit(void)
39{ 39{
40 /* Configure clock divider */ 40 /* Configure clock divider */
41 tsc2100_writereg(CONTROL_PAGE2, TSPP1_ADDRESS, 0x1120); 41 tsc2100_writereg(CONTROL_PAGE2, TSPP1_ADDRESS, 0x1120);
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c
index 85eeaec815..e95d445337 100644
--- a/firmware/target/coldfire/pcm-coldfire.c
+++ b/firmware/target/coldfire/pcm-coldfire.c
@@ -203,7 +203,7 @@ void pcm_play_dma_init(void)
203#endif 203#endif
204} /* pcm_play_dma_init */ 204} /* pcm_play_dma_init */
205 205
206void pcm_postinit(void) 206void pcm_play_dma_postinit(void)
207{ 207{
208 audiohw_postinit(); 208 audiohw_postinit();
209 iis_play_reset(); 209 iis_play_reset();
diff --git a/firmware/target/hosted/android/pcm-android.c b/firmware/target/hosted/android/pcm-android.c
index 6492a779f2..4e58707d0a 100644
--- a/firmware/target/hosted/android/pcm-android.c
+++ b/firmware/target/hosted/android/pcm-android.c
@@ -206,7 +206,7 @@ void pcm_play_dma_init(void)
206 write_method = e->GetMethodID(env_ptr, RockboxPCM_class, "write", "([BII)I"); 206 write_method = e->GetMethodID(env_ptr, RockboxPCM_class, "write", "([BII)I");
207} 207}
208 208
209void pcm_postinit(void) 209void pcm_play_dma_postinit(void)
210{ 210{
211} 211}
212 212
diff --git a/firmware/target/hosted/maemo/pcm-gstreamer.c b/firmware/target/hosted/maemo/pcm-gstreamer.c
index 6e049dbbff..d6879ea083 100644
--- a/firmware/target/hosted/maemo/pcm-gstreamer.c
+++ b/firmware/target/hosted/maemo/pcm-gstreamer.c
@@ -397,7 +397,7 @@ void pcm_shutdown_gstreamer(void)
397 g_main_loop_unref (pcm_loop); 397 g_main_loop_unref (pcm_loop);
398} 398}
399 399
400void pcm_postinit(void) 400void pcm_play_dma_postinit(void)
401{ 401{
402} 402}
403 403
diff --git a/firmware/target/hosted/sdl/pcm-sdl.c b/firmware/target/hosted/sdl/pcm-sdl.c
index dfdd90f29b..020928d572 100644
--- a/firmware/target/hosted/sdl/pcm-sdl.c
+++ b/firmware/target/hosted/sdl/pcm-sdl.c
@@ -410,7 +410,7 @@ void pcm_play_dma_init(void)
410 pcm_dma_apply_settings_nolock(); 410 pcm_dma_apply_settings_nolock();
411} 411}
412 412
413void pcm_postinit(void) 413void pcm_play_dma_postinit(void)
414{ 414{
415} 415}
416 416
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
index cfc3c9ef8e..1ed413c9ae 100644
--- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c
@@ -33,7 +33,7 @@
33 ** Playback DMA transfer 33 ** Playback DMA transfer
34 **/ 34 **/
35 35
36void pcm_postinit(void) 36void pcm_play_dma_postinit(void)
37{ 37{
38 audiohw_postinit(); 38 audiohw_postinit();
39 39