[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