diff mbox

[FFmpeg-devel,1/2] xwdenc: do not rely on AV_PIX_FMT_FLAG_PSEUDOPAL palettes

Message ID 20180329133043.21890-1-nfxjfg@googlemail.com
State Accepted
Commit e53d3348d10feda300a4d906c136a4ce438369eb
Headers show

Commit Message

wm4 March 29, 2018, 1:30 p.m. UTC
This is the only code I found within FFmpeg that still inherently
requires AV_PIX_FMT_FLAG_PSEUDOPAL. It's easily changed not to require
it.

Preparation for the next patch.
---
 libavcodec/xwdenc.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/libavcodec/xwdenc.c b/libavcodec/xwdenc.c
index 43bca89033..81cca6c963 100644
--- a/libavcodec/xwdenc.c
+++ b/libavcodec/xwdenc.c
@@ -41,6 +41,7 @@  static int xwd_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     int i, out_size, ret;
     uint8_t *ptr, *buf;
     AVFrame * const p = (AVFrame *)pict;
+    uint32_t pal[256];
 
     pixdepth = av_get_bits_per_pixel(desc);
     if (desc->flags & AV_PIX_FMT_FLAG_BE)
@@ -180,11 +181,17 @@  static int xwd_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     bytestream_put_be32(&buf, 0);             // window border width
     bytestream_put_buffer(&buf, WINDOW_NAME, WINDOW_NAME_SIZE);
 
+    if (pix_fmt == AV_PIX_FMT_PAL8) {
+        memcpy(pal, p->data[1], sizeof(pal));
+    } else {
+        avpriv_set_systematic_pal2(pal, pix_fmt);
+    }
+
     for (i = 0; i < ncolors; i++) {
         uint32_t val;
         uint8_t red, green, blue;
 
-        val   = AV_RN32A(p->data[1] + i * 4);
+        val   = pal[i];
         red   = (val >> 16) & 0xFF;
         green = (val >>  8) & 0xFF;
         blue  =  val        & 0xFF;