From 3ee217853a6741b829a2683f49c590618891b1ab Mon Sep 17 00:00:00 2001 From: Tom Butterworth Date: Thu, 23 Jul 2015 14:39:29 -0400 Subject: Support the Hap chunked frame format Signed-off-by: Vittorio Giovara --- libavcodec/hap.h | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'libavcodec/hap.h') diff --git a/libavcodec/hap.h b/libavcodec/hap.h index a0fc2e0bf3..9d847f7b86 100644 --- a/libavcodec/hap.h +++ b/libavcodec/hap.h @@ -1,6 +1,7 @@ /* * Vidvox Hap * Copyright (C) 2015 Vittorio Giovara + * Copyright (C) 2015 Tom Butterworth * * This file is part of Libav. * @@ -41,20 +42,39 @@ enum HapCompressor { HAP_COMP_COMPLEX = 0xC0, }; +enum HapSectionType { + HAP_ST_DECODE_INSTRUCTIONS = 0x01, + HAP_ST_COMPRESSOR_TABLE = 0x02, + HAP_ST_SIZE_TABLE = 0x03, + HAP_ST_OFFSET_TABLE = 0x04, +}; + +typedef struct HapChunk { + enum HapCompressor compressor; + int compressed_offset; + size_t compressed_size; + int uncompressed_offset; + size_t uncompressed_size; +} HapChunk; + typedef struct HapContext { AVClass *class; TextureDSPContext dxtc; GetByteContext gbc; - int section_type; /* Header type */ + enum HapTextureFormat opt_tex_fmt; /* Texture type (encoder only) */ + int opt_chunk_count; /* User-requested chunk count (encoder only) */ + + int chunk_count; + HapChunk *chunks; + int *chunk_results; /* Results from threaded operations */ int tex_rat; /* Compression ratio */ const uint8_t *tex_data; /* Compressed texture */ - uint8_t *tex_buf; /* Uncompressed texture */ + uint8_t *tex_buf; /* Buffer for compressed texture */ size_t tex_size; /* Size of the compressed texture */ - uint8_t *snappied; /* Buffer interacting with snappy */ size_t max_snappy; /* Maximum compressed size for snappy buffer */ int slice_count; /* Number of slices for threaded operations */ @@ -63,4 +83,16 @@ typedef struct HapContext { int (*tex_fun)(uint8_t *dst, ptrdiff_t stride, const uint8_t *block); } HapContext; +/* + * Set the number of chunks in the frame. Returns 0 on success or an error if: + * - first_in_frame is 0 and the number of chunks has changed + * - any other error occurs + */ +int ff_hap_set_chunk_count(HapContext *ctx, int count, int first_in_frame); + +/* + * Free resources associated with the context + */ +av_cold void ff_hap_free_context(HapContext *ctx); + #endif /* AVCODEC_HAP_H */ -- cgit v1.2.3