20

What happens when you do a conversion from AV_SAMPLE_FMT_S16P to AV_SAMPLE_FMT_S16? How is the AVFrame structure going to contain the planar and non-planar data?

4

2 回答 2

52

AV_SAMPLE_FMT_S16P是平面有符号的 16 位音频,即每个样本 2 个字节,对于AV_SAMPLE_FMT_S16.

唯一的区别是AV_SAMPLE_FMT_S16每个通道的样本是交错的,即如果你有两个通道音频,那么样本缓冲区看起来像

c1 c2 c1 c2 c1 c2 c1 c2...

其中c1是通道 1 的样本,c2是通道 2 的样本。

而对于一帧平面音频,您将拥有类似

c1 c1 c1 c1 .... c2 c2 c2 c2 ..


现在它是如何存储在 AVFrame 中的:

  • 对于平面音频:

data[i] 将包含通道 i 的数据(假设通道 0 是第一个通道)。

但是,如果您的频道多于 8 个,则其余频道的数据可以在 AVFrame 的扩展数据属性中找到。

  • 对于非平面音频

data[0] 将以交错方式包含所有通道的数据。

于 2013-09-19T07:56:50.350 回答
0
  • AV_SAMPLE_FMT_S16P数据中进入 decoded_frame->extended_data 而在 AV_SAMPLE_FMT_S16 中数据进入 decoded_frame->data

  • AV_SAMPLE_FMT_S16P 数据是平面的

  • AV_SAMPLE_FMT_S16 数据是交错的,我想你知道是什么意思。

示例代码在基于 Sourceforge Libav 的软件中可用

于 2020-10-14T08:34:10.483 回答