summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/recorder/radio.c2
-rw-r--r--apps/recorder/recording.c5
-rw-r--r--firmware/export/audio.h2
-rw-r--r--firmware/mpeg.c6
-rw-r--r--firmware/pcm_record.c8
5 files changed, 14 insertions, 9 deletions
diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c
index df3c689c13..0976a57467 100644
--- a/apps/recorder/radio.c
+++ b/apps/recorder/radio.c
@@ -366,7 +366,7 @@ bool radio_screen(void)
366 audio_stop(); 366 audio_stop();
367 367
368#if CONFIG_CODEC != SWCODEC 368#if CONFIG_CODEC != SWCODEC
369 audio_init_recording(); 369 audio_init_recording(talk_get_bufsize());
370 370
371 sound_settings_apply(); 371 sound_settings_apply();
372 /* Yes, we use the D/A for monitoring */ 372 /* Yes, we use the D/A for monitoring */
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 0d414292b2..f4a3580123 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -552,7 +552,7 @@ bool recording_screen(void)
552#if (CONFIG_LED == LED_REAL) && !defined(SIMULATOR) 552#if (CONFIG_LED == LED_REAL) && !defined(SIMULATOR)
553 ata_set_led_enabled(false); 553 ata_set_led_enabled(false);
554#endif 554#endif
555 audio_init_recording(); 555 audio_init_recording(talk_get_bufsize());
556 556
557 sound_set_volume(global_settings.volume); 557 sound_set_volume(global_settings.volume);
558 558
@@ -1555,8 +1555,9 @@ void audio_beep(int duration)
1555 1555
1556#ifdef SIMULATOR 1556#ifdef SIMULATOR
1557/* stubs for recording sim */ 1557/* stubs for recording sim */
1558void audio_init_recording(void) 1558void audio_init_recording(unsigned int buffer_offset)
1559{ 1559{
1560 buffer_offset = buffer_offset;
1560} 1561}
1561 1562
1562void audio_close_recording(void) 1563void audio_close_recording(void)
diff --git a/firmware/export/audio.h b/firmware/export/audio.h
index 3ed1323701..6922dab1f6 100644
--- a/firmware/export/audio.h
+++ b/firmware/export/audio.h
@@ -87,7 +87,7 @@ void audio_beep(int duration);
87void audio_init_playback(void); 87void audio_init_playback(void);
88 88
89/* audio recording functions */ 89/* audio recording functions */
90void audio_init_recording(void); 90void audio_init_recording(unsigned int buffer_offset);
91void audio_close_recording(void); 91void audio_close_recording(void);
92void audio_record(const char *filename); 92void audio_record(const char *filename);
93void audio_stop_recording(void); 93void audio_stop_recording(void);
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index c47c279d24..7034f3896b 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -2127,8 +2127,9 @@ void audio_init_playback(void)
2127/**************************************************************************** 2127/****************************************************************************
2128 * Recording functions 2128 * Recording functions
2129 ***************************************************************************/ 2129 ***************************************************************************/
2130void audio_init_recording(void) 2130void audio_init_recording(unsigned int buffer_offset)
2131{ 2131{
2132 buffer_offset = buffer_offset;
2132 init_recording_done = false; 2133 init_recording_done = false;
2133 queue_post(&mpeg_queue, MPEG_INIT_RECORDING, NULL); 2134 queue_post(&mpeg_queue, MPEG_INIT_RECORDING, NULL);
2134 2135
@@ -2652,9 +2653,10 @@ void audio_set_recording_gain(int left, int right, int type)
2652 (void)right; 2653 (void)right;
2653 (void)type; 2654 (void)type;
2654} 2655}
2655void audio_init_recording(void) 2656void audio_init_recording(unsigned int buffer_offset)
2656{ 2657{
2657 /* a dummy */ 2658 /* a dummy */
2659 (void)buffer_offset;
2658} 2660}
2659void audio_set_recording_options(int frequency, int quality, 2661void audio_set_recording_options(int frequency, int quality,
2660 int source, int channel_mode, 2662 int source, int channel_mode,
diff --git a/firmware/pcm_record.c b/firmware/pcm_record.c
index 8d34b345c8..a7d8bc707c 100644
--- a/firmware/pcm_record.c
+++ b/firmware/pcm_record.c
@@ -82,6 +82,7 @@ static short peak_left, peak_right;
82 82
83#define GET_CHUNK(x) (short*)(&rec_buffer[CHUNK_SIZE*(x)]) 83#define GET_CHUNK(x) (short*)(&rec_buffer[CHUNK_SIZE*(x)])
84 84
85static unsigned int rec_buffer_offset;
85static unsigned char *rec_buffer; /* Circular recording buffer */ 86static unsigned char *rec_buffer; /* Circular recording buffer */
86static int num_chunks; /* Number of chunks available in rec_buffer */ 87static int num_chunks; /* Number of chunks available in rec_buffer */
87 88
@@ -136,8 +137,9 @@ void pcm_rec_init(void)
136 * - Prepare for DMA transfers 137 * - Prepare for DMA transfers
137 */ 138 */
138 139
139void audio_init_recording(void) 140void audio_init_recording(unsigned int buffer_offset)
140{ 141{
142 rec_buffer_offset = buffer_offset;
141 init_done = false; 143 init_done = false;
142 queue_post(&pcmrec_queue, PCMREC_INIT, 0); 144 queue_post(&pcmrec_queue, PCMREC_INIT, 0);
143 145
@@ -820,8 +822,8 @@ static void pcmrec_init(void)
820 is_paused = false; 822 is_paused = false;
821 is_error = false; 823 is_error = false;
822 824
823 rec_buffer = (unsigned char*)(((unsigned long)audiobuf + talk_get_bufsize()) & ~3); 825 rec_buffer = (unsigned char*)(((unsigned long)audiobuf + rec_buffer_offset) & ~3);
824 buffer_size = (long)audiobufend - (long)audiobuf - talk_get_bufsize() - 16; 826 buffer_size = (long)audiobufend - (long)audiobuf - rec_buffer_offset - 16;
825 827
826 logf("buf size: %d kb", buffer_size/1024); 828 logf("buf size: %d kb", buffer_size/1024);
827 829