![]() |
UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
|
#include <alloca.h>#include <alsa/asoundlib.h>#include <assert.h>#include <errno.h>#include <fcntl.h>#include <pthread.h>#include <stdbool.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include "alsa_common.h"#include "audio/audio_playback.h"#include "audio/types.h"#include "audio/utils.h"#include "debug.h"#include "host.h"#include "lib_common.h"#include "tv.h"#include "types.h"#include "utils/color_out.h"#include "utils/audio_buffer.h"
Go to the source code of this file.
Classes | |
| struct | state_alsa_playback |
Macros | |
| #define | BUF_LEN_DEFAULT_MS 60 |
| #define | BUF_LEN_DEFAULT_SYNC_MS 200 |
| #define | CHECK_OK(cmd) |
| #define | EXIT_IF_FAILED(cmd, name) |
| #define | MOD_NAME "[ALSA play.] " |
| #define | SCRATCHPAD_SIZE (1024*1024) |
Enumerations | |
| enum | playback_mode_t { THREAD = 0 , SYNC , ASYNC } |
Functions | |
| ADD_TO_PARAM ("alsa-play-period-size", "* alsa-play-period-size=<frames>\n" " ALSA playback period size in frames (default is device minimum) .\n") | |
| ADD_TO_PARAM ("alsa-playback-api", "* alsa-playback-api={thread|sync|async}\n" " ALSA API.\n") | |
| ADD_TO_PARAM ("alsa-playback-buffer", "* alsa-playback-buffer=<len>\n" " Buffer length. Can be used to balance robustness and latency, in microseconds.\n") | |
| static void | alsa_play_async_callback (snd_async_handler_t *handler) |
| static bool | audio_play_alsa_ctl (void *state, int request, void *data, size_t *len) |
| static void | audio_play_alsa_done (void *state) |
| static void | audio_play_alsa_help (void) |
| static void * | audio_play_alsa_init (const char *cfg) |
| static void | audio_play_alsa_probe (struct device_info **available_devices, int *count, void(**deleter)(void *)) |
| static void | audio_play_alsa_put_frame (void *state, const struct audio_frame *frame) |
| static bool | audio_play_alsa_query_format (struct state_alsa_playback *s, void *data, size_t *len) |
| static bool | audio_play_alsa_reconfigure (void *state, struct audio_desc desc) |
| static void | audio_play_alsa_write_frame (void *state, const struct audio_frame *frame) |
| static long | get_sched_latency_ns (void) |
| static snd_config_t * | init_local_config_with_workaround (char const *pcm_node_name) |
| static bool | is_default_pulse (void) |
| REGISTER_MODULE (alsa, &aplay_alsa_info, LIBRARY_CLASS_AUDIO_PLAYBACK, AUDIO_PLAYBACK_ABI_VERSION) | |
| static void | set_device_buffer (snd_pcm_t *handle, playback_mode_t playback_mode, snd_pcm_hw_params_t *params) |
| static void * | worker (void *args) |
| static void | write_fill (struct state_alsa_playback *s) |
| static int | write_samples (snd_pcm_t *handle, const char *data, int bps, int ch_count, int frames, bool noninterleaved, playback_mode_t playback_mode, char *tmp_buffer) |
Variables | |
| static const struct audio_playback_info | aplay_alsa_info |
Definition in file alsa.c.
| #define BUF_LEN_DEFAULT_MS 60 |
Definition at line 72 of file alsa.c.
Referenced by set_device_buffer().
| #define BUF_LEN_DEFAULT_SYNC_MS 200 |
Definition at line 73 of file alsa.c.
Referenced by set_device_buffer().
| #define CHECK_OK | ( | cmd | ) |
Definition at line 98 of file alsa.c.
Referenced by audio_play_alsa_reconfigure(), and set_device_buffer().
| #define EXIT_IF_FAILED | ( | cmd, | |
| name ) |
Speex jitter buffer use is currently not stable and not ready for production use. Moreover, it is unclear whether is suitable for our use case.
Definition at line 89 of file alsa.c.
Referenced by audio_play_alsa_reconfigure().
| #define SCRATCHPAD_SIZE (1024*1024) |
Definition at line 75 of file alsa.c.
Referenced by audio_play_alsa_init(), and write_samples().
| enum playback_mode_t |
| ADD_TO_PARAM | ( | "alsa-play-period-size" | ) |
| ADD_TO_PARAM | ( | "alsa-playback-api" | ) |
| ADD_TO_PARAM | ( | "alsa-playback-buffer" | , |
| "* alsa-playback- | buffer = <len>\n" " Buffer length. Can be used to balance robustness and latency, | ||
| in microseconds.\n" | ) |
|
static |
Definition at line 396 of file alsa.c.
References audio_buffer_read(), audio_play_alsa_write_frame(), audio_desc::bps, audio_frame::bps, state_alsa_playback::buf, audio_desc::ch_count, audio_frame::ch_count, audio_frame::data, audio_frame::data_len, state_alsa_playback::desc, state_alsa_playback::handle, len, state_alsa_playback::lock, state_alsa_playback::period_size, and audio_desc::sample_rate.
Referenced by audio_play_alsa_reconfigure().

|
static |
Definition at line 383 of file alsa.c.
References audio_play_alsa_query_format(), AUDIO_PLAYBACK_CTL_QUERY_FORMAT, len, and state.
Referenced by audio_play_alsa_init().

|
static |
Definition at line 1064 of file alsa.c.
References ASYNC, audio_buffer_destroy(), state_alsa_playback::buf, state_alsa_playback::handle, state_alsa_playback::local_config, state_alsa_playback::lock, state_alsa_playback::pcm_callback, state_alsa_playback::playback_mode, state_alsa_playback::scratchpad, state_alsa_playback::should_exit_thread, state, THREAD, state_alsa_playback::thread_id, and state_alsa_playback::thread_started.

|
static |
Definition at line 706 of file alsa.c.
References audio_alsa_list_devices(), color_printf(), TERM_BOLD, TERM_FG_RED, TERM_FG_RESET, and TERM_RESET.
Referenced by audio_play_alsa_init().

|
static |
Definition at line 837 of file alsa.c.
References AC_PCM, ASYNC, audio_play_alsa_ctl(), audio_play_alsa_help(), audio_play_alsa_reconfigure(), AUDIO_PLAYBACK_CTL_QUERY_FORMAT, state_alsa_playback::buf, desc, get_commandline_param(), get_sched_latency_ns(), state_alsa_playback::handle, init_local_config_with_workaround(), INIT_NOERR, is_default_pulse(), len, state_alsa_playback::local_config, state_alsa_playback::lock, LOG_LEVEL_ERROR, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE, LOG_LEVEL_WARNING, log_msg(), MOD_NAME, name, state_alsa_playback::playback_mode, print_alsa_device_info(), state_alsa_playback::sched_latency_ms, state_alsa_playback::scratchpad, SCRATCHPAD_SIZE, SYNC, and THREAD.

|
static |
Definition at line 697 of file alsa.c.
References audio_alsa_probe(), count, deleter, and name.

|
static |
Definition at line 1029 of file alsa.c.
References alsa_get_pcm_state_name(), ASYNC, audio_buffer_write(), audio_play_alsa_write_frame(), audio_desc::bps, state_alsa_playback::buf, audio_desc::ch_count, state_alsa_playback::desc, frame, state_alsa_playback::handle, state_alsa_playback::lock, LOG_LEVEL_ERROR, LOG_LEVEL_NOTICE, log_msg(), MOD_NAME, state_alsa_playback::playback_mode, state, THREAD, state_alsa_playback::timestamp, video_frame::timestamp, and write_fill().

|
static |
Definition at line 261 of file alsa.c.
References AC_PCM, audio_desc::bps, bps_to_snd_fmts, audio_desc::ch_count, channels, audio_desc::codec, desc, get_rate_near(), state_alsa_playback::handle, len, LOG_LEVEL_ERROR, log_msg(), MOD_NAME, params, audio_desc::sample_rate, and val.
Referenced by audio_play_alsa_ctl().

|
static |
Definition at line 496 of file alsa.c.
References alsa_get_pcm_state_name(), alsa_play_async_callback(), ASYNC, state_alsa_playback::audio_buf_len_ms, audio_buffer_destroy(), audio_buffer_init(), audio_desc::bps, bps_to_snd_fmts, state_alsa_playback::buf, state_alsa_playback::buffer_size, audio_desc::ch_count, CHECK_OK, desc, state_alsa_playback::desc, EXIT_IF_FAILED, get_commandline_param(), state_alsa_playback::handle, state_alsa_playback::lock, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_WARNING, log_msg(), MOD_NAME, state_alsa_playback::non_interleaved, params, state_alsa_playback::pcm_callback, state_alsa_playback::period_size, state_alsa_playback::playback_mode, audio_desc::sample_rate, state_alsa_playback::sched_latency_ms, set_device_buffer(), state_alsa_playback::should_exit_thread, state, THREAD, state_alsa_playback::thread_id, state_alsa_playback::thread_started, state_alsa_playback::timestamp, val, worker(), and write_fill().
Referenced by audio_play_alsa_init().

|
static |
Definition at line 984 of file alsa.c.
References state_alsa_playback::buffer_size, EXIT_FAIL_AUDIO, exit_uv(), frame, state_alsa_playback::handle, log_level, LOG_LEVEL_DEBUG2, LOG_LEVEL_FATAL, LOG_LEVEL_WARNING, log_msg(), MOD_NAME, state_alsa_playback::non_interleaved, state_alsa_playback::playback_mode, state_alsa_playback::scratchpad, state, and write_samples().
Referenced by alsa_play_async_callback(), audio_play_alsa_put_frame(), worker(), and write_fill().

|
static |
Definition at line 156 of file alsa.c.
References LOG_LEVEL_INFO, and log_msg().
Referenced by audio_play_alsa_init().

|
static |
Definition at line 770 of file alsa.c.
Referenced by audio_play_alsa_init().
|
static |
Definition at line 722 of file alsa.c.
References desc.
Referenced by audio_play_alsa_init().
| REGISTER_MODULE | ( | alsa | , |
| & | aplay_alsa_info, | ||
| LIBRARY_CLASS_AUDIO_PLAYBACK | , | ||
| AUDIO_PLAYBACK_ABI_VERSION | ) |
|
static |
Definition at line 445 of file alsa.c.
References BUF_LEN_DEFAULT_MS, BUF_LEN_DEFAULT_SYNC_MS, CHECK_OK, get_commandline_param(), MS_TO_US, MSG, SYNC, and US_TO_MS.
Referenced by audio_play_alsa_reconfigure().

|
static |
Definition at line 190 of file alsa.c.
References audio_buffer_read(), audio_play_alsa_write_frame(), audio_desc::bps, audio_frame::bps, state_alsa_playback::buf, audio_desc::ch_count, audio_frame::ch_count, audio_frame::data, audio_frame::data_len, state_alsa_playback::desc, state_alsa_playback::last_audio_read, len, state_alsa_playback::lock, LOG_LEVEL_VERBOSE, LOG_LEVEL_WARNING, log_msg(), MOD_NAME, audio_desc::sample_rate, audio_frame::sample_rate, state_alsa_playback::sched_latency_ms, state_alsa_playback::should_exit_thread, and tv_diff().
Referenced by audio_play_alsa_reconfigure(), display_conference_run(), extract_port(), move_port_to_worker(), recompress_done(), recompress_get_num_active_ports(), recompress_process_async(), stop_grab_workers(), wait_for_frames(), and worker_get_num_active_ports().

|
static |
Definition at line 428 of file alsa.c.
References audio_play_alsa_write_frame(), audio_desc::bps, audio_frame::bps, state_alsa_playback::buffer_size, audio_desc::ch_count, audio_frame::ch_count, audio_frame::data, audio_frame::data_len, state_alsa_playback::desc, len, and audio_desc::sample_rate.
Referenced by audio_play_alsa_put_frame(), and audio_play_alsa_reconfigure().

|
static |
Definition at line 946 of file alsa.c.
References audio_desc::bps, audio_desc::ch_count, interleaved2noninterleaved(), SCRATCHPAD_SIZE, signed2unsigned(), and SYNC.
Referenced by audio_play_alsa_write_frame().

|
static |
Definition at line 1098 of file alsa.c.