PulseAudio中插件module-loopback的latency延迟的计算方法
来源:互联网 发布:装饰定额预算软件 编辑:程序博客网 时间:2024/06/05 07:10
<pre name="code" class="cpp">1, module-loopback播放时 ,pulse audio基本的插件连接情况如下图所示
2,module-loopback中latency的计算如下:
a: source中的latency计算:
pa_asyncmsgq_send(u->source_output->source->asyncmsgq, PA_MSGOBJECT(u->source_output), SOURCE_OUTPUT_MESSAGE_LATENCY_SNAPSHOT, NULL, 0, NULL);
其中SOURCE_OUTPUT_MESSAGE_LATENCY_SNAPSHOT的处理逻辑又如下:
而pa_source_get_latency_within_thread调用process_msg(PA_SOURCE_MESSAGE_GET_LATENCY).
作为例子,module-null-source的计算如下所示:
b: sink中的latency计算(与source基本类似)
pa_asyncmsgq_send(u->sink_input->sink->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_LATENCY_SNAPSHOT, NULL, 0, NULL);
其中的pa_sink_get_latency_within_thread调用process_msg(PA_SINK_MESSAGE_GET_LATENCY). 作为例子,module-null-sink的PA_SINK_MESSAGE_GET_LATENCY处理如下所示:
c: loopback插件本身中的latency的计算,其本身又分为3部分:
一个是source output中队列的缓存:
length = pa_memblockq_get_length(u->source_output->thread_info.delay_memblockq);
一个是sink input总队列的缓存(注意:此计算方式包括了loopback中队列的缓存):
length = pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq); u->latency_snapshot.sink_input_buffer = pa_memblockq_get_length(u->memblockq) + (u->sink_input->thread_info.resampler ? pa_resampler_request(u->sink_input->thread_info.resampler, length) : length);再有一个是计算收发平衡的点:
buffer = u->latency_snapshot.sink_input_buffer + u->latency_snapshot.source_output_buffer; if (u->latency_snapshot.recv_counter <= u->latency_snapshot.send_counter) buffer += (size_t) (u->latency_snapshot.send_counter - u->latency_snapshot.recv_counter); else buffer += PA_CLIP_SUB(buffer, (size_t) (u->latency_snapshot.recv_counter - u->latency_snapshot.send_counter)); buffer_latency = pa_bytes_to_usec(buffer, &u->sink_input->sample_spec);
如上, 总共的latency的计算,就是将a, b , c三部分相加即可。
0 0
- PulseAudio中插件module-loopback的latency延迟的计算方法
- PulseAudio 中插件module-loopback的基本分析
- pulseaudio使用过程中遇到的问题
- Imagination 关于motion to photon latency延迟的解决方案 --VR
- 吞吐量(throughput)与延迟(latency)的理解
- Totem Movie 播放插件 PPS 虚拟机的pulseaudio 优先级
- pulseaudio的交叉编译
- (Interrupt Latency) 中断延迟
- Android Audio延迟(latency)
- (Interrupt Latency) 中断延迟
- (Interrupt Latency) 中断延迟
- CPU 的Cache 和Latency
- CPU 的 cache 和 latency
- 关于storm的complete latency
- lag与latency的区别
- MDX中常见的计算方法
- 组织机构中校验码的计算方法
- 264中 POC的计算方法
- 用android:clipChildren来实现红心变大特效
- android Mediaplayer各种属性和方法简单介绍
- c api example
- 图的遍历:BFS和DFS
- 双网卡的回环测试
- PulseAudio中插件module-loopback的latency延迟的计算方法
- HDU ACM 1287 破译密码
- php调用c语言编写的so动态库
- 几种常见的排序算法对比
- iOS 推送(证书的生成、客户端的开发、服务端的开发)
- mysql 删除嵌套查询的替代方式
- android中webview的使用
- 学习总结(三)
- jenkins中Check-out Strategy的各选项测试