FFmpeg  4.0
Data Structures | Macros | Functions | Variables
pulse_audio_enc.c File Reference
#include <math.h>
#include <pulse/pulseaudio.h>
#include <pulse/error.h>
#include "libavformat/avformat.h"
#include "libavformat/internal.h"
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "libavutil/log.h"
#include "libavutil/attributes.h"
#include "pulse_audio_common.h"

Go to the source code of this file.

Data Structures

struct  PulseData
 

Macros

#define OFFSET(a)   offsetof(PulseData, a)
 
#define E   AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static void pulse_audio_sink_device_cb (pa_context *ctx, const pa_sink_info *dev, int eol, void *userdata)
 
static int pulse_update_sink_info (AVFormatContext *h)
 
static void pulse_audio_sink_input_cb (pa_context *ctx, const pa_sink_input_info *i, int eol, void *userdata)
 
static int pulse_update_sink_input_info (AVFormatContext *h)
 
static void pulse_event (pa_context *ctx, pa_subscription_event_type_t t, uint32_t idx, void *userdata)
 
static void pulse_stream_writable (pa_stream *stream, size_t nbytes, void *userdata)
 
static void pulse_overflow (pa_stream *stream, void *userdata)
 
static void pulse_underflow (pa_stream *stream, void *userdata)
 
static void pulse_stream_state (pa_stream *stream, void *userdata)
 
static int pulse_stream_wait (PulseData *s)
 
static void pulse_context_state (pa_context *ctx, void *userdata)
 
static int pulse_context_wait (PulseData *s)
 
static void pulse_stream_result (pa_stream *stream, int success, void *userdata)
 
static int pulse_finish_stream_operation (PulseData *s, pa_operation *op, const char *name)
 
static int pulse_set_pause (PulseData *s, int pause)
 
static int pulse_flash_stream (PulseData *s)
 
static void pulse_context_result (pa_context *ctx, int success, void *userdata)
 
static int pulse_finish_context_operation (PulseData *s, pa_operation *op, const char *name)
 
static int pulse_set_mute (PulseData *s)
 
static int pulse_set_volume (PulseData *s, double volume)
 
static int pulse_subscribe_events (PulseData *s)
 
static void pulse_map_channels_to_pulse (int64_t channel_layout, pa_channel_map *channel_map)
 
static av_cold int pulse_write_trailer (AVFormatContext *h)
 
static av_cold int pulse_write_header (AVFormatContext *h)
 
static int pulse_write_packet (AVFormatContext *h, AVPacket *pkt)
 
static int pulse_write_frame (AVFormatContext *h, int stream_index, AVFrame **frame, unsigned flags)
 
static void pulse_get_output_timestamp (AVFormatContext *h, int stream, int64_t *dts, int64_t *wall)
 
static int pulse_get_device_list (AVFormatContext *h, AVDeviceInfoList *device_list)
 
static int pulse_control_message (AVFormatContext *h, int type, void *data, size_t data_size)
 

Variables

static const AVOption options []
 
static const AVClass pulse_muxer_class
 
AVOutputFormat ff_pulse_muxer
 

Macro Definition Documentation

◆ OFFSET

#define OFFSET (   a)    offsetof(PulseData, a)

Definition at line 759 of file pulse_audio_enc.c.

◆ E

Definition at line 760 of file pulse_audio_enc.c.

Function Documentation

◆ pulse_audio_sink_device_cb()

static void pulse_audio_sink_device_cb ( pa_context *  ctx,
const pa_sink_info *  dev,
int  eol,
void userdata 
)
static

Definition at line 54 of file pulse_audio_enc.c.

Referenced by pulse_update_sink_info().

◆ pulse_update_sink_info()

static int pulse_update_sink_info ( AVFormatContext h)
static

Definition at line 74 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_audio_sink_input_cb()

static void pulse_audio_sink_input_cb ( pa_context *  ctx,
const pa_sink_input_info *  i,
int  eol,
void userdata 
)
static

