UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
playback.cpp File Reference
#include <memory>
#include <string_view>
#include "debug.h"
#include "module.h"
#include "audio/audio_filter.h"
#include "audio/types.h"
#include "audio/audio_playback.h"
#include "lib_common.h"
#include "utils/string_view_utils.hpp"
#include "utils/misc.h"
Include dependency graph for playback.cpp:

Go to the source code of this file.

Classes

struct  state_playback
 

Functions

static af_result_code configure (void *state, int in_bps, int in_ch_count, int in_sample_rate)
 
static void done (void *state)
 
static af_result_code filter (void *state, struct audio_frame **frame)
 
static void get_configured (void *state, int *bps, int *ch_count, int *sample_rate)
 
static af_result_code init (struct module *parent, const char *cfg, void **state)
 
static af_result_code parse_cfg (state_playback *s, std::string_view cfg)
 
 REGISTER_MODULE (playback, &audio_filter_playback, LIBRARY_CLASS_AUDIO_FILTER, AUDIO_FILTER_ABI_VERSION)
 
static void usage ()
 

Variables

static const struct audio_filter_info audio_filter_playback
 

Detailed Description

Author
Martin Piatka piatk.nosp@m.a@ce.nosp@m.snet..nosp@m.cz

Definition in file playback.cpp.

Function Documentation

◆ configure()

static af_result_code configure ( void * state,
int in_bps,
int in_ch_count,
int in_sample_rate )
static

Definition at line 105 of file playback.cpp.

107{
108 auto s = static_cast<state_playback *>(state);
109
110 s->bps = in_bps;
111 s->ch_count = in_ch_count;
112 s->sample_rate = in_sample_rate;
113
114 if (audio_playback_reconfigure(s->playback_dev.get(), s->bps * 8,
115 s->ch_count,
116 s->sample_rate) != TRUE) {
117 return AF_FAILURE;
118 }
119
120 return AF_OK;
121}
void ** state
@ AF_FAILURE
@ AF_OK
bool audio_playback_reconfigure(struct state_audio_playback *s, int quant_samples, int channels, int sample_rate)
#define TRUE

References AF_FAILURE, AF_OK, audio_playback_reconfigure(), state_playback::bps, state, and TRUE.

Referenced by filter().

Here is the call graph for this function:

◆ done()

static void done ( void * state)
static

Definition at line 123 of file playback.cpp.

123 {
124 auto s = static_cast<state_playback *>(state);
125
126 delete s;
127}

References state.

◆ filter()

static af_result_code filter ( void * state,
struct audio_frame ** frame )
static

Definition at line 139 of file playback.cpp.

139 {
140 auto s = static_cast<state_playback *>(state);
141
142 struct message *msg;
143 while ((msg = check_message(s->mod.get()))) {
144 const char *text = ((msg_universal *) msg)->text;
145 if(parse_cfg(s, text) != AF_OK){
147 continue;
148 }
149
151 }
152
153 auto f = *frame;
154
155 if(f->bps != s->bps || f->ch_count != s->ch_count || f->sample_rate != s->sample_rate){
156 if(configure(state, f->bps, f->ch_count, f->sample_rate) != AF_OK){
157 return AF_MISCONFIGURED;
158 }
159 }
160
161 audio_playback_put_frame(s->playback_dev.get(), f);
162
163 return AF_OK;
164}
struct video_frame * frame
@ AF_MISCONFIGURED
void audio_playback_put_frame(struct state_audio_playback *s, const struct audio_frame *frame)
void free_message(struct message *msg, struct response *r)
struct response * new_response(int status, const char *text)
struct message * check_message(struct module *mod)
#define RESPONSE_OK
Definition messaging.h:57
#define RESPONSE_BAD_REQUEST
Definition messaging.h:60
static af_result_code configure(void *state, int in_bps, int in_ch_count, int in_sample_rate)
Definition playback.cpp:105
static af_result_code parse_cfg(state_playback *s, std::string_view cfg)
Definition playback.cpp:80
struct msghdr msg

