summaryrefslogtreecommitdiff
path: root/libavcodec/ivi_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/ivi_common.h')
-rw-r--r--libavcodec/ivi_common.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/libavcodec/ivi_common.h b/libavcodec/ivi_common.h
index 4b2ae063b1..d3edea0c0e 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
@@ -192,6 +194,60 @@ 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);
+} IVI45DecContext;
+
/** compare some properties of two pictures */
static inline int ivi_pic_config_cmp(IVIPicConfig *str1, IVIPicConfig *str2)
{
@@ -348,4 +404,8 @@ uint16_t ivi_calc_band_checksum (IVIBandDesc *band);
*/
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 */