X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=x264.h;h=34ad872c888ac6fd90cf1882bba90f039a1f2432;hb=2701440c515a9a8aee1c87d7c06c98e43c3d813f;hp=cd2fe9cca79bcf9f4e65729ea44873526c97d278;hpb=3d96daca538d849e0b9b88c45f8c3820aed9628e;p=x264 diff --git a/x264.h b/x264.h index cd2fe9cc..34ad872c 100644 --- a/x264.h +++ b/x264.h @@ -1,7 +1,7 @@ /***************************************************************************** * x264.h: x264 public header ***************************************************************************** - * Copyright (C) 2003-2010 x264 project + * Copyright (C) 2003-2011 x264 project * * Authors: Laurent Aimar * Loren Merritt @@ -39,7 +39,9 @@ #include -#define X264_BUILD 107 +#include "x264_config.h" + +#define X264_BUILD 118 /* x264_t: * opaque handler for encoder */ @@ -102,7 +104,8 @@ typedef struct #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 */ @@ -120,6 +123,8 @@ typedef struct #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 */ @@ -143,6 +148,7 @@ typedef struct #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 @@ -150,16 +156,13 @@ typedef struct #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 }; @@ -171,7 +174,6 @@ static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", " 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 /* */ @@ -179,7 +181,15 @@ static const char * const x264_open_gop_names[] = { "none", "normal", "bluray", #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 */ @@ -229,12 +239,13 @@ typedef struct x264_param_t 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 */ @@ -276,7 +287,8 @@ typedef struct x264_param_t 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 */ @@ -291,11 +303,13 @@ typedef struct x264_param_t 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 ); @@ -343,7 +357,7 @@ typedef struct x264_param_t { 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 */ @@ -378,6 +392,19 @@ typedef struct x264_param_t 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 */ @@ -463,7 +490,8 @@ void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal ); * 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) */ @@ -554,7 +582,7 @@ void x264_param_apply_fastfirstpass( x264_param_t * ); /* 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) * @@ -658,10 +686,11 @@ typedef struct * 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. */ @@ -756,6 +785,10 @@ void x264_encoder_close ( x264_t * ); * 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.