31 #define X264_API_IMPORTS 1 84 static const int level_map[] = {
91 if (level < 0 || level > X264_LOG_DEBUG)
94 av_vlog(p, level_map[level], fmt, args);
99 x264_nal_t *nals,
int nnal)
108 for (i = 0; i < nnal; i++)
109 size += nals[i].i_payload;
123 for (i = 0; i < nnal; i++){
124 memcpy(p, nals[i].p_payload, nals[i].i_payload);
125 p += nals[i].i_payload;
137 x264_picture_t pic_out;
140 x264_picture_init( &x4->
pic );
142 if (x264_bit_depth > 8)
143 x4->
pic.img.i_csp |= X264_CSP_HIGH_DEPTH;
144 x4->
pic.img.i_plane = 3;
147 for (i = 0; i < 3; i++) {
148 x4->
pic.img.plane[i] = frame->
data[i];
152 x4->
pic.i_pts = frame->
pts;
160 x264_encoder_reconfig(x4->
enc, &x4->
params);
166 x264_encoder_reconfig(x4->
enc, &x4->
params);
173 x264_encoder_reconfig(x4->
enc, &x4->
params);
176 if (x4->
params.rc.i_rc_method == X264_RC_ABR &&
179 x264_encoder_reconfig(x4->
enc, &x4->
params);
183 x4->
params.rc.i_rc_method == X264_RC_CRF &&
184 x4->
params.rc.f_rf_constant != x4->
crf) {
186 x264_encoder_reconfig(x4->
enc, &x4->
params);
189 if (x4->
params.rc.i_rc_method == X264_RC_CQP &&
190 x4->
params.rc.i_qp_constant != x4->
cqp) {
192 x264_encoder_reconfig(x4->
enc, &x4->
params);
198 x264_encoder_reconfig(x4->
enc, &x4->
params);
206 switch (stereo->
type) {
230 if (fpa_type != x4->
params.i_frame_packing) {
231 x4->
params.i_frame_packing = fpa_type;
232 x264_encoder_reconfig(x4->
enc, &x4->
params);
237 if (x264_encoder_encode(x4->
enc, &nal, &nnal, frame? &x4->
pic:
NULL, &pic_out) < 0)
243 }
while (!ret && !frame && x264_encoder_delayed_frames(x4->
enc));
245 pkt->
pts = pic_out.i_pts;
246 pkt->
dts = pic_out.i_dts;
248 switch (pic_out.i_type) {
278 x264_encoder_close(x4->
enc);
304 #define PARSE_X264_OPT(name, var)\ 305 if (x4->var && x264_param_parse(&x4->params, name, x4->var) < 0) {\ 306 av_log(avctx, AV_LOG_ERROR, "Error parsing option '%s' with value '%s'.\n", name, x4->var);\ 307 return AVERROR(EINVAL);\ 314 x264_param_default(&x4->
params);
324 if (avctx->
level > 0)
328 x4->
params.p_log_private = avctx;
329 x4->
params.i_log_level = X264_LOG_DEBUG;
334 x4->
params.rc.i_rc_method = X264_RC_ABR;
340 x4->
params.rc.b_stat_read = 1;
343 x4->
params.rc.i_rc_method = X264_RC_CRF;
345 }
else if (x4->
cqp >= 0) {
346 x4->
params.rc.i_rc_method = X264_RC_CQP;
356 x4->
params.rc.f_vbv_buffer_init =
366 x4->
params.analyse.i_me_method = X264_ME_DIA;
368 x4->
params.analyse.i_me_method = X264_ME_HEX;
370 x4->
params.analyse.i_me_method = X264_ME_UMH;
372 x4->
params.analyse.i_me_method = X264_ME_ESA;
374 x4->
params.analyse.i_me_method = X264_ME_TESA;
382 if (avctx->
qmin >= 0)
384 if (avctx->
qmax >= 0)
388 if (avctx->
qblur >= 0)
392 if (avctx->
refs >= 0)
436 x4->
params.b_vfr_input = 0;
438 if (x4->
b_bias != INT_MIN)
459 x264_param_apply_fastfirstpass(&x4->
params);
465 if (x264_param_apply_profile(&x4->
params, x4->
profile) < 0) {
493 x4->
params.b_repeat_headers = 0;
503 "Error parsing option '%s = %s'.\n",
513 x4->
params.i_bframe_pyramid ? 2 : 1 : 0;
519 x4->
enc = x264_encoder_open(&x4->
params);
532 s = x264_encoder_headers(x4->
enc, &nal, &nnal);
535 for (i = 0; i < nnal; i++) {
537 if (nal[i].i_type ==
NAL_SEI) {
541 memcpy(x4->
sei, nal[i].p_payload, nal[i].i_payload);
544 memcpy(p, nal[i].p_payload, nal[i].i_payload);
545 p += nal[i].i_payload;
577 if (x264_bit_depth == 8)
579 else if (x264_bit_depth == 9)
581 else if (x264_bit_depth == 10)
585 #define OFFSET(x) offsetof(X264Context, x) 586 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM 593 {
"crf_max",
"In CRF mode, prevents VBV from lowering quality beyond this point.",
OFFSET(
crf_max),
AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
594 {
"qp",
"Constant quantization parameter rate control method",
OFFSET(
cqp),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
597 {
"variance",
"Variance AQ (complexity mask)", 0,
AV_OPT_TYPE_CONST, {.i64 = X264_AQ_VARIANCE}, INT_MIN, INT_MAX,
VE,
"aq_mode" },
598 {
"autovariance",
"Auto-variance AQ (experimental)", 0,
AV_OPT_TYPE_CONST, {.i64 = X264_AQ_AUTOVARIANCE}, INT_MIN, INT_MAX,
VE,
"aq_mode" },
614 {
"strict",
"Strictly hierarchical pyramid", 0,
AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_STRICT}, INT_MIN, INT_MAX,
VE,
"b_pyramid" },
615 {
"normal",
"Non-strict (not Blu-ray compatible)", 0,
AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_NORMAL}, INT_MIN, INT_MAX,
VE,
"b_pyramid" },
616 {
"mixed-refs",
"One reference per partition, as opposed to one reference per macroblock",
OFFSET(
mixed_refs),
AV_OPT_TYPE_INT, { .i64 = -1}, -1, 1, VE },
623 {
"partitions",
"A comma-separated list of partitions to consider. " 624 "Possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all",
OFFSET(
partitions),
AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
632 {
"nal-hrd",
"Signal HRD information (requires vbv-bufsize; " 652 {
"i_qfactor",
"-1" },
659 {
"sc_threshold",
"-1" },
662 {
"me_range",
"-1" },
663 {
"me_method",
"-1" },
665 {
"b_strategy",
"-1" },
666 {
"keyint_min",
"-1" },
670 {
"thread_type",
"0" },
671 {
"flags",
"+cgop" },
672 {
"rc_init_occupancy",
"-1" },
686 .priv_class = &
class,
static int convert_pix_fmt(enum AVPixelFormat pix_fmt)
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Views are packed per line, as if interlaced.
This structure describes decoded (raw) audio or video data.
Views are alternated temporally.
#define CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
AVCodec ff_libx264_encoder
float qblur
amount of qscale smoothing over time (0.0-1.0)
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
#define AV_LOG_WARNING
Something somehow does not look correct.
memory handling functions
#define CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
AVFrame * coded_frame
the picture in the bitstream
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
int rc_initial_buffer_occupancy
Number of bits which should be loaded into the rc buffer before decoding starts.
enum AVColorRange color_range
MPEG vs JPEG YUV range.
enhanced predictive zonal search
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static void X264_log(void *p, int level, const char *fmt, va_list args)
static av_cold int X264_init(AVCodecContext *avctx)
int scenechange_threshold
scene change detection threshold 0 is default, larger means fewer detected scene changes.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
#define CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Stereo 3D type: this structure describes how two videos are packed within a single video surface...
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
#define CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
float b_quant_factor
qscale factor between IP and B-frames If > 0 then the last P-frame quantizer will be used (q= lastp_q...
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int me_cmp
motion estimation comparison function
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
int chromaoffset
chroma qp offset from luma
#define CODEC_FLAG_LOOP_FILTER
loop filter
static enum AVPixelFormat pix_fmts_10bit[]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int has_b_frames
Size of the frame reordering buffer in the decoder.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
static const AVCodecDefault defaults[]
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
int qmax
maximum quantizer
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
int rc_max_rate
maximum bitrate
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
float i_quant_factor
qscale factor between P and I-frames If > 0 then the last p frame quantizer will be used (q= lastp_q*...
#define AV_PIX_FMT_YUV444P10
transformed exhaustive search algorithm
int flags
A combination of AV_PKT_FLAG values.
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
int rc_buffer_size
decoder bitstream buffer size
common internal API header
int refs
number of reference frames
static enum AVPixelFormat pix_fmts_9bit[]
#define PARSE_X264_OPT(name, var)
int bit_rate
the average bitrate
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
enum AVPictureType pict_type
Picture type of the frame.
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_...
int width
picture width / height.
#define CODEC_CAP_AUTO_THREADS
Codec supports avctx->thread_count == 0 (auto).
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
int quality
quality (between 1 (good) and FF_LAMBDA_MAX (bad))
int ff_alloc_packet(AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
#define CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
int max_qdiff
maximum quantizer difference between frames
enum AVPixelFormat pix_fmt
#define AV_PIX_FMT_YUV444P9
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
the normal 2^n-1 "JPEG" YUV ranges
static enum AVPixelFormat pix_fmts_8bit[]
static const AVCodecDefault x264_defaults[]
int av_dict_parse_string(AVDictionary **pm, const char *str, const char *key_val_sep, const char *pairs_sep, int flags)
Parse the key/value pairs list and add to a dictionary.
enum AVStereo3DType type
How views are packed within the video.
#define AV_LOG_INFO
Standard information.
Libavcodec external API header.
static av_cold int X264_close(AVCodecContext *avctx)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
static void close(AVCodecParserContext *s)
static const AVOption options[]
int qmin
minimum quantizer
#define AV_PIX_FMT_YUV420P10
Describe the class of an AVClass context structure.
void av_vlog(void *avcl, int level, const char *fmt, va_list vl)
Send the specified message to the log if the level is less than or equal to the current av_log_level...
#define AV_PIX_FMT_YUV420P9
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
#define CODEC_FLAG_CLOSED_GOP
Views are on top of each other.
#define AV_PIX_FMT_YUV422P10
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int noise_reduction
noise reduction strength
Views are next to each other.
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
static av_cold void X264_init_static(AVCodec *codec)
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal api header.
interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
static av_cold int init(AVCodecParserContext *s)
int trellis
trellis RD quantization
int slices
Number of slices.
int top_field_first
If the content is interlaced, is top field displayed first.
uneven multi-hexagon search
Views are packed in a checkerboard-like structure per pixel.
Views are packed per column.
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
#define AV_DICT_IGNORE_SUFFIX
static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
int me_method
Motion estimation algorithm used for video coding.
Stereoscopic 3d metadata.
AVPixelFormat
Pixel format.
This structure stores compressed data.
int me_subpel_quality
subpel ME quality
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int thread_type
Which multithreading methods to use.
int keyint_min
minimum GOP size
static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, x264_nal_t *nals, int nnal)