diff options
author | wm4 <wm4@nowhere> | 2020-06-17 16:16:43 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2020-06-17 19:43:09 +0200 |
commit | b9069c9dbfcf343013f720c2f3328d8afa5684d3 (patch) | |
tree | 2164e6c9506c69333b2f7574b0804fe1cdf14f02 | |
parent | 7d755020f3656a6b7d899a768743db33e700743f (diff) | |
download | mpv-b9069c9dbfcf343013f720c2f3328d8afa5684d3.tar.bz2 mpv-b9069c9dbfcf343013f720c2f3328d8afa5684d3.tar.xz |
repack: handle endian in a more general way
Instead of applying this only to "regular" formats, do it with all
formats.
For some reason, some repackers still have their own endian code. These
could probably be removed, but whatever.
-rw-r--r-- | video/repack.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/video/repack.c b/video/repack.c index e323d63a06..ed78981b3c 100644 --- a/video/repack.c +++ b/video/repack.c @@ -948,12 +948,13 @@ static bool setup_format_ne(struct mp_repack *rp) return false; // Endian swapping. - if (rp->imgfmt_a != rp->imgfmt_user) { - struct mp_regular_imgfmt ndesc; - if (!mp_get_regular_imgfmt(&ndesc, rp->imgfmt_a) || ndesc.num_planes > 4) - return false; - rp->endian_size = ndesc.component_size; - if (rp->endian_size != 2 && rp->endian_size != 4) + if (rp->imgfmt_a != rp->imgfmt_user && + rp->imgfmt_a == mp_find_other_endian(rp->imgfmt_user)) + { + struct mp_imgfmt_desc desc_a = mp_imgfmt_get_desc(rp->imgfmt_a); + struct mp_imgfmt_desc desc_u = mp_imgfmt_get_desc(rp->imgfmt_user); + rp->endian_size = 1 << desc_u.endian_shift; + if (!desc_a.endian_shift && rp->endian_size != 2 && rp->endian_size != 4) return false; } |