deprecated pixel format used, make sure you did set range correctly
udp传输模式可能报这个警告,
方法1:
ffmpeg - swscaler warning : deprecated pixel format used - Stack Overflow
AVPixelFormat pixFormat;
switch (_videoStream->codec->pix_fmt) {
case AV_PIX_FMT_YUVJ420P :
pixFormat = AV_PIX_FMT_YUV420P;
break;
case AV_PIX_FMT_YUVJ422P :
pixFormat = AV_PIX_FMT_YUV422P;
break;
case AV_PIX_FMT_YUVJ444P :
pixFormat = AV_PIX_FMT_YUV444P;
break;
case AV_PIX_FMT_YUVJ440P :
pixFormat = AV_PIX_FMT_YUV440P;
break;
default:
pixFormat = _videoStream->codec->codec->pix_fmts;
break;
}
方法2:
这个警告并不会导致解码速度变慢,所以无关痛痒。
报这个警告的原因是因为源视频,或者想生成的视频的格式是yuvj×××,这种格式已被弃用。将这样格式转化为可用的格式就行了。
原因就在src或aim这里
SwsContext* sws_ctx = sws_getContext(src_width, src_height,
src,
dst_width, dst_height,
AV_PIX_FMT_YUYV422,
aim,
NULL,
NULL,
NULL);
下面我只说src这里怎么操作:
AVPixelFormat ConvertDeprecatedFormat(enum AVPixelFormat format)
{
switch (format)
{
case AV_PIX_FMT_YUVJ420P:
return AV_PIX_FMT_YUV420P;
break;
case AV_PIX_FMT_YUVJ422P:
return AV_PIX_FMT_YUV422P;
break;
case AV_PIX_FMT_YUVJ444P:
return AV_PIX_FMT_YUV444P;
break;
case AV_PIX_FMT_YUVJ440P:
return AV_PIX_FMT_YUV440P;
break;
default:
return format;
break;
}
}
用这个函数,先把yuvj×××这个格式转化为yuv格式,然后再使用sws_getContext()的时候就没问题了。
原文链接:https://blog.csdn.net/qq_39203457/article/details/105002410
也可以参考: