[Libav-user] can swscale handle AV_PIX_FMT_YUV444P input/output?
Andrew Randrianasulu
randrianasulu at gmail.com
Wed Sep 4 23:27:59 EEST 2024
https://www.cinelerra-gg.org/bugtracker/view.php?id=665
we run into strange problem:
if cinelerra-gg uses RGBA-8 format internally we can process yuv444p
(full chroma) test sample made with
ffmpeg -f lavfi -i yuvtestsrc -frames 1 -color_range 2
/dev/shm/yuv-test.y4m
by rendering it to y4m (yuv444p pixel format) and then comparing two files
does not show big difference.
Yet if we switch our pipeline to yuv (8 bit, 4:4:4) result is totally off
(in YUVviewer) for same y4m render.
I looked in libswscale and can't see much handling for specifically
guest at slax:~/botva/src/mplayer/ffmpeg/libswscale$ grep "AV_PIX_FMT_YUV444P"
*.c
input.c: case AV_PIX_FMT_YUV444P9LE:
input.c: case AV_PIX_FMT_YUV444P10LE:
input.c: case AV_PIX_FMT_YUV444P12LE:
input.c: case AV_PIX_FMT_YUV444P14LE:
input.c: case AV_PIX_FMT_YUV444P16LE:
input.c: case AV_PIX_FMT_YUV444P9BE:
input.c: case AV_PIX_FMT_YUV444P10BE:
input.c: case AV_PIX_FMT_YUV444P12BE:
input.c: case AV_PIX_FMT_YUV444P14BE:
input.c: case AV_PIX_FMT_YUV444P16BE:
input.c: case AV_PIX_FMT_YUV444P9LE:
input.c: case AV_PIX_FMT_YUV444P10LE:
input.c: case AV_PIX_FMT_YUV444P12LE:
input.c: case AV_PIX_FMT_YUV444P14LE:
input.c: case AV_PIX_FMT_YUV444P16LE:
input.c: case AV_PIX_FMT_YUV444P9BE:
input.c: case AV_PIX_FMT_YUV444P10BE:
input.c: case AV_PIX_FMT_YUV444P12BE:
input.c: case AV_PIX_FMT_YUV444P14BE:
input.c: case AV_PIX_FMT_YUV444P16BE:
swscale_unscaled.c: if ((srcFormat == AV_PIX_FMT_YUV444P || srcFormat ==
AV_PIX_FMT_YUVA444P) &&
swscale_unscaled.c: if (dstFormat == AV_PIX_FMT_YUV444P &&
swscale_unscaled.c: IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat,
AV_PIX_FMT_YUV444P9) ||
swscale_unscaled.c: IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat,
AV_PIX_FMT_YUV444P10) ||
swscale_unscaled.c: IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat,
AV_PIX_FMT_YUV444P12) ||
swscale_unscaled.c: IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat,
AV_PIX_FMT_YUV444P14) ||
swscale_unscaled.c: IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat,
AV_PIX_FMT_YUV444P16))
utils.c: [AV_PIX_FMT_YUV444P] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P16LE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P16BE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P9BE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P9LE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P10BE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P10LE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P12BE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P12LE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P14BE] = { 1, 1 },
utils.c: [AV_PIX_FMT_YUV444P14LE] = { 1, 1 },
utils.c: *format = AV_PIX_FMT_YUV444P;
utils.c: case AV_PIX_FMT_YUVA444P: return AV_PIX_FMT_YUV444P;
utils.c: case AV_PIX_FMT_YUVA444P9BE: return AV_PIX_FMT_YUV444P9;
utils.c: case AV_PIX_FMT_YUVA444P9LE: return AV_PIX_FMT_YUV444P9;
utils.c: case AV_PIX_FMT_YUVA444P10BE: return AV_PIX_FMT_YUV444P10;
utils.c: case AV_PIX_FMT_YUVA444P10LE: return AV_PIX_FMT_YUV444P10;
utils.c: case AV_PIX_FMT_YUVA444P16BE: return AV_PIX_FMT_YUV444P16;
utils.c: case AV_PIX_FMT_YUVA444P16LE: return AV_PIX_FMT_YUV444P16;
it seems input.c does not deal well with specifically this format? There is
no default case in switches ...
in swscale_unscaled I also mostly see specific yuv-nv12 wrappers, not
yuv444 standalone.
util.c is again declares what to do with >8 bpc yuv, mostly.
did I miss something important?
our ffmpeg mappings live at
https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blob;f=cinelerra-5.1/cinelerra/ffmpeg.C;h=9b8832dd718c94dd8b815edc7eb5c9d732953dd6;hb=HEAD
ps: non-ffmpeg png writer seems to output nearly exactly same png if I set
cingg to yuv8 or rgba8 internal processing. So, for same input test file as
long as libswscale did its job once on input - pipeline itself does not
ruin video, as long as there was no second swscale ? unfortunately we do
not have direct yuv writer, so at the end our yuv444 transformed into rgba
for saving into tga or png or ppm by our routines.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20240904/9d951540/attachment.htm>
More information about the Libav-user
mailing list