概述
在ffmpeg音频编码中,有些编码器支持任意数量的音频样本(如,ALAW),还有些则仅支持固定长度的音频样本(如,AAC)。这些区别则可以通过codec->capabilities标记进行解读。
AV_CODEC_CAP_VARIABLE_FRAME_SIZE
如果编码器的capabilities字段含有该标记,则表示输入编码器的样本数量是可变的。否则则必须依照编码器的frame_size字段填充样本个数。
if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
user_nb_samples = avctx->frame_size;
else
user_nb_samples = 1234; //value defined by user
这里补充说下avctx->frame_size
,该字段表示单个通道包含的样本个数,因此总的输入大小应该为avctx->frame_size
* channels * per_frame_bytes(每个样本占用的字节大小,比如S16LE个数样本:2字节)。
AV_CODEC_CAP_SMALL_LAST_FRAME
该字段用于标注,编码器最后一帧可以送样本数小于avctx->frame_size
的buffer,以防止编码后的音频被截断。
其他
其它字段若有遇到再慢慢补充。