Audio FFMPEG理解AVFrame::linesize(音频)

Audio FFMPEG理解AVFrame::linesize(音频),audio,ffmpeg,Audio,Ffmpeg,根据AVFrame的双重表示,对于音频,lineSize是每个平面的字节大小,只能设置lineSize[0]。但是,我不确定lineszie[0]是保留每平面缓冲区大小还是保留完整的缓冲区大小,我们必须将其除以通道数才能获得每平面缓冲区大小 例如,当我打电话时 int data\u size=av\u samples\u get\u buffer\u size(NULL,idesirednofcchannels,iAudioSamples,(AVSampleFormat)iDesiredForm

根据AVFrame的双重表示,对于音频,lineSize是每个平面的字节大小,只能设置lineSize[0]。但是,我不确定lineszie[0]是保留每平面缓冲区大小还是保留完整的缓冲区大小,我们必须将其除以通道数才能获得每平面缓冲区大小

例如,当我打电话时
int data\u size=av\u samples\u get\u buffer\u size(NULL,idesirednofcchannels,iAudioSamples,(AVSampleFormat)iDesiredFormat,0)对于iDesiredNoOfChannels=2,iAudioSamples=1024&iDesiredFormat=AV\U SAMPLE\U FMT\U FLTP data\U size=8192。非常简单,因为每个示例是4个字节,并且因为有2个通道,所以总内存将是(1024*4*2)个字节。因此,平面音频的线宽[0]应为4096。数据[0]和数据[1]的大小应分别为4096。但是,pFrame->lineSize[0]给出的是8192。因此,要获得每个平面的大小,我必须执行pFrame->lineSize[0]/pFrame->channels。这种行为是否与文档所暗示的有所不同,或者我对文档的理解有误。

这是一个老问题,但我想我还是会为那些可能有同样想法的人回答这个问题

在所有音频AVFrames中,只能设置linesize[0],并且它们的大小必须相同。你不应该使用linesize[1],等等。我不知道他们为什么选择这样做,因为它与视频帧不一致,但不管怎样。请记住,交错还是仅平面线宽[0]很重要,因此必须除以平面的通道数