Lines Matching defs:pd
115 PulseData *pd = s->priv_data;
117 if (pd->mainloop)
118 pa_threaded_mainloop_stop(pd->mainloop);
120 if (pd->stream)
121 pa_stream_unref(pd->stream);
122 pd->stream = NULL;
124 if (pd->context) {
125 pa_context_disconnect(pd->context);
126 pa_context_unref(pd->context);
128 pd->context = NULL;
130 if (pd->mainloop)
131 pa_threaded_mainloop_free(pd->mainloop);
132 pd->mainloop = NULL;
134 ff_timefilter_destroy(pd->timefilter);
135 pd->timefilter = NULL;
142 PulseData *pd = s->priv_data;
149 pd->sample_rate,
150 pd->channels };
156 pa_channel_map_init_extend(&cmap, pd->channels, PA_CHANNEL_MAP_WAVEEX);
165 if (pd->fragment_size == -1) {
167 attr.fragsize = pa_frame_size(&ss) * (pd->sample_rate / 20);
169 attr.fragsize = pd->fragment_size;
175 if (!(pd->mainloop = pa_threaded_mainloop_new())) {
180 if (!(pd->context = pa_context_new(pa_threaded_mainloop_get_api(pd->mainloop), pd->name))) {
185 pa_context_set_state_callback(pd->context, context_state_cb, pd);
187 if (pa_context_connect(pd->context, pd->server, 0, NULL) < 0) {
189 return AVERROR(pa_context_errno(pd->context));
192 pa_threaded_mainloop_lock(pd->mainloop);
194 if (pa_threaded_mainloop_start(pd->mainloop) < 0) {
202 state = pa_context_get_state(pd->context);
208 ret = AVERROR(pa_context_errno(pd->context));
213 pa_threaded_mainloop_wait(pd->mainloop);
216 if (!(pd->stream = pa_stream_new(pd->context, pd->stream_name, &ss, &cmap))) {
217 ret = AVERROR(pa_context_errno(pd->context));
221 pa_stream_set_state_callback(pd->stream, stream_state_cb, pd);
222 pa_stream_set_read_callback(pd->stream, stream_request_cb, pd);
223 pa_stream_set_write_callback(pd->stream, stream_request_cb, pd);
224 pa_stream_set_latency_update_callback(pd->stream, stream_latency_update_cb, pd);
226 ret = pa_stream_connect_record(pd->stream, device, &attr,
232 ret = AVERROR(pa_context_errno(pd->context));
239 state = pa_stream_get_state(pd->stream);
245 ret = AVERROR(pa_context_errno(pd->context));
250 pa_threaded_mainloop_wait(pd->mainloop);
254 queried_attr = pa_stream_get_buffer_attr(pd->stream);
259 pd->fragment_size = queried_attr->fragsize;
260 pd->pa_frame_size = pa_frame_size(&ss);
262 pa_threaded_mainloop_unlock(pd->mainloop);
267 st->codecpar->sample_rate = pd->sample_rate;
268 st->codecpar->ch_layout.nb_channels = pd->channels;
271 pd->timefilter = ff_timefilter_new(1000000.0 / pd->sample_rate,
272 pd->fragment_size / pd->pa_frame_size, 1.5E-6);
274 if (!pd->timefilter) {
282 pa_threaded_mainloop_unlock(pd->mainloop);
290 PulseData *pd = s->priv_data;
299 pa_threaded_mainloop_lock(pd->mainloop);
301 CHECK_DEAD_GOTO(pd, ret, unlock_and_fail);
303 while (pos < pd->fragment_size) {
306 r = pa_stream_peek(pd->stream, &read_data, &read_length);
310 pa_threaded_mainloop_wait(pd->mainloop);
311 CHECK_DEAD_GOTO(pd, ret, unlock_and_fail);
315 r = pa_stream_drop(pd->stream);
319 if (av_new_packet(pkt, pd->fragment_size) < 0) {
325 pa_operation_unref(pa_stream_update_timing_info(pd->stream, NULL, NULL));
327 if (pa_stream_get_latency(pd->stream, &latency, &negative) >= 0) {
339 pa_stream_drop(pd->stream);
346 pa_stream_drop(pd->stream);
350 pa_threaded_mainloop_unlock(pd->mainloop);
354 if (pd->wallclock)
355 pkt->pts = ff_timefilter_update(pd->timefilter, dts, pd->last_period);
356 pd->last_period = pkt->size / pd->pa_frame_size;
362 pa_threaded_mainloop_unlock(pd->mainloop);