]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/ivi_common.h
Move Indeo4 frametypes into common header.
[ffmpeg] / libavcodec / ivi_common.h
index 22867f9d838aef4419b90c5d30b28643e8bcd383..584bf07279266b52de842e9866995658b96813c6 100644 (file)
 #include "get_bits.h"
 #include <stdint.h>
 
+/**
+ *  Indeo 4 frame types.
+ */
+enum {
+    IVI4_FRAMETYPE_INTRA       = 0,
+    IVI4_FRAMETYPE_INTRA1      = 1,  ///< intra frame with slightly different bitstream coding
+    IVI4_FRAMETYPE_INTER       = 2,  ///< non-droppable P-frame
+    IVI4_FRAMETYPE_BIDIR       = 3,  ///< bidirectional frame
+    IVI4_FRAMETYPE_INTER_NOREF = 4,  ///< droppable P-frame
+    IVI4_FRAMETYPE_NULL_FIRST  = 5,  ///< empty frame with no data
+    IVI4_FRAMETYPE_NULL_LAST   = 6   ///< empty frame with no data
+};
+
 #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
@@ -63,9 +76,6 @@ enum {
     IVI_BLK_HUFF  = 1       /// Huffman table is used for coding blocks
 };
 
-extern VLC ff_ivi_mb_vlc_tabs [8]; ///< static macroblock Huffman tables
-extern VLC ff_ivi_blk_vlc_tabs[8]; ///< static block Huffman tables
-
 
 /**
  *  Common scan patterns (defined in ivi_common.c)
@@ -162,6 +172,7 @@ typedef struct IVIBandDesc {
     int             num_tiles;      ///< number of tiles in this band
     IVITile         *tiles;         ///< array of tile descriptors
     InvTransformPtr *inv_transform;
+    int             transform_size;
     DCTransformPtr  *dc_transform;
     int             is_2d_trans;    ///< 1 indicates that the two-dimensional inverse transform is used
     int32_t         checksum;       ///< for debug purposes
@@ -198,7 +209,6 @@ typedef struct IVIPicConfig {
 
 typedef struct IVI45DecContext {
     GetBitContext   gb;
-    AVFrame         frame;
     RVMapDesc       rvmap_tabs[9];   ///< local corrected copy of the static rvmap tables
 
     uint32_t        frame_num;
@@ -277,17 +287,6 @@ static inline int ivi_scale_mv(int mv, int mv_scale)
     return (mv + (mv > 0) + (mv_scale - 1)) >> mv_scale;
 }
 
-/**
- *  Generate a huffman codebook from the given descriptor
- *  and convert it into the Libav VLC table.
- *
- *  @param[in]   cb    pointer to codebook descriptor
- *  @param[out]  vlc   where to place the generated VLC table
- *  @param[in]   flag  flag: 1 - for static or 0 for dynamic tables
- *  @return     result code: 0 - OK, -1 = error (invalid codebook descriptor)
- */
-int  ff_ivi_create_huff_from_desc(const IVIHuffDesc *cb, VLC *vlc, int flag);
-
 /**
  * Initialize static codes used for macroblock and block decoding.
  */
@@ -307,23 +306,6 @@ void ff_ivi_init_static_vlc(void);
 int  ff_ivi_dec_huff_desc(GetBitContext *gb, int desc_coded, int which_tab,
                           IVIHuffTab *huff_tab, AVCodecContext *avctx);
 
-/**
- *  Compare two huffman codebook descriptors.
- *
- *  @param[in]  desc1  ptr to the 1st descriptor to compare
- *  @param[in]  desc2  ptr to the 2nd descriptor to compare
- *  @return         comparison result: 0 - equal, 1 - not equal
- */
-int  ff_ivi_huff_desc_cmp(const IVIHuffDesc *desc1, const IVIHuffDesc *desc2);
-
-/**
- *  Copy huffman codebook descriptors.
- *
- *  @param[out]  dst  ptr to the destination descriptor
- *  @param[in]   src  ptr to the source descriptor
- */
-void ff_ivi_huff_desc_copy(IVIHuffDesc *dst, const IVIHuffDesc *src);
-
 /**
  *  Initialize planes (prepares descriptors, allocates buffers etc).
  *
@@ -333,13 +315,6 @@ void ff_ivi_huff_desc_copy(IVIHuffDesc *dst, const IVIHuffDesc *src);
  */
 int  ff_ivi_init_planes(IVIPlaneDesc *planes, const IVIPicConfig *cfg);
 
-/**
- *  Free planes, bands and macroblocks buffers.
- *
- *  @param[in]  planes  pointer to the array of the plane descriptors
- */
-void ff_ivi_free_buffers(IVIPlaneDesc *planes);
-
 /**
  *  Initialize tile and macroblock descriptors.
  *
@@ -350,44 +325,8 @@ void ff_ivi_free_buffers(IVIPlaneDesc *planes);
  */
 int  ff_ivi_init_tiles(IVIPlaneDesc *planes, int tile_width, int tile_height);
 
-/**
- *  Decode size of the tile data.
- *  The size is stored as a variable-length field having the following format:
- *  if (tile_data_size < 255) than this field is only one byte long
- *  if (tile_data_size >= 255) than this field four is byte long: 0xFF X1 X2 X3
- *  where X1-X3 is size of the tile data
- *
- *  @param[in,out]  gb  the GetBit context
- *  @return     size of the tile data in bytes
- */
-int  ff_ivi_dec_tile_data_size(GetBitContext *gb);
-
-/**
- *  Decode block data:
- *  extract huffman-coded transform coefficients from the bitstream,
- *  dequantize them, apply inverse transform and motion compensation
- *  in order to reconstruct the picture.
- *
- *  @param[in,out]  gb    the GetBit context
- *  @param[in]      band  pointer to the band descriptor
- *  @param[in]      tile  pointer to the tile descriptor
- *  @return     result code: 0 - OK, -1 = error (corrupted blocks data)
- */
-int  ff_ivi_decode_blocks(GetBitContext *gb, IVIBandDesc *band, IVITile *tile);
-
-/**
- *  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.
- *
- *  @param[in]   plane      pointer to the descriptor of the plane being processed
- *  @param[out]  dst        pointer to the buffer receiving converted pixels
- *  @param[in]   dst_pitch  pitch for moving to the next y line
- */
-void ff_ivi_output_plane(IVIPlaneDesc *plane, uint8_t *dst, int dst_pitch);
-
 int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
                         AVPacket *avpkt);
-av_cold int ff_ivi_decode_close(AVCodecContext *avctx);
+int ff_ivi_decode_close(AVCodecContext *avctx);
 
 #endif /* AVCODEC_IVI_COMMON_H */