diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2007-06-08 23:42:04 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2007-06-08 23:42:04 +0000 |
| commit | 2d48d0ffa6baddd19e6ff077f25068f90af7be3d (patch) | |
| tree | 68c80646a748496fee423d77aa43afafb783b269 /firmware | |
| parent | a85793fc54a0079f5483d5a5c6c60b7d17ca688c (diff) | |
| download | rockbox-2d48d0ffa6baddd19e6ff077f25068f90af7be3d.zip rockbox-2d48d0ffa6baddd19e6ff077f25068f90af7be3d.tar.gz rockbox-2d48d0ffa6baddd19e6ff077f25068f90af7be3d.tar.bz2 rockbox-2d48d0ffa6baddd19e6ff077f25068f90af7be3d.tar.xz | |
Straighten out some audio path APIs and misc. audio stuff. Having recording is not a prerequisite to having input/output source selection which is probably most useful when adding a audio input features like FM to a new port without forcing recording to be implemented first.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13599 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
| -rw-r--r-- | firmware/export/audio.h | 20 | ||||
| -rw-r--r-- | firmware/export/config_caps.h | 9 | ||||
| -rw-r--r-- | firmware/export/spdif.h | 8 | ||||
| -rw-r--r-- | firmware/pcm_record.c | 26 | ||||
| -rw-r--r-- | firmware/target/arm/audio-pp.c | 4 | ||||
| -rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/audio-e200.c | 6 | ||||
| -rw-r--r-- | firmware/target/coldfire/iaudio/m5/audio-m5.c | 5 | ||||
| -rw-r--r-- | firmware/target/coldfire/iaudio/x5/audio-x5.c | 4 | ||||
| -rw-r--r-- | firmware/target/coldfire/iriver/audio-iriver.c | 6 | ||||
| -rw-r--r-- | firmware/target/coldfire/iriver/h100/power-h100.c | 3 | ||||
| -rw-r--r-- | firmware/target/coldfire/iriver/h100/spdif-h100.c | 3 | ||||
| -rw-r--r-- | firmware/target/coldfire/pcm-coldfire.c | 2 |
12 files changed, 53 insertions, 43 deletions
diff --git a/firmware/export/audio.h b/firmware/export/audio.h index a79a734..e6fed90 100644 --- a/firmware/export/audio.h +++ b/firmware/export/audio.h @@ -194,12 +194,7 @@ void audio_record(const char *filename); void audio_stop_recording(void); void audio_pause_recording(void); void audio_resume_recording(void); -#if CONFIG_CODEC == SWCODEC -static inline void audio_new_file(const char *filename) - { audio_record(filename); } -#else void audio_new_file(const char *filename); -#endif /* CONFIG_CODEC == SWCODEC */ void audio_set_recording_options(struct audio_recording_options *options); void audio_set_recording_gain(int left, int right, int type); unsigned long audio_recorded_time(void); @@ -211,11 +206,22 @@ unsigned long audio_num_recorded_bytes(void); bool audio_load_encoder(int afmt); void audio_remove_encoder(void); unsigned char *audio_get_recording_buffer(size_t *buffer_size); -void audio_set_source(int source, unsigned flags); -void audio_set_output_source(int source); #endif /* CONFIG_CODEC == SWCODEC */ + #endif /* HAVE_RECORDING */ +#if CONFIG_CODEC == SWCODEC +/* SWCODEC misc. audio functions */ +#if INPUT_SRC_CAPS != 0 +/* audio.c */ +void audio_set_input_source(int source, unsigned flags); +/* audio_input_mux: target-specific implementation used by audio_set_source + to set hardware inputs and audio paths */ +void audio_input_mux(int source, unsigned flags); +void audio_set_output_source(int source); +#endif /* INPUT_SRC_CAPS */ +#endif /* CONFIG_CODEC == SWCODEC */ + #ifdef HAVE_SPDIF_IN /* returns index into rec_master_sampr_list */ int audio_get_spdif_sample_rate(void); diff --git a/firmware/export/config_caps.h b/firmware/export/config_caps.h index 8e3832d..62cae8f 100644 --- a/firmware/export/config_caps.h +++ b/firmware/export/config_caps.h @@ -66,6 +66,10 @@ #define HAVE_FMRADIO_IN_(...) #endif +#if INPUT_SRC_CAPS != 0 && (INPUT_SRC_CAPS & (INPUT_SRC_CAPS-1)) != 0 +#define HAVE_MULTI_INPUT_SRC +#endif + #ifdef HAVE_RECORDING /* Recordable source implies it has the input as well */ @@ -104,4 +108,9 @@ #else #define HAVE_FMRADIO_REC_(...) #endif + +#if REC_SRC_CAPS != 0 && (REC_SRC_CAPS & (REC_SRC_CAPS-1)) != 0 +#define HAVE_MULTI_REC_SRC +#endif + #endif /* HAVE_RECORDING */ diff --git a/firmware/export/spdif.h b/firmware/export/spdif.h index f4712fb..4179c78 100644 --- a/firmware/export/spdif.h +++ b/firmware/export/spdif.h @@ -20,6 +20,12 @@ #ifndef SPDIF_H #define SPDIF_H +#ifdef HAVE_SPDIF_POWER +#define IF_SPDIF_POWER_(...) __VA_ARGS__ +#else +#define IF_SPDIF_POWER_(...) +#endif + /* Initialize the S/PDIF driver */ void spdif_init(void); /* Return the S/PDIF frequency in herz - unrounded */ @@ -27,7 +33,7 @@ unsigned long spdif_measure_frequency(void); #ifdef HAVE_SPDIF_OUT /* Set the S/PDIF audio feed - Use AUDIO_SRC_* values - will be off if not powered or !on */ -void spdif_set_output_source(int source, bool on); +void spdif_set_output_source(int source IF_SPDIF_POWER_(, bool on)); /* Return the last set S/PDIF audio source - literally the last value passed to spdif_set_monitor regardless of power state */ int spdif_get_output_source(bool *src_on); diff --git a/firmware/pcm_record.c b/firmware/pcm_record.c index c27f804..1430100 100644 --- a/firmware/pcm_record.c +++ b/firmware/pcm_record.c @@ -481,6 +481,14 @@ void audio_record(const char *filename) } /* audio_record */ /** + * audio_record wrapper for API compatibility with HW codec + */ +void audio_new_file(const char *filename) +{ + audio_record(filename); +} /* audio_new_file */ + +/** * Stop current recording if recording */ void audio_stop_recording(void) @@ -551,22 +559,6 @@ unsigned long audio_num_recorded_bytes(void) return num_rec_bytes; } /* audio_num_recorded_bytes */ -#ifdef HAVE_SPDIF_IN -/** - * Return SPDIF sample rate index in audio_master_sampr_list. Since we base - * our reading on the actual SPDIF sample rate (which might be a bit - * inaccurate), we round off to the closest sample rate that is supported by - * SPDIF. - */ -int audio_get_spdif_sample_rate(void) -{ - unsigned long measured_rate = spdif_measure_frequency(); - /* Find which SPDIF sample rate we're closest to. */ - return round_value_to_list32(measured_rate, audio_master_sampr_list, - SAMPR_NUM_FREQ, false); -} /* audio_get_spdif_sample_rate */ -#endif /* HAVE_SPDIF_IN */ - /***************************************************************************/ /* */ /* Functions that execute in the context of pcmrec_thread */ @@ -1756,7 +1748,7 @@ void enc_set_parameters(struct enc_parameters *params) fnq_size *= MAX_PATH; logf("fnq files:%ld", fnq_size / MAX_PATH); -#if 1 +#if 0 logf("ab :%08lX", (uintptr_t)audiobuf); logf("pcm:%08lX", (uintptr_t)pcm_buffer); logf("enc:%08lX", (uintptr_t)enc_buffer); diff --git a/firmware/target/arm/audio-pp.c b/firmware/target/arm/audio-pp.c index 91670cb..9fff197 100644 --- a/firmware/target/arm/audio-pp.c +++ b/firmware/target/arm/audio-pp.c @@ -29,7 +29,7 @@ void audio_set_output_source(int source) source = AUDIO_SRC_PLAYBACK; } /* audio_set_output_source */ -void audio_set_source(int source, unsigned flags) +void audio_input_mux(int source, unsigned flags) { (void)flags; /* Prevent pops from unneeded switching */ @@ -87,6 +87,6 @@ void audio_set_source(int source, unsigned flags) } /* end switch */ last_source = source; -} /* audio_set_source */ +} /* audio_input_mux */ diff --git a/firmware/target/arm/sandisk/sansa-e200/audio-e200.c b/firmware/target/arm/sandisk/sansa-e200/audio-e200.c index f046f0d..0c3db7b 100644 --- a/firmware/target/arm/sandisk/sansa-e200/audio-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/audio-e200.c @@ -39,7 +39,7 @@ void audio_set_output_source(int source) set_fiq_status(oldmode); } /* audio_set_output_source */ -void audio_set_source(int source, unsigned flags) +void audio_input_mux(int source, unsigned flags) { static int last_source = AUDIO_SRC_PLAYBACK; static bool last_recording = false; @@ -89,6 +89,4 @@ void audio_set_source(int source, unsigned flags) } /* end switch */ last_source = source; -} /* audio_set_source */ - - +} /* audio_input_mux */ diff --git a/firmware/target/coldfire/iaudio/m5/audio-m5.c b/firmware/target/coldfire/iaudio/m5/audio-m5.c index 2442351..87a7c35 100644 --- a/firmware/target/coldfire/iaudio/m5/audio-m5.c +++ b/firmware/target/coldfire/iaudio/m5/audio-m5.c @@ -35,7 +35,7 @@ void audio_set_output_source(int source) set_irq_level(level); } /* audio_set_output_source */ -void audio_set_source(int source, unsigned flags) +void audio_input_mux(int source, unsigned flags) { /* Prevent pops from unneeded switching */ static int last_source = AUDIO_SRC_PLAYBACK; @@ -79,5 +79,4 @@ void audio_set_source(int source, unsigned flags) or_l((1 << 29), &GPIO_FUNCTION); last_source = source; -} /* audio_set_source */ - +} /* audio_input_mux */ diff --git a/firmware/target/coldfire/iaudio/x5/audio-x5.c b/firmware/target/coldfire/iaudio/x5/audio-x5.c index 91100ed..594ff3b 100644 --- a/firmware/target/coldfire/iaudio/x5/audio-x5.c +++ b/firmware/target/coldfire/iaudio/x5/audio-x5.c @@ -35,7 +35,7 @@ void audio_set_output_source(int source) set_irq_level(level); } /* audio_set_output_source */ -void audio_set_source(int source, unsigned flags) +void audio_input_mux(int source, unsigned flags) { /* Prevent pops from unneeded switching */ static int last_source = AUDIO_SRC_PLAYBACK; @@ -109,5 +109,5 @@ void audio_set_source(int source, unsigned flags) or_l((1 << 29), &GPIO_FUNCTION); last_source = source; -} /* audio_set_source */ +} /* audio_input_mux */ diff --git a/firmware/target/coldfire/iriver/audio-iriver.c b/firmware/target/coldfire/iriver/audio-iriver.c index bd07143..4d22e7c 100644 --- a/firmware/target/coldfire/iriver/audio-iriver.c +++ b/firmware/target/coldfire/iriver/audio-iriver.c @@ -44,7 +44,7 @@ void audio_set_output_source(int source) set_irq_level(level); } /* audio_set_output_source */ -void audio_set_source(int source, unsigned flags) +void audio_input_mux(int source, unsigned flags) { /* Prevent pops from unneeded switching */ static int last_source = AUDIO_SRC_PLAYBACK; @@ -131,6 +131,4 @@ void audio_set_source(int source, unsigned flags) or_l(MUX_BIT, &GPIO_FUNCTION); last_source = source; -} /* audio_set_source */ - - +} /* audio_input_mux */ diff --git a/firmware/target/coldfire/iriver/h100/power-h100.c b/firmware/target/coldfire/iriver/h100/power-h100.c index ce1c350..9431689 100644 --- a/firmware/target/coldfire/iriver/h100/power-h100.c +++ b/firmware/target/coldfire/iriver/h100/power-h100.c @@ -89,7 +89,8 @@ void spdif_power_enable(bool on) #ifndef BOOTLOADER /* Make sure the feed is reset */ - spdif_set_output_source(spdif_get_output_source(NULL), true); + spdif_set_output_source(spdif_get_output_source(NULL) + IF_SPDIF_POWER_(, true)); #endif } diff --git a/firmware/target/coldfire/iriver/h100/spdif-h100.c b/firmware/target/coldfire/iriver/h100/spdif-h100.c index ee4a940..beede3f 100644 --- a/firmware/target/coldfire/iriver/h100/spdif-h100.c +++ b/firmware/target/coldfire/iriver/h100/spdif-h100.c @@ -33,7 +33,8 @@ void spdif_init(void) { /* PHASECONFIG setup: gain = 3*2^13, source = EBUIN */ PHASECONFIG = (6 << 3) | (4 << 0); - spdif_set_output_source(AUDIO_SRC_PLAYBACK, true); + spdif_set_output_source(AUDIO_SRC_PLAYBACK + IF_SPDIF_POWER_(, true)); } /* Return the S/PDIF frequency in herz - unrounded */ diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c index dc40dac..41aa9fb 100644 --- a/firmware/target/coldfire/pcm-coldfire.c +++ b/firmware/target/coldfire/pcm-coldfire.c @@ -271,7 +271,7 @@ void pcm_init(void) /* Initialize default register values. */ audiohw_init(); - audio_set_source(AUDIO_SRC_PLAYBACK, SRCF_PLAYBACK); + audio_input_mux(AUDIO_SRC_PLAYBACK, SRCF_PLAYBACK); audiohw_set_frequency(freq_ent[FPARM_FSEL]); coldfire_set_pllcr_audio_bits(PLLCR_SET_AUDIO_BITS_DEFPARM); |