summaryrefslogtreecommitdiff
path: root/firmware/pcm_record.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-09-16 16:18:11 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-09-16 16:18:11 +0000
commita85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f (patch)
treea30695ed540bf32365d577f46398f712c7a494c4 /firmware/pcm_record.c
parentbaf5494341cdd6cdb9590e21d429920b9bc4a2c6 (diff)
downloadrockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.tar.gz
rockbox-a85044bf9eaa0a7206c1978d3cfd57ab2d7fae2f.zip
New scheduler, with priorities for swcodec platforms. Frequent task
switching should be more efficient and tasks are stored in linked lists to eliminate unnecessary task switching to improve performance. Audio should no longer skip on swcodec targets caused by too CPU hungry UI thread or background threads. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10958 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/pcm_record.c')
-rw-r--r--firmware/pcm_record.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/firmware/pcm_record.c b/firmware/pcm_record.c
index 68fc22b937..bce6fb5f25 100644
--- a/firmware/pcm_record.c
+++ b/firmware/pcm_record.c
@@ -172,9 +172,9 @@ static void close_wave(void);
172/* Creates pcmrec_thread */ 172/* Creates pcmrec_thread */
173void pcm_rec_init(void) 173void pcm_rec_init(void)
174{ 174{
175 queue_init(&pcmrec_queue); 175 queue_init(&pcmrec_queue, true);
176 create_thread(pcmrec_thread, pcmrec_stack, sizeof(pcmrec_stack), 176 create_thread(pcmrec_thread, pcmrec_stack, sizeof(pcmrec_stack),
177 pcmrec_thread_name); 177 pcmrec_thread_name IF_PRIO(, PRIORITY_RECORDING));
178} 178}
179 179
180 180
@@ -196,8 +196,7 @@ void audio_init_recording(unsigned int buffer_offset)
196 queue_post(&pcmrec_queue, PCMREC_INIT, 0); 196 queue_post(&pcmrec_queue, PCMREC_INIT, 0);
197 197
198 while(!init_done) 198 while(!init_done)
199 sleep_thread(); 199 sleep_thread(1);
200 wake_up_thread();
201} 200}
202 201
203void audio_close_recording(void) 202void audio_close_recording(void)
@@ -206,8 +205,7 @@ void audio_close_recording(void)
206 queue_post(&pcmrec_queue, PCMREC_CLOSE, 0); 205 queue_post(&pcmrec_queue, PCMREC_CLOSE, 0);
207 206
208 while(!close_done) 207 while(!close_done)
209 sleep_thread(); 208 sleep_thread(1);
210 wake_up_thread();
211 209
212 audio_remove_encoder(); 210 audio_remove_encoder();
213} 211}
@@ -421,8 +419,7 @@ void audio_record(const char *filename)
421 queue_post(&pcmrec_queue, PCMREC_START, 0); 419 queue_post(&pcmrec_queue, PCMREC_START, 0);
422 420
423 while(!record_done) 421 while(!record_done)
424 sleep_thread(); 422 sleep_thread(1);
425 wake_up_thread();
426} 423}
427 424
428 425
@@ -438,8 +435,7 @@ void audio_new_file(const char *filename)
438 queue_post(&pcmrec_queue, PCMREC_NEW_FILE, 0); 435 queue_post(&pcmrec_queue, PCMREC_NEW_FILE, 0);
439 436
440 while(!new_file_done) 437 while(!new_file_done)
441 sleep_thread(); 438 sleep_thread(1);
442 wake_up_thread();
443 439
444 logf("pcm_new_file done"); 440 logf("pcm_new_file done");
445} 441}
@@ -459,8 +455,7 @@ void audio_stop_recording(void)
459 queue_post(&pcmrec_queue, PCMREC_STOP, 0); 455 queue_post(&pcmrec_queue, PCMREC_STOP, 0);
460 456
461 while(!stop_done) 457 while(!stop_done)
462 sleep_thread(); 458 sleep_thread(1);
463 wake_up_thread();
464 459
465 logf("pcm_stop done"); 460 logf("pcm_stop done");
466} 461}
@@ -482,8 +477,7 @@ void audio_pause_recording(void)
482 queue_post(&pcmrec_queue, PCMREC_PAUSE, 0); 477 queue_post(&pcmrec_queue, PCMREC_PAUSE, 0);
483 478
484 while(!pause_done) 479 while(!pause_done)
485 sleep_thread(); 480 sleep_thread(1);
486 wake_up_thread();
487} 481}
488 482
489void audio_resume_recording(void) 483void audio_resume_recording(void)
@@ -498,8 +492,7 @@ void audio_resume_recording(void)
498 queue_post(&pcmrec_queue, PCMREC_RESUME, 0); 492 queue_post(&pcmrec_queue, PCMREC_RESUME, 0);
499 493
500 while(!resume_done) 494 while(!resume_done)
501 sleep_thread(); 495 sleep_thread(1);
502 wake_up_thread();
503} 496}
504 497
505/* return peaks as int, so convert from short first 498/* return peaks as int, so convert from short first
@@ -817,9 +810,8 @@ static void pcmrec_stop(void)
817 /* wait for encoding finish */ 810 /* wait for encoding finish */
818 is_paused = true; 811 is_paused = true;
819 while(!wav_queue_empty) 812 while(!wav_queue_empty)
820 sleep_thread(); 813 sleep_thread(1);
821 814
822 wake_up_thread();
823 is_recording = false; 815 is_recording = false;
824 816
825 /* Flush buffers to file */ 817 /* Flush buffers to file */