[FFmpeg-devel] [PATCH v6] lavf: palettized QuickTime video in Matroska

Michael Niedermayer michael at niedermayer.cc
Sun Dec 27 03:03:36 CET 2015


On Wed, Dec 23, 2015 at 03:37:18PM +0100, Mats Peterson wrote:
> I mistakenly used 'extradata' rather than 'st->codec->extradata',
> naturally leading to a segfault. Here's an updated patch.
> 
> An explanation of the patch follows:
> 
> Palettized QuickTime video in Matroska has hitherto not been
> recognized whatsoever, and the "palette" used has been completely
> random.
> 
> The patch for matroskadec.c fixes this issue by adding a palette
> side data packet in matroska_deliver_packet(), much in the same way
> as it's done in mov.c.
> 
> The change to mov.c consists mainly of moving the palette handling
> from the mov_parse_stsd_video() function to a new ff_get_qtpalette()
> function in the new file qtpalette.c, which is shared by both
> matroskadec.c and mov.c.
> 
> In matroskadec.c, I'm also putting the palette in 'extradata', like
> it's done for V_MS/VFW/FOURCC; this is a requirement in order for
> MPlayer to recognize the palette. And why is this, you may wonder.
> Well, it's because for some mysterious reason, MPlayer adds ANOTHER
> palette side data packet after the one added in matroskadec.c. It
> uses whatever is in extradata as the palette when adding this
> packet.
> 
> Mats
> 
> -- 
> Mats Peterson
> http://matsp888.no-ip.org/~mats/

>  Makefile      |    1 
>  matroskadec.c |   30 +++++++++++++-
>  mov.c         |   92 +++++++++----------------------------------
>  qtpalette.c   |  123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  qtpalette.h   |    6 ++
>  5 files changed, 178 insertions(+), 74 deletions(-)
> 46ebbf197c0580b7588cb4550373a05489454cae  0001-lavf-palettized-QuickTime-video-in-Matroska.patch
> From 91376a9e4e0cb4a7522be565e248616c4803c0ad Mon Sep 17 00:00:00 2001
> From: Mats Peterson <matsp888 at yahoo.com>
> Date: Wed, 23 Dec 2015 15:30:15 +0100
> Subject: [PATCH v6] lavf: palettized QuickTime video in Matroska
[...]
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 06e80c8..5b0c5af 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c

> @@ -1751,13 +1751,20 @@ static int mov_codec_id(AVStream *st, uint32_t format)
>      return id;
>  }
>  
> -static void mov_parse_stsd_video(MOVContext *c, AVIOContext *pb,
> +static int mov_parse_stsd_video(MOVContext *c, AVIOContext *pb,
>                                   AVStream *st, MOVStreamContext *sc)
>  {
> +    uint8_t *stsd;
>      uint8_t codec_name[32];
> -    unsigned int color_depth, len, j;
> -    int color_greyscale;
> -    int color_table_id;
> +    int64_t pos;
> +    unsigned int len;
> +
> +    if (!(stsd = av_malloc(70)))
> +        return AVERROR(ENOMEM);

the malloc is unneeded, an array on the stack could be used (its just
a fixed 70 bytes)
this would also simplify the error handling

[...]

> @@ -310,4 +311,7 @@ static const uint8_t ff_qt_default_palette_256[256 * 3] = {
>    /* 255, 0xFF */  0x00, 0x00, 0x00
>  };
>  
> +int ff_get_qtpalette(int codec_id, uint8_t *stsd, AVIOContext *pb,
> +        uint32_t *palette);
> +

missing doxy documentation, missing "const" for unchanged arrays
also why does this need a "byte" array and a AVIOContext as input
arguments ?
iam asking as this looks a bit confusing with 2 inputs ...

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No great genius has ever existed without some touch of madness. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151227/9c60646d/attachment.sig>


More information about the ffmpeg-devel mailing list