/*****************************************************************************
* x264.h: x264 public header
*****************************************************************************
- * Copyright (C) 2003-2010 x264 project
+ * Copyright (C) 2003-2011 x264 project
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Loren Merritt <lorenm@u.washington.edu>
#include <stdarg.h>
-#define X264_BUILD 107
+#include "x264_config.h"
+
+#define X264_BUILD 118
/* x264_t:
* opaque handler for encoder */
#define X264_CPU_CACHELINE_64 0x000002 /* 32/64 is the size of a cacheline in bytes */
#define X264_CPU_ALTIVEC 0x000004
#define X264_CPU_MMX 0x000008
-#define X264_CPU_MMXEXT 0x000010 /* MMX2 aka MMXEXT aka ISSE */
+#define X264_CPU_MMX2 0x000010 /* MMX2 aka MMXEXT aka ISSE */
+#define X264_CPU_MMXEXT X264_CPU_MMX2
#define X264_CPU_SSE 0x000020
#define X264_CPU_SSE2 0x000040
#define X264_CPU_SSE2_IS_SLOW 0x000080 /* avoid most SSE2 functions on Athlon64 */
#define X264_CPU_FAST_NEON_MRC 0x080000 /* Transfer from NEON to ARM register is fast (Cortex-A9) */
#define X264_CPU_SLOW_CTZ 0x100000 /* BSR/BSF x86 instructions are really slow on some CPUs */
#define X264_CPU_SLOW_ATOM 0x200000 /* The Atom just sucks */
+#define X264_CPU_AVX 0x400000 /* AVX support: requires OS support even if YMM registers
+ * aren't used. */
/* Analyse flags
*/
#define X264_RC_CQP 0
#define X264_RC_CRF 1
#define X264_RC_ABR 2
+#define X264_QP_AUTO 0
#define X264_AQ_NONE 0
#define X264_AQ_VARIANCE 1
#define X264_AQ_AUTOVARIANCE 2
#define X264_B_ADAPT_FAST 1
#define X264_B_ADAPT_TRELLIS 2
#define X264_WEIGHTP_NONE 0
-#define X264_WEIGHTP_BLIND 1
+#define X264_WEIGHTP_SIMPLE 1
#define X264_WEIGHTP_SMART 2
#define X264_B_PYRAMID_NONE 0
#define X264_B_PYRAMID_STRICT 1
#define X264_B_PYRAMID_NORMAL 2
#define X264_KEYINT_MIN_AUTO 0
#define X264_KEYINT_MAX_INFINITE (1<<30)
-#define X264_OPEN_GOP_NONE 0
-#define X264_OPEN_GOP_NORMAL 1
-#define X264_OPEN_GOP_BLURAY 2
static const char * const x264_direct_pred_names[] = { "none", "spatial", "temporal", "auto", 0 };
static const char * const x264_motion_est_names[] = { "dia", "hex", "umh", "esa", "tesa", 0 };
static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316", 0 };
static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", 0 };
static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 };
-static const char * const x264_open_gop_names[] = { "none", "normal", "bluray", 0 };
/* Colorspace type */
#define X264_CSP_MASK 0x00ff /* */
#define X264_CSP_I420 0x0001 /* yuv 4:2:0 planar */
#define X264_CSP_YV12 0x0002 /* yvu 4:2:0 planar */
#define X264_CSP_NV12 0x0003 /* yuv 4:2:0, with one y plane and one packed u+v */
-#define X264_CSP_MAX 0x0004 /* end of list */
+#define X264_CSP_I422 0x0004 /* yuv 4:2:2 planar */
+#define X264_CSP_YV16 0x0005 /* yvu 4:2:2 planar */
+#define X264_CSP_NV16 0x0006 /* yuv 4:2:2, with one y plane and one packed u+v */
+#define X264_CSP_I444 0x0007 /* yuv 4:4:4 planar */
+#define X264_CSP_YV24 0x0008 /* yvu 4:4:4 planar */
+#define X264_CSP_BGR 0x0009 /* packed bgr 24bits */
+#define X264_CSP_BGRA 0x000a /* packed bgr 32bits */
+#define X264_CSP_RGB 0x000b /* packed rgb 24bits */
+#define X264_CSP_MAX 0x000c /* end of list */
#define X264_CSP_VFLIP 0x1000 /* the csp is vertically flipped */
#define X264_CSP_HIGH_DEPTH 0x2000 /* the csp has a depth of 16 bits per pixel component */
int i_threads; /* encode multiple frames in parallel */
int b_sliced_threads; /* Whether to use slice-based threading. */
int b_deterministic; /* whether to allow non-deterministic optimizations when threaded */
+ int b_cpu_independent; /* force canonical behavior rather than cpu-dependent optimal algorithms */
int i_sync_lookahead; /* threaded lookahead buffer */
/* Video Properties */
int i_width;
int i_height;
- int i_csp; /* CSP of encoded bitstream, only i420 supported */
+ int i_csp; /* CSP of encoded bitstream */
int i_level_idc;
int i_frame_total; /* number of frames to encode if known, else 0 */
int i_bframe_adaptive;
int i_bframe_bias;
int i_bframe_pyramid; /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */
- int i_open_gop; /* Open gop: 1=display order, 2=bluray compatibility braindamage mode */
+ int b_open_gop;
+ int b_bluray_compat;
int b_deblocking_filter;
int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */
int i_cqm_preset;
char *psz_cqm_file; /* JM format */
uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */
- uint8_t cqm_4ic[16];
uint8_t cqm_4py[16];
+ uint8_t cqm_4ic[16];
uint8_t cqm_4pc[16];
uint8_t cqm_8iy[64];
uint8_t cqm_8py[64];
+ uint8_t cqm_8ic[64];
+ uint8_t cqm_8pc[64];
/* Log */
void (*pf_log)( void *, int i_level, const char *psz, va_list );
{
int i_rc_method; /* X264_RC_* */
- int i_qp_constant; /* 0 to (51 + 6*(x264_bit_depth-8)) */
+ int i_qp_constant; /* 0 to (51 + 6*(x264_bit_depth-8)). 0=lossless */
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 */
char *psz_zones; /* alternate method of specifying zones */
} rc;
+ /* Cropping Rectangle parameters: added to those implicitly defined by
+ non-mod16 video resolutions. */
+ struct
+ {
+ unsigned int i_left;
+ unsigned int i_top;
+ unsigned int i_right;
+ unsigned int i_bottom;
+ } crop_rect;
+
+ /* frame packing arrangement flag */
+ int i_frame_packing;
+
/* Muxing parameters */
int b_aud; /* generate access unit delimiters */
int b_repeat_headers; /* put SPS/PPS before each keyframe */
* H.264 level restriction information
****************************************************************************/
-typedef struct {
+typedef struct
+{
int level_idc;
int mbps; /* max macroblock processing rate (macroblocks/sec) */
int frame_size; /* max frame size (macroblocks) */
/* x264_param_apply_profile:
* Applies the restrictions of the given profile.
* Currently available profiles are, from most to least restrictive: */
-static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", 0 };
+static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 };
/* (can be NULL, in which case the function will do nothing)
*
* mixing of auto and forced frametypes is done.
* Out: type of the picture encoded */
int i_type;
- /* In: force quantizer for > 0 */
+ /* In: force quantizer for != X264_QP_AUTO */
int i_qpplus1;
- /* In: pic_struct, for pulldown/doubling/etc...used only if b_pic_timing_sei=1.
- * use pic_struct_e for pic_struct inputs */
+ /* In: pic_struct, for pulldown/doubling/etc...used only if b_pic_struct=1.
+ * use pic_struct_e for pic_struct inputs
+ * Out: pic_struct element associated with frame */
int i_pic_struct;
/* Out: whether this frame is a keyframe. Important when using modes that result in
* SEI recovery points being used instead of IDR frames. */
* return the number of currently delayed (buffered) frames
* this should be used at the end of the stream, to know when you have all the encoded frames. */
int x264_encoder_delayed_frames( x264_t * );
+/* x264_encoder_maximum_delayed_frames( x264_t *h ):
+ * return the maximum number of delayed (buffered) frames that can occur with the current
+ * parameters. */
+int x264_encoder_maximum_delayed_frames( x264_t *h );
/* x264_encoder_intra_refresh:
* If an intra refresh is not in progress, begin one with the next P-frame.
* If an intra refresh is in progress, begin one as soon as the current one finishes.