[FFmpeg-devel] [PATCH 3/3] avcodec/hap: Support chunked Hap frames

Michael Niedermayer michael at niedermayer.cc
Fri Jul 17 21:13:26 CEST 2015


On Thu, Jul 16, 2015 at 01:23:23PM +0100, Tom Butterworth wrote:
> ---
>  libavcodec/Makefile      |   4 +-
>  libavcodec/hap.c         |  51 +++++++++
>  libavcodec/hap.h         |  68 ++++++++----
>  libavcodec/hapdec.c      | 278 ++++++++++++++++++++++++++++++++++++-----------
>  libavcodec/hapenc.c      | 190 ++++++++++++++++++++++++++------
>  tests/fate/video.mak     |   3 +
>  tests/ref/fate/hap-chunk |   2 +
>  7 files changed, 481 insertions(+), 115 deletions(-)
>  create mode 100644 libavcodec/hap.c
>  create mode 100644 tests/ref/fate/hap-chunk
> 
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index b7fe1c9..2796035 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -283,8 +283,8 @@ OBJS-$(CONFIG_H264_MMAL_DECODER)       += mmaldec.o
>  OBJS-$(CONFIG_H264_VDA_DECODER)        += vda_h264_dec.o
>  OBJS-$(CONFIG_H264_QSV_DECODER)        += qsvdec_h264.o
>  OBJS-$(CONFIG_H264_QSV_ENCODER)        += qsvenc_h264.o
> -OBJS-$(CONFIG_HAP_DECODER)             += hapdec.o
> -OBJS-$(CONFIG_HAP_ENCODER)             += hapenc.o
> +OBJS-$(CONFIG_HAP_DECODER)             += hapdec.o hap.o
> +OBJS-$(CONFIG_HAP_ENCODER)             += hapenc.o hap.o
>  OBJS-$(CONFIG_HEVC_DECODER)            += hevc.o hevc_mvs.o hevc_ps.o hevc_sei.o \
>                                            hevc_cabac.o hevc_refs.o hevcpred.o    \
>                                            hevcdsp.o hevc_filter.o hevc_parse.o hevc_data.o
> diff --git a/libavcodec/hap.c b/libavcodec/hap.c
> new file mode 100644
> index 0000000..c1685ad
> --- /dev/null
> +++ b/libavcodec/hap.c
> @@ -0,0 +1,51 @@
> +/*
> + * Vidvox Hap utility functions
> + * Copyright (C) 2015 Tom Butterworth <bangnoise at gmail.com>
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg 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.
> + *
> + * FFmpeg 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 FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +/**
> + * @file
> + * Hap utilities
> + */
> +#include "hap.h"
> +
> +int hap_set_chunk_count(HapContext *ctx, int count, int first_in_frame)

non static functions need ff_ or av_ prefixes


> +{
> +    int ret = 0;
> +    if (first_in_frame == 1 && ctx->chunk_count != count) {
> +        int ret = av_reallocp_array(&ctx->chunks, count, sizeof(HapChunk));
> +        if (ret == 0)
> +            ret = av_reallocp_array(&ctx->chunk_results, count, sizeof(int));
> +        if (ret < 0) {
> +            ctx->chunk_count = 0;
> +        } else {
> +            ctx->chunk_count = count;
> +        }
> +    } else if (ctx->chunk_count != count) {
> +        ret = AVERROR_INVALIDDATA;
> +    }
> +    return ret;
> +}
> +
> +void hap_free_context(HapContext *ctx)
> +{
> +    av_freep(&ctx->tex_buf);
> +    av_freep(&ctx->chunks);
> +    av_freep(&ctx->chunk_results);
> +}
> diff --git a/libavcodec/hap.h b/libavcodec/hap.h
> index bd0fd37..b877c4f 100644
> --- a/libavcodec/hap.h
> +++ b/libavcodec/hap.h
> @@ -1,6 +1,7 @@
>  /*
>   * Vidvox Hap
>   * Copyright (C) 2015 Vittorio Giovara <vittorio.giovara at gmail.com>
> + * and Tom Butterworth <bangnoise at gmail.com>
>   *
>   * This file is part of FFmpeg.
>   *
> @@ -29,37 +30,66 @@
>  #include "bytestream.h"
>  #include "texturedsp.h"
>  

> +enum HapTextureFormat {
> +    HAP_FMT_RGBDXT1   = 0x0B,
> +    HAP_FMT_RGBADXT5  = 0x0E,
> +    HAP_FMT_YCOCGDXT5 = 0x0F,
> +};
> +
> +enum HapCompressor {
> +    HAP_COMP_NONE    = 0xA0,
> +    HAP_COMP_SNAPPY  = 0xB0,
> +    HAP_COMP_COMPLEX = 0xC0,
> +};
[...]

> -enum {
> -    HAP_FMT_RGBDXT1   = 0x0B,
> -    HAP_FMT_RGBADXT5  = 0x0E,
> -    HAP_FMT_YCOCGDXT5 = 0x0F,
> -};
> -
> -enum {
> -    HAP_COMP_NONE    = 0xA0,
> -    HAP_COMP_SNAPPY  = 0xB0,
> -    HAP_COMP_COMPLEX = 0xC0,
> -};

moving code around and giving enums names should be seperate patches
from adding features

more generically, cosmetic changes (like movig code) should be
seperate from functional changes (like adding a feature)


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

While the State exists there can be no freedom; when there is freedom there
will be no State. -- Vladimir Lenin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150717/63b6fe49/attachment.sig>


More information about the ffmpeg-devel mailing list