diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-05-20 22:41:58 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-05-20 22:58:04 +0200 |
commit | 349c62410ba92b9513d4a31ec69cbf3ef5240555 (patch) | |
tree | e14c0ee0b7ebadc38f86b7393db4d216447e3dd7 /libavcodec/ivi_common.h | |
parent | 432fe9a38afca9104c1c11942d21739e2a48ba96 (diff) | |
parent | 4f04f5cc8b2a590217fe69492da3d65376ebcff3 (diff) | |
download | ffmpeg-349c62410ba92b9513d4a31ec69cbf3ef5240555.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
indeo: Make ivi_calc_band_checksum() static, it is only used in one file.
indeo: Drop unused debug function ivi_check_band().
avcodec/utils: cast a function argument to shut up a compiler warning
truemotion1: remove disabled code
fix typo in comment
fate: fix dependencies for non-SAMPLES avconv tests
indeo: check for invalid motion vectors
indeo: check that band output buffer exists
indeo: clear allocated band buffers
indeo: track tile macroblock size
indeo: check custom Huffman tables for errors
factor out common decoding code for Indeo 4 and Indeo 5
mp3: fix start band index for block type 2 in 8kHz audio
lavf: change some (de)muxer names to lowercase
lavf: make output format matching case insensitive
Conflicts:
libavcodec/indeo4.c
libavcodec/indeo5.c
libavcodec/ivi_common.c
libavcodec/utils.c
tests/fate/video.mak
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/ivi_common.h')
-rw-r--r-- | libavcodec/ivi_common.h | 73 |
1 files changed, 64 insertions, 9 deletions
diff --git a/libavcodec/ivi_common.h b/libavcodec/ivi_common.h index 78b6e1c656..fae7f4bea5 100644 --- a/libavcodec/ivi_common.h +++ b/libavcodec/ivi_common.h @@ -34,6 +34,8 @@ #include <stdint.h> #define IVI_VLC_BITS 13 ///< max number of bits of the ivi's huffman codes +#define IVI4_STREAM_ANALYSER 0 +#define IVI5_IS_PROTECTED 0x20 /** * huffman codebook descriptor @@ -116,6 +118,7 @@ typedef struct { int ypos; int width; int height; + int mb_size; int is_empty; ///< = 1 if this tile doesn't contain any data int data_size; ///< size of the data in bytes int num_MBs; ///< number of macroblocks in this tile @@ -132,6 +135,7 @@ typedef struct { int band_num; ///< band number int width; int height; + int aheight; ///< aligned band height const uint8_t *data_ptr; ///< ptr to the first byte of the band data int data_size; ///< size of the band data int16_t *buf; ///< pointer to the output buffer for this band @@ -193,6 +197,63 @@ typedef struct { uint8_t chroma_bands; } IVIPicConfig; +typedef struct IVI45DecContext { + GetBitContext gb; + AVFrame frame; + RVMapDesc rvmap_tabs[9]; ///< local corrected copy of the static rvmap tables + + uint32_t frame_num; + int frame_type; + int prev_frame_type; ///< frame type of the previous frame + uint32_t data_size; ///< size of the frame data in bytes from picture header + int is_scalable; + int transp_status; ///< transparency mode status: 1 - enabled + const uint8_t *frame_data; ///< input frame data pointer + int inter_scal; ///< signals a sequence of scalable inter frames + uint32_t frame_size; ///< frame size in bytes + uint32_t pic_hdr_size; ///< picture header size in bytes + uint8_t frame_flags; + uint16_t checksum; ///< frame checksum + + IVIPicConfig pic_conf; + IVIPlaneDesc planes[3]; ///< color planes + + int buf_switch; ///< used to switch between three buffers + int dst_buf; ///< buffer index for the currently decoded frame + int ref_buf; ///< inter frame reference buffer index + int ref2_buf; ///< temporal storage for switching buffers + + IVIHuffTab mb_vlc; ///< current macroblock table descriptor + IVIHuffTab blk_vlc; ///< current block table descriptor + + uint8_t rvmap_sel; + uint8_t in_imf; + uint8_t in_q; ///< flag for explicitly stored quantiser delta + uint8_t pic_glob_quant; + uint8_t unknown1; + + uint16_t gop_hdr_size; + uint8_t gop_flags; + uint32_t lock_word; + +#if IVI4_STREAM_ANALYSER + uint8_t has_b_frames; + uint8_t has_transp; + uint8_t uses_tiling; + uint8_t uses_haar; + uint8_t uses_fullpel; +#endif + + int (*decode_pic_hdr) (struct IVI45DecContext *ctx, AVCodecContext *avctx); + int (*decode_band_hdr) (struct IVI45DecContext *ctx, IVIBandDesc *band, AVCodecContext *avctx); + int (*decode_mb_info) (struct IVI45DecContext *ctx, IVIBandDesc *band, IVITile *tile, AVCodecContext *avctx); + void (*switch_buffers) (struct IVI45DecContext *ctx); + int (*is_nonnull_frame)(struct IVI45DecContext *ctx); + + int gop_invalid; + int buf_invalid[3]; +} IVI45DecContext; + /** compare some properties of two pictures */ static inline int ivi_pic_config_cmp(IVIPicConfig *str1, IVIPicConfig *str2) { @@ -339,14 +400,8 @@ void ff_ivi_process_empty_tile(AVCodecContext *avctx, IVIBandDesc *band, */ void ff_ivi_output_plane(IVIPlaneDesc *plane, uint8_t *dst, int dst_pitch); -/** - * Calculate band checksum from band data. - */ -uint16_t ivi_calc_band_checksum (IVIBandDesc *band); - -/** - * Verify that band data lies in range. - */ -int ivi_check_band (IVIBandDesc *band, const uint8_t *ref, int pitch); +int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *data_size, + AVPacket *avpkt); +av_cold int ff_ivi_decode_close(AVCodecContext *avctx); #endif /* AVCODEC_IVI_COMMON_H */ |