forked from len0rd/rockbox
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
This commit is contained in:
parent
a85793fc54
commit
2d48d0ffa6
22 changed files with 237 additions and 154 deletions
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -480,6 +480,14 @@ void audio_record(const char *filename)
|
|||
logf("audio_record_done");
|
||||
} /* 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
|
||||
*/
|
||||
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue