FFmpeg
Loading...
Searching...
No Matches
pulse_audio_dec.c File Reference
#include <pulse/rtclock.h>
#include <pulse/error.h>
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "libavformat/avformat.h"
#include "libavformat/demux.h"
#include "libavformat/internal.h"
#include "libavformat/version.h"
#include "pulse_audio_common.h"
#include "timefilter.h"

Go to the source code of this file.

Data Structures

struct  PulseData
 

Macros

#define DEFAULT_CODEC_ID   AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE)
 
#define CHECK_SUCCESS_GOTO(rerror, expression, label)
 
#define CHECK_DEAD_GOTO(p, rerror, label)
 
#define OFFSET(a)
 
#define D   AV_OPT_FLAG_DECODING_PARAM
 
#define DEPR   AV_OPT_FLAG_DEPRECATED
 

Functions

static void context_state_cb (pa_context *c, void *userdata)
 
static void stream_state_cb (pa_stream *s, void *userdata)
 
static void stream_request_cb (pa_stream *s, size_t length, void *userdata)
 
static void stream_latency_update_cb (pa_stream *s, void *userdata)
 
static av_cold int pulse_close (AVFormatContext *s)
 
static av_cold int pulse_read_header (AVFormatContext *s)
 
static int pulse_read_packet (AVFormatContext *s, AVPacket *pkt)
 
static int pulse_get_device_list (AVFormatContext *h, AVDeviceInfoList *device_list)
 

Variables

static const AVOption options []
 
static const AVClass pulse_demuxer_class
 
const FFInputFormat ff_pulse_demuxer
 

Macro Definition Documentation

◆ DEFAULT_CODEC_ID

#define DEFAULT_CODEC_ID   AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE)

Definition at line 38 of file pulse_audio_dec.c.

◆ CHECK_SUCCESS_GOTO

#define CHECK_SUCCESS_GOTO ( rerror,
expression,
label )
Value:
do { \
if (!(expression)) { \
rerror = AVERROR_EXTERNAL; \
goto label; \
} \
} while (0)
#define AVERROR_EXTERNAL
Generic error in an external library.
Definition error.h:59

Definition at line 61 of file pulse_audio_dec.c.

Referenced by pulse_read_packet().

◆ CHECK_DEAD_GOTO

#define CHECK_DEAD_GOTO ( p,
rerror,
label )
Value:
do { \
if (!(p)->context || !PA_CONTEXT_IS_GOOD(pa_context_get_state((p)->context)) || \
!(p)->stream || !PA_STREAM_IS_GOOD(pa_stream_get_state((p)->stream))) { \
rerror = AVERROR_EXTERNAL; \
goto label; \
} \
} while (0)

Definition at line 69 of file pulse_audio_dec.c.

Referenced by pulse_read_packet().

◆ OFFSET

#define OFFSET ( a)
Value:
offsetof(PulseData, a)
int a

Definition at line 378 of file pulse_audio_dec.c.

◆ D

Definition at line 379 of file pulse_audio_dec.c.

◆ DEPR

#define DEPR   AV_OPT_FLAG_DEPRECATED

Definition at line 380 of file pulse_audio_dec.c.

Function Documentation

◆ context_state_cb()

static void context_state_cb ( pa_context * c,
void * userdata )
static

Definition at line 78 of file pulse_audio_dec.c.

Referenced by pulse_read_header().

◆ stream_state_cb()

static void stream_state_cb ( pa_stream * s,
void * userdata )
static

Definition at line 90 of file pulse_audio_dec.c.

Referenced by pulse_read_header().

◆ stream_request_cb()

static void stream_request_cb ( pa_stream * s,
size_t length,
void * userdata )
static

Definition at line 102 of file pulse_audio_dec.c.

Referenced by pulse_read_header().

◆ stream_latency_update_cb()

static void stream_latency_update_cb ( pa_stream * s,
void * userdata )
static

Definition at line 108 of file pulse_audio_dec.c.

Referenced by pulse_read_header().

◆ pulse_close()

static av_cold int pulse_close ( AVFormatContext * s)
static

Definition at line 114 of file pulse_audio_dec.c.

Referenced by pulse_read_header().

◆ pulse_read_header()

static av_cold int pulse_read_header ( AVFormatContext * s)
static

Definition at line 141 of file pulse_audio_dec.c.

◆ pulse_read_packet()

static int pulse_read_packet ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 294 of file pulse_audio_dec.c.

◆ pulse_get_device_list()

static int pulse_get_device_list ( AVFormatContext * h,
AVDeviceInfoList * device_list )
static

Definition at line 372 of file pulse_audio_dec.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "server", "set PulseAudio server", OFFSET(server), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, D },
{ "name", "set application name", OFFSET(name), AV_OPT_TYPE_STRING, {.str = LIBAVFORMAT_IDENT}, 0, 0, D },
{ "stream_name", "set stream description", OFFSET(stream_name), AV_OPT_TYPE_STRING, {.str = "record"}, 0, 0, D },
{ "sample_rate", "set sample rate in Hz", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = 48000}, 1, INT_MAX, D },
{ "channels", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = 2}, 1, INT_MAX, D },
{ "frame_size", "set number of bytes per frame", OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = 1024}, 1, INT_MAX, D | DEPR },
{ "fragment_size", "set buffering size, affects latency and cpu usage", OFFSET(fragment_size), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, D },
{ "wallclock", "set the initial pts using the current time", OFFSET(wallclock), AV_OPT_TYPE_INT, {.i64 = 1}, -1, 1, D },
{ NULL },
}
channels
Definition aptx.h:31
#define D
Definition avdct.c:35
#define NULL
Definition coverity.c:32
#define OFFSET(x)
static const uint8_t frame_size[4]
Definition g723_1.h:222
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
Definition opt.h:275
#define LIBAVFORMAT_IDENT
Definition version.h:45
#define DEPR
const char * name
Definition qsvenc.c:142

Definition at line 382 of file pulse_audio_dec.c.

◆ pulse_demuxer_class

const AVClass pulse_demuxer_class
static
Initial value:
= {
.class_name = "Pulse indev",
.item_name = av_default_item_name,
.option = options,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
@ AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT
Definition log.h:44

Definition at line 394 of file pulse_audio_dec.c.

◆ ff_pulse_demuxer

const FFInputFormat ff_pulse_demuxer
Initial value:
= {
.p.name = "pulse",
.p.long_name = NULL_IF_CONFIG_SMALL("Pulse audio input"),
.p.flags = AVFMT_NOFILE,
.p.priv_class = &pulse_demuxer_class,
.priv_data_size = sizeof(PulseData),
.get_device_list = pulse_get_device_list,
}
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition avformat.h:488
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
static int read_header(FFV1Context *f, RangeCoder *c)
Definition ffv1dec.c:578
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static av_cold int read_close(AVFormatContext *ctx)
Definition libcdio.c:143
static av_cold int pulse_read_header(AVFormatContext *s)
static av_cold int pulse_close(AVFormatContext *s)
static const AVClass pulse_demuxer_class
static int pulse_get_device_list(AVFormatContext *h, AVDeviceInfoList *device_list)
static int pulse_read_packet(AVFormatContext *s, AVPacket *pkt)

Definition at line 402 of file pulse_audio_dec.c.