summaryrefslogtreecommitdiffstats
path: root/video
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 /video
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.
Diffstat (limited to 'video')
-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;
}