MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / start_jack

Function start_jack

libavdevice/jack.c:149–212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

147}
148
149static int start_jack(AVFormatContext *context)
150{
151 JackData *self = context->priv_data;
152 jack_status_t status;
153 int i, test;
154
155 /* Register as a JACK client, using the context url as client name. */
156 self->client = jack_client_open(context->url, JackNullOption, &status);
157 if (!self->client) {
158 av_log(context, AV_LOG_ERROR, "Unable to register as a JACK client\n");
159 return AVERROR(EIO);
160 }
161
162 sem_init(&self->packet_count, 0, 0);
163
164 self->sample_rate = jack_get_sample_rate(self->client);
165 self->ports = av_malloc_array(self->nports, sizeof(*self->ports));
166 if (!self->ports)
167 return AVERROR(ENOMEM);
168 self->buffer_size = jack_get_buffer_size(self->client);
169
170 /* Register JACK ports */
171 for (i = 0; i < self->nports; i++) {
172 char str[32];
173 snprintf(str, sizeof(str), "input_%d", i + 1);
174 self->ports[i] = jack_port_register(self->client, str,
175 JACK_DEFAULT_AUDIO_TYPE,
176 JackPortIsInput, 0);
177 if (!self->ports[i]) {
178 av_log(context, AV_LOG_ERROR, "Unable to register port %s:%s\n",
179 context->url, str);
180 jack_client_close(self->client);
181 return AVERROR(EIO);
182 }
183 }
184
185 /* Register JACK callbacks */
186 jack_set_process_callback(self->client, process_callback, self);
187 jack_on_shutdown(self->client, shutdown_callback, self);
188 jack_set_xrun_callback(self->client, xrun_callback, self);
189
190 /* Create time filter */
191 self->timefilter = ff_timefilter_new (1.0 / self->sample_rate, self->buffer_size, 1.5);
192 if (!self->timefilter) {
193 jack_client_close(self->client);
194 return AVERROR(ENOMEM);
195 }
196
197 /* Create FIFO buffers */
198 self->filled_pkts = av_fifo_alloc2(FIFO_PACKETS_NUM, sizeof(AVPacket), 0);
199 /* New packets FIFO with one extra packet for safety against underruns */
200 self->new_pkts = av_fifo_alloc2((FIFO_PACKETS_NUM + 1), sizeof(AVPacket), 0);
201 if (!self->new_pkts) {
202 jack_client_close(self->client);
203 return AVERROR(ENOMEM);
204 }
205 if ((test = supply_new_packets(self, context))) {
206 jack_client_close(self->client);

Callers 1

audio_read_headerFunction · 0.85

Calls 5

av_logFunction · 0.85
av_malloc_arrayFunction · 0.85
ff_timefilter_newFunction · 0.85
av_fifo_alloc2Function · 0.85
supply_new_packetsFunction · 0.85

Tested by

no test coverage detected