你如何调整AVFrame的大小?

时间:2015-07-06 18:55:25

标签: c++ c ffmpeg

如何调整AVFrame的大小?我

以下是我目前正在做的事情:

AVFrame* frame = /*...*/;

int width = 600, height = 400;
AVFrame* resizedFrame = av_frame_alloc();

auto format = AVPixelFormat(frame->format);

auto buffer = av_malloc(avpicture_get_size(format, width, height) * sizeof(uint8_t));

avpicture_fill((AVPicture *)resizedFrame, (uint8_t*)buffer, format, width, height);

struct SwsContext* swsContext = sws_getContext(frame->width, frame->height, format,
                                               width,         height,         format,
                                               SWS_BILINEAR,  nullptr,        nullptr,        nullptr);

sws_scale(swsContext, frame->data, frame->linesize, 0, frame->height, resizedFrame->data, resizedFrame->linesize);

但是在此resizedFrames->widthheight仍然为0之后,AVFrame的内容看起来像垃圾,当我调用sws_scale时,我收到一条警告:数据未对齐。注意:我不想更改像素格式,我也不想硬编码它是什么。

1 个答案:

答案 0 :(得分:3)

所以,还有一些事情正在发生。

我认为如果您遵循这两个建议,您会发现重新缩放按预期工作,不会发出警告并且输出正确。质量可能不是很好,因为您尝试进行bilinear缩放。大多数人使用bicubic缩放(SWS_BICUBIC)。