References AF_MISCONFIGURED, AF_OK, audio_playback_put_frame(), check_message(), configure(), frame, free_message(), msg, new_response(), parse_cfg(), RESPONSE_BAD_REQUEST, RESPONSE_OK, and state.

Here is the call graph for this function:

◆ get_configured()

static void get_configured ( void * state,
int * bps,
int * ch_count,
int * sample_rate )
static

Definition at line 129 of file playback.cpp.

131{
132 auto s = static_cast<state_playback *>(state);
133
134 if(bps) *bps = s->bps;
135 if(ch_count) *ch_count = s->ch_count;
136 if(sample_rate) *sample_rate = s->sample_rate;
137}
int int int sample_rate

References state_playback::bps, sample_rate, and state.

◆ init()

static af_result_code init ( struct module * parent,
const char * cfg,
void ** state )
static

Definition at line 95 of file playback.cpp.

95 {
96 auto s = std::make_unique<state_playback>(parent);
97
98 auto ret = parse_cfg(s.get(), cfg);
99 if(ret == AF_OK)
100 *state = s.release();
101
102 return ret;
103};
const char * parent
Definition settings.cpp:198

References AF_OK, parent, parse_cfg(), and state.

Here is the call graph for this function:

◆ parse_cfg()

static af_result_code parse_cfg ( state_playback * s,
std::string_view cfg )
static

Definition at line 80 of file playback.cpp.

80 {
81 auto tok = tokenize(cfg, ':');
82 if(tok.empty() || tok == "help"){
83 usage();
84 return AF_HELP_SHOWN;
85 }
86
87 auto dev = std::string(tok);
88 auto dev_cfg = std::string(tokenize(cfg, ':'));
89
90 int ret = audio_playback_init(dev.c_str(), dev_cfg.c_str(), out_ptr(s->playback_dev));
91
92 return ret == 0 ? AF_OK : AF_FAILURE;
93}
@ AF_HELP_SHOWN
int audio_playback_init(const char *device, const char *cfg, struct state_audio_playback **state)
Definition misc.h:94
static void usage()
Definition playback.cpp:74
std::string_view tokenize(std::string_view &str, char delim, char quot)
Tokenizer for string_view.
Playback_dev_uniq playback_dev
Definition playback.cpp:70

References AF_FAILURE, AF_HELP_SHOWN, AF_OK, audio_playback_init(), state_playback::playback_dev, tokenize(), and usage().

Referenced by filter(), and init().

Here is the call graph for this function:

◆ REGISTER_MODULE()

REGISTER_MODULE ( playback ,
& audio_filter_playback,
LIBRARY_CLASS_AUDIO_FILTER ,
AUDIO_FILTER_ABI_VERSION  )

◆ usage()

static void usage ( void )
static

Definition at line 74 of file playback.cpp.

74 {
75 printf("Plays audio using an UltraGrid playback device:\n\n");
76 printf("playback usage:\n");
77 printf("\tplayback:<playback dev>:<dev config>\n\n");
78}

Referenced by parse_cfg().

Variable Documentation

◆ audio_filter_playback

const struct audio_filter_info audio_filter_playback
static
Initial value:
= {
.name = "playback",
.init = init,
.done = done,
.configure = configure,
.get_configured_in = get_configured,
.get_configured_out = get_configured,
.filter = filter,
}
static af_result_code filter(void *state, struct audio_frame **frame)
Definition playback.cpp:139
static void get_configured(void *state, int *bps, int *ch_count, int *sample_rate)
Definition playback.cpp:129
static af_result_code init(struct module *parent, const char *cfg, void **state)
Definition playback.cpp:95
static void done(void *state)
Definition playback.cpp:123

Definition at line 166 of file playback.cpp.

166 {
167 .name = "playback",
168 .init = init,
169 .done = done,
170 .configure = configure,
171 .get_configured_in = get_configured,
172 .get_configured_out = get_configured,
173 .filter = filter,
174};