Use "palette side data" instead of "palette extradata" in error message.
-- Mats Peterson http://matsp888.no-ip.org/~mats/
>From 506fe35051a51e0a4a42579b0a5f3d974531c1ae Mon Sep 17 00:00:00 2001 From: Mats Peterson <matsp...@yahoo.com> Date: Sun, 28 Feb 2016 05:25:53 +0100 Subject: [PATCH v3 2/2] lavf/movenc: Add support for palette side data packets --- libavformat/movenc.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index e0223b2..2ca445e 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4760,19 +4760,29 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt) } } - if (trk->is_unaligned_qt_rgb) { + if (trk->is_unaligned_qt_rgb && pkt->size) { const uint8_t *data = pkt->data; int size = pkt->size; int64_t bpc = trk->enc->bits_per_coded_sample != 15 ? trk->enc->bits_per_coded_sample : 16; int expected_stride = ((trk->enc->width * bpc + 15) >> 4)*2; + const uint8_t *pal = NULL; + int pkt_pal_size; int ret = ff_reshuffle_raw_rgb(s, &pkt, trk->enc, expected_stride); if (ret < 0) return ret; - if (ret == CONTAINS_PAL && !trk->pal_done) { - int pal_size = 1 << trk->enc->bits_per_coded_sample; - memset(trk->palette, 0, AVPALETTE_SIZE); - memcpy(trk->palette, data + size - 4*pal_size, 4*pal_size); - trk->pal_done++; + if (!trk->pal_done) { + pal = (uint8_t *)av_packet_get_side_data(pkt, AV_PKT_DATA_PALETTE, + &pkt_pal_size); + if (pal && pkt_pal_size != AVPALETTE_SIZE) { + av_log(s, AV_LOG_ERROR, "Invalid palette side data\n"); + return AVERROR_INVALIDDATA; + } + if (!pal && ret == CONTAINS_PAL) + pal = data + size - AVPALETTE_SIZE; + if (pal) { + memcpy(trk->palette, pal, AVPALETTE_SIZE); + trk->pal_done++; + } } else if (trk->enc->pix_fmt == AV_PIX_FMT_GRAY8 || trk->enc->pix_fmt == AV_PIX_FMT_MONOBLACK) { for (i = 0; i < pkt->size; i++) -- 1.7.10.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel