-/*****************************************************************************
- * Demux: Processes the audio frame
- *****************************************************************************/
-static int Demux( demux_t *p_demux )
-{
- demux_sys_t *p_sys = p_demux->p_sys;
-
- block_t *p_block = NULL;
-
- do
- {
- if( p_block )
- {
- es_out_Send( p_demux->out, p_sys->p_es, p_block );
- p_block = NULL;
- }
-
- /* Wait for data */
- int i_wait = snd_pcm_wait( p_sys->p_alsa_pcm, 500 );
- switch( i_wait )
- {
- case 1:
- {
- p_block = GrabAudio( p_demux );
- if( p_block )
- es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block->i_pts );
- }
-
- /* FIXME: this is a copy paste from below. Shouldn't be needed
- * twice. */
- case -EPIPE:
- /* xrun */
- snd_pcm_prepare( p_sys->p_alsa_pcm );
- break;
- case -ESTRPIPE:
- {
- /* suspend */
- int i_resume = snd_pcm_resume( p_sys->p_alsa_pcm );
- if( i_resume < 0 && i_resume != -EAGAIN ) snd_pcm_prepare( p_sys->p_alsa_pcm );
- break;
- }
- /* </FIXME> */
- }
- } while( p_block && p_sys->i_next_demux_date > 0 &&
- p_block->i_pts < p_sys->i_next_demux_date );
+static const vlc_fourcc_t formats[] = {
+ [SND_PCM_FORMAT_S8] = VLC_CODEC_S8,
+ [SND_PCM_FORMAT_U8] = VLC_CODEC_U8,
+ [SND_PCM_FORMAT_S16_LE] = VLC_CODEC_S16L,
+ [SND_PCM_FORMAT_S16_BE] = VLC_CODEC_S16B,
+ [SND_PCM_FORMAT_U16_LE] = VLC_CODEC_U16L,
+ [SND_PCM_FORMAT_U16_BE] = VLC_CODEC_U16B,
+ [SND_PCM_FORMAT_S24_LE] = VLC_CODEC_S24L32,
+ [SND_PCM_FORMAT_S24_BE] = VLC_CODEC_S24B32,
+ [SND_PCM_FORMAT_U24_LE] = VLC_CODEC_U32L, // TODO: replay gain
+ [SND_PCM_FORMAT_U24_BE] = VLC_CODEC_U32B, // ^
+ [SND_PCM_FORMAT_S32_LE] = VLC_CODEC_S32L,
+ [SND_PCM_FORMAT_S32_BE] = VLC_CODEC_S32B,
+ [SND_PCM_FORMAT_U32_LE] = VLC_CODEC_U32L,
+ [SND_PCM_FORMAT_U32_BE] = VLC_CODEC_U32B,
+ [SND_PCM_FORMAT_FLOAT_LE] = VLC_CODEC_F32L,
+ [SND_PCM_FORMAT_FLOAT_BE] = VLC_CODEC_F32B,
+ [SND_PCM_FORMAT_FLOAT64_LE] = VLC_CODEC_F32L,
+ [SND_PCM_FORMAT_FLOAT64_BE] = VLC_CODEC_F32B,
+ //[SND_PCM_FORMAT_IEC958_SUBFRAME_LE] = VLC_CODEC_SPDIFL,
+ //[SND_PCM_FORMAT_IEC958_SUBFRAME_BE] = VLC_CODEC_SPDIFB,
+ [SND_PCM_FORMAT_MU_LAW] = VLC_CODEC_MULAW,
+ [SND_PCM_FORMAT_A_LAW] = VLC_CODEC_ALAW,
+ //[SND_PCM_FORMAT_IMA_ADPCM] = VLC_CODEC_ADPCM_?, // XXX: which one?
+ [SND_PCM_FORMAT_MPEG] = VLC_CODEC_MPGA,
+ [SND_PCM_FORMAT_GSM] = VLC_CODEC_GSM,
+ //[SND_PCM_FORMAT_SPECIAL] = VLC_CODEC_?
+ [SND_PCM_FORMAT_S24_3LE] = VLC_CODEC_S24L,
+ [SND_PCM_FORMAT_S24_3BE] = VLC_CODEC_S24B,
+ [SND_PCM_FORMAT_U24_3LE] = VLC_CODEC_U24L,
+ [SND_PCM_FORMAT_U24_3BE] = VLC_CODEC_U24B,
+ [SND_PCM_FORMAT_S20_3LE] = VLC_CODEC_S24L, // TODO: replay gain
+ [SND_PCM_FORMAT_S20_3BE] = VLC_CODEC_S24B, // ^
+ [SND_PCM_FORMAT_U20_3LE] = VLC_CODEC_U24L, // ^
+ [SND_PCM_FORMAT_U20_3BE] = VLC_CODEC_U24B, // ^
+ [SND_PCM_FORMAT_S18_3LE] = VLC_CODEC_S24L, // ^
+ [SND_PCM_FORMAT_S18_3BE] = VLC_CODEC_S24B, // ^
+ [SND_PCM_FORMAT_U18_3LE] = VLC_CODEC_U24L, // ^
+ [SND_PCM_FORMAT_U18_3BE] = VLC_CODEC_U24B, // ^
+};