On Sat, Oct 12, 2013 at 11:55 AM, Anton Khirnov <[email protected]> wrote:
> From: Dirk Farin <[email protected]>
>
> ---
>  libavformat/Makefile     |    1 +
>  libavformat/allformats.c |    1 +
>  libavformat/hevcdec.c    |   64 
> ++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 66 insertions(+)
>  create mode 100644 libavformat/hevcdec.c
>
> diff --git a/libavformat/Makefile b/libavformat/Makefile
> index f12b493..260da0c 100644
> --- a/libavformat/Makefile
> +++ b/libavformat/Makefile
> @@ -139,6 +139,7 @@ OBJS-$(CONFIG_H263_DEMUXER)              += h263dec.o 
> rawdec.o
>  OBJS-$(CONFIG_H263_MUXER)                += rawenc.o
>  OBJS-$(CONFIG_H264_DEMUXER)              += h264dec.o rawdec.o
>  OBJS-$(CONFIG_H264_MUXER)                += rawenc.o
> +OBJS-$(CONFIG_HEVC_DEMUXER)              += hevcdec.o rawdec.o
>  OBJS-$(CONFIG_HLS_DEMUXER)               += hls.o
>  OBJS-$(CONFIG_HLS_MUXER)                 += hlsenc.o
>  OBJS-$(CONFIG_IDCIN_DEMUXER)             += idcin.o
> diff --git a/libavformat/allformats.c b/libavformat/allformats.c
> index 585cf43..3bdbadf 100644
> --- a/libavformat/allformats.c
> +++ b/libavformat/allformats.c
> @@ -117,6 +117,7 @@ void av_register_all(void)
>      REGISTER_MUXDEMUX(H261,             h261);
>      REGISTER_MUXDEMUX(H263,             h263);
>      REGISTER_MUXDEMUX(H264,             h264);
> +    REGISTER_DEMUXER (HEVC,             hevc);
>      REGISTER_MUXDEMUX(HLS,              hls);
>      REGISTER_DEMUXER (IDCIN,            idcin);
>      REGISTER_DEMUXER (IFF,              iff);
> diff --git a/libavformat/hevcdec.c b/libavformat/hevcdec.c
> new file mode 100644
> index 0000000..f3b0aa3
> --- /dev/null
> +++ b/libavformat/hevcdec.c
> @@ -0,0 +1,64 @@
> +/*
> + * RAW HEVC video demuxer
> + * Copyright (c) 2013 Dirk Farin <[email protected]>
> + *
> + * This file is part of Libav.
> + *
> + * Libav is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * Libav is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with Libav; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
> USA
> + */
> +
> +#include "avformat.h"
> +#include "rawdec.h"
> +
> +#include "libavcodec/hevc.h"
> +
> +static int hevc_probe(AVProbeData *p)
> +{
> +    uint32_t code = -1;
> +    int vps = 0, sps = 0, pps = 0, irap = 0;
> +    int i;
> +
> +    for (i = 0; i < p->buf_size - 1; i++) {
> +        code = (code << 8) + p->buf[i];
> +        if ((code & 0xffffff00) == 0x100) {
> +            uint8_t nal2 = p->buf[i + 1];
> +            int type = (code & 0x7E) >> 1;
> +
> +            if (code & 0x81) // forbidden and reserved zero bits
> +                return 0;
> +
> +            if (nal2 & 0xf8) // reserved zero
> +                return 0;
> +
> +            switch (type) {
> +            case NAL_VPS:        vps++;  break;
> +            case NAL_SPS:        sps++;  break;
> +            case NAL_PPS:        pps++;  break;
> +            case NAL_BLA_N_LP:
> +            case NAL_BLA_W_LP:
> +            case NAL_BLA_W_RADL:
> +            case NAL_CRA_NUT:
> +            case NAL_IDR_N_LP:
> +            case NAL_IDR_W_RADL: irap++; break;

nit: maybe the lines between case label, instruction and break could be split?

> +            }
> +        }
> +    }
> +
> +    if (vps && sps && pps && irap)
> +        return AVPROBE_SCORE_EXTENSION + 1; // 1 more than .mpg
> +    return 0;
> +}
> +
> +FF_DEF_RAWVIDEO_DEMUXER(hevc, "raw HEVC video", hevc_probe, "hevc,h265,265", 
> AV_CODEC_ID_HEVC)

I saw a few bitstreams as .hm (or hmXX where XX is hm version number)
but this convention is quite volatile (and will most likely end when
hm is less and less used) so it's safe not to add this file extension.

LGTM
Vittorio
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to