Je muxage des images au format PIX_FMT_ARGB dans une vidéo mp4. Tout cela fonctionne bien, sauf que la dernière rangée de pixels de l'image sortante est foutue, dans la plupart des cas, la dernière rangée est complètement noire, parfois il y a d'autres couleurs, cela semble dépendant de la machine sur laquelle elle fonctionne .sws_scale remonte la dernière ligne de pixels en codage x264 mp4 plus petit
Je suis absolument sûr que l'erreur doit être dans sws_scale, car je sauvegarde les images avant et après la mise à l'échelle. Les images d'entrée n'ont pas l'erreur, mais après le sws_scale() je sauvegarde l'image yuv et l'erreur est apparente.
Voici un exemple:
originale
Yuvfile (après sws_scale)
Au bas de la Yuvfile, vous verra la rangée noire.
Voilà comment je fais la mise à l'échelle (il est après les exemples officiels de ffmpeg, plus ou moins):
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);
J'ai essayé un certain nombre de différents drapeaux de SWS_, mais tous donnent le même résultat.
Cela peut-il être un bogue dans sws_scale ou est-ce que je fais quelque chose de mal? J'utilise la dernière version des bibliothèques ffmpeg.
Oui, en effet. Suspecter tout :) – d33pika