]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/intrax8.h
avcodec/tak_parser: fix parsing of streams with bunch of small frames at end
[ffmpeg] / libavcodec / intrax8.h
index 998178540373651c2a2351ffd29e2e24ccb766b4..c2e45017f22a2e67075f23910af81b7d3a93615a 100644 (file)
 #include "wmv2dsp.h"
 
 typedef struct IntraX8Context {
-    VLC * j_ac_vlc[4];//they point to the static j_mb_vlc
-    VLC * j_orient_vlc;
-    VLC * j_dc_vlc[3];
+    VLC *j_ac_vlc[4]; // they point to the static j_mb_vlc
+    VLC *j_orient_vlc;
+    VLC *j_dc_vlc[3];
 
     int use_quant_matrix;
-//set by ff_intrax8_common_init
-    uint8_t * prediction_table;//2*(mb_w*2)
+
+    // set by ff_intrax8_common_init
+    uint8_t *prediction_table; // 2 * (mb_w * 2)
     ScanTable scantable[3];
     WMV2DSPContext wdsp;
     uint8_t idct_permutation[64];
-//set by the caller codec
+
+    //set by the caller codec
     MpegEncContext * s;
     IntraX8DSPContext dsp;
     int quant;
     int dquant;
     int qsum;
-//calculated per frame
+
+    // calculated per frame
     int quant_dc_chroma;
     int divide_quant_dc_luma;
     int divide_quant_dc_chroma;
-//changed per block
+
+    // changed per block
     int edges;
     int flat_dc;
     int predicted_dc;
@@ -55,8 +59,32 @@ typedef struct IntraX8Context {
     int est_run;
 } IntraX8Context;
 
-void ff_intrax8_common_init(IntraX8Context * w, MpegEncContext * const s);
-void ff_intrax8_common_end(IntraX8Context * w);
-int  ff_intrax8_decode_picture(IntraX8Context * w, int quant, int halfpq);
+/**
+ * Initialize IntraX8 frame decoder.
+ * Requires valid MpegEncContext with valid s->mb_width before calling.
+ * @param w pointer to IntraX8Context
+ * @param s pointer to MpegEncContext of the parent codec
+ * @return 0 on success, a negative AVERROR value on error
+ */
+int ff_intrax8_common_init(IntraX8Context *w, MpegEncContext *const s);
+
+/**
+ * Destroy IntraX8 frame structure.
+ * @param w pointer to IntraX8Context
+ */
+void ff_intrax8_common_end(IntraX8Context *w);
+
+/**
+ * Decode single IntraX8 frame.
+ * The parent codec must fill s->loopfilter and 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().
+ * lowres decoding is theoretically impossible.
+ * @param w pointer to IntraX8Context
+ * @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1.
+ * @param quant_offset offset away from zero
+ */
+int ff_intrax8_decode_picture(IntraX8Context *w, int quant, int halfpq);
 
 #endif /* AVCODEC_INTRAX8_H */