summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 235b3fd0a4..d09d672dff 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -276,6 +276,7 @@ static size_t high_watermark; /* High watermark for rebuffer (A/V/other) */
276#endif 276#endif
277 277
278/* Multiple threads */ 278/* Multiple threads */
279static void set_current_codec(int codec_idx);
279static const char *get_codec_filename(int enc_spec); /* (A-/C-/V-) */ 280static const char *get_codec_filename(int enc_spec); /* (A-/C-/V-) */
280/* Set the watermark to trigger buffer fill (A/C) FIXME */ 281/* Set the watermark to trigger buffer fill (A/C) FIXME */
281static void set_filebuf_watermark(int seconds); 282static void set_filebuf_watermark(int seconds);
@@ -299,7 +300,7 @@ IBSS_ATTR;
299static const char codec_thread_name[] = "codec"; 300static const char codec_thread_name[] = "codec";
300struct thread_entry *codec_thread_p; /* For modifying thread priority later. */ 301struct thread_entry *codec_thread_p; /* For modifying thread priority later. */
301 302
302volatile int current_codec IDATA_ATTR; /* Current codec (normal/voice) */ 303static volatile int current_codec IDATA_ATTR; /* Current codec (normal/voice) */
303 304
304/* Voice thread */ 305/* Voice thread */
305#ifdef PLAYBACK_VOICE 306#ifdef PLAYBACK_VOICE
@@ -840,7 +841,7 @@ void audio_preinit(void)
840 logf("playback system pre-init"); 841 logf("playback system pre-init");
841 842
842 filling = false; 843 filling = false;
843 current_codec = CODEC_IDX_AUDIO; 844 set_current_codec(CODEC_IDX_AUDIO);
844 playing = false; 845 playing = false;
845 paused = false; 846 paused = false;
846 audio_codec_loaded = false; 847 audio_codec_loaded = false;
@@ -918,6 +919,12 @@ void voice_stop(void)
918 919
919 920
920/* --- Routines called from multiple threads --- */ 921/* --- Routines called from multiple threads --- */
922static void set_current_codec(int codec_idx)
923{
924 current_codec = codec_idx;
925 dsp_configure(DSP_SWITCH_CODEC, codec_idx);
926}
927
921#ifdef PLAYBACK_VOICE 928#ifdef PLAYBACK_VOICE
922static void swap_codec(void) 929static void swap_codec(void)
923{ 930{
@@ -961,7 +968,7 @@ skip_iram_swap:
961 mutex_lock(&mutex_codecthread); 968 mutex_lock(&mutex_codecthread);
962 969
963 /* Take control */ 970 /* Take control */
964 current_codec = my_codec; 971 set_current_codec(my_codec);
965 972
966 /* Reload our IRAM and DRAM */ 973 /* Reload our IRAM and DRAM */
967 memcpy((unsigned char *)CODEC_IRAM_ORIGIN, iram_buf[my_codec], 974 memcpy((unsigned char *)CODEC_IRAM_ORIGIN, iram_buf[my_codec],
@@ -1284,7 +1291,7 @@ static void voice_thread(void)
1284 logf("Loading voice codec"); 1291 logf("Loading voice codec");
1285 voice_codec_loaded = true; 1292 voice_codec_loaded = true;
1286 mutex_lock(&mutex_codecthread); 1293 mutex_lock(&mutex_codecthread);
1287 current_codec = CODEC_IDX_VOICE; 1294 set_current_codec(CODEC_IDX_VOICE);
1288 dsp_configure(DSP_RESET, 0); 1295 dsp_configure(DSP_RESET, 0);
1289 voice_remaining = 0; 1296 voice_remaining = 0;
1290 voice_getmore = NULL; 1297 voice_getmore = NULL;
@@ -1941,7 +1948,7 @@ static void codec_thread(void)
1941 } 1948 }
1942 mutex_lock(&mutex_codecthread); 1949 mutex_lock(&mutex_codecthread);
1943#endif 1950#endif
1944 current_codec = CODEC_IDX_AUDIO; 1951 set_current_codec(CODEC_IDX_AUDIO);
1945 ci.stop_codec = false; 1952 ci.stop_codec = false;
1946 status = codec_load_file((const char *)ev.data, &ci); 1953 status = codec_load_file((const char *)ev.data, &ci);
1947#ifdef PLAYBACK_VOICE 1954#ifdef PLAYBACK_VOICE
@@ -1972,7 +1979,7 @@ static void codec_thread(void)
1972 } 1979 }
1973 mutex_lock(&mutex_codecthread); 1980 mutex_lock(&mutex_codecthread);
1974#endif 1981#endif
1975 current_codec = CODEC_IDX_AUDIO; 1982 set_current_codec(CODEC_IDX_AUDIO);
1976 ci.stop_codec = false; 1983 ci.stop_codec = false;
1977 wrap = (size_t)&filebuf[filebuflen] - (size_t)CUR_TI->codecbuf; 1984 wrap = (size_t)&filebuf[filebuflen] - (size_t)CUR_TI->codecbuf;
1978 status = codec_load_ram(CUR_TI->codecbuf, CUR_TI->codecsize, 1985 status = codec_load_ram(CUR_TI->codecbuf, CUR_TI->codecsize,
@@ -1995,7 +2002,7 @@ static void codec_thread(void)
1995 mutex_lock(&mutex_codecthread); 2002 mutex_lock(&mutex_codecthread);
1996#endif 2003#endif
1997 logf("loading encoder"); 2004 logf("loading encoder");
1998 current_codec = CODEC_IDX_AUDIO; 2005 set_current_codec(CODEC_IDX_AUDIO);
1999 ci.stop_codec = false; 2006 ci.stop_codec = false;
2000 status = codec_load_file((const char *)ev.data, &ci); 2007 status = codec_load_file((const char *)ev.data, &ci);
2001#ifdef PLAYBACK_VOICE 2008#ifdef PLAYBACK_VOICE
@@ -2702,12 +2709,12 @@ static bool audio_load_track(int offset, bool start_play, bool rebuffer)
2702 { 2709 {
2703 int last_codec = current_codec; 2710 int last_codec = current_codec;
2704 2711
2705 current_codec = CODEC_IDX_AUDIO; 2712 set_current_codec(CODEC_IDX_AUDIO);
2706 conf_watermark = AUDIO_DEFAULT_WATERMARK; 2713 conf_watermark = AUDIO_DEFAULT_WATERMARK;
2707 conf_filechunk = AUDIO_DEFAULT_FILECHUNK; 2714 conf_filechunk = AUDIO_DEFAULT_FILECHUNK;
2708 conf_preseek = AUDIO_REBUFFER_GUESS_SIZE; 2715 conf_preseek = AUDIO_REBUFFER_GUESS_SIZE;
2709 dsp_configure(DSP_RESET, 0); 2716 dsp_configure(DSP_RESET, 0);
2710 current_codec = last_codec; 2717 set_current_codec(last_codec);
2711 } 2718 }
2712 2719
2713 /* Get track metadata if we don't already have it. */ 2720 /* Get track metadata if we don't already have it. */