[FFmpeg-devel] [PATCH v2 1/4] lavf/riffenc: Write space for palette

Mats Peterson matsp888 at yahoo.com
Sat Feb 20 09:26:02 CET 2016


On 02/20/2016 03:40 AM, Michael Niedermayer wrote:
> On Sat, Feb 20, 2016 at 12:02:15AM +0100, Mats Peterson wrote:
>>
>> --
>> Mats Peterson
>> http://matsp888.no-ip.org/~mats/
>
>>   riffenc.c |   23 +++++++++++++++++++----
>>   1 file changed, 19 insertions(+), 4 deletions(-)
>> 63ec167e5794087397c65d3a5002e6bbd7a32caf  0001-lavf-riffenc-Write-space-for-palette.patch
>>  From 41964552559234f19917a6ea40e71f0753a20ede Mon Sep 17 00:00:00 2001
>> From: Mats Peterson <matsp888 at yahoo.com>
>> Date: Fri, 19 Feb 2016 23:55:25 +0100
>> Subject: [PATCH v2 1/4] lavf/riffenc: Write space for palette
>>
>> ---
>>   libavformat/riffenc.c |   23 +++++++++++++++++++----
>>   1 file changed, 19 insertions(+), 4 deletions(-)
>>
>> diff --git a/libavformat/riffenc.c b/libavformat/riffenc.c
>> index ceb27f2..c7bad74 100644
>> --- a/libavformat/riffenc.c
>> +++ b/libavformat/riffenc.c
>> @@ -210,6 +210,9 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc,
>>                         !memcmp(enc->extradata + enc->extradata_size - 9, "BottomUp", 9);
>>       int extradata_size = enc->extradata_size - 9*keep_height;
>>
>> +    if (!enc->extradata_size && enc->bits_per_coded_sample >= 1 && enc->bits_per_coded_sample <= 8)
>> +        extradata_size = 4 * (1 << enc->bits_per_coded_sample);
>
> this should probably be limited to the CODEC_ID_RAWVIDEO case
> and also to avi and not asf until it is implemented for asf too

OK, I could add a check for that.

>
>
>> +
>>       /* size */
>>       avio_wl32(pb, 40 + (ignore_extradata ? 0 :extradata_size));
>>       avio_wl32(pb, enc->width);
>> @@ -228,10 +231,22 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc,
>>       avio_wl32(pb, 0);
>>
>>       if (!ignore_extradata) {
>> -        avio_write(pb, enc->extradata, extradata_size);
>> -
>> -        if (!for_asf && extradata_size & 1)
>> -            avio_w8(pb, 0);
>> +        if (enc->extradata_size) {
>> +            avio_write(pb, enc->extradata, extradata_size);
>> +            if (!for_asf && extradata_size & 1)
>> +                avio_w8(pb, 0);
>> +        } else if (enc->bits_per_coded_sample >= 1 && enc->bits_per_coded_sample <= 8) {
>> +            int i;
>
>> +            int64_t *pal_offset = (int64_t *)enc->priv_data;
>
> the codec priv_data must not be accessed from a muxer, its private to
> the codec
>
>

OK, thanks for the information. Do you have a better way to store the 
palette offset? There aren't many places accessible from this function.

Mats



More information about the ffmpeg-devel mailing list