123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965 |
- #ifndef X264_X264_H
- #define X264_X264_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
- # warning You must include stdint.h or inttypes.h before x264.h
- # endif
- #endif
- #include <stdarg.h>
- #include "x264_config.h"
- #define X264_BUILD 157
- #ifdef X264_API_IMPORTS
- #define X264_API __declspec(dllimport)
- #else
- #define X264_API
- #endif
- typedef struct x264_t x264_t;
- enum nal_unit_type_e
- {
- NAL_UNKNOWN = 0,
- NAL_SLICE = 1,
- NAL_SLICE_DPA = 2,
- NAL_SLICE_DPB = 3,
- NAL_SLICE_DPC = 4,
- NAL_SLICE_IDR = 5,
- NAL_SEI = 6,
- NAL_SPS = 7,
- NAL_PPS = 8,
- NAL_AUD = 9,
- NAL_FILLER = 12,
-
- };
- enum nal_priority_e
- {
- NAL_PRIORITY_DISPOSABLE = 0,
- NAL_PRIORITY_LOW = 1,
- NAL_PRIORITY_HIGH = 2,
- NAL_PRIORITY_HIGHEST = 3,
- };
- typedef struct x264_nal_t
- {
- int i_ref_idc;
- int i_type;
- int b_long_startcode;
- int i_first_mb;
- int i_last_mb;
-
- int i_payload;
-
- uint8_t *p_payload;
-
- int i_padding;
- } x264_nal_t;
- #define X264_CPU_MMX (1<<0)
- #define X264_CPU_MMX2 (1<<1)
- #define X264_CPU_MMXEXT X264_CPU_MMX2
- #define X264_CPU_SSE (1<<2)
- #define X264_CPU_SSE2 (1<<3)
- #define X264_CPU_LZCNT (1<<4)
- #define X264_CPU_SSE3 (1<<5)
- #define X264_CPU_SSSE3 (1<<6)
- #define X264_CPU_SSE4 (1<<7)
- #define X264_CPU_SSE42 (1<<8)
- #define X264_CPU_AVX (1<<9)
- #define X264_CPU_XOP (1<<10)
- #define X264_CPU_FMA4 (1<<11)
- #define X264_CPU_FMA3 (1<<12)
- #define X264_CPU_BMI1 (1<<13)
- #define X264_CPU_BMI2 (1<<14)
- #define X264_CPU_AVX2 (1<<15)
- #define X264_CPU_AVX512 (1<<16)
- #define X264_CPU_CACHELINE_32 (1<<17)
- #define X264_CPU_CACHELINE_64 (1<<18)
- #define X264_CPU_SSE2_IS_SLOW (1<<19)
- #define X264_CPU_SSE2_IS_FAST (1<<20)
- #define X264_CPU_SLOW_SHUFFLE (1<<21)
- #define X264_CPU_STACK_MOD4 (1<<22)
- #define X264_CPU_SLOW_ATOM (1<<23)
- #define X264_CPU_SLOW_PSHUFB (1<<24)
- #define X264_CPU_SLOW_PALIGNR (1<<25)
- #define X264_CPU_ALTIVEC 0x0000001
- #define X264_CPU_ARMV6 0x0000001
- #define X264_CPU_NEON 0x0000002
- #define X264_CPU_FAST_NEON_MRC 0x0000004
- #define X264_CPU_ARMV8 0x0000008
- #define X264_CPU_MSA 0x0000001
- #define X264_ANALYSE_I4x4 0x0001
- #define X264_ANALYSE_I8x8 0x0002
- #define X264_ANALYSE_PSUB16x16 0x0010
- #define X264_ANALYSE_PSUB8x8 0x0020
- #define X264_ANALYSE_BSUB16x16 0x0100
- #define X264_DIRECT_PRED_NONE 0
- #define X264_DIRECT_PRED_SPATIAL 1
- #define X264_DIRECT_PRED_TEMPORAL 2
- #define X264_DIRECT_PRED_AUTO 3
- #define X264_ME_DIA 0
- #define X264_ME_HEX 1
- #define X264_ME_UMH 2
- #define X264_ME_ESA 3
- #define X264_ME_TESA 4
- #define X264_CQM_FLAT 0
- #define X264_CQM_JVT 1
- #define X264_CQM_CUSTOM 2
- #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_AQ_AUTOVARIANCE_BIASED 3
- #define X264_B_ADAPT_NONE 0
- #define X264_B_ADAPT_FAST 1
- #define X264_B_ADAPT_TRELLIS 2
- #define X264_WEIGHTP_NONE 0
- #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_AVCINTRA_FLAVOR_PANASONIC 0
- #define X264_AVCINTRA_FLAVOR_SONY 1
- 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_b_pyramid_names[] = { "none", "strict", "normal", 0 };
- static const char * const x264_overscan_names[] = { "undef", "show", "crop", 0 };
- static const char * const x264_vidformat_names[] = { "component", "pal", "ntsc", "secam", "mac", "undef", 0 };
- static const char * const x264_fullrange_names[] = { "off", "on", 0 };
- static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "film", "bt2020", "smpte428",
- "smpte431", "smpte432", 0 };
- static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316",
- "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 };
- static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", "bt2020nc", "bt2020c",
- "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 };
- static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 };
- static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", 0 };
- #define X264_CSP_MASK 0x00ff
- #define X264_CSP_NONE 0x0000
- #define X264_CSP_I400 0x0001
- #define X264_CSP_I420 0x0002
- #define X264_CSP_YV12 0x0003
- #define X264_CSP_NV12 0x0004
- #define X264_CSP_NV21 0x0005
- #define X264_CSP_I422 0x0006
- #define X264_CSP_YV16 0x0007
- #define X264_CSP_NV16 0x0008
- #define X264_CSP_YUYV 0x0009
- #define X264_CSP_UYVY 0x000a
- #define X264_CSP_V210 0x000b
- #define X264_CSP_I444 0x000c
- #define X264_CSP_YV24 0x000d
- #define X264_CSP_BGR 0x000e
- #define X264_CSP_BGRA 0x000f
- #define X264_CSP_RGB 0x0010
- #define X264_CSP_MAX 0x0011
- #define X264_CSP_VFLIP 0x1000
- #define X264_CSP_HIGH_DEPTH 0x2000
- #define X264_TYPE_AUTO 0x0000
- #define X264_TYPE_IDR 0x0001
- #define X264_TYPE_I 0x0002
- #define X264_TYPE_P 0x0003
- #define X264_TYPE_BREF 0x0004
- #define X264_TYPE_B 0x0005
- #define X264_TYPE_KEYFRAME 0x0006
- #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)
- #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
- #define X264_THREADS_AUTO 0
- #define X264_SYNC_LOOKAHEAD_AUTO (-1)
- #define X264_NAL_HRD_NONE 0
- #define X264_NAL_HRD_VBR 1
- #define X264_NAL_HRD_CBR 2
- typedef struct x264_zone_t
- {
- int i_start, i_end;
- int b_force_qp;
- int i_qp;
- float f_bitrate_factor;
- struct x264_param_t *param;
- } x264_zone_t;
- typedef struct x264_param_t
- {
-
- unsigned int cpu;
- int i_threads;
- int i_lookahead_threads;
- int b_sliced_threads;
- int b_deterministic;
- int b_cpu_independent;
- int i_sync_lookahead;
-
- int i_width;
- int i_height;
- int i_csp;
- int i_bitdepth;
- int i_level_idc;
- int i_frame_total;
-
- int i_nal_hrd;
- struct
- {
-
- int i_sar_height;
- int i_sar_width;
- int i_overscan;
-
- int i_vidformat;
- int b_fullrange;
- int i_colorprim;
- int i_transfer;
- int i_colmatrix;
- int i_chroma_loc;
- } vui;
-
- int i_frame_reference;
- int i_dpb_size;
- int i_keyint_max;
- int i_keyint_min;
- int i_scenecut_threshold;
- int b_intra_refresh;
- int i_bframe;
- int i_bframe_adaptive;
- int i_bframe_bias;
- int i_bframe_pyramid;
- int b_open_gop;
- int b_bluray_compat;
- int i_avcintra_class;
- int i_avcintra_flavor;
- int b_deblocking_filter;
- int i_deblocking_filter_alphac0;
- int i_deblocking_filter_beta;
- int b_cabac;
- int i_cabac_init_idc;
- int b_interlaced;
- int b_constrained_intra;
- int i_cqm_preset;
- char *psz_cqm_file;
- uint8_t cqm_4iy[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];
-
- void (*pf_log)( void *, int i_level, const char *psz, va_list );
- void *p_log_private;
- int i_log_level;
- int b_full_recon;
- char *psz_dump_yuv;
-
- struct
- {
- unsigned int intra;
- unsigned int inter;
- int b_transform_8x8;
- int i_weighted_pred;
- int b_weighted_bipred;
- int i_direct_mv_pred;
- int i_chroma_qp_offset;
- int i_me_method;
- int i_me_range;
- int i_mv_range;
- int i_mv_range_thread;
- int i_subpel_refine;
- int b_chroma_me;
- int b_mixed_references;
- int i_trellis;
- int b_fast_pskip;
- int b_dct_decimate;
- int i_noise_reduction;
- float f_psy_rd;
- float f_psy_trellis;
- int b_psy;
- int b_mb_info;
- int b_mb_info_update;
-
- int i_luma_deadzone[2];
- int b_psnr;
- int b_ssim;
- } analyse;
-
- struct
- {
- int i_rc_method;
- int i_qp_constant;
- int i_qp_min;
- int i_qp_max;
- int i_qp_step;
- int i_bitrate;
- float f_rf_constant;
- float f_rf_constant_max;
- float f_rate_tolerance;
- int i_vbv_max_bitrate;
- int i_vbv_buffer_size;
- float f_vbv_buffer_init;
- float f_ip_factor;
- float f_pb_factor;
-
- int b_filler;
- int i_aq_mode;
- float f_aq_strength;
- int b_mb_tree;
- int i_lookahead;
-
- int b_stat_write;
- char *psz_stat_out;
- int b_stat_read;
- char *psz_stat_in;
-
- float f_qcompress;
- float f_qblur;
- float f_complexity_blur;
- x264_zone_t *zones;
- int i_zones;
- char *psz_zones;
- } rc;
-
- struct
- {
- unsigned int i_left;
- unsigned int i_top;
- unsigned int i_right;
- unsigned int i_bottom;
- } crop_rect;
-
- int i_frame_packing;
-
- int i_alternative_transfer;
-
- int b_aud;
- int b_repeat_headers;
- int b_annexb;
- int i_sps_id;
- int b_vfr_input;
- int b_pulldown;
- uint32_t i_fps_num;
- uint32_t i_fps_den;
- uint32_t i_timebase_num;
- uint32_t i_timebase_den;
- int b_tff;
-
- int b_pic_struct;
-
- int b_fake_interlaced;
-
- int b_stitchable;
- int b_opencl;
- int i_opencl_device;
- void *opencl_device_id;
- char *psz_clbin_file;
-
- int i_slice_max_size;
- int i_slice_max_mbs;
- int i_slice_min_mbs;
- int i_slice_count;
- int i_slice_count_max;
-
- void (*param_free)( void* );
-
- void (*nalu_process)( x264_t *h, x264_nal_t *nal, void *opaque );
- } x264_param_t;
- void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal );
- typedef struct x264_level_t
- {
- uint8_t level_idc;
- uint32_t mbps;
- uint32_t frame_size;
- uint32_t dpb;
- uint32_t bitrate;
- uint32_t cpb;
- uint16_t mv_range;
- uint8_t mvs_per_2mb;
- uint8_t slice_rate;
- uint8_t mincr;
- uint8_t bipred8x8;
- uint8_t direct8x8;
- uint8_t frame_only;
- } x264_level_t;
- X264_API extern const x264_level_t x264_levels[];
- void x264_param_default( x264_param_t * );
- #define X264_PARAM_BAD_NAME (-1)
- #define X264_PARAM_BAD_VALUE (-2)
- int x264_param_parse( x264_param_t *, const char *name, const char *value );
- static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 };
- static const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 };
- int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune );
- void x264_param_apply_fastfirstpass( x264_param_t * );
- static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 };
- int x264_param_apply_profile( x264_param_t *, const char *profile );
- X264_API extern const int x264_chroma_format;
- enum pic_struct_e
- {
- PIC_STRUCT_AUTO = 0,
- PIC_STRUCT_PROGRESSIVE = 1,
-
- PIC_STRUCT_TOP_BOTTOM = 4,
- PIC_STRUCT_BOTTOM_TOP = 5,
- PIC_STRUCT_TOP_BOTTOM_TOP = 6,
- PIC_STRUCT_BOTTOM_TOP_BOTTOM = 7,
- PIC_STRUCT_DOUBLE = 8,
- PIC_STRUCT_TRIPLE = 9,
- };
- typedef struct x264_hrd_t
- {
- double cpb_initial_arrival_time;
- double cpb_final_arrival_time;
- double cpb_removal_time;
- double dpb_output_time;
- } x264_hrd_t;
- typedef struct x264_sei_payload_t
- {
- int payload_size;
- int payload_type;
- uint8_t *payload;
- } x264_sei_payload_t;
- typedef struct x264_sei_t
- {
- int num_payloads;
- x264_sei_payload_t *payloads;
-
- void (*sei_free)( void* );
- } x264_sei_t;
- typedef struct x264_image_t
- {
- int i_csp;
- int i_plane;
- int i_stride[4];
- uint8_t *plane[4];
- } x264_image_t;
- typedef struct x264_image_properties_t
- {
-
-
- float *quant_offsets;
-
- void (*quant_offsets_free)( void* );
-
- uint8_t *mb_info;
-
- void (*mb_info_free)( void* );
-
- #define X264_MBINFO_CONSTANT (1<<0)
-
-
- double f_ssim;
-
- double f_psnr_avg;
-
- double f_psnr[3];
-
- double f_crf_avg;
- } x264_image_properties_t;
- typedef struct x264_picture_t
- {
-
- int i_type;
-
- int i_qpplus1;
-
- int i_pic_struct;
-
- int b_keyframe;
-
- int64_t i_pts;
-
- int64_t i_dts;
-
- x264_param_t *param;
-
-
- x264_image_t img;
-
- x264_image_properties_t prop;
-
- x264_hrd_t hrd_timing;
-
- x264_sei_t extra_sei;
-
- void *opaque;
- } x264_picture_t;
- void x264_picture_init( x264_picture_t *pic );
- int x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height );
- void x264_picture_clean( x264_picture_t *pic );
- #define x264_encoder_glue1(x,y) x##y
- #define x264_encoder_glue2(x,y) x264_encoder_glue1(x,y)
- #define x264_encoder_open x264_encoder_glue2(x264_encoder_open_,X264_BUILD)
- x264_t *x264_encoder_open( x264_param_t * );
- int x264_encoder_reconfig( x264_t *, x264_param_t * );
- void x264_encoder_parameters( x264_t *, x264_param_t * );
- int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal );
- int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out );
- void x264_encoder_close( x264_t * );
- int x264_encoder_delayed_frames( x264_t * );
- int x264_encoder_maximum_delayed_frames( x264_t * );
- void x264_encoder_intra_refresh( x264_t * );
- int x264_encoder_invalidate_reference( x264_t *, int64_t pts );
- #ifdef __cplusplus
- }
- #endif
- #endif
|