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ライブラリの最新バージョンを使用しています。