由swr_get_delay想到的
来源:互联网 发布:vmware pro mac os x 编辑:程序博客网 时间:2024/05/21 03:28
最近在弄pcm的重采样,demo的代码里有一段,百思不得其解。然后忽然之间想开了。
里面的一段是这样的
/* generate synthetic audio */ fill_samples((double *)src_data[0], src_nb_samples, src_nb_channels, src_rate, &t); /* compute destination number of samples */ dst_nb_samples = av_rescale_rnd(swr_get_delay(swr_ctx, src_rate) + src_nb_samples, dst_rate, src_rate, AV_ROUND_UP); if (dst_nb_samples > max_dst_nb_samples) { av_freep(&dst_data[0]); ret = av_samples_alloc(dst_data, &dst_linesize, dst_nb_channels, dst_nb_samples, dst_sample_fmt, 1); if (ret < 0) break; max_dst_nb_samples = dst_nb_samples; } /* convert to destination format */ ret = swr_convert(swr_ctx, dst_data, dst_nb_samples, (const uint8_t **)src_data, src_nb_samples); if (ret < 0) { fprintf(stderr, "Error while converting\n"); goto end; }其中的
av_rescale_rnd 我知道啥意思,
swr_get_delay 我也知道是啥意思,(不懂的看函数注释)
那么
swr_get_delay(swr_ctx, src_rate) + src_nb_samples
代表的是什么意思,为什么这么写呢?swr_get_delay代表的是下一输入数据与下一输出数据之间的时间间隔。可以认为是函数的执行时间t0,函数执行的这段时间内假设音频源还是在产生数据。
产生 src_nb_samples 也需要一个时间 t1。
==,这样解释有点乱。
可以这样认为,这里写成这样是为了能实时处理。想想一下这个矛盾,这些音频数据,如果处理转换的时间大于产生的时间,那么 产生的时间就会越来越多,数据堆积。写成这样,就计算了一个大的buffer size,用于转换。这样就不会产生数据堆积了。
0 0
- 由swr_get_delay想到的
- 由本子想到的
- 由忧郁想到的
- 由电车男想到的
- 由MBV想到的
- 由“枣子”想到的
- 由 setMeidatime() 想到的
- 由ff想到的
- 由HelloWorld想到的
- 由观察想到的
- 由面试想到的
- 由自行车想到的......
- 由《变形金刚》想到的
- 由团队想到的.......
- 由PageRank想到的
- 由服务器想到的
- 由Signal想到的
- 由STL想到的
- MySQL ibdata1瘦身
- 单向链表的插入排序
- Matlab 中 arrayfun用法
- 补码的加减乘除和移位
- 第24篇 linux下布署apprtc(二)
- 由swr_get_delay想到的
- 51NOD 1065 最小正子段和
- Spring源码阅读(2)- bean解析初体验
- wn_遥远的村下
- (九)修改和删除部门功能模块的实现
- Adb学习
- iOS控件之UIResponder
- [120629]Muv-luv+Muv-luv Alternative【汉化硬盘版】[带全CG存档+攻略,+免安装+卸载+XP补丁+打开存档补丁] 1.gain论坛2.网易博客3.乐乎3.CSDN博
- Linux中umask函数/命令的用法