diff options
author | Niklas Haas <git@haasn.dev> | 2024-12-02 13:08:52 +0100 |
---|---|---|
committer | Niklas Haas <git@haasn.dev> | 2024-12-04 11:38:47 +0100 |
commit | 2f95bc3cb3c0d2e88e33b219409e5ca2719f0c73 (patch) | |
tree | e98b42941517a664928f57bcd13be222165987c7 /libswscale/utils.c | |
parent | 79452d382f7b55f258c17f8ed8a51feb5411713a (diff) | |
download | ffmpeg-2f95bc3cb3c0d2e88e33b219409e5ca2719f0c73.tar.gz |
swscale/utils: disable full_chr_h_input optimization for odd width
The basic problem here is that the rgb*ToUV_half_* functions hard-code a
bilinear downsample from src[i] + src[i+1], with no bounds check on the i+1
access.
Due to the signature of the function, we cannot easily plumb the "true" width
into the function body to perform a bounds check. Similarly, we cannot easily
pre-pad the input because it is typically reading from the (const) input
frame, which would require a full memcpy to pad. Either of these solutions are
more trouble than the feature is worth, so just disable it on odd input sizes.
Fixes: use of uninitialized value
Fixes: ticket #11265
Signed-off-by: Niklas Haas <git@haasn.dev>
Sponsored-by: Sovereign Tech Fund
Diffstat (limited to 'libswscale/utils.c')
-rw-r--r-- | libswscale/utils.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libswscale/utils.c b/libswscale/utils.c index 26ea6062a0..32f90e366e 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -1535,7 +1535,7 @@ av_cold int ff_sws_init_single_context(SwsContext *sws, SwsFilter *srcFilter, /* drop every other pixel for chroma calculation unless user * wants full chroma */ - if (isAnyRGB(srcFormat) && !(flags & SWS_FULL_CHR_H_INP) && + if (isAnyRGB(srcFormat) && !(srcW & 1) && !(flags & SWS_FULL_CHR_H_INP) && srcFormat != AV_PIX_FMT_RGB8 && srcFormat != AV_PIX_FMT_BGR8 && srcFormat != AV_PIX_FMT_RGB4 && srcFormat != AV_PIX_FMT_BGR4 && srcFormat != AV_PIX_FMT_RGB4_BYTE && srcFormat != AV_PIX_FMT_BGR4_BYTE && |