diff options
author | wm4 <wm4@nowhere> | 2019-10-20 19:36:40 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2019-10-20 19:41:18 +0200 |
commit | 62bd8da490bab7af1fcb80a6f944d670c752c5ab (patch) | |
tree | f698313f3ad779e355d6c4e0f8e723cd22b8f22c /video/sws_utils.c | |
parent | a495bfe373b696c13df85ade772d33611533de8a (diff) | |
download | mpv-62bd8da490bab7af1fcb80a6f944d670c752c5ab.tar.bz2 mpv-62bd8da490bab7af1fcb80a6f944d670c752c5ab.tar.xz |
sws_utils: provide function to check whether a format pair is supported
Normally, input and output are orthogonal. But zimg may gain image
formats not supported by FFmpeg, which means the conversion will only
work if zimg is used at all. This on the other hand, depends on whether
the other format is also supported by zimg. (For example, a later commit
adds RGB30 output to zimg. libswscale does not support this format. But
if you have P010 as input, which the zimg wrapper does not support at
all, the conversion won't work.)
This makes such a function needed; so add it.
Diffstat (limited to 'video/sws_utils.c')
-rw-r--r-- | video/sws_utils.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/video/sws_utils.c b/video/sws_utils.c index a310772280..9f1d0fd950 100644 --- a/video/sws_utils.c +++ b/video/sws_utils.c @@ -121,6 +121,21 @@ bool mp_sws_supported_format(int imgfmt) && sws_isSupportedOutput(av_format); } +bool mp_sws_supports_formats(struct mp_sws_context *ctx, + int imgfmt_out, int imgfmt_in) +{ +#if HAVE_ZIMG + if (ctx->allow_zimg && ctx->opts_allow_zimg) { + if (mp_zimg_supports_in_format(imgfmt_in) && + mp_zimg_supports_out_format(imgfmt_out)) + return true; + } +#endif + + return sws_isSupportedInput(imgfmt2pixfmt(imgfmt_in)) && + sws_isSupportedOutput(imgfmt2pixfmt(imgfmt_out)); +} + static int mp_csp_to_sws_colorspace(enum mp_csp csp) { // The SWS_CS_* macros are just convenience redefinitions of the |