diff options
author | Niklas Haas <git@haasn.dev> | 2024-02-05 19:28:04 +0100 |
---|---|---|
committer | Niklas Haas <git@haasn.dev> | 2024-02-09 21:02:08 +0100 |
commit | c619d20906d039060efbeaa822daf8e949f3ef24 (patch) | |
tree | fcde7aa8dfefe8886186e60e6242ceec3cfa1ca8 | |
parent | 75f4cb81de6437ee23ae30a201f914b78b618d75 (diff) | |
download | ffmpeg-c619d20906d039060efbeaa822daf8e949f3ef24.tar.gz |
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.
-rw-r--r-- | fftools/ffplay.c | 9 |
1 files changed, 9 insertions, 0 deletions
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; |