[FFmpeg-devel] [PATCH v2] cbs_h265: Add a lot more SEI parsing support
Mark Thompson
sw at jkqxz.net
Sun Nov 11 19:38:01 EET 2018
On 11/11/18 17:32, James Almer wrote:
> On 11/11/2018 2:27 PM, Mark Thompson wrote:
>> Supports both prefix and suffix SEI, decoding all of the common SEI
>> types and some more obscure ones. Most of this is tested by the
>> existing tests in fate.
>> ---
>> On 11/11/18 15:57, James Almer wrote:
>>> On 10/27/2018 6:39 PM, Mark Thompson wrote:
>>>> Supports both prefix and suffix SEI, decoding all of the common SEI
>>>> types and some more obscure ones. Most of this is tested by the
>>>> existing tests in fate.
>>>
>>> It would be neat to make the *_metadata filters not decompose unit types
>>> it doesn't care about (based on user options). Before this patch, all
>>> these SEI messages were simply copied as is, but after it they will be
>>> fully parsed even in pass through mode, potentially slowing down the
>>> process.
>>>
>>> Of course, doing that would make the cbs tests useless. Maybe the
>>> default behavior could be to not decompose what's not going to be
>>> modified, and an option to enable it could be added that the test would use.
>>>
>>>> ---
>>>> libavcodec/cbs_h2645.c | 20 +-
>>>> libavcodec/cbs_h265.h | 124 +++++++
>>>> libavcodec/cbs_h265_syntax_template.c | 497 +++++++++++++++++++++++++-
>>>> libavcodec/hevc.h | 3 +
>>>> libavcodec/hevc_sei.h | 1 +
>>>> 5 files changed, 625 insertions(+), 20 deletions(-)
>>>>
>>>
>>>> diff --git a/libavcodec/hevc_sei.h b/libavcodec/hevc_sei.h
>>>> index e92da25bbf..2fec00ace0 100644
>>>> --- a/libavcodec/hevc_sei.h
>>>> +++ b/libavcodec/hevc_sei.h
>>>> @@ -52,6 +52,7 @@ typedef enum {
>>>> HEVC_SEI_TYPE_DECODED_PICTURE_HASH = 132,
>>>> HEVC_SEI_TYPE_SCALABLE_NESTING = 133,
>>>> HEVC_SEI_TYPE_REGION_REFRESH_INFO = 134,
>>>> + HEVC_SEI_TYPE_TIME_CODE = 136,
>>>> HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO = 137,
>>>> HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO = 144,
>>>> HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS = 147,
>>>
>>> Adding this one should be trivial, btw. It's a single field, and there
>>> are real world samples out there. Support for it was added to the
>>> decoder some time ago.
>>
>> Sure, here's a v2 with that added.
>>
>> Thanks,
>>
>> - Mark
>>
>>
>> libavcodec/cbs_h2645.c | 20 +-
>> libavcodec/cbs_h265.h | 130 +++++++
>> libavcodec/cbs_h265_syntax_template.c | 512 +++++++++++++++++++++++++-
>> libavcodec/hevc.h | 3 +
>> libavcodec/hevc_sei.h | 1 +
>> 5 files changed, 646 insertions(+), 20 deletions(-)
>>
>> diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
>> index e55bd00183..86baf129ce 100644
>> --- a/libavcodec/cbs_h2645.c
>> +++ b/libavcodec/cbs_h2645.c
>> @@ -490,9 +490,21 @@ static void cbs_h265_free_slice(void *unit, uint8_t *content)
>> static void cbs_h265_free_sei_payload(H265RawSEIPayload *payload)
>> {
>> switch (payload->payload_type) {
>> + case HEVC_SEI_TYPE_BUFFERING_PERIOD:
>> + case HEVC_SEI_TYPE_PICTURE_TIMING:
>> + case HEVC_SEI_TYPE_PAN_SCAN_RECT:
>> + case HEVC_SEI_TYPE_RECOVERY_POINT:
>> + case HEVC_SEI_TYPE_DISPLAY_ORIENTATION:
>> + case HEVC_SEI_TYPE_DECODED_PICTURE_HASH:
>> case HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO:
>> case HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
>
> Shouldn't atc be listed here?
Yes! And so should active-parameter-sets and time-code.
Added locally.
Thanks,
- Mark
>> break;
>> + case HEVC_SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35:
>> + av_buffer_unref(&payload->payload.user_data_registered.data_ref);
>> + break;
>> + case HEVC_SEI_TYPE_USER_DATA_UNREGISTERED:
>> + av_buffer_unref(&payload->payload.user_data_unregistered.data_ref);
>> + break;
>> default:
>> av_buffer_unref(&payload->payload.other.data_ref);
>> break;
More information about the ffmpeg-devel
mailing list