aboutsummaryrefslogtreecommitdiff
path: root/gst-libs/ext/libav/libavcodec/ivi_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/ext/libav/libavcodec/ivi_common.h')
-rw-r--r--gst-libs/ext/libav/libavcodec/ivi_common.h76
1 files changed, 64 insertions, 12 deletions
diff --git a/gst-libs/ext/libav/libavcodec/ivi_common.h b/gst-libs/ext/libav/libavcodec/ivi_common.h
index 4b2ae06..07736f2 100644
--- a/gst-libs/ext/libav/libavcodec/ivi_common.h
+++ b/gst-libs/ext/libav/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
@@ -192,6 +196,62 @@ 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;
+} IVI45DecContext;
+
/** compare some properties of two pictures */
static inline int ivi_pic_config_cmp(IVIPicConfig *str1, IVIPicConfig *str2)
{
@@ -316,18 +376,6 @@ int ff_ivi_dec_tile_data_size(GetBitContext *gb);
int ff_ivi_decode_blocks(GetBitContext *gb, IVIBandDesc *band, IVITile *tile);
/**
- * Handle empty tiles by performing data copying and motion
- * compensation respectively.
- *
- * @param[in] avctx ptr to the AVCodecContext
- * @param[in] band pointer to the band descriptor
- * @param[in] tile pointer to the tile descriptor
- * @param[in] mv_scale scaling factor for motion vectors
- */
-void ff_ivi_process_empty_tile(AVCodecContext *avctx, IVIBandDesc *band,
- IVITile *tile, int32_t mv_scale);
-
-/**
* Convert and output the current plane.
* This conversion is done by adding back the bias value of 128
* (subtracted in the encoder) and clipping the result.
@@ -348,4 +396,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 */