1
by Laurent Aimar
* all: re-import of the CVS. |
1 |
/*****************************************************************************
|
1719
by Fiona Glaser
Update source file headers |
2 |
* x264.h: x264 public header
|
1
by Laurent Aimar
* all: re-import of the CVS. |
3 |
*****************************************************************************
|
2961
by Henrik Gramner
Bump dates to 2019 |
4 |
* Copyright (C) 2003-2019 x264 project
|
1
by Laurent Aimar
* all: re-import of the CVS. |
5 |
*
|
6 |
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
|
|
898
by Fiona Glaser
Update file headers throughout x264 |
7 |
* Loren Merritt <lorenm@u.washington.edu>
|
1719
by Fiona Glaser
Update source file headers |
8 |
* Fiona Glaser <fiona@x264.com>
|
1
by Laurent Aimar
* all: re-import of the CVS. |
9 |
*
|
10 |
* This program is free software; you can redistribute it and/or modify
|
|
11 |
* it under the terms of the GNU General Public License as published by
|
|
12 |
* the Free Software Foundation; either version 2 of the License, or
|
|
13 |
* (at your option) any later version.
|
|
14 |
*
|
|
15 |
* This program is distributed in the hope that it will be useful,
|
|
16 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
18 |
* GNU General Public License for more details.
|
|
19 |
*
|
|
20 |
* You should have received a copy of the GNU General Public License
|
|
21 |
* along with this program; if not, write to the Free Software
|
|
898
by Fiona Glaser
Update file headers throughout x264 |
22 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
|
1719
by Fiona Glaser
Update source file headers |
23 |
*
|
24 |
* This program is also available under a commercial proprietary license.
|
|
25 |
* For more information, contact us at licensing@x264.com.
|
|
1
by Laurent Aimar
* all: re-import of the CVS. |
26 |
*****************************************************************************/
|
27 |
||
827
by Guillaume Poirier
fix illegal identifiers in multiple inclusion guards |
28 |
#ifndef X264_X264_H
|
29 |
#define X264_X264_H
|
|
1
by Laurent Aimar
* all: re-import of the CVS. |
30 |
|
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
31 |
#ifdef __cplusplus
|
32 |
extern "C" { |
|
33 |
#endif
|
|
34 |
||
2448
by Steven Walters
MSVS 2013 Update 2 support |
35 |
#if !defined(_STDINT_H) && !defined(_STDINT_H_) && !defined(_STDINT_H_INCLUDED) && !defined(_STDINT) &&\
|
2544
by Anton Mitrofanov
Add FreeBSD's stdint.h header guard to allowed list |
36 |
!defined(_SYS_STDINT_H_) && !defined(_INTTYPES_H) && !defined(_INTTYPES_H_) && !defined(_INTTYPES)
|
289
by Eric Petit
VC++ fix (thx fenrir) |
37 |
# ifdef _MSC_VER
|
38 |
# pragma message("You must include stdint.h or inttypes.h before x264.h")
|
|
39 |
# else
|
|
40 |
# warning You must include stdint.h or inttypes.h before x264.h
|
|
41 |
# endif
|
|
288
by Eric Petit
x264.h: issue an explicit warning when neither stdint.h nor inttypes.h |
42 |
#endif
|
43 |
||
59
by Måns Rullgård
#include <stdarg.h> |
44 |
#include <stdarg.h> |
45 |
||
1816
by Ramiro Polla
Create and install x264_config.h |
46 |
#include "x264_config.h" |
47 |
||
2925
by Kieran Kunhya
Add Sony XAVC, a flavour of AVC-Intra |
48 |
#define X264_BUILD 157
|
2189
by Steven Walters
ICL/MSVS: Fix shared library generation and usage |
49 |
|
50 |
/* Application developers planning to link against a shared library version of
|
|
51 |
* libx264 from a Microsoft Visual Studio or similar development environment
|
|
52 |
* will need to define X264_API_IMPORTS before including this header.
|
|
53 |
* This clause does not apply to MinGW, similar development environments, or non
|
|
54 |
* Windows platforms. */
|
|
55 |
#ifdef X264_API_IMPORTS
|
|
56 |
#define X264_API __declspec(dllimport)
|
|
57 |
#else
|
|
58 |
#define X264_API
|
|
59 |
#endif
|
|
1
by Laurent Aimar
* all: re-import of the CVS. |
60 |
|
61 |
/* x264_t:
|
|
588
by Loren Merritt
no more decoder. it never worked anyway, and the presence of defunct code was confusing people. |
62 |
* opaque handler for encoder */
|
1
by Laurent Aimar
* all: re-import of the CVS. |
63 |
typedef struct x264_t x264_t; |
64 |
||
65 |
/****************************************************************************
|
|
1661
by Fiona Glaser
Callback feature for low-latency per-slice output |
66 |
* NAL structure and functions
|
67 |
****************************************************************************/
|
|
68 |
||
69 |
enum nal_unit_type_e |
|
70 |
{
|
|
71 |
NAL_UNKNOWN = 0, |
|
72 |
NAL_SLICE = 1, |
|
73 |
NAL_SLICE_DPA = 2, |
|
74 |
NAL_SLICE_DPB = 3, |
|
75 |
NAL_SLICE_DPC = 4, |
|
76 |
NAL_SLICE_IDR = 5, /* ref_idc != 0 */ |
|
77 |
NAL_SEI = 6, /* ref_idc == 0 */ |
|
78 |
NAL_SPS = 7, |
|
79 |
NAL_PPS = 8, |
|
80 |
NAL_AUD = 9, |
|
81 |
NAL_FILLER = 12, |
|
82 |
/* ref_idc == 0 for 6,9,10,11,12 */
|
|
83 |
};
|
|
84 |
enum nal_priority_e |
|
85 |
{
|
|
86 |
NAL_PRIORITY_DISPOSABLE = 0, |
|
87 |
NAL_PRIORITY_LOW = 1, |
|
88 |
NAL_PRIORITY_HIGH = 2, |
|
89 |
NAL_PRIORITY_HIGHEST = 3, |
|
90 |
};
|
|
91 |
||
92 |
/* The data within the payload is already NAL-encapsulated; the ref_idc and type
|
|
93 |
* are merely in the struct for easy access by the calling application.
|
|
94 |
* All data returned in an x264_nal_t, including the data in p_payload, is no longer
|
|
95 |
* valid after the next call to x264_encoder_encode. Thus it must be used or copied
|
|
96 |
* before calling x264_encoder_encode or x264_encoder_headers again. */
|
|
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
97 |
typedef struct x264_nal_t |
1661
by Fiona Glaser
Callback feature for low-latency per-slice output |
98 |
{
|
99 |
int i_ref_idc; /* nal_priority_e */ |
|
100 |
int i_type; /* nal_unit_type_e */ |
|
101 |
int b_long_startcode; |
|
102 |
int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */ |
|
103 |
int i_last_mb; /* If this NAL is a slice, the index of the last MB in the slice. */ |
|
104 |
||
2355
by Kieran Kunhya
AVC-Intra support |
105 |
/* Size of payload (including any padding) in bytes. */
|
1661
by Fiona Glaser
Callback feature for low-latency per-slice output |
106 |
int i_payload; |
107 |
/* If param->b_annexb is set, Annex-B bytestream with startcode.
|
|
108 |
* Otherwise, startcode is replaced with a 4-byte size.
|
|
109 |
* This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */
|
|
110 |
uint8_t *p_payload; |
|
2355
by Kieran Kunhya
AVC-Intra support |
111 |
|
112 |
/* Size of padding in bytes. */
|
|
113 |
int i_padding; |
|
1661
by Fiona Glaser
Callback feature for low-latency per-slice output |
114 |
} x264_nal_t; |
115 |
||
116 |
/****************************************************************************
|
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
117 |
* Encoder parameters
|
1
by Laurent Aimar
* all: re-import of the CVS. |
118 |
****************************************************************************/
|
2266
by Fiona Glaser
x86: detect Bobcat, improve Atom optimizations, reorganize flags |
119 |
/* CPU flags */
|
120 |
||
121 |
/* x86 */
|
|
2804
by Henrik Gramner
x86: AVX-512 support |
122 |
#define X264_CPU_MMX (1<<0)
|
123 |
#define X264_CPU_MMX2 (1<<1) /* MMX2 aka MMXEXT aka ISSE */ |
|
124 |
#define X264_CPU_MMXEXT X264_CPU_MMX2
|
|
125 |
#define X264_CPU_SSE (1<<2)
|
|
126 |
#define X264_CPU_SSE2 (1<<3)
|
|
127 |
#define X264_CPU_LZCNT (1<<4)
|
|
128 |
#define X264_CPU_SSE3 (1<<5)
|
|
129 |
#define X264_CPU_SSSE3 (1<<6)
|
|
130 |
#define X264_CPU_SSE4 (1<<7) /* SSE4.1 */ |
|
131 |
#define X264_CPU_SSE42 (1<<8) /* SSE4.2 */ |
|
132 |
#define X264_CPU_AVX (1<<9) /* Requires OS support even if YMM registers aren't used */ |
|
133 |
#define X264_CPU_XOP (1<<10) /* AMD XOP */ |
|
134 |
#define X264_CPU_FMA4 (1<<11) /* AMD FMA4 */ |
|
135 |
#define X264_CPU_FMA3 (1<<12)
|
|
136 |
#define X264_CPU_BMI1 (1<<13)
|
|
137 |
#define X264_CPU_BMI2 (1<<14)
|
|
138 |
#define X264_CPU_AVX2 (1<<15)
|
|
139 |
#define X264_CPU_AVX512 (1<<16) /* AVX-512 {F, CD, BW, DQ, VL}, requires OS support */ |
|
2266
by Fiona Glaser
x86: detect Bobcat, improve Atom optimizations, reorganize flags |
140 |
/* x86 modifiers */
|
2804
by Henrik Gramner
x86: AVX-512 support |
141 |
#define X264_CPU_CACHELINE_32 (1<<17) /* avoid memory loads that span the border between two cachelines */ |
142 |
#define X264_CPU_CACHELINE_64 (1<<18) /* 32/64 is the size of a cacheline in bytes */ |
|
143 |
#define X264_CPU_SSE2_IS_SLOW (1<<19) /* avoid most SSE2 functions on Athlon64 */ |
|
144 |
#define X264_CPU_SSE2_IS_FAST (1<<20) /* a few functions are only faster on Core2 and Phenom */ |
|
145 |
#define X264_CPU_SLOW_SHUFFLE (1<<21) /* The Conroe has a slow shuffle unit (relative to overall SSE performance) */ |
|
146 |
#define X264_CPU_STACK_MOD4 (1<<22) /* if stack is only mod4 and not mod16 */ |
|
147 |
#define X264_CPU_SLOW_ATOM (1<<23) /* The Atom is terrible: slow SSE unaligned loads, slow |
|
2266
by Fiona Glaser
x86: detect Bobcat, improve Atom optimizations, reorganize flags |
148 |
* SIMD multiplies, slow SIMD variable shifts, slow pshufb,
|
149 |
* cacheline split penalties -- gather everything here that
|
|
150 |
* isn't shared by other CPUs to avoid making half a dozen
|
|
151 |
* new SLOW flags. */
|
|
2804
by Henrik Gramner
x86: AVX-512 support |
152 |
#define X264_CPU_SLOW_PSHUFB (1<<24) /* such as on the Intel Atom */ |
153 |
#define X264_CPU_SLOW_PALIGNR (1<<25) /* such as on the AMD Bobcat */ |
|
2266
by Fiona Glaser
x86: detect Bobcat, improve Atom optimizations, reorganize flags |
154 |
|
155 |
/* PowerPC */
|
|
156 |
#define X264_CPU_ALTIVEC 0x0000001
|
|
157 |
||
2466
by Janne Grunau
aarch64: add armv8 and neon cpu flags and test them |
158 |
/* ARM and AArch64 */
|
2266
by Fiona Glaser
x86: detect Bobcat, improve Atom optimizations, reorganize flags |
159 |
#define X264_CPU_ARMV6 0x0000001
|
160 |
#define X264_CPU_NEON 0x0000002 /* ARM NEON */ |
|
161 |
#define X264_CPU_FAST_NEON_MRC 0x0000004 /* Transfer from NEON to ARM register is fast (Cortex-A9) */ |
|
2466
by Janne Grunau
aarch64: add armv8 and neon cpu flags and test them |
162 |
#define X264_CPU_ARMV8 0x0000008
|
2266
by Fiona Glaser
x86: detect Bobcat, improve Atom optimizations, reorganize flags |
163 |
|
2569
by Kaustubh Raste
mips: Initial MSA support |
164 |
/* MIPS */
|
165 |
#define X264_CPU_MSA 0x0000001 /* MIPS MSA */ |
|
166 |
||
2266
by Fiona Glaser
x86: detect Bobcat, improve Atom optimizations, reorganize flags |
167 |
/* Analyse flags */
|
1
by Laurent Aimar
* all: re-import of the CVS. |
168 |
#define X264_ANALYSE_I4x4 0x0001 /* Analyse i4x4 */ |
246
by Loren Merritt
8x8 transform and 8x8 intra prediction. |
169 |
#define X264_ANALYSE_I8x8 0x0002 /* Analyse i8x8 (requires 8x8 transform) */ |
1
by Laurent Aimar
* all: re-import of the CVS. |
170 |
#define X264_ANALYSE_PSUB16x16 0x0010 /* Analyse p16x8, p8x16 and p8x8 */ |
171 |
#define X264_ANALYSE_PSUB8x8 0x0020 /* Analyse p8x4, p4x8, p4x4 */ |
|
68
by Loren Merritt
implement macroblock types B_SKIP, B_DIRECT, B_8x8 |
172 |
#define X264_ANALYSE_BSUB16x16 0x0100 /* Analyse b16x8, b8x16 and b8x8 */ |
2925
by Kieran Kunhya
Add Sony XAVC, a flavour of AVC-Intra |
173 |
|
68
by Loren Merritt
implement macroblock types B_SKIP, B_DIRECT, B_8x8 |
174 |
#define X264_DIRECT_PRED_NONE 0
|
86
by Loren Merritt
disable subme=0 (the huge bitrate penalty wasn't worth the speed) |
175 |
#define X264_DIRECT_PRED_SPATIAL 1
|
176 |
#define X264_DIRECT_PRED_TEMPORAL 2
|
|
457
by Loren Merritt
--direct auto |
177 |
#define X264_DIRECT_PRED_AUTO 3
|
211
by Loren Merritt
Allow manual selection of fullpel ME method. New method: Exhaustive search. |
178 |
#define X264_ME_DIA 0
|
179 |
#define X264_ME_HEX 1
|
|
238
by Loren Merritt
UMHex motion seach (but no early termination yet) |
180 |
#define X264_ME_UMH 2
|
181 |
#define X264_ME_ESA 3
|
|
728
by Loren Merritt
satd exhaustive motion search (--me tesa) |
182 |
#define X264_ME_TESA 4
|
266
by Loren Merritt
custom quant matrices |
183 |
#define X264_CQM_FLAT 0
|
184 |
#define X264_CQM_JVT 1
|
|
185 |
#define X264_CQM_CUSTOM 2
|
|
537
by Loren Merritt
api change: select ratecontrol method with an enum (param.rc.i_rc_method) instead of a bunch of booleans. |
186 |
#define X264_RC_CQP 0
|
187 |
#define X264_RC_CRF 1
|
|
188 |
#define X264_RC_ABR 2
|
|
1764
by Fiona Glaser
Improve quantizer handling |
189 |
#define X264_QP_AUTO 0
|
804
by Fiona Glaser
variance-based psy adaptive quantization |
190 |
#define X264_AQ_NONE 0
|
968
by Fiona Glaser
Move adaptive quantization to before ratecontrol, eliminate qcomp bias |
191 |
#define X264_AQ_VARIANCE 1
|
1184
by Anton Mitrofanov
New AQ algorithm option |
192 |
#define X264_AQ_AUTOVARIANCE 2
|
2524
by Anton Mitrofanov
New AQ mode: auto-variance AQ with bias to dark scenes |
193 |
#define X264_AQ_AUTOVARIANCE_BIASED 3
|
969
by Fiona Glaser
Add optional more optimal B-frame decision method |
194 |
#define X264_B_ADAPT_NONE 0
|
195 |
#define X264_B_ADAPT_FAST 1
|
|
196 |
#define X264_B_ADAPT_TRELLIS 2
|
|
1327
by Dylan Yudaken
Weighted P-frame prediction |
197 |
#define X264_WEIGHTP_NONE 0
|
1802
by Alex Wright
Make --weightp 1 a better speed tradeoff |
198 |
#define X264_WEIGHTP_SIMPLE 1
|
1327
by Dylan Yudaken
Weighted P-frame prediction |
199 |
#define X264_WEIGHTP_SMART 2
|
1296
by Lamont Alston
Make B-pyramid spec-compliant |
200 |
#define X264_B_PYRAMID_NONE 0
|
201 |
#define X264_B_PYRAMID_STRICT 1
|
|
202 |
#define X264_B_PYRAMID_NORMAL 2
|
|
1537
by Fiona Glaser
Make keyint_min auto by default |
203 |
#define X264_KEYINT_MIN_AUTO 0
|
1665
by Fiona Glaser
Support infinite keyint (--keyint infinite). |
204 |
#define X264_KEYINT_MAX_INFINITE (1<<30)
|
537
by Loren Merritt
api change: select ratecontrol method with an enum (param.rc.i_rc_method) instead of a bunch of booleans. |
205 |
|
2925
by Kieran Kunhya
Add Sony XAVC, a flavour of AVC-Intra |
206 |
/* AVC-Intra flavors */
|
207 |
#define X264_AVCINTRA_FLAVOR_PANASONIC 0
|
|
208 |
#define X264_AVCINTRA_FLAVOR_SONY 1
|
|
209 |
||
457
by Loren Merritt
--direct auto |
210 |
static const char * const x264_direct_pred_names[] = { "none", "spatial", "temporal", "auto", 0 }; |
728
by Loren Merritt
satd exhaustive motion search (--me tesa) |
211 |
static const char * const x264_motion_est_names[] = { "dia", "hex", "umh", "esa", "tesa", 0 }; |
1296
by Lamont Alston
Make B-pyramid spec-compliant |
212 |
static const char * const x264_b_pyramid_names[] = { "none", "strict", "normal", 0 }; |
542
by Loren Merritt
api addition: x264_param_parse() to set options by name |
213 |
static const char * const x264_overscan_names[] = { "undef", "show", "crop", 0 }; |
214 |
static const char * const x264_vidformat_names[] = { "component", "pal", "ntsc", "secam", "mac", "undef", 0 }; |
|
215 |
static const char * const x264_fullrange_names[] = { "off", "on", 0 }; |
|
2704
by Anton Mitrofanov
Add support for new VUI parameters |
216 |
static const char * const x264_colorprim_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "film", "bt2020", "smpte428", |
217 |
"smpte431", "smpte432", 0 }; |
|
2343
by Lucien
Add new color primaries, transfer characteristics, matrix coefficients |
218 |
static const char * const x264_transfer_names[] = { "", "bt709", "undef", "", "bt470m", "bt470bg", "smpte170m", "smpte240m", "linear", "log100", "log316", |
2869
by Vittorio Giovara
Support 04/2017 color matrix and transfer values |
219 |
"iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "smpte428", "arib-std-b67", 0 }; |
2704
by Anton Mitrofanov
Add support for new VUI parameters |
220 |
static const char * const x264_colmatrix_names[] = { "GBR", "bt709", "undef", "", "fcc", "bt470bg", "smpte170m", "smpte240m", "YCgCo", "bt2020nc", "bt2020c", |
2869
by Vittorio Giovara
Support 04/2017 color matrix and transfer values |
221 |
"smpte2085", "chroma-derived-nc", "chroma-derived-c", "ICtCp", 0 }; |
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
222 |
static const char * const x264_nal_hrd_names[] = { "none", "vbr", "cbr", 0 }; |
2925
by Kieran Kunhya
Add Sony XAVC, a flavour of AVC-Intra |
223 |
static const char * const x264_avcintra_flavor_names[] = { "panasonic", "sony", 0 }; |
317
by Loren Merritt
cosmetics in option parsing |
224 |
|
1673
by Loren Merritt
Convert x264 to use NV12 pixel format internally |
225 |
/* Colorspace type */
|
1
by Laurent Aimar
* all: re-import of the CVS. |
226 |
#define X264_CSP_MASK 0x00ff /* */ |
227 |
#define X264_CSP_NONE 0x0000 /* Invalid mode */ |
|
2921
by Emanuele Ruffaldi
4:0:0 (monochrome) encoding support |
228 |
#define X264_CSP_I400 0x0001 /* monochrome 4:0:0 */ |
229 |
#define X264_CSP_I420 0x0002 /* yuv 4:2:0 planar */ |
|
230 |
#define X264_CSP_YV12 0x0003 /* yvu 4:2:0 planar */ |
|
231 |
#define X264_CSP_NV12 0x0004 /* yuv 4:2:0, with one y plane and one packed u+v */ |
|
232 |
#define X264_CSP_NV21 0x0005 /* yuv 4:2:0, with one y plane and one packed v+u */ |
|
233 |
#define X264_CSP_I422 0x0006 /* yuv 4:2:2 planar */ |
|
234 |
#define X264_CSP_YV16 0x0007 /* yvu 4:2:2 planar */ |
|
235 |
#define X264_CSP_NV16 0x0008 /* yuv 4:2:2, with one y plane and one packed u+v */ |
|
236 |
#define X264_CSP_YUYV 0x0009 /* yuyv 4:2:2 packed */ |
|
237 |
#define X264_CSP_UYVY 0x000a /* uyvy 4:2:2 packed */ |
|
238 |
#define X264_CSP_V210 0x000b /* 10-bit yuv 4:2:2 packed in 32 */ |
|
239 |
#define X264_CSP_I444 0x000c /* yuv 4:4:4 planar */ |
|
240 |
#define X264_CSP_YV24 0x000d /* yvu 4:4:4 planar */ |
|
241 |
#define X264_CSP_BGR 0x000e /* packed bgr 24bits */ |
|
242 |
#define X264_CSP_BGRA 0x000f /* packed bgr 32bits */ |
|
243 |
#define X264_CSP_RGB 0x0010 /* packed rgb 24bits */ |
|
244 |
#define X264_CSP_MAX 0x0011 /* end of list */ |
|
1731
by Oskar Arvidsson
Finish support for high-depth video throughout x264 |
245 |
#define X264_CSP_VFLIP 0x1000 /* the csp is vertically flipped */ |
246 |
#define X264_CSP_HIGH_DEPTH 0x2000 /* the csp has a depth of 16 bits per pixel component */ |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
247 |
|
1177
by Fiona Glaser
Totally new preset system for x264.c (not libx264), new defaults |
248 |
/* Slice type */
|
1
by Laurent Aimar
* all: re-import of the CVS. |
249 |
#define X264_TYPE_AUTO 0x0000 /* Let x264 choose the right type */ |
250 |
#define X264_TYPE_IDR 0x0001
|
|
251 |
#define X264_TYPE_I 0x0002
|
|
252 |
#define X264_TYPE_P 0x0003
|
|
150
by Loren Merritt
New option: "B-frame pyramid" keeps the middle of 2+ consecutive B-frames as a reference, and reorders frame appropriately. |
253 |
#define X264_TYPE_BREF 0x0004 /* Non-disposable B-frame */ |
254 |
#define X264_TYPE_B 0x0005
|
|
1657
by Lamont Alston
Open-GOP support |
255 |
#define X264_TYPE_KEYFRAME 0x0006 /* IDR or I depending on b_open_gop option */ |
2566
by Anton Mitrofanov
Use forced frame types in slicetype analysis |
256 |
#define IS_X264_TYPE_I(x) ((x)==X264_TYPE_I || (x)==X264_TYPE_IDR || (x)==X264_TYPE_KEYFRAME)
|
150
by Loren Merritt
New option: "B-frame pyramid" keeps the middle of 2+ consecutive B-frames as a reference, and reorders frame appropriately. |
257 |
#define IS_X264_TYPE_B(x) ((x)==X264_TYPE_B || (x)==X264_TYPE_BREF)
|
1
by Laurent Aimar
* all: re-import of the CVS. |
258 |
|
1177
by Fiona Glaser
Totally new preset system for x264.c (not libx264), new defaults |
259 |
/* Log level */
|
32
by Laurent Aimar
* all: introduced a x264_log function. It's not yet used everywhere |
260 |
#define X264_LOG_NONE (-1)
|
261 |
#define X264_LOG_ERROR 0
|
|
262 |
#define X264_LOG_WARNING 1
|
|
263 |
#define X264_LOG_INFO 2
|
|
264 |
#define X264_LOG_DEBUG 3
|
|
265 |
||
1177
by Fiona Glaser
Totally new preset system for x264.c (not libx264), new defaults |
266 |
/* Threading */
|
267 |
#define X264_THREADS_AUTO 0 /* Automatically select optimal number of threads */ |
|
1260
by Fiona Glaser
Major API change: encapsulate NALs within libx264 |
268 |
#define X264_SYNC_LOOKAHEAD_AUTO (-1) /* Automatically select optimal lookahead thread buffer size */ |
1177
by Fiona Glaser
Totally new preset system for x264.c (not libx264), new defaults |
269 |
|
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
270 |
/* HRD */
|
271 |
#define X264_NAL_HRD_NONE 0
|
|
272 |
#define X264_NAL_HRD_VBR 1
|
|
273 |
#define X264_NAL_HRD_CBR 2
|
|
274 |
||
665
by Loren Merritt
extend zones to support (some) encoding parameters in addition to ratecontrol. |
275 |
/* Zones: override ratecontrol or other options for specific sections of the video.
|
276 |
* See x264_encoder_reconfig() for which options can be changed.
|
|
277 |
* If zones overlap, whichever comes later in the list takes precedence. */
|
|
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
278 |
typedef struct x264_zone_t |
1
by Laurent Aimar
* all: re-import of the CVS. |
279 |
{
|
665
by Loren Merritt
extend zones to support (some) encoding parameters in addition to ratecontrol. |
280 |
int i_start, i_end; /* range of frame numbers */ |
281 |
int b_force_qp; /* whether to use qp vs bitrate factor */ |
|
237
by Loren Merritt
Zoned ratecontrol. |
282 |
int i_qp; |
283 |
float f_bitrate_factor; |
|
665
by Loren Merritt
extend zones to support (some) encoding parameters in addition to ratecontrol. |
284 |
struct x264_param_t *param; |
237
by Loren Merritt
Zoned ratecontrol. |
285 |
} x264_zone_t; |
286 |
||
665
by Loren Merritt
extend zones to support (some) encoding parameters in addition to ratecontrol. |
287 |
typedef struct x264_param_t |
237
by Loren Merritt
Zoned ratecontrol. |
288 |
{
|
1
by Laurent Aimar
* all: re-import of the CVS. |
289 |
/* CPU flags */
|
290 |
unsigned int cpu; |
|
2200
by Fiona Glaser
Threaded lookahead |
291 |
int i_threads; /* encode multiple frames in parallel */ |
292 |
int i_lookahead_threads; /* multiple threads for lookahead analysis */ |
|
1364
by Fiona Glaser
Bring back slice-based threading support |
293 |
int b_sliced_threads; /* Whether to use slice-based threading. */ |
607
by Loren Merritt
New threading method: |
294 |
int b_deterministic; /* whether to allow non-deterministic optimizations when threaded */ |
2080
by Loren Merritt
SSSE3/SSE4 9-way fully merged i4x4 analysis (sad/satd_x9) |
295 |
int b_cpu_independent; /* force canonical behavior rather than cpu-dependent optimal algorithms */ |
1246
by Steven Walters
Threaded lookahead |
296 |
int i_sync_lookahead; /* threaded lookahead buffer */ |
1
by Laurent Aimar
* all: re-import of the CVS. |
297 |
|
298 |
/* Video Properties */
|
|
299 |
int i_width; |
|
300 |
int i_height; |
|
2081
by Henrik Gramner
4:2:2 encoding support |
301 |
int i_csp; /* CSP of encoded bitstream */ |
2868
by Vittorio Giovara
Unify 8-bit and 10-bit CLI and libraries |
302 |
int i_bitdepth; |
942
by Loren Merritt
cosmetics |
303 |
int i_level_idc; |
340
by Loren Merritt
If frame count is known at init time (cli & vfw), then abort if the 2nd pass |
304 |
int i_frame_total; /* number of frames to encode if known, else 0 */ |
1
by Laurent Aimar
* all: re-import of the CVS. |
305 |
|
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
306 |
/* NAL HRD
|
307 |
* Uses Buffering and Picture Timing SEIs to signal HRD
|
|
308 |
* The HRD in H.264 was not designed with VFR in mind.
|
|
309 |
* It is therefore not recommendeded to use NAL HRD with VFR.
|
|
310 |
* Furthermore, reconfiguring the VBV (via x264_encoder_reconfig)
|
|
311 |
* will currently generate invalid HRD. */
|
|
312 |
int i_nal_hrd; |
|
313 |
||
1
by Laurent Aimar
* all: re-import of the CVS. |
314 |
struct
|
315 |
{
|
|
316 |
/* they will be reduced to be 0 < x <= 65535 and prime */
|
|
317 |
int i_sar_height; |
|
318 |
int i_sar_width; |
|
316
by Loren Merritt
expose the rest of the VUI flags. |
319 |
|
320 |
int i_overscan; /* 0=undef, 1=no overscan, 2=overscan */ |
|
942
by Loren Merritt
cosmetics |
321 |
|
316
by Loren Merritt
expose the rest of the VUI flags. |
322 |
/* see h264 annex E for the values of the following */
|
323 |
int i_vidformat; |
|
324 |
int b_fullrange; |
|
325 |
int i_colorprim; |
|
326 |
int i_transfer; |
|
327 |
int i_colmatrix; |
|
328 |
int i_chroma_loc; /* both top & bottom */ |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
329 |
} vui; |
330 |
||
331 |
/* Bitstream parameters */
|
|
332 |
int i_frame_reference; /* Maximum number of reference frames */ |
|
1659
by Fiona Glaser
Interactive encoder control: error resilience |
333 |
int i_dpb_size; /* Force a DPB size larger than that implied by B-frames and reference frames. |
334 |
* Useful in combination with interactive error resilience. */
|
|
93
by Loren Merritt
Changes the mechanics of max keyframe interval: |
335 |
int i_keyint_max; /* Force an IDR keyframe at this interval */ |
336 |
int i_keyint_min; /* Scenecuts closer together than this are coded as I, not IDR. */ |
|
49
by Laurent Aimar
* all: Patch by Loren Merritt. |
337 |
int i_scenecut_threshold; /* how aggressively to insert extra I frames */ |
1380
by Fiona Glaser
Periodic intra refresh |
338 |
int b_intra_refresh; /* Whether or not to use periodic intra refresh instead of IDR frames. */ |
339 |
||
1
by Laurent Aimar
* all: re-import of the CVS. |
340 |
int i_bframe; /* how many b-frame between 2 references pictures */ |
969
by Fiona Glaser
Add optional more optimal B-frame decision method |
341 |
int i_bframe_adaptive; |
137
by Loren Merritt
Preliminary adaptive B-frame decision (not yet tuned). |
342 |
int i_bframe_bias; |
1376
by Fiona Glaser
Don't do sum/ssd analysis if weightp == 1 |
343 |
int i_bframe_pyramid; /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */ |
1935
by Fiona Glaser
Consolidate Blu-ray hacks into --bluray-compat |
344 |
int b_open_gop; |
345 |
int b_bluray_compat; |
|
2388
by Kieran Kunhya
Add support for AVC-Intra Class 200 |
346 |
int i_avcintra_class; |
2925
by Kieran Kunhya
Add Sony XAVC, a flavour of AVC-Intra |
347 |
int i_avcintra_flavor; |
1
by Laurent Aimar
* all: re-import of the CVS. |
348 |
|
349 |
int b_deblocking_filter; |
|
350 |
int i_deblocking_filter_alphac0; /* [-6, 6] -6 light filter, 6 strong */ |
|
351 |
int i_deblocking_filter_beta; /* [-6, 6] idem */ |
|
352 |
||
353 |
int b_cabac; |
|
354 |
int i_cabac_init_idc; |
|
355 |
||
570
by Loren Merritt
support interlace. uses MBAFF syntax, but is not adaptive yet. |
356 |
int b_interlaced; |
1279
by Fiona Glaser
Constrained intra prediction support |
357 |
int b_constrained_intra; |
570
by Loren Merritt
support interlace. uses MBAFF syntax, but is not adaptive yet. |
358 |
|
266
by Loren Merritt
custom quant matrices |
359 |
int i_cqm_preset; |
2356
by Henrik Gramner
Windows Unicode support |
360 |
char *psz_cqm_file; /* filename (in UTF-8) of CQM file, JM format */ |
312
by Loren Merritt
cosmetics |
361 |
uint8_t cqm_4iy[16]; /* used only if i_cqm_preset == X264_CQM_CUSTOM */ |
2017
by Fiona Glaser
4:4:4 encoding support |
362 |
uint8_t cqm_4py[16]; |
312
by Loren Merritt
cosmetics |
363 |
uint8_t cqm_4ic[16]; |
364 |
uint8_t cqm_4pc[16]; |
|
365 |
uint8_t cqm_8iy[64]; |
|
366 |
uint8_t cqm_8py[64]; |
|
2017
by Fiona Glaser
4:4:4 encoding support |
367 |
uint8_t cqm_8ic[64]; |
368 |
uint8_t cqm_8pc[64]; |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
369 |
|
32
by Laurent Aimar
* all: introduced a x264_log function. It's not yet used everywhere |
370 |
/* Log */
|
371 |
void (*pf_log)( void *, int i_level, const char *psz, va_list ); |
|
372 |
void *p_log_private; |
|
373 |
int i_log_level; |
|
2182
by Fiona Glaser
Add full-recon API option |
374 |
int b_full_recon; /* fully reconstruct frames, even when not necessary for encoding. Implied by psz_dump_yuv */ |
2356
by Henrik Gramner
Windows Unicode support |
375 |
char *psz_dump_yuv; /* filename (in UTF-8) for reconstructed frames */ |
32
by Laurent Aimar
* all: introduced a x264_log function. It's not yet used everywhere |
376 |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
377 |
/* Encoder analyser parameters */
|
378 |
struct
|
|
379 |
{
|
|
246
by Loren Merritt
8x8 transform and 8x8 intra prediction. |
380 |
unsigned int intra; /* intra partitions */ |
381 |
unsigned int inter; /* inter partitions */ |
|
382 |
||
383 |
int b_transform_8x8; |
|
1327
by Dylan Yudaken
Weighted P-frame prediction |
384 |
int i_weighted_pred; /* weighting for P-frames */ |
318
by Loren Merritt
new option: --mixed-refs |
385 |
int b_weighted_bipred; /* implicit weighting for B-frames */ |
68
by Loren Merritt
implement macroblock types B_SKIP, B_DIRECT, B_8x8 |
386 |
int i_direct_mv_pred; /* spatial vs temporal mv prediction */ |
318
by Loren Merritt
new option: --mixed-refs |
387 |
int i_chroma_qp_offset; |
388 |
||
211
by Loren Merritt
Allow manual selection of fullpel ME method. New method: Exhaustive search. |
389 |
int i_me_method; /* motion estimation algorithm to use (X264_ME_*) */ |
390 |
int i_me_range; /* integer pixel motion estimation search range (from predicted mv) */ |
|
573
by Loren Merritt
add an option to control direct_8x8_inference_flag, default to enabled. |
391 |
int i_mv_range; /* maximum length of a mv (in pixels). -1 = auto, based on level */ |
607
by Loren Merritt
New threading method: |
392 |
int i_mv_range_thread; /* minimum space between threads. -1 = auto, based on number of threads. */ |
47
by Laurent Aimar
* all: Patches by Loren Merritt: |
393 |
int i_subpel_refine; /* subpixel motion estimation quality */ |
171
by Loren Merritt
Chroma ME (P-frames only). |
394 |
int b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */ |
1478
by Alex Wright
Mixed-refs support for B-frames |
395 |
int b_mixed_references; /* allow each mb partition to have its own reference number */ |
360
by Loren Merritt
Trellis RD quantization. |
396 |
int i_trellis; /* trellis RD quantization */ |
384
by Loren Merritt
--no-fast-pskip |
397 |
int b_fast_pskip; /* early SKIP detection on P-frames */ |
503
by Loren Merritt
Before, we eliminated dct blocks containing only a small single coefficient. Now that behavior is optional, by --no-dct-decimate. |
398 |
int b_dct_decimate; /* transform coefficient thresholding on P-frames */ |
398
by Loren Merritt
dct-domain noise reduction (ported from lavc) |
399 |
int i_noise_reduction; /* adaptive pseudo-deadzone */ |
970
by Fiona Glaser
Psychovisually optimized rate-distortion optimization and trellis |
400 |
float f_psy_rd; /* Psy RD strength */ |
401 |
float f_psy_trellis; /* Psy trellis strength */ |
|
1197
by Fiona Glaser
Macroblock-tree ratecontrol |
402 |
int b_psy; /* Toggle all psy optimizations */ |
160
by Loren Merritt
expose option "chroma qp offset" |
403 |
|
2216
by Fiona Glaser
Enhance mb_info: add mb_info_update |
404 |
int b_mb_info; /* Use input mb_info data in x264_picture_t */ |
405 |
int b_mb_info_update; /* Update the values in mb_info according to the results of encoding. */ |
|
2197
by Fiona Glaser
Add mb_info API for signalling constant macroblocks |
406 |
|
572
by Loren Merritt
allow custom deadzones for non-trellis quantization. |
407 |
/* the deadzone size that will be used in luma quantization */
|
639
by Alex Izvorski
use only c-style comments in public header (patch by Vincent Torres) |
408 |
int i_luma_deadzone[2]; /* {inter, intra} */ |
572
by Loren Merritt
allow custom deadzones for non-trellis quantization. |
409 |
|
554
by Loren Merritt
SSIM computation. (default on, disable by --no-ssim) |
410 |
int b_psnr; /* compute and print PSNR stats */ |
411 |
int b_ssim; /* compute and print SSIM stats */ |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
412 |
} analyse; |
413 |
||
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
414 |
/* Rate control parameters */
|
415 |
struct
|
|
416 |
{
|
|
537
by Loren Merritt
api change: select ratecontrol method with an enum (param.rc.i_rc_method) instead of a bunch of booleans. |
417 |
int i_rc_method; /* X264_RC_* */ |
418 |
||
2867
by Vittorio Giovara
Change default QP parameters initialization |
419 |
int i_qp_constant; /* 0=lossless */ |
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
420 |
int i_qp_min; /* min allowed QP value */ |
421 |
int i_qp_max; /* max allowed QP value */ |
|
422 |
int i_qp_step; /* max QP step between frames */ |
|
423 |
||
424 |
int i_bitrate; |
|
591
by Loren Merritt
allow fractional values of crf |
425 |
float f_rf_constant; /* 1pass VBR, nominal QP */ |
1481
by Fiona Glaser
"CRF-max" support with VBV |
426 |
float f_rf_constant_max; /* In CRF mode, maximum CRF as caused by VBV */ |
223
by Loren Merritt
New ratecontrol options: |
427 |
float f_rate_tolerance; |
428 |
int i_vbv_max_bitrate; |
|
429 |
int i_vbv_buffer_size; |
|
674
by Loren Merritt
allow --vbv-init to take absolute values (in kbit), in addition to the previous fractions of vbv-bufsize. |
430 |
float f_vbv_buffer_init; /* <=1: fraction of buffer_size. >1: kbit */ |
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
431 |
float f_ip_factor; |
432 |
float f_pb_factor; |
|
433 |
||
2374
by Fiona Glaser
Add --filler option |
434 |
/* VBV filler: force CBR VBV and use filler bytes to ensure hard-CBR.
|
435 |
* Implied by NAL-HRD CBR. */
|
|
436 |
int b_filler; |
|
437 |
||
804
by Fiona Glaser
variance-based psy adaptive quantization |
438 |
int i_aq_mode; /* psy adaptive QP. (X264_AQ_*) */ |
439 |
float f_aq_strength; |
|
1197
by Fiona Glaser
Macroblock-tree ratecontrol |
440 |
int b_mb_tree; /* Macroblock-tree ratecontrol. */ |
441 |
int i_lookahead; |
|
804
by Fiona Glaser
variance-based psy adaptive quantization |
442 |
|
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
443 |
/* 2pass */
|
444 |
int b_stat_write; /* Enable stat writing in psz_stat_out */ |
|
2356
by Henrik Gramner
Windows Unicode support |
445 |
char *psz_stat_out; /* output filename (in UTF-8) of the 2pass stats file */ |
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
446 |
int b_stat_read; /* Read stat from psz_stat_in and use it */ |
2356
by Henrik Gramner
Windows Unicode support |
447 |
char *psz_stat_in; /* input filename (in UTF-8) of the 2pass stats file */ |
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
448 |
|
237
by Loren Merritt
Zoned ratecontrol. |
449 |
/* 2pass params (same as ffmpeg ones) */
|
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
450 |
float f_qcompress; /* 0.0 => cbr, 1.0 => constant qp */ |
451 |
float f_qblur; /* temporally blur quants */ |
|
61
by Loren Merritt
improved 2pass ratecontrol: |
452 |
float f_complexity_blur; /* temporally blur complexity */ |
237
by Loren Merritt
Zoned ratecontrol. |
453 |
x264_zone_t *zones; /* ratecontrol overrides */ |
563
by Loren Merritt
cosmetics (spelling) |
454 |
int i_zones; /* number of zone_t's */ |
239
by Loren Merritt
move zones parsing to ratecontrol.c; allows passing in zones as a string. |
455 |
char *psz_zones; /* alternate method of specifying zones */ |
40
by Laurent Aimar
* all: 2pass patch by Loren Merritt <lorenm AT u.washington DOT edu> |
456 |
} rc; |
457 |
||
1786
by Fiona Glaser
Support custom cropping rectangles |
458 |
/* Cropping Rectangle parameters: added to those implicitly defined by
|
459 |
non-mod16 video resolutions. */
|
|
1917
by Kieran Kunhya
Cosmetics: make struct definition braces consistent |
460 |
struct
|
461 |
{
|
|
1786
by Fiona Glaser
Support custom cropping rectangles |
462 |
unsigned int i_left; |
463 |
unsigned int i_top; |
|
464 |
unsigned int i_right; |
|
465 |
unsigned int i_bottom; |
|
466 |
} crop_rect; |
|
467 |
||
1829
by Vittorio Giovara
Add frame-packing SEI support for signalling 3D video |
468 |
/* frame packing arrangement flag */
|
469 |
int i_frame_packing; |
|
470 |
||
2870
by Vittorio Giovara
Support writing the alternative transfer SEI message |
471 |
/* alternative transfer SEI */
|
472 |
int i_alternative_transfer; |
|
473 |
||
518
by Loren Merritt
--sps-id, to allow concatenating streams with different settings. |
474 |
/* Muxing parameters */
|
188
by Måns Rullgård
Optionally use access unit delimiter NAL units. |
475 |
int b_aud; /* generate access unit delimiters */ |
377
by Loren Merritt
10l |
476 |
int b_repeat_headers; /* put SPS/PPS before each keyframe */ |
1260
by Fiona Glaser
Major API change: encapsulate NALs within libx264 |
477 |
int b_annexb; /* if set, place start codes (4 bytes) before NAL units, |
478 |
* otherwise place size (4 bytes) before NAL units. */
|
|
518
by Loren Merritt
--sps-id, to allow concatenating streams with different settings. |
479 |
int i_sps_id; /* SPS and PPS id number */ |
1726
by Anton Mitrofanov
Fix CFR ratecontrol with timebase != 1/fps |
480 |
int b_vfr_input; /* VFR input. If 1, use timebase and timestamps for ratecontrol purposes. |
481 |
* If 0, use fps only. */
|
|
482 |
int b_pulldown; /* use explicity set timebase for CFR */ |
|
1549
by Fiona Glaser
Fix issues with extremely large timebases |
483 |
uint32_t i_fps_num; |
484 |
uint32_t i_fps_den; |
|
485 |
uint32_t i_timebase_num; /* Timebase numerator */ |
|
486 |
uint32_t i_timebase_den; /* Timebase denominator */ |
|
1216
by Fiona Glaser
Add support for frame-accurate parameter changes |
487 |
|
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
488 |
int b_tff; |
489 |
||
490 |
/* Pulldown:
|
|
491 |
* The correct pic_struct must be passed with each input frame.
|
|
492 |
* The input timebase should be the timebase corresponding to the output framerate. This should be constant.
|
|
493 |
* e.g. for 3:2 pulldown timebase should be 1001/30000
|
|
494 |
* The PTS passed with each frame must be the PTS of the frame after pulldown is applied.
|
|
495 |
* Frame doubling and tripling require b_vfr_input set to zero (see H.264 Table D-1)
|
|
496 |
*
|
|
497 |
* Pulldown changes are not clearly defined in H.264. Therefore, it is the calling app's responsibility to manage this.
|
|
498 |
*/
|
|
499 |
||
500 |
int b_pic_struct; |
|
501 |
||
1598
by Kieran Kunhya
Add "Fake interlaced" option |
502 |
/* Fake Interlaced.
|
503 |
*
|
|
1604
by Kieran Kunhya
Fix typo in fake-interlaced documentation |
504 |
* Used only when b_interlaced=0. Setting this flag makes it possible to flag the stream as PAFF interlaced yet
|
1598
by Kieran Kunhya
Add "Fake interlaced" option |
505 |
* encode all frames progessively. It is useful for encoding 25p and 30p Blu-Ray streams.
|
506 |
*/
|
|
507 |
||
508 |
int b_fake_interlaced; |
|
509 |
||
2342
by Fiona Glaser
Add "--stitchable" option for segmented encoding |
510 |
/* Don't optimize header parameters based on video content, e.g. ensure that splitting an input video, compressing
|
511 |
* each part, and stitching them back together will result in identical SPS/PPS. This is necessary for stitching
|
|
512 |
* with container formats that don't allow multiple SPS/PPS. */
|
|
513 |
int b_stitchable; |
|
514 |
||
2286
by Steve Borho
OpenCL lookahead |
515 |
int b_opencl; /* use OpenCL when available */ |
516 |
int i_opencl_device; /* specify count of GPU devices to skip, for CLI users */ |
|
517 |
void *opencl_device_id; /* pass explicit cl_device_id as void*, for API users */ |
|
2356
by Henrik Gramner
Windows Unicode support |
518 |
char *psz_clbin_file; /* filename (in UTF-8) of the compiled OpenCL kernel cache file */ |
2286
by Steve Borho
OpenCL lookahead |
519 |
|
1242
by Fiona Glaser
Multi-slice encoding support |
520 |
/* Slicing parameters */
|
521 |
int i_slice_max_size; /* Max size per slice in bytes; includes estimated NAL overhead. */ |
|
522 |
int i_slice_max_mbs; /* Max number of MBs per slice; overrides i_slice_count. */ |
|
2283
by Fiona Glaser
Add slice-min-mbs feature |
523 |
int i_slice_min_mbs; /* Min number of MBs per slice */ |
1242
by Fiona Glaser
Multi-slice encoding support |
524 |
int i_slice_count; /* Number of slices per frame: forces rectangular slices. */ |
2284
by Fiona Glaser
Add slices-max feature |
525 |
int i_slice_count_max; /* Absolute cap on slices per frame; stops applying slice-max-size |
526 |
* and slice-max-mbs if this is reached. */
|
|
1242
by Fiona Glaser
Multi-slice encoding support |
527 |
|
1216
by Fiona Glaser
Add support for frame-accurate parameter changes |
528 |
/* Optional callback for freeing this x264_param_t when it is done being used.
|
529 |
* Only used when the x264_param_t sits in memory for an indefinite period of time,
|
|
530 |
* i.e. when an x264_param_t is passed to x264_t in an x264_picture_t or in zones.
|
|
531 |
* Not used when x264_encoder_reconfig is called directly. */
|
|
532 |
void (*param_free)( void* ); |
|
1661
by Fiona Glaser
Callback feature for low-latency per-slice output |
533 |
|
534 |
/* Optional low-level callback for low-latency encoding. Called for each output NAL unit
|
|
535 |
* immediately after the NAL unit is finished encoding. This allows the calling application
|
|
536 |
* to begin processing video data (e.g. by sending packets over a network) before the frame
|
|
537 |
* is done encoding.
|
|
538 |
*
|
|
539 |
* This callback MUST do the following in order to work correctly:
|
|
2300
by Henrik Gramner
x86: AVX2 nal_escape |
540 |
* 1) Have available an output buffer of at least size nal->i_payload*3/2 + 5 + 64.
|
1661
by Fiona Glaser
Callback feature for low-latency per-slice output |
541 |
* 2) Call x264_nal_encode( h, dst, nal ), where dst is the output buffer.
|
542 |
* After these steps, the content of nal is valid and can be used in the same way as if
|
|
543 |
* the NAL unit were output by x264_encoder_encode.
|
|
544 |
*
|
|
545 |
* This does not need to be synchronous with the encoding process: the data pointed to
|
|
546 |
* by nal (both before and after x264_nal_encode) will remain valid until the next
|
|
547 |
* x264_encoder_encode call. The callback must be re-entrant.
|
|
548 |
*
|
|
549 |
* This callback does not work with frame-based threads; threads must be disabled
|
|
550 |
* or sliced-threads enabled. This callback also does not work as one would expect
|
|
551 |
* with HRD -- since the buffering period SEI cannot be calculated until the frame
|
|
552 |
* is finished encoding, it will not be sent via this callback.
|
|
553 |
*
|
|
554 |
* Note also that the NALs are not necessarily returned in order when sliced threads is
|
|
555 |
* enabled. Accordingly, the variable i_first_mb and i_last_mb are available in
|
|
556 |
* x264_nal_t to help the calling application reorder the slices if necessary.
|
|
557 |
*
|
|
558 |
* When this callback is enabled, x264_encoder_encode does not return valid NALs;
|
|
559 |
* the calling application is expected to acquire all output NALs through the callback.
|
|
560 |
*
|
|
561 |
* It is generally sensible to combine this callback with a use of slice-max-mbs or
|
|
2214
by Fiona Glaser
Enhance nalu_process |
562 |
* slice-max-size.
|
563 |
*
|
|
564 |
* The opaque pointer is the opaque pointer from the input frame associated with this
|
|
565 |
* NAL unit. This helps distinguish between nalu_process calls from different sources,
|
|
566 |
* e.g. if doing multiple encodes in one process.
|
|
567 |
*/
|
|
2743
by Anton Mitrofanov
Cosmetics |
568 |
void (*nalu_process)( x264_t *h, x264_nal_t *nal, void *opaque ); |
1
by Laurent Aimar
* all: re-import of the CVS. |
569 |
} x264_param_t; |
570 |
||
1661
by Fiona Glaser
Callback feature for low-latency per-slice output |
571 |
void x264_nal_encode( x264_t *h, uint8_t *dst, x264_nal_t *nal ); |
572 |
||
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
573 |
/****************************************************************************
|
574 |
* H.264 level restriction information
|
|
575 |
****************************************************************************/
|
|
576 |
||
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
577 |
typedef struct x264_level_t |
1917
by Kieran Kunhya
Cosmetics: make struct definition braces consistent |
578 |
{
|
2839
by Henrik Gramner
Add support for levels 6, 6.1, and 6.2 |
579 |
uint8_t level_idc; |
580 |
uint32_t mbps; /* max macroblock processing rate (macroblocks/sec) */ |
|
581 |
uint32_t frame_size; /* max frame size (macroblocks) */ |
|
582 |
uint32_t dpb; /* max decoded picture buffer (mbs) */ |
|
583 |
uint32_t bitrate; /* max bitrate (kbit/sec) */ |
|
584 |
uint32_t cpb; /* max vbv buffer (kbit) */ |
|
585 |
uint16_t mv_range; /* max vertical mv component range (pixels) */ |
|
586 |
uint8_t mvs_per_2mb; /* max mvs per 2 consecutive mbs. */ |
|
587 |
uint8_t slice_rate; /* ?? */ |
|
588 |
uint8_t mincr; /* min compression ratio */ |
|
589 |
uint8_t bipred8x8; /* limit bipred to >=8x8 */ |
|
590 |
uint8_t direct8x8; /* limit b_direct to >=8x8 */ |
|
591 |
uint8_t frame_only; /* forbid interlacing */ |
|
362
by Loren Merritt
check (most of) the levels constaints. |
592 |
} x264_level_t; |
593 |
||
594 |
/* all of the levels defined in the standard, terminated by .level_idc=0 */
|
|
2189
by Steven Walters
ICL/MSVS: Fix shared library generation and usage |
595 |
X264_API extern const x264_level_t x264_levels[]; |
362
by Loren Merritt
check (most of) the levels constaints. |
596 |
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
597 |
/****************************************************************************
|
598 |
* Basic parameter handling functions
|
|
599 |
****************************************************************************/
|
|
600 |
||
1
by Laurent Aimar
* all: re-import of the CVS. |
601 |
/* x264_param_default:
|
602 |
* fill x264_param_t with default values and do CPU detection */
|
|
603 |
void x264_param_default( x264_param_t * ); |
|
604 |
||
542
by Loren Merritt
api addition: x264_param_parse() to set options by name |
605 |
/* x264_param_parse:
|
577
by Loren Merritt
better error checking in x264_param_parse. |
606 |
* set one parameter by name.
|
607 |
* returns 0 on success, or returns one of the following errors.
|
|
608 |
* note: BAD_VALUE occurs only if it can't even parse the value,
|
|
609 |
* numerical range is not checked until x264_encoder_open() or
|
|
610 |
* x264_encoder_reconfig().
|
|
611 |
* value=NULL means "true" for boolean options, but is a BAD_VALUE for non-booleans. */
|
|
542
by Loren Merritt
api addition: x264_param_parse() to set options by name |
612 |
#define X264_PARAM_BAD_NAME (-1)
|
613 |
#define X264_PARAM_BAD_VALUE (-2)
|
|
614 |
int x264_param_parse( x264_param_t *, const char *name, const char *value ); |
|
615 |
||
1
by Laurent Aimar
* all: re-import of the CVS. |
616 |
/****************************************************************************
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
617 |
* Advanced parameter handling functions
|
618 |
****************************************************************************/
|
|
619 |
||
620 |
/* These functions expose the full power of x264's preset-tune-profile system for
|
|
621 |
* easy adjustment of large numbers of internal parameters.
|
|
622 |
*
|
|
623 |
* In order to replicate x264CLI's option handling, these functions MUST be called
|
|
624 |
* in the following order:
|
|
625 |
* 1) x264_param_default_preset
|
|
626 |
* 2) Custom user options (via param_parse or directly assigned variables)
|
|
627 |
* 3) x264_param_apply_fastfirstpass
|
|
628 |
* 4) x264_param_apply_profile
|
|
629 |
*
|
|
630 |
* Additionally, x264CLI does not apply step 3 if the preset chosen is "placebo"
|
|
631 |
* or --slow-firstpass is set. */
|
|
632 |
||
633 |
/* x264_param_default_preset:
|
|
634 |
* The same as x264_param_default, but also use the passed preset and tune
|
|
635 |
* to modify the default settings.
|
|
636 |
* (either can be NULL, which implies no preset or no tune, respectively)
|
|
637 |
*
|
|
638 |
* Currently available presets are, ordered from fastest to slowest: */
|
|
1509
by Fiona Glaser
New "superfast" preset, much faster intra analysis |
639 |
static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 }; |
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
640 |
|
1760
by Loren Merritt
Add numeric names for the presets (0==ultrafast ... 9==placebo) |
641 |
/* The presets can also be indexed numerically, as in:
|
642 |
* x264_param_default_preset( ¶m, "3", ... )
|
|
643 |
* with ultrafast mapping to "0" and placebo mapping to "9". This mapping may
|
|
644 |
* of course change if new presets are added in between, but will always be
|
|
645 |
* ordered from fastest to slowest.
|
|
646 |
*
|
|
647 |
* Warning: the speed of these presets scales dramatically. Ultrafast is a full
|
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
648 |
* 100 times faster than placebo!
|
649 |
*
|
|
650 |
* Currently available tunings are: */
|
|
1505
by Fiona Glaser
Add tune for still image compression |
651 |
static const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 }; |
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
652 |
|
653 |
/* Multiple tunings can be used if separated by a delimiter in ",./-+",
|
|
654 |
* however multiple psy tunings cannot be used.
|
|
1617
by Fiona Glaser
Fix omission in libx264 tuning documentation |
655 |
* film, animation, grain, stillimage, psnr, and ssim are psy tunings.
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
656 |
*
|
657 |
* returns 0 on success, negative on failure (e.g. invalid preset/tune name). */
|
|
658 |
int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune ); |
|
659 |
||
660 |
/* x264_param_apply_fastfirstpass:
|
|
1462
by Fiona Glaser
Fix fastfirstpass |
661 |
* If first-pass mode is set (rc.b_stat_read == 0, rc.b_stat_write == 1),
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
662 |
* modify the encoder settings to disable options generally not useful on
|
663 |
* the first pass. */
|
|
664 |
void x264_param_apply_fastfirstpass( x264_param_t * ); |
|
665 |
||
666 |
/* x264_param_apply_profile:
|
|
667 |
* Applies the restrictions of the given profile.
|
|
668 |
* Currently available profiles are, from most to least restrictive: */
|
|
2081
by Henrik Gramner
4:2:2 encoding support |
669 |
static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 }; |
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
670 |
|
671 |
/* (can be NULL, in which case the function will do nothing)
|
|
672 |
*
|
|
673 |
* Does NOT guarantee that the given profile will be used: if the restrictions
|
|
674 |
* of "High" are applied to settings that are already Baseline-compatible, the
|
|
675 |
* stream will remain baseline. In short, it does not increase settings, only
|
|
676 |
* decrease them.
|
|
677 |
*
|
|
678 |
* returns 0 on success, negative on failure (e.g. invalid profile name). */
|
|
679 |
int x264_param_apply_profile( x264_param_t *, const char *profile ); |
|
680 |
||
681 |
/****************************************************************************
|
|
682 |
* Picture structures and functions
|
|
1
by Laurent Aimar
* all: re-import of the CVS. |
683 |
****************************************************************************/
|
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
684 |
|
2093
by Henrik Gramner
Allow setting a chroma format at compile time |
685 |
/* x264_chroma_format:
|
686 |
* Specifies the chroma formats that x264 supports encoding. When this
|
|
687 |
* value is non-zero, then it represents a X264_CSP_* that is the only
|
|
688 |
* chroma format that x264 supports encoding. If the value is 0 then
|
|
689 |
* there are no restrictions. */
|
|
2189
by Steven Walters
ICL/MSVS: Fix shared library generation and usage |
690 |
X264_API extern const int x264_chroma_format; |
2093
by Henrik Gramner
Allow setting a chroma format at compile time |
691 |
|
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
692 |
enum pic_struct_e |
693 |
{
|
|
694 |
PIC_STRUCT_AUTO = 0, // automatically decide (default) |
|
695 |
PIC_STRUCT_PROGRESSIVE = 1, // progressive frame |
|
696 |
// "TOP" and "BOTTOM" are not supported in x264 (PAFF only)
|
|
697 |
PIC_STRUCT_TOP_BOTTOM = 4, // top field followed by bottom |
|
698 |
PIC_STRUCT_BOTTOM_TOP = 5, // bottom field followed by top |
|
699 |
PIC_STRUCT_TOP_BOTTOM_TOP = 6, // top field, bottom field, top field repeated |
|
700 |
PIC_STRUCT_BOTTOM_TOP_BOTTOM = 7, // bottom field, top field, bottom field repeated |
|
701 |
PIC_STRUCT_DOUBLE = 8, // double frame |
|
702 |
PIC_STRUCT_TRIPLE = 9, // triple frame |
|
703 |
};
|
|
704 |
||
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
705 |
typedef struct x264_hrd_t |
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
706 |
{
|
707 |
double cpb_initial_arrival_time; |
|
708 |
double cpb_final_arrival_time; |
|
709 |
double cpb_removal_time; |
|
710 |
||
711 |
double dpb_output_time; |
|
712 |
} x264_hrd_t; |
|
713 |
||
1722
by Kieran Kunhya
Add support for arbitrary user SEIs |
714 |
/* Arbitrary user SEI:
|
715 |
* Payload size is in bytes and the payload pointer must be valid.
|
|
716 |
* Payload types and syntax can be found in Annex D of the H.264 Specification.
|
|
717 |
* SEI payload alignment bits as described in Annex D must be included at the
|
|
718 |
* end of the payload if needed.
|
|
719 |
* The payload should not be NAL-encapsulated.
|
|
720 |
* Payloads are written first in order of input, apart from in the case when HRD
|
|
721 |
* is enabled where payloads are written after the Buffering Period SEI. */
|
|
722 |
||
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
723 |
typedef struct x264_sei_payload_t |
1722
by Kieran Kunhya
Add support for arbitrary user SEIs |
724 |
{
|
725 |
int payload_size; |
|
726 |
int payload_type; |
|
727 |
uint8_t *payload; |
|
728 |
} x264_sei_payload_t; |
|
729 |
||
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
730 |
typedef struct x264_sei_t |
1722
by Kieran Kunhya
Add support for arbitrary user SEIs |
731 |
{
|
732 |
int num_payloads; |
|
733 |
x264_sei_payload_t *payloads; |
|
734 |
/* In: optional callback to free each payload AND x264_sei_payload_t when used. */
|
|
735 |
void (*sei_free)( void* ); |
|
736 |
} x264_sei_t; |
|
737 |
||
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
738 |
typedef struct x264_image_t |
1
by Laurent Aimar
* all: re-import of the CVS. |
739 |
{
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
740 |
int i_csp; /* Colorspace */ |
741 |
int i_plane; /* Number of image planes */ |
|
742 |
int i_stride[4]; /* Strides for each plane */ |
|
743 |
uint8_t *plane[4]; /* Pointers to each plane */ |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
744 |
} x264_image_t; |
745 |
||
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
746 |
typedef struct x264_image_properties_t |
1
by Laurent Aimar
* all: re-import of the CVS. |
747 |
{
|
2197
by Fiona Glaser
Add mb_info API for signalling constant macroblocks |
748 |
/* All arrays of data here are ordered as follows:
|
749 |
* each array contains one offset per macroblock, in raster scan order. In interlaced
|
|
750 |
* mode, top-field MBs and bottom-field MBs are interleaved at the row level.
|
|
751 |
* Macroblocks are 16x16 blocks of pixels (with respect to the luma plane). For the
|
|
752 |
* purposes of calculating the number of macroblocks, width and height are rounded up to
|
|
753 |
* the nearest 16. If in interlaced mode, height is rounded up to the nearest 32 instead. */
|
|
754 |
||
1624
by Fiona Glaser
Add API tool to apply arbitrary quantizer offsets |
755 |
/* In: an array of quantizer offsets to be applied to this image during encoding.
|
756 |
* These are added on top of the decisions made by x264.
|
|
757 |
* Offsets can be fractional; they are added before QPs are rounded to integer.
|
|
758 |
* Adaptive quantization must be enabled to use this feature. Behavior if quant
|
|
2197
by Fiona Glaser
Add mb_info API for signalling constant macroblocks |
759 |
* offsets differ between encoding passes is undefined. */
|
1624
by Fiona Glaser
Add API tool to apply arbitrary quantizer offsets |
760 |
float *quant_offsets; |
761 |
/* In: optional callback to free quant_offsets when used.
|
|
762 |
* Useful if one wants to use a different quant_offset array for each frame. */
|
|
763 |
void (*quant_offsets_free)( void* ); |
|
2197
by Fiona Glaser
Add mb_info API for signalling constant macroblocks |
764 |
|
765 |
/* In: optional array of flags for each macroblock.
|
|
766 |
* Allows specifying additional information for the encoder such as which macroblocks
|
|
767 |
* remain unchanged. Usable flags are listed below.
|
|
768 |
* x264_param_t.analyse.b_mb_info must be set to use this, since x264 needs to track
|
|
2216
by Fiona Glaser
Enhance mb_info: add mb_info_update |
769 |
* extra data internally to make full use of this information.
|
770 |
*
|
|
771 |
* Out: if b_mb_info_update is set, x264 will update this array as a result of encoding.
|
|
772 |
*
|
|
773 |
* For "MBINFO_CONSTANT", it will remove this flag on any macroblock whose decoded
|
|
774 |
* pixels have changed. This can be useful for e.g. noting which areas of the
|
|
775 |
* frame need to actually be blitted. Note: this intentionally ignores the effects
|
|
776 |
* of deblocking for the current frame, which should be fine unless one needs exact
|
|
777 |
* pixel-perfect accuracy.
|
|
778 |
*
|
|
779 |
* Results for MBINFO_CONSTANT are currently only set for P-frames, and are not
|
|
780 |
* guaranteed to enumerate all blocks which haven't changed. (There may be false
|
|
781 |
* negatives, but no false positives.)
|
|
782 |
*/
|
|
2197
by Fiona Glaser
Add mb_info API for signalling constant macroblocks |
783 |
uint8_t *mb_info; |
784 |
/* In: optional callback to free mb_info when used. */
|
|
785 |
void (*mb_info_free)( void* ); |
|
786 |
||
787 |
/* The macroblock is constant and remains unchanged from the previous frame. */
|
|
788 |
#define X264_MBINFO_CONSTANT (1<<0)
|
|
789 |
/* More flags may be added in the future. */
|
|
790 |
||
2174
by Fiona Glaser
Export PSNR/SSIM in x264 API |
791 |
/* Out: SSIM of the the frame luma (if x264_param_t.b_ssim is set) */
|
792 |
double f_ssim; |
|
793 |
/* Out: Average PSNR of the frame (if x264_param_t.b_psnr is set) */
|
|
794 |
double f_psnr_avg; |
|
795 |
/* Out: PSNR of Y, U, and V (if x264_param_t.b_psnr is set) */
|
|
796 |
double f_psnr[3]; |
|
2212
by Fiona Glaser
Export the average effective CRF of each frame |
797 |
|
798 |
/* Out: Average effective CRF of the encoded frame */
|
|
799 |
double f_crf_avg; |
|
1624
by Fiona Glaser
Add API tool to apply arbitrary quantizer offsets |
800 |
} x264_image_properties_t; |
801 |
||
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
802 |
typedef struct x264_picture_t |
1624
by Fiona Glaser
Add API tool to apply arbitrary quantizer offsets |
803 |
{
|
1076
by Fiona Glaser
Support forced frametypes with scenecut/b-adapt |
804 |
/* In: force picture type (if not auto)
|
805 |
* If x264 encoding parameters are violated in the forcing of picture types,
|
|
806 |
* x264 will correct the input picture type and log a warning.
|
|
1
by Laurent Aimar
* all: re-import of the CVS. |
807 |
* Out: type of the picture encoded */
|
808 |
int i_type; |
|
1764
by Fiona Glaser
Improve quantizer handling |
809 |
/* In: force quantizer for != X264_QP_AUTO */
|
1
by Laurent Aimar
* all: re-import of the CVS. |
810 |
int i_qpplus1; |
1846
by Kieran Kunhya
Fix typo in documentation |
811 |
/* In: pic_struct, for pulldown/doubling/etc...used only if b_pic_struct=1.
|
1896
by Kieran Kunhya
Output pic struct information in libx264 API |
812 |
* use pic_struct_e for pic_struct inputs
|
813 |
* Out: pic_struct element associated with frame */
|
|
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
814 |
int i_pic_struct; |
1380
by Fiona Glaser
Periodic intra refresh |
815 |
/* Out: whether this frame is a keyframe. Important when using modes that result in
|
816 |
* SEI recovery points being used instead of IDR frames. */
|
|
817 |
int b_keyframe; |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
818 |
/* In: user pts, Out: pts of encoded picture (user)*/
|
819 |
int64_t i_pts; |
|
1725
by Anton Mitrofanov
Fix DTS/bitrate calculation if the first PTS wasn't zero |
820 |
/* Out: frame dts. When the pts of the first frame is close to zero,
|
1379
by Kieran Kunhya
LAVF/FFMS input support, native VFR timestamp handling |
821 |
* initial frames may have a negative dts which must be dealt with by any muxer */
|
822 |
int64_t i_dts; |
|
1216
by Fiona Glaser
Add support for frame-accurate parameter changes |
823 |
/* In: custom encoding parameters to be set from this frame forwards
|
824 |
(in coded order, not display order). If NULL, continue using
|
|
825 |
parameters from the previous frame. Some parameters, such as
|
|
826 |
aspect ratio, can only be changed per-GOP due to the limitations
|
|
827 |
of H.264 itself; in this case, the caller must force an IDR frame
|
|
828 |
if it needs the changed parameter to apply immediately. */
|
|
829 |
x264_param_t *param; |
|
2182
by Fiona Glaser
Add full-recon API option |
830 |
/* In: raw image data */
|
831 |
/* Out: reconstructed image data. x264 may skip part of the reconstruction process,
|
|
832 |
e.g. deblocking, in frames where it isn't necessary. To force complete
|
|
833 |
reconstruction, at a small speed cost, set b_full_recon. */
|
|
1
by Laurent Aimar
* all: re-import of the CVS. |
834 |
x264_image_t img; |
2174
by Fiona Glaser
Export PSNR/SSIM in x264 API |
835 |
/* In: optional information to modify encoder decisions for this frame
|
836 |
* Out: information about the encoded frame */
|
|
1624
by Fiona Glaser
Add API tool to apply arbitrary quantizer offsets |
837 |
x264_image_properties_t prop; |
1480
by Kieran Kunhya
Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown |
838 |
/* Out: HRD timing information. Output only when i_nal_hrd is set. */
|
839 |
x264_hrd_t hrd_timing; |
|
1722
by Kieran Kunhya
Add support for arbitrary user SEIs |
840 |
/* In: arbitrary user SEI (e.g subtitles, AFDs) */
|
841 |
x264_sei_t extra_sei; |
|
2116
by Kieran Kunhya
Pass through user data |
842 |
/* private user data. copied from input to output frames. */
|
1353
by Steven Walters
Enhanced Avisynth input support |
843 |
void *opaque; |
1
by Laurent Aimar
* all: re-import of the CVS. |
844 |
} x264_picture_t; |
845 |
||
1628
by Fiona Glaser
Add API function to fix x264_picture_t initialization |
846 |
/* x264_picture_init:
|
847 |
* initialize an x264_picture_t. Needs to be done if the calling application
|
|
848 |
* allocates its own x264_picture_t as opposed to using x264_picture_alloc. */
|
|
849 |
void x264_picture_init( x264_picture_t *pic ); |
|
850 |
||
1
by Laurent Aimar
* all: re-import of the CVS. |
851 |
/* x264_picture_alloc:
|
1201
by Steven Walters
Gracefully terminate in the case of a malloc failure |
852 |
* alloc data for a picture. You must call x264_picture_clean on it.
|
1673
by Loren Merritt
Convert x264 to use NV12 pixel format internally |
853 |
* returns 0 on success, or -1 on malloc failure or invalid colorspace. */
|
1201
by Steven Walters
Gracefully terminate in the case of a malloc failure |
854 |
int x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height ); |
1
by Laurent Aimar
* all: re-import of the CVS. |
855 |
|
856 |
/* x264_picture_clean:
|
|
857 |
* free associated resource for a x264_picture_t allocated with
|
|
858 |
* x264_picture_alloc ONLY */
|
|
859 |
void x264_picture_clean( x264_picture_t *pic ); |
|
860 |
||
861 |
/****************************************************************************
|
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
862 |
* Encoder functions
|
1
by Laurent Aimar
* all: re-import of the CVS. |
863 |
****************************************************************************/
|
864 |
||
1245
by Fiona Glaser
Force a link error in case of incompatible API |
865 |
/* Force a link error in the case of linking against an incompatible API version.
|
866 |
* Glue #defines exist to force correct macro expansion; the final output of the macro
|
|
867 |
* is x264_encoder_open_##X264_BUILD (for purposes of dlopen). */
|
|
868 |
#define x264_encoder_glue1(x,y) x##y
|
|
869 |
#define x264_encoder_glue2(x,y) x264_encoder_glue1(x,y)
|
|
870 |
#define x264_encoder_open x264_encoder_glue2(x264_encoder_open_,X264_BUILD)
|
|
871 |
||
1
by Laurent Aimar
* all: re-import of the CVS. |
872 |
/* x264_encoder_open:
|
873 |
* create a new encoder handler, all parameters from x264_param_t are copied */
|
|
1245
by Fiona Glaser
Force a link error in case of incompatible API |
874 |
x264_t *x264_encoder_open( x264_param_t * ); |
875 |
||
235
by Loren Merritt
API: x264_encoder_reconfig(). (not yet used by any frontend) |
876 |
/* x264_encoder_reconfig:
|
1417
by Fiona Glaser
Add ability to adjust ratecontrol parameters on the fly |
877 |
* various parameters from x264_param_t are copied.
|
1216
by Fiona Glaser
Add support for frame-accurate parameter changes |
878 |
* this takes effect immediately, on whichever frame is encoded next;
|
879 |
* due to delay, this may not be the next frame passed to encoder_encode.
|
|
1260
by Fiona Glaser
Major API change: encapsulate NALs within libx264 |
880 |
* if the change should apply to some particular frame, use x264_picture_t->param instead.
|
1417
by Fiona Glaser
Add ability to adjust ratecontrol parameters on the fly |
881 |
* returns 0 on success, negative on parameter validation error.
|
2252
by Fiona Glaser
x264.h: improve x264_encoder_reconfig documentation |
882 |
* not all parameters can be changed; see the actual function for a detailed breakdown.
|
883 |
*
|
|
884 |
* since not all parameters can be changed, moving from preset to preset may not always
|
|
885 |
* fully copy all relevant parameters, but should still work usably in practice. however,
|
|
886 |
* more so than for other presets, many of the speed shortcuts used in ultrafast cannot be
|
|
887 |
* switched out of; using reconfig to switch between ultrafast and other presets is not
|
|
888 |
* recommended without a more fine-grained breakdown of parameters to take this into account. */
|
|
235
by Loren Merritt
API: x264_encoder_reconfig(). (not yet used by any frontend) |
889 |
int x264_encoder_reconfig( x264_t *, x264_param_t * ); |
1385
by Fiona Glaser
Fix free callback, add x264_encoder_parameters function |
890 |
/* x264_encoder_parameters:
|
891 |
* copies the current internal set of parameters to the pointer provided
|
|
892 |
* by the caller. useful when the calling application needs to know
|
|
893 |
* how x264_encoder_open has changed the parameters, or the current state
|
|
894 |
* of the encoder after multiple x264_encoder_reconfig calls.
|
|
895 |
* note that the data accessible through pointers in the returned param struct
|
|
896 |
* (e.g. filenames) should not be modified by the calling application. */
|
|
897 |
void x264_encoder_parameters( x264_t *, x264_param_t * ); |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
898 |
/* x264_encoder_headers:
|
1260
by Fiona Glaser
Major API change: encapsulate NALs within libx264 |
899 |
* return the SPS and PPS that will be used for the whole stream.
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
900 |
* *pi_nal is the number of NAL units outputted in pp_nal.
|
2397
by Fiona Glaser
x264.h: fix documentation |
901 |
* returns the number of bytes in the returned NALs.
|
1260
by Fiona Glaser
Major API change: encapsulate NALs within libx264 |
902 |
* returns negative on error.
|
903 |
* the payloads of all output NALs are guaranteed to be sequential in memory. */
|
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
904 |
int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal ); |
1
by Laurent Aimar
* all: re-import of the CVS. |
905 |
/* x264_encoder_encode:
|
1260
by Fiona Glaser
Major API change: encapsulate NALs within libx264 |
906 |
* encode one picture.
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
907 |
* *pi_nal is the number of NAL units outputted in pp_nal.
|
2397
by Fiona Glaser
x264.h: fix documentation |
908 |
* returns the number of bytes in the returned NALs.
|
909 |
* returns negative on error and zero if no NAL units returned.
|
|
1260
by Fiona Glaser
Major API change: encapsulate NALs within libx264 |
910 |
* the payloads of all output NALs are guaranteed to be sequential in memory. */
|
1454
by Fiona Glaser
Move presets, tunings, and profiles into libx264 |
911 |
int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out ); |
1
by Laurent Aimar
* all: re-import of the CVS. |
912 |
/* x264_encoder_close:
|
913 |
* close an encoder handler */
|
|
2743
by Anton Mitrofanov
Cosmetics |
914 |
void x264_encoder_close( x264_t * ); |
1210
by Anton Mitrofanov
new API function x264_encoder_delayed_frames. |
915 |
/* x264_encoder_delayed_frames:
|
916 |
* return the number of currently delayed (buffered) frames
|
|
917 |
* this should be used at the end of the stream, to know when you have all the encoded frames. */
|
|
918 |
int x264_encoder_delayed_frames( x264_t * ); |
|
2868
by Vittorio Giovara
Unify 8-bit and 10-bit CLI and libraries |
919 |
/* x264_encoder_maximum_delayed_frames( x264_t * ):
|
1799
by Fiona Glaser
Add API function to return max number of delayed frames |
920 |
* return the maximum number of delayed (buffered) frames that can occur with the current
|
921 |
* parameters. */
|
|
2868
by Vittorio Giovara
Unify 8-bit and 10-bit CLI and libraries |
922 |
int x264_encoder_maximum_delayed_frames( x264_t * ); |
1586
by Fiona Glaser
Add API function to trigger intra refresh |
923 |
/* x264_encoder_intra_refresh:
|
924 |
* If an intra refresh is not in progress, begin one with the next P-frame.
|
|
925 |
* If an intra refresh is in progress, begin one as soon as the current one finishes.
|
|
926 |
* Requires that b_intra_refresh be set.
|
|
1659
by Fiona Glaser
Interactive encoder control: error resilience |
927 |
*
|
1586
by Fiona Glaser
Add API function to trigger intra refresh |
928 |
* Useful for interactive streaming where the client can tell the server that packet loss has
|
929 |
* occurred. In this case, keyint can be set to an extremely high value so that intra refreshes
|
|
1659
by Fiona Glaser
Interactive encoder control: error resilience |
930 |
* only occur when calling x264_encoder_intra_refresh.
|
931 |
*
|
|
932 |
* In multi-pass encoding, if x264_encoder_intra_refresh is called differently in each pass,
|
|
933 |
* behavior is undefined.
|
|
934 |
*
|
|
935 |
* Should not be called during an x264_encoder_encode. */
|
|
1586
by Fiona Glaser
Add API function to trigger intra refresh |
936 |
void x264_encoder_intra_refresh( x264_t * ); |
1659
by Fiona Glaser
Interactive encoder control: error resilience |
937 |
/* x264_encoder_invalidate_reference:
|
938 |
* An interactive error resilience tool, designed for use in a low-latency one-encoder-few-clients
|
|
939 |
* system. When the client has packet loss or otherwise incorrectly decodes a frame, the encoder
|
|
940 |
* can be told with this command to "forget" the frame and all frames that depend on it, referencing
|
|
941 |
* only frames that occurred before the loss. This will force a keyframe if no frames are left to
|
|
942 |
* reference after the aforementioned "forgetting".
|
|
943 |
*
|
|
944 |
* It is strongly recommended to use a large i_dpb_size in this case, which allows the encoder to
|
|
945 |
* keep around extra, older frames to fall back on in case more recent frames are all invalidated.
|
|
946 |
* Unlike increasing i_frame_reference, this does not increase the number of frames used for motion
|
|
947 |
* estimation and thus has no speed impact. It is also recommended to set a very large keyframe
|
|
948 |
* interval, so that keyframes are not used except as necessary for error recovery.
|
|
949 |
*
|
|
950 |
* x264_encoder_invalidate_reference is not currently compatible with the use of B-frames or intra
|
|
951 |
* refresh.
|
|
952 |
*
|
|
953 |
* In multi-pass encoding, if x264_encoder_invalidate_reference is called differently in each pass,
|
|
954 |
* behavior is undefined.
|
|
955 |
*
|
|
1683
by Fiona Glaser
Improve reference_invalid support |
956 |
* Should not be called during an x264_encoder_encode, but multiple calls can be made simultaneously.
|
1659
by Fiona Glaser
Interactive encoder control: error resilience |
957 |
*
|
958 |
* Returns 0 on success, negative on failure. */
|
|
959 |
int x264_encoder_invalidate_reference( x264_t *, int64_t pts ); |
|
1
by Laurent Aimar
* all: re-import of the CVS. |
960 |
|
2597
by Mark Webster
Simplify inclusion of x264.h in C++ projects |
961 |
#ifdef __cplusplus
|
962 |
}
|
|
963 |
#endif
|
|
964 |
||
1
by Laurent Aimar
* all: re-import of the CVS. |
965 |
#endif
|