如何调整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->width
和height
仍然为0之后,AVFrame的内容看起来像垃圾,当我调用sws_scale
时,我收到一条警告:数据未对齐。注意:我不想更改像素格式,我也不想硬编码它是什么。
答案 0 :(得分:3)
所以,还有一些事情正在发生。
我认为如果您遵循这两个建议,您会发现重新缩放按预期工作,不会发出警告并且输出正确。质量可能不是很好,因为您尝试进行bilinear缩放。大多数人使用bicubic缩放(SWS_BICUBIC)。