Commit 055e9fd7 authored by Jean-Paul Saman's avatar Jean-Paul Saman

access/alsa.c: mmap capture mode.

Capture using alsa mmap functions.
parent d3dd9028
...@@ -66,6 +66,10 @@ ...@@ -66,6 +66,10 @@
static int DemuxOpen ( vlc_object_t * ); static int DemuxOpen ( vlc_object_t * );
static void DemuxClose( vlc_object_t * ); static void DemuxClose( vlc_object_t * );
#define MMAP_TEXT N_( "Memory Mapped I/O" )
#define MMAP_LONGTEXT N_( \
"Capture audio samples using mmap I/O API." )
#define STEREO_TEXT N_( "Stereo" ) #define STEREO_TEXT N_( "Stereo" )
#define STEREO_LONGTEXT N_( \ #define STEREO_LONGTEXT N_( \
"Capture the audio stream in stereo." ) "Capture the audio stream in stereo." )
...@@ -102,6 +106,8 @@ vlc_module_begin() ...@@ -102,6 +106,8 @@ vlc_module_begin()
set_capability( "access_demux", 10 ) set_capability( "access_demux", 10 )
set_callbacks( DemuxOpen, DemuxClose ) set_callbacks( DemuxOpen, DemuxClose )
add_bool( CFG_PREFIX "mmap", false, MMAP_TEXT, MMAP_LONGTEXT,
false )
add_bool( CFG_PREFIX "stereo", true, STEREO_TEXT, STEREO_LONGTEXT, add_bool( CFG_PREFIX "stereo", true, STEREO_TEXT, STEREO_LONGTEXT,
true ) true )
add_string( CFG_PREFIX "format", "s16l", FORMAT_TEXT, add_string( CFG_PREFIX "format", "s16l", FORMAT_TEXT,
...@@ -131,6 +137,7 @@ struct demux_sys_t ...@@ -131,6 +137,7 @@ struct demux_sys_t
/* Audio */ /* Audio */
int i_cache; int i_cache;
unsigned int i_sample_rate; unsigned int i_sample_rate;
bool b_mmap; /* mmap'ed I/O */
bool b_stereo; bool b_stereo;
vlc_fourcc_t i_format; vlc_fourcc_t i_format;
size_t i_max_frame_size; size_t i_max_frame_size;
...@@ -278,6 +285,7 @@ static int DemuxOpen( vlc_object_t *p_this ) ...@@ -278,6 +285,7 @@ static int DemuxOpen( vlc_object_t *p_this )
free( psz_format ); free( psz_format );
p_sys->i_sample_rate = var_InheritInteger( p_demux, CFG_PREFIX "samplerate" ); p_sys->i_sample_rate = var_InheritInteger( p_demux, CFG_PREFIX "samplerate" );
p_sys->b_mmap = var_InheritBool( p_demux, CFG_PREFIX "mmap" );
p_sys->b_stereo = var_InheritBool( p_demux, CFG_PREFIX "stereo" ); p_sys->b_stereo = var_InheritBool( p_demux, CFG_PREFIX "stereo" );
p_sys->i_cache = var_InheritInteger( p_demux, CFG_PREFIX "caching" ); p_sys->i_cache = var_InheritInteger( p_demux, CFG_PREFIX "caching" );
p_sys->p_es = NULL; p_sys->p_es = NULL;
...@@ -405,8 +413,10 @@ static block_t* GrabAudio( demux_t *p_demux ) ...@@ -405,8 +413,10 @@ static block_t* GrabAudio( demux_t *p_demux )
p_sys->p_block = p_block; p_sys->p_block = p_block;
/* ALSA */ /* ALSA */
i_read = snd_pcm_readi( p_sys->p_alsa_pcm, p_block->p_buffer, if( p_sys->b_mmap )
p_sys->i_alsa_chunk_size ); i_read = snd_pcm_mmap_readi( p_sys->p_alsa_pcm, p_block->p_buffer, p_sys->i_alsa_chunk_size );
else
i_read = snd_pcm_readi( p_sys->p_alsa_pcm, p_block->p_buffer, p_sys->i_alsa_chunk_size );
if( i_read == -EAGAIN ) if( i_read == -EAGAIN )
{ {
snd_pcm_wait( p_sys->p_alsa_pcm, 10 ); /* See poll() comment in oss.c */ snd_pcm_wait( p_sys->p_alsa_pcm, 10 ); /* See poll() comment in oss.c */
...@@ -567,7 +577,8 @@ static int OpenAudioDevAlsa( demux_t *p_demux, const char *psz_device ) ...@@ -567,7 +577,8 @@ static int OpenAudioDevAlsa( demux_t *p_demux, const char *psz_device )
/* Set Interleaved access */ /* Set Interleaved access */
if( ( i_err = snd_pcm_hw_params_set_access( p_sys->p_alsa_pcm, p_hw_params, if( ( i_err = snd_pcm_hw_params_set_access( p_sys->p_alsa_pcm, p_hw_params,
SND_PCM_ACCESS_RW_INTERLEAVED ) ) < 0 ) p_sys->b_mmap ? SND_PCM_ACCESS_MMAP_INTERLEAVED :
SND_PCM_ACCESS_RW_INTERLEAVED ) ) < 0 )
{ {
msg_Err( p_demux, "ALSA: cannot set access type (%s)", msg_Err( p_demux, "ALSA: cannot set access type (%s)",
snd_strerror( i_err ) ); snd_strerror( i_err ) );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment