我正在将 PIX_FMT_ARGB 格式的图片混合到 mp4 视频中。
一切都很好,除了输出图像的最后一个像素行被搞砸了,在大多数情况下最后一行是完全黑色的,有时还有其他颜色,它似乎在某种程度上取决于它运行的机器。
我绝对确定错误必须在 sws_scale 中,因为我在缩放之前和之后保存图像。输入图像没有错误,但是在 sws_scale() 之后我保存了 yuv 图像并且错误很明显。
这是一个例子:
原来的
Yuvfile(在 sws_scale 之后)
在 Yuvfile 的底部,您将看到黑色行。
这就是我进行缩放的方式(在官方 ffmpeg 示例之后,或多或少):
static int sws_flags = SWS_FAST_BILINEAR | SWS_ACCURATE_RND;
if (img_convert_ctx == NULL)
{
img_convert_ctx = sws_getContext( srcWidth, srcHeight,
PIX_FMT_ARGB,
codecContext->width, codecContext->height,
codecContext->pix_fmt,
sws_flags, NULL, NULL, NULL );
if (img_convert_ctx == NULL)
{
av_log(c, AV_LOG_ERROR, "%s","Cannot initialize the conversion context\n");
exit(1);
}
}
fill_image(tmp_picture, pic, pic_size, frame_count, ptr->srcWidth, ptr->srcHeight );
sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize,
0, srcHeight, picture->data, picture->linesize);
我还尝试了许多不同的 SWS_ 标志,但都产生了相同的结果。
这可能是 sws_scale 中的错误还是我做错了什么?我正在使用最新版本的 ffmpeg 库。