[FFmpeg-devel] [PATCH] avformat/avidec: add support for recognizing HEVC fourcc when demuxing

Marton Balint cus at passwd.hu
Sat Aug 24 11:48:37 EEST 2019



On Sat, 24 Aug 2019, Carl Eugen Hoyos wrote:

> Am Sa., 24. Aug. 2019 um 01:47 Uhr schrieb Marton Balint <cus at passwd.hu>:
>>
>> Some security cams generate this, as well as some versions of VirtualDub so
>> support for _reading_ such files is justified.
>
> Please also mention vlc.

Ok.

>
>>
>> Fixes ticket #7110.
>>
>> See also this discussion: https://patchwork.ffmpeg.org/patch/8744/
>>
>> Signed-off-by: Marton Balint <cus at passwd.hu>
>> ---
>>  libavformat/avidec.c | 4 ++++
>>  libavformat/riff.c   | 5 +++++
>>  libavformat/riff.h   | 2 ++
>>  3 files changed, 11 insertions(+)
>>
>> diff --git a/libavformat/avidec.c b/libavformat/avidec.c
>> index 1d887b1cc9..7946791fe4 100644
>> --- a/libavformat/avidec.c
>> +++ b/libavformat/avidec.c
>> @@ -815,6 +815,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>                                    "mov tag found in avi (fourcc %s)\n",
>>                                    av_fourcc2str(tag1));
>>                      }
>
>> +                    /* Finally try unofficial codec tags to support non-standard files. */
>
> The comment does not look useful.

Ok, removed locally.

>
>> +                    if (!st->codecpar->codec_id)
>> +                        st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags_unofficial, tag1);
>> +
>>                      /* This is needed to get the pict type which is necessary
>>                       * for generating correct pts. */
>>                      st->need_parsing = AVSTREAM_PARSE_HEADERS;
>> diff --git a/libavformat/riff.c b/libavformat/riff.c
>> index e755ad8d5f..52b0bf8f03 100644
>> --- a/libavformat/riff.c
>> +++ b/libavformat/riff.c
>> @@ -491,6 +491,11 @@ const AVCodecTag ff_codec_bmp_tags[] = {
>>      { AV_CODEC_ID_NONE,         0 }
>>  };
>>
>> +const AVCodecTag ff_codec_bmp_tags_unofficial[] = {
>> +    { AV_CODEC_ID_HEVC,         MKTAG('H', 'E', 'V', 'C') },
>> +    { AV_CODEC_ID_NONE,         0 }
>> +};
>> +
>>  const AVCodecTag ff_codec_wav_tags[] = {
>>      { AV_CODEC_ID_PCM_S16LE,       0x0001 },
>>      /* must come after s16le in this list */
>> diff --git a/libavformat/riff.h b/libavformat/riff.h
>> index 323aa38b4d..21078b77c8 100644
>> --- a/libavformat/riff.h
>> +++ b/libavformat/riff.h
>> @@ -73,6 +73,8 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *pa
>>  extern const AVCodecTag ff_codec_bmp_tags[]; // exposed through avformat_get_riff_video_tags()
>>  extern const AVCodecTag ff_codec_wav_tags[];
>>
>> +extern const AVCodecTag ff_codec_bmp_tags_unofficial[];
>
> Imo, this is far too complicated to avoid writing files
> that all other relevant applications write happily.

I am personally OK if we simply add the tag to ff_codec_bmp_tags but there 
was an uproar against supporting writing such files.

IMHO the cleanest way of doing things is allowing writing files _if_ 
std_complience is ALLOW_UNOFFICIAL, and otherwise rejecting it, but I am 
not intereseted in implementing this, but if you are then you can, and in 
order to separate the standard list and the unofficial list, you must have 
two...

Regards,
Marton


More information about the ffmpeg-devel mailing list