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

Marton Balint cus at passwd.hu
Thu Aug 29 22:55:11 EEST 2019



On Sat, 24 Aug 2019, James Almer wrote:

> On Sat, Aug 24, 2019 at 5:48 AM Marton Balint <cus at passwd.hu> wrote:
>
>>
>>
>> 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
>>
>
> That was my suggestion as well. It's what we do in movenc when dealing with
> codecs that have non-finished encapsulation specs (VP9/AV1 at some point,
> FLAC currently, etc).

Will apply soon.

Regards,
Marton


More information about the ffmpeg-devel mailing list