]> git.sesse.net Git - x264/blobdiff - x264.h
make install
[x264] / x264.h
diff --git a/x264.h b/x264.h
index 16a969f7969671cc9d0965d29c8c6619d5919e15..c7b47e5264321d8d4454213d70625e859375ac4a 100644 (file)
--- a/x264.h
+++ b/x264.h
@@ -24,7 +24,9 @@
 #ifndef _X264_H
 #define _X264_H 1
 
-#define X264_BUILD 0x0009
+#include <stdarg.h>
+
+#define X264_BUILD 22
 
 /* 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
  */
@@ -69,7 +75,10 @@ typedef struct x264_t x264_t;
 #define X264_TYPE_IDR           0x0001
 #define X264_TYPE_I             0x0002
 #define X264_TYPE_P             0x0003
-#define X264_TYPE_B             0x0004
+#define X264_TYPE_BREF          0x0004  /* Non-disposable B-frame */
+#define X264_TYPE_B             0x0005
+#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR)
+#define IS_X264_TYPE_B(x) ((x)==X264_TYPE_B || (x)==X264_TYPE_BREF)
 
 /* Log level
  */
@@ -88,6 +97,7 @@ typedef struct
     int         i_width;
     int         i_height;
     int         i_csp;  /* CSP of encoded bitstream, only i420 supported */
+    int         i_level_idc; 
 
     struct
     {
@@ -98,12 +108,17 @@ typedef struct
 
     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_bframe_pyramid;   /* Keep some B-frames as references */
 
     int         b_deblocking_filter;
     int         i_deblocking_filter_alphac0;    /* [-6, 6] -6 light filter, 6 strong */
@@ -112,18 +127,6 @@ 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 );
@@ -135,8 +138,48 @@ typedef 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          b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */
+        int          i_mv_range; /* maximum length of a mv (in pixels) */
+
+        int          b_weighted_bipred; /* implicit weighting for B-frames */
+
+        int          i_chroma_qp_offset;
+
+        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:
@@ -235,7 +278,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 * );