On 08/06/17 12:35, Michael Niedermayer wrote:
> On Thu, Jun 08, 2017 at 11:02:30AM +0100, Mark Thompson wrote:
>> On 08/06/17 01:29, Jun Zhao wrote:
>>> V3: Clean the code logic base on Michael's review.
>>> V2: Add Add set_ue_golomb_long() to support 32bits UE golomb and update the 
>>> unit test.
>>>
>>> From 4de3e0c30af7bc1901562000eda018a6d6849292 Mon Sep 17 00:00:00 2001
>>> From: Jun Zhao <jun.z...@intel.com>
>>> Date: Fri, 2 Jun 2017 15:05:49 +0800
>>> Subject: [PATCH V3] lavc/golomb: Fix UE golomb overwrite issue.
>>>
>>> put_bits just support write up to 31 bits, when write 32 bit in
>>> put_bits, it's will overwrite the bit buffer, because the default
>>> assert level is 0, the av_assert2(n <= 31 && value < (1U << n))
>>> in put_bits can not be trigger runtime. Add set_ue_golomb_long()
>>> to support 32bits UE golomb.
>>>
>>> Signed-off-by: Jun Zhao <jun.z...@intel.com>
> [...]
>>> +
>>> +    if (i < 256)
>>> +        put_bits(pb, ff_ue_golomb_len[i], i + 1);
>>> +    else {
>>> +        int e = av_log2(i + 1);
>>> +        put_bits64(pb, 2 * e + 1, i + 1);
>>> +    }
>>> +}
>>
>> Please don't add a new function, just extend the existing one.  
>> set_ue_golomb() is not used in any place where minor ricing is of any value, 
>> and having another function will only be confusing over which to use (or, 
>> more likely, people will always use the long version in order to avoid 
>> thinking about it just like they do with get_ue_golomb() - cf. "grep 
>> get_ue_golomb libavcodec/hevc*").
> 
> No question its easier to do something random than to think about
> the range allowed by the specification.
> But when writing data, its neccessary to comply to the specification,
> otherwise one creates invalid streams. So theres no way around thinking
> about the range even with just one function.

I don't understand what you're trying to say here.  I'm suggesting that it 
would be better to extend the range of values that set_ue_golomb() supports, so 
that it can correctly write values up to 2^32-2.  Since this is the largest 
value H.264 and H.265 ever require, any use with those standards is known to be 
in-range and no further thought is needed.  It is possible that some other 
codec might want to use larger Exp-Golomb codes - if that happens then indeed 
more thought will be required when implementing that codec, but it shouldn't 
affect anyone else.

- Mark

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to