]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mpeg4video.h
v210: Add avx2 version of the 10-bit line encoder
[ffmpeg] / libavcodec / mpeg4video.h
index c22fbfd34ddcd0d7d1a25fa72a5102ab7f7a24e8..252029cd3a98677865a44c52c28c9c63c8e16075 100644 (file)
 #define VISUAL_OBJ_STARTCODE 0x1B5
 #define VOP_STARTCODE        0x1B6
 
+typedef struct Mpeg4DecContext {
+    MpegEncContext m;
+
+    /// number of bits to represent the fractional part of time
+    int time_increment_bits;
+    int shape;
+    int vol_sprite_usage;
+    int sprite_brightness_change;
+    int num_sprite_warping_points;
+    /// sprite trajectory points
+    uint16_t sprite_traj[4][2];
+    /// sprite shift [isChroma]
+    int sprite_shift[2];
+
+    // reversible vlc
+    int rvlc;
+    /// could this stream contain resync markers
+    int resync_marker;
+    /// time distance of first I -> B, used for interlaced B-frames
+    int t_frame;
+
+    int new_pred;
+    int enhancement_type;
+    int scalability;
+    int use_intra_dc_vlc;
+    /// QP above which the ac VLC should be used for intra dc
+    int intra_dc_threshold;
+
+    /* bug workarounds */
+    int divx_version;
+    int divx_build;
+    int xvid_build;
+    int lavc_build;
+    /// flag for having shown the warning about invalid Divx B-frames
+    int showed_packed_warning;
+    /** does the stream contain the low_delay flag,
+     *  used to work around buggy encoders. */
+    int vol_control_parameters;
+    int cplx_estimation_trash_i;
+    int cplx_estimation_trash_p;
+    int cplx_estimation_trash_b;
+} Mpeg4DecContext;
+
 /* dc encoding for mpeg4 */
 extern const uint8_t ff_mpeg4_DCtab_lum[13][2];
 extern const uint8_t ff_mpeg4_DCtab_chrom[13][2];
@@ -94,17 +137,18 @@ void ff_mpeg4_pred_ac(MpegEncContext *s, int16_t *block, int n,
 void ff_set_mpeg4_time(MpegEncContext *s);
 void ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);
 
-int ff_mpeg4_decode_picture_header(MpegEncContext *s, GetBitContext *gb);
+int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb);
 void ff_mpeg4_encode_video_packet_header(MpegEncContext *s);
 void ff_mpeg4_clean_buffers(MpegEncContext *s);
 void ff_mpeg4_stuffing(PutBitContext *pbc);
 void ff_mpeg4_init_partitions(MpegEncContext *s);
 void ff_mpeg4_merge_partitions(MpegEncContext *s);
 void ff_clean_mpeg4_qscales(MpegEncContext *s);
-int ff_mpeg4_decode_partitions(MpegEncContext *s);
+int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx);
 int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s);
-int ff_mpeg4_decode_video_packet_header(MpegEncContext *s);
+int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx);
 void ff_mpeg4_init_direct_mv(MpegEncContext *s);
+int ff_mpeg4_frame_end(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
 
 /**
  *
@@ -179,7 +223,7 @@ static inline int ff_mpeg4_pred_dc(MpegEncContext *s, int n, int level,
     } else {
         level += pred;
         ret    = level;
-        if (s->err_recognition & AV_EF_BITSTREAM) {
+        if (s->avctx->err_recognition & AV_EF_BITSTREAM) {
             if (level < 0) {
                 av_log(s->avctx, AV_LOG_ERROR,
                        "dc<0 at %dx%d\n", s->mb_x, s->mb_y);