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

James Almer jamrial at gmail.com
Sat Aug 24 16:07:29 EEST 2019


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).


More information about the ffmpeg-devel mailing list