vo_gpu_next: raise LUT file max size and report an error if exceeded

First of all, `lutdata` was passed to `pl_lut_parse_cube()` even if
 it was empty. This caused a bogus error message to be printed by
 the LUT parsing code in libplacebo.

 "[vo/gpu-next/libplacebo] Missing LUT size specification?"

 One of the reasons why `lutdata` can be empty is if the LUT file size
 exceeds the `max_size` limit passed to `stream_read_file()`.

 So in this commit, `lutdata` is checked first before getting passed to
 libplacebo, and a non-bogus error message is printed if it's empty.

 And secondly, the max size allowed is raised from the quite limiting
 value of 100MB to 1.5GiB. The new max matches the limit in LUT cache
 which is used to support up to 512x512x512 LUTs.

Signed-off-by: Mohammad AlSaleh <CE.Mohammad.AlSaleh@gmail.com>
This commit is contained in:
Mohammad AlSaleh 2024-10-21 22:49:30 +03:00 committed by Kacper Michajłow
parent 25ccae9216
commit d027e02d37
1 changed files with 8 additions and 2 deletions

View File

@ -2058,8 +2058,14 @@ static void update_lut(struct priv *p, struct user_lut *lut)
// Load LUT file
char *fname = mp_get_user_path(NULL, p->global, lut->path);
MP_VERBOSE(p, "Loading custom LUT '%s'\n", fname);
struct bstr lutdata = stream_read_file(fname, p, p->global, 100000000); // 100 MB
lut->lut = pl_lut_parse_cube(p->pllog, lutdata.start, lutdata.len);
const int lut_max_size = 1536 << 20; // 1.5 GiB, matches lut cache limit
struct bstr lutdata = stream_read_file(fname, NULL, p->global, lut_max_size);
if (!lutdata.len) {
MP_ERR(p, "Failed to read LUT data from %s, make sure it's a valid file "
"and smaller or equal to %d bytes\n", fname, lut_max_size);
} else {
lut->lut = pl_lut_parse_cube(p->pllog, lutdata.start, lutdata.len);
}
talloc_free(fname);
talloc_free(lutdata.start);
}