FFmpeg
Loading...
Searching...
No Matches
alsa.c File Reference

ALSA input and output: common code. More...

#include "config_components.h"
#include <alsa/asoundlib.h>
#include "avdevice.h"
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "alsa.h"

Go to the source code of this file.

Macros

#define MAKE_REORDER_FUNC(NAME, TYPE, CHANNELS, LAYOUT, MAP)
 
#define MAKE_REORDER_FUNCS(CHANNELS, LAYOUT, MAP)
 
#define FORMAT_I8   0
 
#define FORMAT_I16   1
 
#define FORMAT_I32   2
 
#define FORMAT_F32   3
 
#define PICK_REORDER(layout)
 

Functions

static av_cold snd_pcm_format_t codec_id_to_pcm_format (int codec_id)
 
 MAKE_REORDER_FUNCS (5, out_50, out[0]=in[0];out[1]=in[1];out[2]=in[3];out[3]=in[4];out[4]=in[2];)
 
static enum AVChannel alsa_chmap_pos_to_av_chan (unsigned int pos)
 
static int alsa_get_chmap (AVFormatContext *ctx, snd_pcm_t *h, AVChannelLayout *layout)
 
static av_cold int find_reorder_func (AlsaData *s, int codec_id, const AVChannelLayout *layout, int out)
 
av_cold int ff_alsa_open (AVFormatContext *ctx, snd_pcm_stream_t mode, unsigned int *sample_rate, AVChannelLayout *layout, enum AVCodecID *codec_id)
 Open an ALSA PCM.
 
av_cold int ff_alsa_close (AVFormatContext *s1)
 Close the ALSA PCM.
 
int ff_alsa_xrun_recover (AVFormatContext *s1, int err)
 Try to recover from ALSA buffer underrun.
 
int ff_alsa_extend_reorder_buf (AlsaData *s, int min_size)
 
int ff_alsa_get_device_list (AVDeviceInfoList *device_list, snd_pcm_stream_t stream_type)
 

Variables

 alsa_chmap_table []
 

Detailed Description

ALSA input and output: common code.

Author
Luca Abeni ( lucabe72 email it )
Benoit Fouet ( benoit fouet free fr )
Nicolas George ( nicolas george normalesup org )

Definition in file alsa.c.

Macro Definition Documentation

◆ MAKE_REORDER_FUNC

#define MAKE_REORDER_FUNC ( NAME,
TYPE,
CHANNELS,
LAYOUT,
MAP )
Value:
static void alsa_reorder_ ## NAME ## _ ## LAYOUT(const void *in_v, \
void *out_v, \
int n) \
{ \
const TYPE *in = in_v; \
TYPE *out = out_v; \
\
while (n-- > 0) { \
MAP \
in += CHANNELS; \
out += CHANNELS; \
} \
}
#define _
#define TYPE
Definition ffv1dec.c:90
static FILE * out
Definition movenc.c:55

Definition at line 68 of file alsa.c.

◆ MAKE_REORDER_FUNCS

#define MAKE_REORDER_FUNCS ( CHANNELS,
LAYOUT,
MAP )
Value:
MAKE_REORDER_FUNC(int8, int8_t, CHANNELS, LAYOUT, MAP) \
MAKE_REORDER_FUNC(int16, int16_t, CHANNELS, LAYOUT, MAP) \
MAKE_REORDER_FUNC(int32, int32_t, CHANNELS, LAYOUT, MAP) \
MAKE_REORDER_FUNC(f32, float, CHANNELS, LAYOUT, MAP)
#define MAKE_REORDER_FUNC(NAME, TYPE, CHANNELS, LAYOUT, MAP)
Definition alsa.c:68
int32_t
#define MAP(in_idx, out_idx)

Definition at line 83 of file alsa.c.

◆ FORMAT_I8

#define FORMAT_I8   0

◆ FORMAT_I16

#define FORMAT_I16   1

◆ FORMAT_I32

#define FORMAT_I32   2

◆ FORMAT_F32

#define FORMAT_F32   3

◆ PICK_REORDER

