diff options
Diffstat (limited to 'apps/playback.c')
-rw-r--r-- | apps/playback.c | 25 |
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 */ |
279 | static void set_current_codec(int codec_idx); | ||
279 | static const char *get_codec_filename(int enc_spec); /* (A-/C-/V-) */ | 280 | static 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 */ |
281 | static void set_filebuf_watermark(int seconds); | 282 | static void set_filebuf_watermark(int seconds); |
@@ -299,7 +300,7 @@ IBSS_ATTR; | |||
299 | static const char codec_thread_name[] = "codec"; | 300 | static const char codec_thread_name[] = "codec"; |
300 | struct thread_entry *codec_thread_p; /* For modifying thread priority later. */ | 301 | struct thread_entry *codec_thread_p; /* For modifying thread priority later. */ |
301 | 302 | ||
302 | volatile int current_codec IDATA_ATTR; /* Current codec (normal/voice) */ | 303 | static 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 --- */ |
922 | static 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 |
922 | static void swap_codec(void) | 929 | static 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. */ |