]> git.sesse.net Git - x264/blobdiff - x264.h
Fix a buffer overrun with very long MVs.
[x264] / x264.h
diff --git a/x264.h b/x264.h
index a34be810c46309e5cca2e3b872d7502091e78c1d..d8963bf07f0b5374feb96e0b64b968cfa8af5284 100644 (file)
--- a/x264.h
+++ b/x264.h
@@ -24,7 +24,9 @@
 #ifndef _X264_H
 #define _X264_H 1
 
-#define X264_BUILD 0x0008
+#include <stdarg.h>
+
+#define X264_BUILD 0x0013
 
 /* x264_t:
  *      opaque handler for decoder and encoder */
@@ -48,6 +50,10 @@ typedef struct x264_t x264_t;
 #define X264_ANALYSE_I4x4       0x0001  /* Analyse i4x4 */
 #define X264_ANALYSE_PSUB16x16  0x0010  /* Analyse p16x8, p8x16 and p8x8 */
 #define X264_ANALYSE_PSUB8x8    0x0020  /* Analyse p8x4, p4x8, p4x4 */
+#define X264_ANALYSE_BSUB16x16  0x0100  /* Analyse b16x8, b8x16 and b8x8 */
+#define X264_DIRECT_PRED_NONE        0
+#define X264_DIRECT_PRED_SPATIAL     1
+#define X264_DIRECT_PRED_TEMPORAL    2
 
 /* Colorspace type
  */
@@ -71,6 +77,14 @@ typedef struct x264_t x264_t;
 #define X264_TYPE_P             0x0003
 #define X264_TYPE_B             0x0004
 
+/* Log level
+ */
+#define X264_LOG_NONE          (-1)
+#define X264_LOG_ERROR          0
+#define X264_LOG_WARNING        1
+#define X264_LOG_INFO           2
+#define X264_LOG_DEBUG          3
+
 typedef struct
 {
     /* CPU flags */
@@ -80,6 +94,7 @@ typedef struct
     int         i_width;
     int         i_height;
     int         i_csp;  /* CSP of encoded bitstream, only i420 supported */
+    int         i_level_idc; 
 
     struct
     {
@@ -88,13 +103,18 @@ typedef struct
         int         i_sar_width;
     } vui;
 
-    float       f_fps;  /* Used for rate control only */
+    int         i_fps_num;
+    int         i_fps_den;
+    int         i_maxframes;        /* Maximum number of frames to read from input file and encode, 0=unlimited */
 
     /* Bitstream parameters */
     int         i_frame_reference;  /* Maximum number of reference frames */
-    int         i_idrframe; /* every i_idrframe I frame are marked as IDR */
-    int         i_iframe;   /* every i_iframe are intra */
+    int         i_keyint_max;       /* Force an IDR keyframe at this interval */
+    int         i_keyint_min;       /* Scenecuts closer together than this are coded as I, not IDR. */
+    int         i_scenecut_threshold; /* how aggressively to insert extra I frames */
     int         i_bframe;   /* how many b-frame between 2 references pictures */
+    int         b_bframe_adaptive;
+    int         i_bframe_bias;
 
     int         b_deblocking_filter;
     int         i_deblocking_filter_alphac0;    /* [-6, 6] -6 light filter, 6 strong */
@@ -103,26 +123,56 @@ typedef struct
     int         b_cabac;
     int         i_cabac_init_idc;
 
-    int         i_qp_constant;  /* 1-51 */
-    int         i_qp_min;       /* min allowed QP value */
-    int         i_qp_max;       /* max allowed QP value */
-    int         i_qp_step;      /* max QP step between frames */
 
-    int         b_cbr;          /* constant bitrate */
-    int         i_bitrate;
-    int         i_rc_buffer_size;
-    int         i_rc_init_buffer;
-    int         i_rc_sens;      /* rate control sensitivity */
-    float       f_ip_factor;
-    float       f_pb_factor;
+    /* Log */
+    void        (*pf_log)( void *, int i_level, const char *psz, va_list );
+    void        *p_log_private;
+    int         i_log_level;
 
     /* Encoder analyser parameters */
     struct
     {
         unsigned int intra;     /* intra flags */
         unsigned int inter;     /* inter flags */
+
+        int          i_direct_mv_pred; /* spatial vs temporal mv prediction */
+        int          i_subpel_refine; /* subpixel motion estimation quality */
+        int          i_mv_range; /* maximum length of a mv (in pixels) */
+
+        int          b_weighted_bipred; /* implicit weighting for B-frames */
+
+        int          b_psnr;    /* Do we compute PSNR stats (save a few % of cpu) */
     } analyse;
 
+    /* Rate control parameters */
+    struct
+    {
+        int         i_qp_constant;  /* 1-51 */
+        int         i_qp_min;       /* min allowed QP value */
+        int         i_qp_max;       /* max allowed QP value */
+        int         i_qp_step;      /* max QP step between frames */
+
+        int         b_cbr;          /* constant bitrate */
+        int         i_bitrate;
+        int         i_rc_buffer_size;
+        int         i_rc_init_buffer;
+        int         i_rc_sens;      /* rate control sensitivity */
+        float       f_ip_factor;
+        float       f_pb_factor;
+
+        /* 2pass */
+        int         b_stat_write;   /* Enable stat writing in psz_stat_out */
+        char        *psz_stat_out;
+        int         b_stat_read;    /* Read stat from psz_stat_in and use it */
+        char        *psz_stat_in;
+
+        /* 2pass params (same than ffmpeg ones) */
+        char        *psz_rc_eq;     /* 2 pass rate control equation */
+        float       f_qcompress;    /* 0.0 => cbr, 1.0 => constant qp */
+        float       f_qblur;        /* temporally blur quants */
+        float       f_complexity_blur; /* temporally blur complexity */
+    } rc;
+
 } x264_param_t;
 
 /* x264_param_default:
@@ -221,7 +271,7 @@ x264_t *x264_encoder_open   ( x264_param_t * );
 int     x264_encoder_headers( x264_t *, x264_nal_t **, int * );
 /* x264_encoder_encode:
  *      encode one picture */
-int     x264_encoder_encode ( x264_t *, x264_nal_t **, int *, x264_picture_t * );
+int     x264_encoder_encode ( x264_t *, x264_nal_t **, int *, x264_picture_t *, x264_picture_t * );
 /* x264_encoder_close:
  *      close an encoder handler */
 void    x264_encoder_close  ( x264_t * );