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

Carl Eugen Hoyos ceffmpeg at gmail.com
Sat Aug 24 03:09:55 EEST 2019


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.

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

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

Carl Eugen


More information about the ffmpeg-devel mailing list