Commit 3ee21785 authored by Tom Butterworth's avatar Tom Butterworth Committed by Vittorio Giovara

Support the Hap chunked frame format

Signed-off-by: 's avatarVittorio Giovara <vittorio.giovara@gmail.com>
parent 43dd0047
...@@ -243,8 +243,8 @@ OBJS-$(CONFIG_H264_MMAL_DECODER) += mmaldec.o ...@@ -243,8 +243,8 @@ OBJS-$(CONFIG_H264_MMAL_DECODER) += mmaldec.o
OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_H264_QSV_DECODER) += qsvdec_h2645.o OBJS-$(CONFIG_H264_QSV_DECODER) += qsvdec_h2645.o
OBJS-$(CONFIG_H264_QSV_ENCODER) += qsvenc_h264.o OBJS-$(CONFIG_H264_QSV_ENCODER) += qsvenc_h264.o
OBJS-$(CONFIG_HAP_DECODER) += hapdec.o OBJS-$(CONFIG_HAP_DECODER) += hapdec.o hap.o
OBJS-$(CONFIG_HAP_ENCODER) += hapenc.o OBJS-$(CONFIG_HAP_ENCODER) += hapenc.o hap.o
OBJS-$(CONFIG_HEVC_DECODER) += hevc.o hevc_mvs.o hevc_ps.o hevc_sei.o \ OBJS-$(CONFIG_HEVC_DECODER) += hevc.o hevc_mvs.o hevc_ps.o hevc_sei.o \
hevc_cabac.o hevc_refs.o hevcpred.o \ hevc_cabac.o hevc_refs.o hevcpred.o \
hevcdsp.o hevc_filter.o hevc_parse.o hevc_data.o hevcdsp.o hevc_filter.o hevc_parse.o hevc_data.o
......
/* /*
* Vidvox Hap * Vidvox Hap
* Copyright (C) 2015 Vittorio Giovara <vittorio.giovara@gmail.com> * Copyright (C) 2015 Vittorio Giovara <vittorio.giovara@gmail.com>
* Copyright (C) 2015 Tom Butterworth <bangnoise@gmail.com>
* *
* This file is part of Libav. * This file is part of Libav.
* *
...@@ -41,20 +42,39 @@ enum HapCompressor { ...@@ -41,20 +42,39 @@ enum HapCompressor {
HAP_COMP_COMPLEX = 0xC0, 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 { typedef struct HapContext {
AVClass *class; AVClass *class;
TextureDSPContext dxtc; TextureDSPContext dxtc;
GetByteContext gbc; 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 */ int tex_rat; /* Compression ratio */
const uint8_t *tex_data; /* Compressed texture */ 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 */ 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 */ size_t max_snappy; /* Maximum compressed size for snappy buffer */
int slice_count; /* Number of slices for threaded operations */ int slice_count; /* Number of slices for threaded operations */
...@@ -63,4 +83,16 @@ typedef struct HapContext { ...@@ -63,4 +83,16 @@ typedef struct HapContext {
int (*tex_fun)(uint8_t *dst, ptrdiff_t stride, const uint8_t *block); int (*tex_fun)(uint8_t *dst, ptrdiff_t stride, const uint8_t *block);
} HapContext; } 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 */ #endif /* AVCODEC_HAP_H */
This diff is collapsed.
This diff is collapsed.
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#define LIBAVCODEC_VERSION_MAJOR 56 #define LIBAVCODEC_VERSION_MAJOR 56
#define LIBAVCODEC_VERSION_MINOR 35 #define LIBAVCODEC_VERSION_MINOR 35
#define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_MICRO 1
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
...@@ -169,6 +169,9 @@ fate-hap5: CMD = framecrc -i $(TARGET_SAMPLES)/hap/hap5.mov ...@@ -169,6 +169,9 @@ fate-hap5: CMD = framecrc -i $(TARGET_SAMPLES)/hap/hap5.mov
FATE_HAP += fate-hapy FATE_HAP += fate-hapy
fate-hapy: CMD = framecrc -i $(TARGET_SAMPLES)/hap/hapy.mov fate-hapy: CMD = framecrc -i $(TARGET_SAMPLES)/hap/hapy.mov
FATE_HAP += fate-hap-chunk
fate-hap-chunk: CMD = framecrc -i $(TARGET_SAMPLES)/hap/hapy-12-chunks.mov
FATE_SAMPLES_AVCONV-$(call DEMDEC, MOV, HAP) += $(FATE_HAP) FATE_SAMPLES_AVCONV-$(call DEMDEC, MOV, HAP) += $(FATE_HAP)
fate-hap: $(FATE_HAP) fate-hap: $(FATE_HAP)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment