在用av_frame_get_buffer()返回帧大小时,返回-22打开失败,查看函数如下:
int av_frame_get_buffer(AVFrame *frame, int align)
{
if (frame->format < 0)
return AVERROR(EINVAL);
if (frame->width > 0 && frame->height > 0)
return get_video_buffer(frame, align);
else if (frame->nb_samples > 0 && (frame->channel_layout || frame->channels > 0))
return get_audio_buffer(frame, align);
return AVERROR(EINVAL);
}
通过查看具体的函数实现,发现是我的*frame并没有设置format格式因此导致出错,因此在调用之前正确设置frame的相关参数即可成功。