[FFmpeg-cvslog] fftools/ffplay: constrain supported YUV color spaces
Niklas Haas
git at videolan.org
Fri Feb 9 22:14:46 EET 2024
ffmpeg | branch: master | Niklas Haas <git at haasn.dev> | Mon Feb 5 19:28:04 2024 +0100| [c619d20906d039060efbeaa822daf8e949f3ef24] | committer: Niklas Haas
fftools/ffplay: constrain supported YUV color spaces
SDL supports only these three matrices. Actually, it only supports these
three combinations: BT.601+JPEG, BT.601+MPEG, BT.709+MPEG, but we have
no way to restrict the specific *combination* of YUV range and YUV
colorspace with the current filter design.
See-Also: https://trac.ffmpeg.org/ticket/10839
Instead of an incorrect conversion result, trying to play a YCgCo file
with ffplay will simply error out with a "No conversion possible" error.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c619d20906d039060efbeaa822daf8e949f3ef24
---
fftools/ffplay.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 132f50a5a1..53e6fc0514 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -940,6 +940,13 @@ static int upload_texture(SDL_Texture **tex, AVFrame *frame)
return ret;
}
+static enum AVColorSpace sdl_supported_color_spaces[] = {
+ AVCOL_SPC_BT709,
+ AVCOL_SPC_BT470BG,
+ AVCOL_SPC_SMPTE170M,
+ AVCOL_SPC_UNSPECIFIED,
+};
+
static void set_sdl_yuv_conversion_mode(AVFrame *frame)
{
#if SDL_VERSION_ATLEAST(2,0,8)
@@ -1921,6 +1928,8 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
if ((ret = av_opt_set_int_list(filt_out, "pix_fmts", pix_fmts, AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN)) < 0)
goto fail;
+ if ((ret = av_opt_set_int_list(filt_out, "color_spaces", sdl_supported_color_spaces, AVCOL_SPC_UNSPECIFIED, AV_OPT_SEARCH_CHILDREN)) < 0)
+ goto fail;
last_filter = filt_out;
More information about the ffmpeg-cvslog
mailing list