summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Boxer <boxerab@protonmail.com>2022-09-27 11:35:14 -0400
committerDudemanguy <random342@airmail.cc>2022-10-26 18:41:47 +0000
commit8314c907ab5c0a94912dc09d69638a3a4cd7dd49 (patch)
treee03fc46794a469ae2890a3d30f35bd31495b624b
parentfbcd9c140fb3fc5435c8c0a0f3189e4d972762ed (diff)
downloadmpv-8314c907ab5c0a94912dc09d69638a3a4cd7dd49.tar.bz2
mpv-8314c907ab5c0a94912dc09d69638a3a4cd7dd49.tar.xz
build_image_converter - use full image format list to create hw_upload
currently we only try for the first format in the list
-rw-r--r--filters/f_autoconvert.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/filters/f_autoconvert.c b/filters/f_autoconvert.c
index a94e3f8cf5..b55673b448 100644
--- a/filters/f_autoconvert.c
+++ b/filters/f_autoconvert.c
@@ -195,26 +195,27 @@ static bool build_image_converter(struct mp_autoconvert *c, struct mp_log *log,
bool hw_to_sw = !imgfmt_is_sw && dst_have_sw;
if (dst_all_hw && num_fmts > 0) {
- // We can probably use this! Very lazy and very approximate.
- struct mp_hwupload *upload = mp_hwupload_create(conv, fmts[0]);
- if (upload) {
- int sw_fmt = imgfmt_is_sw ? img->imgfmt : img->params.hw_subfmt;
-
- mp_info(log, "HW-uploading to %s\n", mp_imgfmt_to_name(fmts[0]));
- filters[2] = upload->f;
- hwupload_fmt = mp_hwupload_find_upload_format(upload, sw_fmt);
- fmts = &hwupload_fmt;
- num_fmts = hwupload_fmt ? 1 : 0;
- hw_to_sw = false;
-
- // We cannot do format conversions when transferring between
- // two hardware devices, so fail immediately if that would be
- // required.
- if (!imgfmt_is_sw && hwupload_fmt != sw_fmt) {
- mp_err(log, "Format %s is not supported by %s\n",
- mp_imgfmt_to_name(sw_fmt),
- mp_imgfmt_to_name(p->imgfmts[0]));
- goto fail;
+ for (int i = 0; i < num_fmts; i++) {
+ // We can probably use this! Very lazy and very approximate.
+ struct mp_hwupload *upload = mp_hwupload_create(conv, fmts[i]);
+ if (upload) {
+ int sw_fmt = imgfmt_is_sw ? img->imgfmt : img->params.hw_subfmt;
+
+ mp_info(log, "HW-uploading to %s\n", mp_imgfmt_to_name(fmts[i]));
+ filters[2] = upload->f;
+ hwupload_fmt = mp_hwupload_find_upload_format(upload, sw_fmt);
+ fmts = &hwupload_fmt;
+ num_fmts = hwupload_fmt ? 1 : 0;
+ hw_to_sw = false;
+
+ // We cannot do format conversions when transferring between
+ // two hardware devices, so reject this format if that would be
+ // required.
+ if (!imgfmt_is_sw && hwupload_fmt != sw_fmt) {
+ mp_err(log, "Format %s is not supported by %s\n",
+ mp_imgfmt_to_name(sw_fmt),
+ mp_imgfmt_to_name(p->imgfmts[i]));
+ }
}
}
}