summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/vd_ffmpeg.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
index 26eacd3ff1..2b993c4a93 100644
--- a/libmpcodecs/vd_ffmpeg.c
+++ b/libmpcodecs/vd_ffmpeg.c
@@ -717,6 +717,12 @@ typedef struct dp_hdr_s {
uint32_t chunktab; // offset to chunk offset array
} dp_hdr_t;
+void swap_palette(void *pal) {
+ int i;
+ uint32_t *p = pal;
+ for (i = 0; i < AVPALETTE_COUNT; i++)
+ p[i] = le2me_32(p[i]);
+}
// decode a frame
static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
@@ -884,6 +890,11 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
mpi->stride[2]*=2;
}
+#ifdef WORDS_BIGENDIAN
+ // FIXME: this might cause problems for buffers with FF_BUFFER_HINTS_PRESERVE
+ if (mpi->bpp == 8)
+ swap_palette(mpi->planes[1]);
+#endif
/* to comfirm with newer lavc style */
mpi->qscale =pic->qscale_table;
mpi->qstride=pic->qstride;