/*****************************************************************************
* x264.h: x264 public header
*****************************************************************************
- * Copyright (C) 2003-2013 x264 project
+ * Copyright (C) 2003-2015 x264 project
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Loren Merritt <lorenm@u.washington.edu>
#ifndef X264_X264_H
#define X264_X264_H
-#if !defined(_STDINT_H) && !defined(_STDINT_H_) && !defined(_STDINT_H_INCLUDED) &&\
- !defined(_INTTYPES_H) && !defined(_INTTYPES_H_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(_STDINT_H) && !defined(_STDINT_H_) && !defined(_STDINT_H_INCLUDED) && !defined(_STDINT) &&\
+ !defined(_SYS_STDINT_H_) && !defined(_INTTYPES_H) && !defined(_INTTYPES_H_) && !defined(_INTTYPES)
# ifdef _MSC_VER
# pragma message("You must include stdint.h or inttypes.h before x264.h")
# else
#include "x264_config.h"
-#define X264_BUILD 139
+#define X264_BUILD 148
/* Application developers planning to link against a shared library version of
* libx264 from a Microsoft Visual Studio or similar development environment
* All data returned in an x264_nal_t, including the data in p_payload, is no longer
* valid after the next call to x264_encoder_encode. Thus it must be used or copied
* before calling x264_encoder_encode or x264_encoder_headers again. */
-typedef struct
+typedef struct x264_nal_t
{
int i_ref_idc; /* nal_priority_e */
int i_type; /* nal_unit_type_e */
#define X264_CPU_AVX 0x0000400 /* AVX support: requires OS support even if YMM registers aren't used. */
#define X264_CPU_XOP 0x0000800 /* AMD XOP */
#define X264_CPU_FMA4 0x0001000 /* AMD FMA4 */
-#define X264_CPU_AVX2 0x0002000 /* AVX2 */
-#define X264_CPU_FMA3 0x0004000 /* Intel FMA3 */
+#define X264_CPU_FMA3 0x0002000 /* FMA3 */
+#define X264_CPU_AVX2 0x0004000 /* AVX2 */
#define X264_CPU_BMI1 0x0008000 /* BMI1 */
#define X264_CPU_BMI2 0x0010000 /* BMI2 */
/* x86 modifiers */
/* PowerPC */
#define X264_CPU_ALTIVEC 0x0000001
-/* ARM */
+/* ARM and AArch64 */
#define X264_CPU_ARMV6 0x0000001
#define X264_CPU_NEON 0x0000002 /* ARM NEON */
#define X264_CPU_FAST_NEON_MRC 0x0000004 /* Transfer from NEON to ARM register is fast (Cortex-A9) */
+#define X264_CPU_ARMV8 0x0000008
+
+/* MIPS */
+#define X264_CPU_MSA 0x0000001 /* MIPS MSA */
/* Analyse flags */
#define X264_ANALYSE_I4x4 0x0001 /* Analyse i4x4 */
#define X264_AQ_NONE 0
#define X264_AQ_VARIANCE 1
#define X264_AQ_AUTOVARIANCE 2
+#define X264_AQ_AUTOVARIANCE_BIASED 3
#define X264_B_ADAPT_NONE 0
#define X264_B_ADAPT_FAST 1
#define X264_B_ADAPT_TRELLIS 2
#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_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_NV21 0x0004 /* yuv 4:2:0, with one y plane and one packed v+u */
+#define X264_CSP_I422 0x0005 /* yuv 4:2:2 planar */
+#define X264_CSP_YV16 0x0006 /* yvu 4:2:2 planar */
+#define X264_CSP_NV16 0x0007 /* yuv 4:2:2, with one y plane and one packed u+v */
+#define X264_CSP_V210 0x0008 /* 10-bit yuv 4:2:2 packed in 32 */
+#define X264_CSP_I444 0x0009 /* yuv 4:4:4 planar */
+#define X264_CSP_YV24 0x000a /* yvu 4:4:4 planar */
+#define X264_CSP_BGR 0x000b /* packed bgr 24bits */
+#define X264_CSP_BGRA 0x000c /* packed bgr 32bits */
+#define X264_CSP_RGB 0x000d /* packed rgb 24bits */
+#define X264_CSP_MAX 0x000e /* 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 */
#define X264_TYPE_BREF 0x0004 /* Non-disposable B-frame */
#define X264_TYPE_B 0x0005
#define X264_TYPE_KEYFRAME 0x0006 /* IDR or I depending on b_open_gop option */
-#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR)
+#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR || (x)==X264_TYPE_KEYFRAME)
#define IS_X264_TYPE_B(x) ((x)==X264_TYPE_B || (x)==X264_TYPE_BREF)
/* Log level */
/* Zones: override ratecontrol or other options for specific sections of the video.
* See x264_encoder_reconfig() for which options can be changed.
* If zones overlap, whichever comes later in the list takes precedence. */
-typedef struct
+typedef struct x264_zone_t
{
int i_start, i_end; /* range of frame numbers */
int b_force_qp; /* whether to use qp vs bitrate factor */
int i_bframe_pyramid; /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */
int b_open_gop;
int b_bluray_compat;
- int b_avcintra_compat;
+ int i_avcintra_class;
int b_deblocking_filter;
int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */
void (*pf_log)( void *, int i_level, const char *psz, va_list );
void *p_log_private;
int i_log_level;
- int b_visualize;
int b_full_recon; /* fully reconstruct frames, even when not necessary for encoding. Implied by psz_dump_yuv */
char *psz_dump_yuv; /* filename (in UTF-8) for reconstructed frames */
* H.264 level restriction information
****************************************************************************/
-typedef struct
+typedef struct x264_level_t
{
int level_idc;
int mbps; /* max macroblock processing rate (macroblocks/sec) */
PIC_STRUCT_TRIPLE = 9, // triple frame
};
-typedef struct
+typedef struct x264_hrd_t
{
double cpb_initial_arrival_time;
double cpb_final_arrival_time;
* Payloads are written first in order of input, apart from in the case when HRD
* is enabled where payloads are written after the Buffering Period SEI. */
-typedef struct
+typedef struct x264_sei_payload_t
{
int payload_size;
int payload_type;
uint8_t *payload;
} x264_sei_payload_t;
-typedef struct
+typedef struct x264_sei_t
{
int num_payloads;
x264_sei_payload_t *payloads;
void (*sei_free)( void* );
} x264_sei_t;
-typedef struct
+typedef struct x264_image_t
{
int i_csp; /* Colorspace */
int i_plane; /* Number of image planes */
uint8_t *plane[4]; /* Pointers to each plane */
} x264_image_t;
-typedef struct
+typedef struct x264_image_properties_t
{
/* All arrays of data here are ordered as follows:
* each array contains one offset per macroblock, in raster scan order. In interlaced
double f_crf_avg;
} x264_image_properties_t;
-typedef struct
+typedef struct x264_picture_t
{
/* In: force picture type (if not auto)
* If x264 encoding parameters are violated in the forcing of picture types,
* x264 will correct the input picture type and log a warning.
- * The quality of frametype decisions may suffer if a great deal of fine-grained
- * mixing of auto and forced frametypes is done.
* Out: type of the picture encoded */
int i_type;
/* In: force quantizer for != X264_QP_AUTO */
/* x264_encoder_headers:
* return the SPS and PPS that will be used for the whole stream.
* *pi_nal is the number of NAL units outputted in pp_nal.
+ * returns the number of bytes in the returned NALs.
* returns negative on error.
* the payloads of all output NALs are guaranteed to be sequential in memory. */
int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal );
/* x264_encoder_encode:
* encode one picture.
* *pi_nal is the number of NAL units outputted in pp_nal.
- * returns negative on error, zero if no NAL units returned.
+ * returns the number of bytes in the returned NALs.
+ * returns negative on error and zero if no NAL units returned.
* the payloads of all output NALs are guaranteed to be sequential in memory. */
int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out );
/* x264_encoder_close:
* Returns 0 on success, negative on failure. */
int x264_encoder_invalidate_reference( x264_t *, int64_t pts );
+#ifdef __cplusplus
+}
+#endif
+
#endif