#define PICK_REORDER ( layout)
Value:
switch(format) {\
case FORMAT_I8: s->reorder_func = alsa_reorder_int8_out_ ##layout; break;\
case FORMAT_I16: s->reorder_func = alsa_reorder_int16_out_ ##layout; break;\
case FORMAT_I32: s->reorder_func = alsa_reorder_int32_out_ ##layout; break;\
case FORMAT_F32: s->reorder_func = alsa_reorder_f32_out_ ##layout; break;\
}
static const char *const format[]
Definition af_aiir.c:444
#define FORMAT_F32
#define FORMAT_I32
#define FORMAT_I16
#define FORMAT_I8
#define s(width, name)
Definition cbs_vp9.c:198
uint64_t layout

Referenced by find_reorder_func().

Function Documentation

◆ codec_id_to_pcm_format()

static av_cold snd_pcm_format_t codec_id_to_pcm_format ( int codec_id)
static

Definition at line 41 of file alsa.c.

Referenced by ff_alsa_open().

◆ MAKE_REORDER_FUNCS()

MAKE_REORDER_FUNCS ( 5 ,
out_50 ,
out [0] = in[0]; out[1] = in[1]; out[2] = in[3]; out[3] = in[4]; out[4] = in[2]; )

Definition at line 89 of file alsa.c.

◆ alsa_chmap_pos_to_av_chan()

static enum AVChannel alsa_chmap_pos_to_av_chan ( unsigned int pos)
static

Definition at line 166 of file alsa.c.

Referenced by alsa_get_chmap().

◆ alsa_get_chmap()

static int alsa_get_chmap ( AVFormatContext * ctx,
snd_pcm_t * h,
AVChannelLayout * layout )
static

Definition at line 174 of file alsa.c.

Referenced by ff_alsa_open().

◆ find_reorder_func()

static av_cold int find_reorder_func ( AlsaData * s,
int codec_id,
const AVChannelLayout * layout,
int out )
static

Definition at line 212 of file alsa.c.

Referenced by ff_alsa_open().

◆ ff_alsa_open()

av_cold int ff_alsa_open ( AVFormatContext * s,
snd_pcm_stream_t mode,
unsigned int * sample_rate,
AVChannelLayout * layout,
enum AVCodecID * codec_id )

Open an ALSA PCM.

Parameters
smedia file handle
modeeither SND_PCM_STREAM_CAPTURE or SND_PCM_STREAM_PLAYBACK
sample_ratein: requested sample rate; out: actually selected sample rate
layoutin: requested channel layout, or nb_channels=0 for auto-detect; out: actually selected channel layout
codec_idin: requested AVCodecID or AV_CODEC_ID_NONE; out: actually selected AVCodecID, changed only if AV_CODEC_ID_NONE was requested
Returns
0 if OK, AVERROR_xxx on error

Definition at line 256 of file alsa.c.

Referenced by audio_read_header(), and audio_write_header().

◆ ff_alsa_close()

av_cold int ff_alsa_close ( AVFormatContext * s1)

Close the ALSA PCM.

Parameters
s1media file handle
Returns
0

Definition at line 421 of file alsa.c.

◆ ff_alsa_xrun_recover()

int ff_alsa_xrun_recover ( AVFormatContext * s1,
int err )

Try to recover from ALSA buffer underrun.

Parameters
s1media file handle
errerror code reported by the previous ALSA call
Returns
0 if OK, AVERROR_xxx on error

Definition at line 437 of file alsa.c.

Referenced by audio_read_packet(), and audio_write_packet().

◆ ff_alsa_extend_reorder_buf()

int ff_alsa_extend_reorder_buf ( AlsaData * s,
int min_size )

Definition at line 460 of file alsa.c.

Referenced by audio_write_packet().

◆ ff_alsa_get_device_list()

int ff_alsa_get_device_list ( AVDeviceInfoList * device_list,
snd_pcm_stream_t stream_type )

Definition at line 477 of file alsa.c.

Referenced by audio_get_device_list(), and audio_get_device_list().

Variable Documentation

◆ alsa_chmap_table

alsa_chmap_table[]

Definition at line 133 of file alsa.c.

Referenced by alsa_chmap_pos_to_av_chan().