FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions
alsa-audio-common.c File Reference

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

#include <alsa/asoundlib.h>
#include "avdevice.h"
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "alsa-audio.h"

Go to the source code of this file.

Macros

#define REORDER_OUT_50(NAME, TYPE)
 
#define REORDER_OUT_51(NAME, TYPE)
 
#define REORDER_OUT_71(NAME, TYPE)
 
#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)
 
static av_cold int find_reorder_func (AlsaData *s, int codec_id, uint64_t layout, int out)
 
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.
 
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)
 

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-audio-common.c.

Macro Definition Documentation

#define REORDER_OUT_50 (   NAME,
  TYPE 
)
Value:
static void alsa_reorder_ ## NAME ## _out_50(const void *in_v, void *out_v, int n) \
{ \
const TYPE *in = in_v; \
TYPE *out = out_v; \
\
while (n-- > 0) { \
out[0] = in[0]; \
out[1] = in[1]; \
out[2] = in[3]; \
out[3] = in[4]; \
out[4] = in[2]; \
in += 5; \
out += 5; \
} \
}

Definition at line 65 of file alsa-audio-common.c.

#define REORDER_OUT_51 (   NAME,
  TYPE 
)
Value:
static void alsa_reorder_ ## NAME ## _out_51(const void *in_v, void *out_v, int n) \
{ \
const TYPE *in = in_v; \
TYPE *out = out_v; \
\
while (n-- > 0) { \
out[0] = in[0]; \
out[1] = in[1]; \
out[2] = in[4]; \
out[3] = in[5]; \
out[4] = in[2]; \
out[5] = in[3]; \
in += 6; \
out += 6; \
} \
}

Definition at line 82 of file alsa-audio-common.c.

#define REORDER_OUT_71 (   NAME,
  TYPE 
)
Value:
static void alsa_reorder_ ## NAME ## _out_71(const void *in_v, void *out_v, int n) \
{ \
const TYPE *in = in_v; \
TYPE *out = out_v; \
\
while (n-- > 0) { \
out[0] = in[0]; \
out[1] = in[1]; \
out[2] = in[4]; \
out[3] = in[5]; \
out[4] = in[2]; \
out[5] = in[3]; \
out[6] = in[6]; \
out[7] = in[7]; \
in += 8; \
out += 8; \
} \
}

Definition at line 100 of file alsa-audio-common.c.

#define FORMAT_I8   0

Definition at line 133 of file alsa-audio-common.c.

Referenced by find_reorder_func().

#define FORMAT_I16   1

Definition at line 134 of file alsa-audio-common.c.

Referenced by find_reorder_func().

#define FORMAT_I32   2

Definition at line 135 of file alsa-audio-common.c.

Referenced by find_reorder_func().

#define FORMAT_F32   3

Definition at line 136 of file alsa-audio-common.c.

Referenced by find_reorder_func().

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

Definition at line 138 of file alsa-audio-common.c.

Referenced by find_reorder_func().

Function Documentation

static av_cold snd_pcm_format_t codec_id_to_pcm_format ( int  codec_id)
static

Definition at line 38 of file alsa-audio-common.c.

Referenced by ff_alsa_open().

static av_cold int find_reorder_func ( AlsaData s,
int  codec_id,
uint64_t  layout,
int  out 
)
static

Definition at line 146 of file alsa-audio-common.c.

Referenced by 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 186 of file alsa-audio-common.c.

Referenced by audio_read_header(), and audio_write_header().

av_cold int ff_alsa_close ( AVFormatContext s1)

Close the ALSA PCM.

Parameters
s1media file handle
Returns
0

Definition at line 318 of file alsa-audio-common.c.

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 329 of file alsa-audio-common.c.

Referenced by audio_read_packet(), and audio_write_packet().

int ff_alsa_extend_reorder_buf ( AlsaData s,
int  min_size 
)

Definition at line 350 of file alsa-audio-common.c.

Referenced by audio_write_packet().