From b9069c9dbfcf343013f720c2f3328d8afa5684d3 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 17 Jun 2020 16:16:43 +0200 Subject: 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. --- video/repack.c | 13 +++++++------ 1 file 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; } -- cgit v1.2.3