On 28/04/2019 23:15, Andreas Rheinhardt wrote:
> Mark Thompson:
>> On 23/04/2019 23:55, Andreas Rheinhardt wrote:
>>> horizontal/vertical_size_value (containing the twelve least significant
>>> bits of the frame size) mustn't be zero according to the specifications;
>>> and the value 0 is forbidden for the colour_description elements.
>>>
>>> Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com>
>>> ---
>>> The actual function calls after macro expansion are the same as in the
>>> earlier versions with the exception of the extra_bit_slice calls.
>>>  libavcodec/cbs_mpeg2.c                 | 14 ++++++++------
>>>  libavcodec/cbs_mpeg2_syntax_template.c | 20 ++++++++++----------
>>>  2 files changed, 18 insertions(+), 16 deletions(-)
>>>
>>> diff --git a/libavcodec/cbs_mpeg2.c b/libavcodec/cbs_mpeg2.c
>>> index cdde68ea38..fc21745a51 100644
>>> --- a/libavcodec/cbs_mpeg2.c
>>> +++ b/libavcodec/cbs_mpeg2.c
>>> ...
>>> @@ -125,9 +125,9 @@ static int 
>>> FUNC(sequence_display_extension)(CodedBitstreamContext *ctx, RWContex
>>>  
>>>      ui(1, colour_description);
>>>      if (current->colour_description) {
>>> -        ui(8, colour_primaries);
>>> -        ui(8, transfer_characteristics);
>>> -        ui(8, matrix_coefficients);
>>> +        uir(8, colour_primaries,         1, 255);
>>> +        uir(8, transfer_characteristics, 1, 255);
>>> +        uir(8, matrix_coefficients,      1, 255);
>>
>> I'm a bit unsure about this one.  While the zero value is indeed banned by 
>> the standard, it isn't uncommon to find (at least in H.264) streams with 
>> zeroes in these fields.  (The libavcodec encoder for MPEG-2 is happy to 
>> write such a stream, too.)  Start code aliasing is presumably the reason for 
>> the standard disallowing zeroes, but they probably won't actually be a 
>> problem unless display_horizontal_size happens to have a specific range of 
>> bad values (in which case we already fail in a different way).
>>
> Yeah, that is certainly because of start code emulation. What do you
> think about correcting these values while reading? Would be especially
> good considering that mpeg2_metadata under certain circumstances
> created such files in the first place.
By correcting the values, you are thinking that if you see a zero in one of 
those fields during read, change it to a two?  (And always reject it entirely 
on write.)

That feels slightly dubious to me because the intent is to read the content of 
the stream as-is, but equally it's reasonable to argue that since the stream is 
invalid we can apply undefined behaviour logic to reinterpret it in a more 
sensible way.

I think I'd be happy with that answer if you want to go with it?

Thanks,

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

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to