summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--video/repack.c13
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;
}