Definition at line 89 of file pulse_audio_enc.c.

Referenced by pulse_update_sink_input_info().

◆ pulse_update_sink_input_info()

static int pulse_update_sink_input_info ( AVFormatContext h)
static

Definition at line 117 of file pulse_audio_enc.c.

Referenced by pulse_control_message(), pulse_event(), and pulse_write_header().

◆ pulse_event()

static void pulse_event ( pa_context *  ctx,
pa_subscription_event_type_t  t,
uint32_t  idx,
void userdata 
)
static

Definition at line 150 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_stream_writable()

static void pulse_stream_writable ( pa_stream *  stream,
size_t  nbytes,
void userdata 
)
static

Definition at line 166 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_overflow()

static void pulse_overflow ( pa_stream *  stream,
void userdata 
)
static

Definition at line 179 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_underflow()

static void pulse_underflow ( pa_stream *  stream,
void userdata 
)
static

Definition at line 185 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_stream_state()

static void pulse_stream_state ( pa_stream *  stream,
void userdata 
)
static

Definition at line 191 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_stream_wait()

static int pulse_stream_wait ( PulseData s)
static

Definition at line 208 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_context_state()

static void pulse_context_state ( pa_context *  ctx,
void userdata 
)
static

Definition at line 220 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_context_wait()

static int pulse_context_wait ( PulseData s)
static

Definition at line 237 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_stream_result()

static void pulse_stream_result ( pa_stream *  stream,
int  success,
void userdata 
)
static

Definition at line 249 of file pulse_audio_enc.c.

Referenced by pulse_flash_stream(), and pulse_set_pause().

◆ pulse_finish_stream_operation()

static int pulse_finish_stream_operation ( PulseData s,
pa_operation *  op,
const char *  name 
)
static

Definition at line 260 of file pulse_audio_enc.c.

Referenced by pulse_flash_stream(), and pulse_set_pause().

◆ pulse_set_pause()

static int pulse_set_pause ( PulseData s,
int  pause 
)
static

Definition at line 277 of file pulse_audio_enc.c.

Referenced by pulse_control_message().

◆ pulse_flash_stream()

static int pulse_flash_stream ( PulseData s)
static

Definition at line 285 of file pulse_audio_enc.c.

Referenced by pulse_write_packet().

◆ pulse_context_result()

static void pulse_context_result ( pa_context *  ctx,
int  success,
void userdata 
)
static

Definition at line 293 of file pulse_audio_enc.c.

Referenced by pulse_set_mute(), pulse_set_volume(), and pulse_subscribe_events().

◆ pulse_finish_context_operation()

static int pulse_finish_context_operation ( PulseData s,
pa_operation *  op,
const char *  name 
)
static

Definition at line 304 of file pulse_audio_enc.c.

Referenced by pulse_set_mute(), pulse_set_volume(), and pulse_subscribe_events().

◆ pulse_set_mute()

static int pulse_set_mute ( PulseData s)
static

Definition at line 321 of file pulse_audio_enc.c.

Referenced by pulse_control_message().

◆ pulse_set_volume()

static int pulse_set_volume ( PulseData s,
double  volume 
)
static

Definition at line 330 of file pulse_audio_enc.c.

Referenced by pulse_control_message().

◆ pulse_subscribe_events()

static int pulse_subscribe_events ( PulseData s)
static

Definition at line 346 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_map_channels_to_pulse()

static void pulse_map_channels_to_pulse ( int64_t  channel_layout,
pa_channel_map *  channel_map 
)
static

Definition at line 355 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_write_trailer()

static av_cold int pulse_write_trailer ( AVFormatContext h)
static

Definition at line 410 of file pulse_audio_enc.c.

Referenced by pulse_write_header().

◆ pulse_write_header()

static av_cold int pulse_write_header ( AVFormatContext h)
static

