ffmpeg | branch: master | James Almer <jamr...@gmail.com> | Tue Mar 4 18:42:42 2025 -0300| [5f5ab22639119bd841207b34c9c66c2323779635] | committer: James Almer
avfilter/vsrc_testsrc: add support for semi planar formats to yuvtestsrc Signed-off-by: James Almer <jamr...@gmail.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5f5ab22639119bd841207b34c9c66c2323779635 --- libavfilter/drawutils.c | 2 ++ libavfilter/vsrc_testsrc.c | 19 +++++++++++++++++++ tests/fate/filter-video.mak | 6 ++++++ tests/ref/fate/filter-yuvtestsrc-nv24 | 10 ++++++++++ tests/ref/fate/filter-yuvtestsrc-p410 | 10 ++++++++++ 5 files changed, 47 insertions(+) diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c index b86f666f1f..c3d4bb0a25 100644 --- a/libavfilter/drawutils.c +++ b/libavfilter/drawutils.c @@ -39,6 +39,8 @@ static int fill_map(const AVPixFmtDescriptor *desc, uint8_t *map) return AVERROR(EINVAL); av_assert0(desc->nb_components == 3 + !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA)); if (desc->flags & AV_PIX_FMT_FLAG_PLANAR) { + if (desc->nb_components != av_pix_fmt_count_planes(av_pix_fmt_desc_get_id(desc))) + return AVERROR(EINVAL); map[RED] = desc->comp[0].plane; map[GREEN] = desc->comp[1].plane; map[BLUE] = desc->comp[2].plane; diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index c842cacceb..71188e624a 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -1229,6 +1229,23 @@ static void yuvtest_put_pixel(uint8_t *dstp[4], int dst_linesizep[4], AV_WN16(&dstp[1][i*2 + j*dst_linesizep[1]], u); AV_WN16(&dstp[2][i*2 + j*dst_linesizep[2]], v); break; + case AV_PIX_FMT_NV24: + dstp[0][i + j*dst_linesizep[0] + 0] = y; + dstp[1][i*2 + j*dst_linesizep[1] + 0] = u; + dstp[1][i*2 + j*dst_linesizep[1] + 1] = v; + break; + case AV_PIX_FMT_NV42: + dstp[0][i + j*dst_linesizep[0] + 0] = y; + dstp[1][i*2 + j*dst_linesizep[1] + 1] = u; + dstp[1][i*2 + j*dst_linesizep[1] + 0] = v; + break; + case AV_PIX_FMT_P410: + case AV_PIX_FMT_P412: + case AV_PIX_FMT_P416: + AV_WN16(&dstp[0][i*2 + j*dst_linesizep[0] + 0], y << (16 - desc->comp[0].depth)); + AV_WN16(&dstp[1][i*4 + j*dst_linesizep[1] + 0], u << (16 - desc->comp[1].depth)); + AV_WN16(&dstp[1][i*4 + j*dst_linesizep[1] + 2], v << (16 - desc->comp[1].depth)); + break; } } @@ -1272,6 +1289,8 @@ static const enum AVPixelFormat yuvtest_pix_fmts[] = { AV_PIX_FMT_AYUV, AV_PIX_FMT_UYVA, AV_PIX_FMT_AYUV64, AV_PIX_FMT_VUYA, AV_PIX_FMT_VUYX, AV_PIX_FMT_XV48, AV_PIX_FMT_XV30LE, AV_PIX_FMT_V30XLE, AV_PIX_FMT_XV36, + AV_PIX_FMT_NV24, AV_PIX_FMT_NV42, + AV_PIX_FMT_P410, AV_PIX_FMT_P412, AV_PIX_FMT_P416, AV_PIX_FMT_NONE }; diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak index cdd34b72ea..6a333e8b93 100644 --- a/tests/fate/filter-video.mak +++ b/tests/fate/filter-video.mak @@ -124,6 +124,12 @@ fate-filter-yuvtestsrc-yuv444p: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC SCALE) += fate-filter-yuvtestsrc-yuv444p12 fate-filter-yuvtestsrc-yuv444p12: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1,format=yuv444p12,scale -pix_fmt yuv444p12le +FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC SCALE) += fate-filter-yuvtestsrc-nv24 +fate-filter-yuvtestsrc-nv24: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1 -pix_fmt nv24 + +FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC SCALE) += fate-filter-yuvtestsrc-p410 +fate-filter-yuvtestsrc-p410: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1,format=p410,scale -pix_fmt p410le + FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC) += fate-filter-yuvtestsrc-ayuv fate-filter-yuvtestsrc-ayuv: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1 -pix_fmt ayuv diff --git a/tests/ref/fate/filter-yuvtestsrc-nv24 b/tests/ref/fate/filter-yuvtestsrc-nv24 new file mode 100644 index 0000000000..1f4affd0cf --- /dev/null +++ b/tests/ref/fate/filter-yuvtestsrc-nv24 @@ -0,0 +1,10 @@ +#tb 0: 1/5 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 320x240 +#sar 0: 1/1 +0, 0, 0, 1, 230400, 0x62632a4f +0, 1, 1, 1, 230400, 0x62632a4f +0, 2, 2, 1, 230400, 0x62632a4f +0, 3, 3, 1, 230400, 0x62632a4f +0, 4, 4, 1, 230400, 0x62632a4f diff --git a/tests/ref/fate/filter-yuvtestsrc-p410 b/tests/ref/fate/filter-yuvtestsrc-p410 new file mode 100644 index 0000000000..68199b4a15 --- /dev/null +++ b/tests/ref/fate/filter-yuvtestsrc-p410 @@ -0,0 +1,10 @@ +#tb 0: 1/5 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 320x240 +#sar 0: 1/1 +0, 0, 0, 1, 460800, 0x2f2d2f95 +0, 1, 1, 1, 460800, 0x2f2d2f95 +0, 2, 2, 1, 460800, 0x2f2d2f95 +0, 3, 3, 1, 460800, 0x2f2d2f95 +0, 4, 4, 1, 460800, 0x2f2d2f95 _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".