]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/intrax8.h
mpeg12dec: move setting first_field to mpeg_field_start()
[ffmpeg] / libavcodec / intrax8.h
index f30801e38ba59101f7cd176d8ecc5dc082a1e476..ad172b16bed4fd643c522ba68fec2c55ccc09e84 100644 (file)
@@ -19,8 +19,8 @@
 #ifndef AVCODEC_INTRAX8_H
 #define AVCODEC_INTRAX8_H
 
+#include "blockdsp.h"
 #include "get_bits.h"
-#include "mpegvideo.h"
 #include "idctdsp.h"
 #include "intrax8dsp.h"
 #include "mpegpicture.h"
@@ -35,16 +35,20 @@ typedef struct IntraX8Context {
     // set by ff_intrax8_common_init
     uint8_t *prediction_table; // 2 * (mb_w * 2)
     ScanTable scantable[3];
+    AVCodecContext *avctx;
+    int *block_last_index;  ///< last nonzero coefficient in block
+    int16_t (*block)[64];
 
     // set by the caller codec
-    MpegEncContext *s;
     IntraX8DSPContext dsp;
     IDCTDSPContext idsp;
+    BlockDSPContext bdsp;
     int quant;
     int dquant;
     int qsum;
     int loopfilter;
     AVFrame *frame;
+    GetBitContext *gb;
 
     // calculated per frame
     int quant_dc_chroma;
@@ -61,18 +65,28 @@ typedef struct IntraX8Context {
     int chroma_orient;
     int orient;
     int est_run;
+
+    // block props
+    int mb_x, mb_y;
+    int mb_width, mb_height;
 } IntraX8Context;
 
 /**
  * Initialize IntraX8 frame decoder.
- * Requires valid MpegEncContext with valid s->mb_width before calling.
+ * @param avctx pointer to AVCodecContext
  * @param w pointer to IntraX8Context
  * @param idsp pointer to IDCTDSPContext
- * @param s pointer to MpegEncContext of the parent codec
+ * @param block pointer to block array
+ * @param block_last_index pointer to index array
+ * @param mb_width macroblock width
+ * @param mb_height macroblock height
  * @return 0 on success, a negative AVERROR value on error
  */
-int ff_intrax8_common_init(IntraX8Context *w, IDCTDSPContext *idsp,
-                           MpegEncContext *const s);
+int ff_intrax8_common_init(AVCodecContext *avctx,
+                           IntraX8Context *w, IDCTDSPContext *idsp,
+                           int16_t (*block)[64],
+                           int block_last_index[12],
+                           int mb_width, int mb_height);
 
 /**
  * Destroy IntraX8 frame structure.
@@ -82,17 +96,18 @@ void ff_intrax8_common_end(IntraX8Context *w);
 
 /**
  * Decode single IntraX8 frame.
- * The parent codec must fill s->gb (bitstream).
- * The parent codec must call ff_mpv_frame_start() before calling this function.
- * The parent codec must call ff_mpv_frame_end() after calling this function.
- * This function does not use ff_mpv_decode_mb().
  * @param w pointer to IntraX8Context
  * @param pict the output Picture containing an AVFrame
+ * @param gb open bitstream reader
+ * @param mb_x pointer to the x coordinate of the current macroblock
+ * @param mb_y pointer to the y coordinate of the current macroblock
  * @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1.
  * @param quant_offset offset away from zero
  * @param loopfilter enable filter after decoding a block
  */
 int ff_intrax8_decode_picture(IntraX8Context *w, Picture *pict,
-                              int quant, int halfpq, int loopfilter);
+                              GetBitContext *gb, int *mb_x, int *mb_y,
+                              int quant, int halfpq,
+                              int loopfilter, int lowdelay);
 
 #endif /* AVCODEC_INTRAX8_H */