从AV_SAMPLE_FMT_S16P转换为AV_SAMPLE_FMT_S16时会发生什么? AVFrame结构如何包含平面和非平面数据?
答案 0 :(得分:36)
AV_SAMPLE_FMT_S16P
是平面带符号的16位音频,即每个样本2个字节,对于AV_SAMPLE_FMT_S16
是相同的。
唯一的区别是每个通道的AV_SAMPLE_FMT_S16
个样本都是交错的,即如果你有两个通道音频,则样本缓冲区看起来像
c1 c1 c2 c2 c1 c1 c2 c2 ...
其中c1
是channel1的示例,c2
是channel2的示例。
而对于一帧平面音频,您将拥有类似
的内容c1 c1 c1 c1 .... c2 c2 c2 c2 ..
现在如何将其存储在AVFrame中:
data [i]将包含通道i的数据(假设通道0是第一通道)。
但是如果你有多于8的频道,那么可以在AVFrame的extended_data属性中找到其余频道的数据。
data [0]将以交错方式包含所有通道的数据。
答案 1 :(得分:0)
在AV_SAMPLE_FMT_S16P
中,数据来自解码帧-> extended_data,而在AV_SAMPLE_FMT_S16中,数据来自解码帧->数据
在AV_SAMPLE_FMT_S16P
中,数据是平面的
在AV_SAMPLE_FMT_S16
中,数据是交错的,我想您知道什么意思。
基于Sourceforge Libav的软件中提供了示例代码