FFmpeg
Macros | Functions
alsa.c File Reference
#include "config_components.h"
#include <alsa/asoundlib.h>
#include "avdevice.h"
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.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];)
 
av_cold int ff_alsa_open (AVFormatContext *ctx, snd_pcm_stream_t mode, unsigned int *sample_rate, int channels, enum AVCodecID *codec_id)
 Open an ALSA PCM. More...
 
av_cold int ff_alsa_close (AVFormatContext *s1)
 Close the ALSA PCM. More...
 
int ff_alsa_xrun_recover (AVFormatContext *s1, int err)
 Try to recover from ALSA buffer underrun. More...
 
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)
 

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; \
} \
}

Definition at line 67 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)

Definition at line 82 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;\
}

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 40 of file alsa.c.

Referenced by ff_alsa_open().

◆ MAKE_REORDER_FUNCS()

MAKE_REORDER_FUNCS ( ,
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 88 of file alsa.c.

◆ ff_alsa_open()

av_cold int ff_alsa_open ( AVFormatContext s,
snd_pcm_stream_t  mode,
unsigned int sample_rate,
int  channels,
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
channelsnumber of channels
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 172 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 308 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 324 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 345 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 362 of file alsa.c.

Referenced by audio_get_device_list().

FORMAT_I32
#define FORMAT_I32
out
FILE * out
Definition: movenc.c:54
MAKE_REORDER_FUNC
#define MAKE_REORDER_FUNC(NAME, TYPE, CHANNELS, LAYOUT, MAP)
Definition: alsa.c:67
FORMAT_I8
#define FORMAT_I8
s
#define s(width, name)
Definition: cbs_vp9.c:198
format
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
TYPE
#define TYPE
Definition: ffv1dec.c:116
FORMAT_F32
#define FORMAT_F32
layout
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel layout
Definition: filter_design.txt:18
FORMAT_I16
#define FORMAT_I16
MAP
#define MAP(in_idx, out_idx)
_
#define _
int32_t
int32_t
Definition: audioconvert.c:56