Definition at line 441 of file pulse_audio_enc.c.

◆ pulse_write_packet()

static int pulse_write_packet ( AVFormatContext h,
AVPacket pkt 
)
static

Definition at line 624 of file pulse_audio_enc.c.

Referenced by pulse_write_frame().

◆ pulse_write_frame()

static int pulse_write_frame ( AVFormatContext h,
int  stream_index,
AVFrame **  frame,
unsigned  flags 
)
static

Definition at line 673 of file pulse_audio_enc.c.

◆ pulse_get_output_timestamp()

static void pulse_get_output_timestamp ( AVFormatContext h,
int  stream,
int64_t *  dts,
int64_t *  wall 
)
static

Definition at line 691 of file pulse_audio_enc.c.

◆ pulse_get_device_list()

static int pulse_get_device_list ( AVFormatContext h,
AVDeviceInfoList device_list 
)
static

Definition at line 705 of file pulse_audio_enc.c.

◆ pulse_control_message()

static int pulse_control_message ( AVFormatContext h,
int  type,
void data,
size_t  data_size 
)
static

Definition at line 711 of file pulse_audio_enc.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "server", "set PulseAudio server", OFFSET(server), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
{ "name", "set application name", OFFSET(name), AV_OPT_TYPE_STRING, {.str = LIBAVFORMAT_IDENT}, 0, 0, E },
{ "stream_name", "set stream description", OFFSET(stream_name), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
{ "device", "set device name", OFFSET(device), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
{ "buffer_size", "set buffer size in bytes", OFFSET(buffer_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ "buffer_duration", "set buffer duration in millisecs", OFFSET(buffer_duration), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ "prebuf", "set pre-buffering size", OFFSET(prebuf), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ "minreq", "set minimum request size", OFFSET(minreq), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ NULL }
}
const char * name
Definition: avisynth_c.h:775
#define NULL
Definition: coverity.c:32
#define E
#define OFFSET(a)
#define LIBAVFORMAT_IDENT
Definition: version.h:46

Definition at line 761 of file pulse_audio_enc.c.

◆ pulse_muxer_class

const AVClass pulse_muxer_class
static
Initial value:
= {
.class_name = "PulseAudio muxer",
.item_name = av_default_item_name,
.option = options,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
static const AVOption options[]

Definition at line 773 of file pulse_audio_enc.c.

◆ ff_pulse_muxer

AVOutputFormat ff_pulse_muxer
Initial value:
= {
.name = "pulse",
.long_name = NULL_IF_CONFIG_SMALL("Pulse audio output"),
.priv_data_size = sizeof(PulseData),
.video_codec = AV_CODEC_ID_NONE,
.write_header = pulse_write_header,
.write_packet = pulse_write_packet,
.write_uncoded_frame = pulse_write_frame,
.write_trailer = pulse_write_trailer,
.get_output_timestamp = pulse_get_output_timestamp,
.get_device_list = pulse_get_device_list,
.control_message = pulse_control_message,
.priv_class = &pulse_muxer_class,
}
#define AVFMT_ALLOW_FLUSH
Format allows flushing.
Definition: avformat.h:478
#define AV_NE(be, le)
Definition: common.h:50
static int pulse_write_packet(AVFormatContext *h, AVPacket *pkt)
static int pulse_control_message(AVFormatContext *h, int type, void *data, size_t data_size)
static const AVClass pulse_muxer_class
static av_cold int pulse_write_trailer(AVFormatContext *h)
static int pulse_write_frame(AVFormatContext *h, int stream_index, AVFrame **frame, unsigned flags)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static int pulse_get_device_list(AVFormatContext *h, AVDeviceInfoList *device_list)
static av_cold int pulse_write_header(AVFormatContext *h)
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:465
static void pulse_get_output_timestamp(AVFormatContext *h, int stream, int64_t *dts, int64_t *wall)

Definition at line 781 of file pulse_audio_enc.c.