gpt4 book ai didi

audio - FFMPEG 理解 AVFrame::linesize(音频)

转载 作者:行者123 更新时间:2023-12-04 18:01:48 25 4
gpt4 key购买 nike

根据 AVFrame 的文档,对于音频,lineSize 是每个平面的字节大小,并且只能设置 linesize[0]。但是,我不确定 lineszie[0] 是否持有每个平面的缓冲区大小,或者它是否是完整的缓冲区大小,我们必须将它除以 channel 数以获得每个平面的缓冲区大小。

例如,当我打电话 int data_size = av_samples_get_buffer_size(NULL, iDesiredNoOfChannels, iAudioSamples, (AVSampleFormat)iDesiredFormat, 0) ; 对于 iDesiredNoOfChannels = 2, iAudioSamples = 1024 & iDesiredFormat = AV_SAMPLE_FMT_FLTP data_size=8192非常简单,因为每个样本是 4 个字节,并且由于有 2 个 channel ,总内存将为 (1024 * 4 * 2) 个字节。因此,对于平面音频,lineSize[0] 应为 4096。 data[0] & data[1] 的大小应该都是 4096。但是,pFrame->lineSize[0] 给出的是 8192。所以要获得每个平面的大小,我必须执行 pFrame->lineSize[0]/pFrame -> channel 。这种行为是否与文档所建议的不同,或者我对文档的理解有误。

最佳答案

老问题,但我想我还是会为那些可能想知道同样事情的人回答这个问题。

在所有的音频AVFrame中,只能设置linesize[0],并且都要求大小相同。您不应该使用 linesize[1] 等。我不知道他们为什么选择这样做,因为它与视频帧不一致,但无论如何。请记住,交错或平面仅 linesize[0] 很重要,因此您必须除以平面的 channel 数。

关于audio - FFMPEG 理解 AVFrame::linesize(音频),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34088106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com