summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2020-06-17 16:16:43 +0200
committerwm4 <wm4@nowhere>2020-06-17 19:43:09 +0200
commitb9069c9dbfcf343013f720c2f3328d8afa5684d3 (patch)
tree2164e6c9506c69333b2f7574b0804fe1cdf14f02
parent7d755020f3656a6b7d899a768743db33e700743f (diff)
downloadmpv-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.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;
}