FFmpeg
libx264.c
Go to the documentation of this file.
1 /*
2  * H.264 encoding using the x264 library
3  * Copyright (C) 2005 Mans Rullgard <mans@mansr.com>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include "libavutil/eval.h"
23 #include "libavutil/internal.h"
24 #include "libavutil/opt.h"
25 #include "libavutil/mem.h"
26 #include "libavutil/pixdesc.h"
27 #include "libavutil/stereo3d.h"
28 #include "libavutil/time.h"
29 #include "libavutil/intreadwrite.h"
30 #include "avcodec.h"
31 #include "internal.h"
32 #include "packet_internal.h"
33 
34 #if defined(_MSC_VER)
35 #define X264_API_IMPORTS 1
36 #endif
37 
38 #include <x264.h>
39 #include <float.h>
40 #include <math.h>
41 #include <stdio.h>
42 #include <stdlib.h>
43 #include <string.h>
44 
45 // from x264.h, for quant_offsets, Macroblocks are 16x16
46 // blocks of pixels (with respect to the luma plane)
47 #define MB_SIZE 16
48 
49 typedef struct X264Opaque {
51  int64_t wallclock;
52 } X264Opaque;
53 
54 typedef struct X264Context {
55  AVClass *class;
56  x264_param_t params;
57  x264_t *enc;
58  x264_picture_t pic;
60  int sei_size;
61  char *preset;
62  char *tune;
63  char *profile;
64  char *level;
66  char *wpredp;
67  char *x264opts;
68  float crf;
69  float crf_max;
70  int cqp;
71  int aq_mode;
72  float aq_strength;
73  char *psy_rd;
74  int psy;
76  int weightp;
77  int weightb;
78  int ssim;
81  int b_bias;
82  int b_pyramid;
84  int dct8x8;
86  int aud;
87  int mbtree;
88  char *deblock;
89  float cplxblur;
90  char *partitions;
93  char *stats;
94  int nal_hrd;
98  int coder;
99  int a53_cc;
104 
106 
109 
110  /**
111  * If the encoder does not support ROI then warn the first time we
112  * encounter a frame with ROI side data.
113  */
115 } X264Context;
116 
117 static void X264_log(void *p, int level, const char *fmt, va_list args)
118 {
119  static const int level_map[] = {
120  [X264_LOG_ERROR] = AV_LOG_ERROR,
121  [X264_LOG_WARNING] = AV_LOG_WARNING,
122  [X264_LOG_INFO] = AV_LOG_INFO,
123  [X264_LOG_DEBUG] = AV_LOG_DEBUG
124  };
125 
126  if (level < 0 || level > X264_LOG_DEBUG)
127  return;
128 
129  av_vlog(p, level_map[level], fmt, args);
130 }
131 
132 
134  const x264_nal_t *nals, int nnal)
135 {
136  X264Context *x4 = ctx->priv_data;
137  uint8_t *p;
138  int i, size = x4->sei_size, ret;
139 
140  if (!nnal)
141  return 0;
142 
143  for (i = 0; i < nnal; i++)
144  size += nals[i].i_payload;
145 
146  if ((ret = ff_alloc_packet2(ctx, pkt, size, 0)) < 0)
147  return ret;
148 
149  p = pkt->data;
150 
151  /* Write the SEI as part of the first frame. */
152  if (x4->sei_size > 0 && nnal > 0) {
153  if (x4->sei_size > size) {
154  av_log(ctx, AV_LOG_ERROR, "Error: nal buffer is too small\n");
155  return -1;
156  }
157  memcpy(p, x4->sei, x4->sei_size);
158  p += x4->sei_size;
159  x4->sei_size = 0;
160  av_freep(&x4->sei);
161  }
162 
163  for (i = 0; i < nnal; i++){
164  memcpy(p, nals[i].p_payload, nals[i].i_payload);
165  p += nals[i].i_payload;
166  }
167 
168  return 1;
169 }
170 
171 static int avfmt2_num_planes(int avfmt)
172 {
173  switch (avfmt) {
174  case AV_PIX_FMT_YUV420P:
175  case AV_PIX_FMT_YUVJ420P:
176  case AV_PIX_FMT_YUV420P9:
178  case AV_PIX_FMT_YUV444P:
179  return 3;
180 
181  case AV_PIX_FMT_BGR0:
182  case AV_PIX_FMT_BGR24:
183  case AV_PIX_FMT_RGB24:
184  case AV_PIX_FMT_GRAY8:
185  case AV_PIX_FMT_GRAY10:
186  return 1;
187 
188  default:
189  return 3;
190  }
191 }
192 
194 {
195  X264Context *x4 = ctx->priv_data;
196  AVFrameSideData *side_data;
197 
198 
199  if (x4->avcintra_class < 0) {
200  if (x4->params.b_interlaced && x4->params.b_tff != frame->top_field_first) {
201 
202  x4->params.b_tff = frame->top_field_first;
203  x264_encoder_reconfig(x4->enc, &x4->params);
204  }
205  if (x4->params.vui.i_sar_height*ctx->sample_aspect_ratio.num != ctx->sample_aspect_ratio.den * x4->params.vui.i_sar_width) {
206  x4->params.vui.i_sar_height = ctx->sample_aspect_ratio.den;
207  x4->params.vui.i_sar_width = ctx->sample_aspect_ratio.num;
208  x264_encoder_reconfig(x4->enc, &x4->params);
209  }
210 
211  if (x4->params.rc.i_vbv_buffer_size != ctx->rc_buffer_size / 1000 ||
212  x4->params.rc.i_vbv_max_bitrate != ctx->rc_max_rate / 1000) {
213  x4->params.rc.i_vbv_buffer_size = ctx->rc_buffer_size / 1000;
214  x4->params.rc.i_vbv_max_bitrate = ctx->rc_max_rate / 1000;
215  x264_encoder_reconfig(x4->enc, &x4->params);
216  }
217 
218  if (x4->params.rc.i_rc_method == X264_RC_ABR &&
219  x4->params.rc.i_bitrate != ctx->bit_rate / 1000) {
220  x4->params.rc.i_bitrate = ctx->bit_rate / 1000;
221  x264_encoder_reconfig(x4->enc, &x4->params);
222  }
223 
224  if (x4->crf >= 0 &&
225  x4->params.rc.i_rc_method == X264_RC_CRF &&
226  x4->params.rc.f_rf_constant != x4->crf) {
227  x4->params.rc.f_rf_constant = x4->crf;
228  x264_encoder_reconfig(x4->enc, &x4->params);
229  }
230 
231  if (x4->params.rc.i_rc_method == X264_RC_CQP &&
232  x4->cqp >= 0 &&
233  x4->params.rc.i_qp_constant != x4->cqp) {
234  x4->params.rc.i_qp_constant = x4->cqp;
235  x264_encoder_reconfig(x4->enc, &x4->params);
236  }
237 
238  if (x4->crf_max >= 0 &&
239  x4->params.rc.f_rf_constant_max != x4->crf_max) {
240  x4->params.rc.f_rf_constant_max = x4->crf_max;
241  x264_encoder_reconfig(x4->enc, &x4->params);
242  }
243  }
244 
246  if (side_data) {
247  AVStereo3D *stereo = (AVStereo3D *)side_data->data;
248  int fpa_type;
249 
250  switch (stereo->type) {
252  fpa_type = 0;
253  break;
254  case AV_STEREO3D_COLUMNS:
255  fpa_type = 1;
256  break;
257  case AV_STEREO3D_LINES:
258  fpa_type = 2;
259  break;
261  fpa_type = 3;
262  break;
264  fpa_type = 4;
265  break;
267  fpa_type = 5;
268  break;
269 #if X264_BUILD >= 145
270  case AV_STEREO3D_2D:
271  fpa_type = 6;
272  break;
273 #endif
274  default:
275  fpa_type = -1;
276  break;
277  }
278 
279  /* Inverted mode is not supported by x264 */
280  if (stereo->flags & AV_STEREO3D_FLAG_INVERT) {
282  "Ignoring unsupported inverted stereo value %d\n", fpa_type);
283  fpa_type = -1;
284  }
285 
286  if (fpa_type != x4->params.i_frame_packing) {
287  x4->params.i_frame_packing = fpa_type;
288  x264_encoder_reconfig(x4->enc, &x4->params);
289  }
290  }
291 }
292 
294  int *got_packet)
295 {
296  X264Context *x4 = ctx->priv_data;
297  x264_nal_t *nal;
298  int nnal, i, ret;
299  x264_picture_t pic_out = {0};
300  int pict_type;
301  int bit_depth;
302  int64_t wallclock = 0;
303  X264Opaque *out_opaque;
304  AVFrameSideData *sd;
305 
306  x264_picture_init( &x4->pic );
307  x4->pic.img.i_csp = x4->params.i_csp;
308 #if X264_BUILD >= 153
309  bit_depth = x4->params.i_bitdepth;
310 #else
311  bit_depth = x264_bit_depth;
312 #endif
313  if (bit_depth > 8)
314  x4->pic.img.i_csp |= X264_CSP_HIGH_DEPTH;
315  x4->pic.img.i_plane = avfmt2_num_planes(ctx->pix_fmt);
316 
317  if (frame) {
318  for (i = 0; i < x4->pic.img.i_plane; i++) {
319  x4->pic.img.plane[i] = frame->data[i];
320  x4->pic.img.i_stride[i] = frame->linesize[i];
321  }
322 
323  x4->pic.i_pts = frame->pts;
324 
325  x4->reordered_opaque[x4->next_reordered_opaque].reordered_opaque = frame->reordered_opaque;
326  x4->reordered_opaque[x4->next_reordered_opaque].wallclock = wallclock;
327  if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT)
329  x4->pic.opaque = &x4->reordered_opaque[x4->next_reordered_opaque];
330  x4->next_reordered_opaque++;
332 
333  switch (frame->pict_type) {
334  case AV_PICTURE_TYPE_I:
335  x4->pic.i_type = x4->forced_idr > 0 ? X264_TYPE_IDR
336  : X264_TYPE_KEYFRAME;
337  break;
338  case AV_PICTURE_TYPE_P:
339  x4->pic.i_type = X264_TYPE_P;
340  break;
341  case AV_PICTURE_TYPE_B:
342  x4->pic.i_type = X264_TYPE_B;
343  break;
344  default:
345  x4->pic.i_type = X264_TYPE_AUTO;
346  break;
347  }
349 
350  if (x4->a53_cc) {
351  void *sei_data;
352  size_t sei_size;
353 
354  ret = ff_alloc_a53_sei(frame, 0, &sei_data, &sei_size);
355  if (ret < 0) {
356  av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n");
357  } else if (sei_data) {
358  x4->pic.extra_sei.payloads = av_mallocz(sizeof(x4->pic.extra_sei.payloads[0]));
359  if (x4->pic.extra_sei.payloads == NULL) {
360  av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n");
361  av_free(sei_data);
362  } else {
363  x4->pic.extra_sei.sei_free = av_free;
364 
365  x4->pic.extra_sei.payloads[0].payload_size = sei_size;
366  x4->pic.extra_sei.payloads[0].payload = sei_data;
367  x4->pic.extra_sei.num_payloads = 1;
368  x4->pic.extra_sei.payloads[0].payload_type = 4;
369  }
370  }
371  }
372 
374  if (sd) {
375  if (x4->params.rc.i_aq_mode == X264_AQ_NONE) {
376  if (!x4->roi_warned) {
377  x4->roi_warned = 1;
378  av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
379  }
380  } else {
381  if (frame->interlaced_frame == 0) {
382  int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE;
383  int mby = (frame->height + MB_SIZE - 1) / MB_SIZE;
384  int qp_range = 51 + 6 * (bit_depth - 8);
385  int nb_rois;
386  const AVRegionOfInterest *roi;
387  uint32_t roi_size;
388  float *qoffsets;
389 
390  roi = (const AVRegionOfInterest*)sd->data;
391  roi_size = roi->self_size;
392  if (!roi_size || sd->size % roi_size != 0) {
393  av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n");
394  return AVERROR(EINVAL);
395  }
396  nb_rois = sd->size / roi_size;
397 
398  qoffsets = av_mallocz_array(mbx * mby, sizeof(*qoffsets));
399  if (!qoffsets)
400  return AVERROR(ENOMEM);
401 
402  // This list must be iterated in reverse because the first
403  // region in the list applies when regions overlap.
404  for (int i = nb_rois - 1; i >= 0; i--) {
405  int startx, endx, starty, endy;
406  float qoffset;
407 
408  roi = (const AVRegionOfInterest*)(sd->data + roi_size * i);
409 
410  starty = FFMIN(mby, roi->top / MB_SIZE);
411  endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE);
412  startx = FFMIN(mbx, roi->left / MB_SIZE);
413  endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE);
414 
415  if (roi->qoffset.den == 0) {
416  av_free(qoffsets);
417  av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n");
418  return AVERROR(EINVAL);
419  }
420  qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den;
421  qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range);
422 
423  for (int y = starty; y < endy; y++) {
424  for (int x = startx; x < endx; x++) {
425  qoffsets[x + y*mbx] = qoffset;
426  }
427  }
428  }
429 
430  x4->pic.prop.quant_offsets = qoffsets;
431  x4->pic.prop.quant_offsets_free = av_free;
432  } else {
433  if (!x4->roi_warned) {
434  x4->roi_warned = 1;
435  av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n");
436  }
437  }
438  }
439  }
440  }
441 
442  do {
443  if (x264_encoder_encode(x4->enc, &nal, &nnal, frame? &x4->pic: NULL, &pic_out) < 0)
444  return AVERROR_EXTERNAL;
445 
446  ret = encode_nals(ctx, pkt, nal, nnal);
447  if (ret < 0)
448  return ret;
449  } while (!ret && !frame && x264_encoder_delayed_frames(x4->enc));
450 
451  if (!ret)
452  return 0;
453 
454  pkt->pts = pic_out.i_pts;
455  pkt->dts = pic_out.i_dts;
456 
457  out_opaque = pic_out.opaque;
458  if (out_opaque >= x4->reordered_opaque &&
459  out_opaque < &x4->reordered_opaque[x4->nb_reordered_opaque]) {
460  ctx->reordered_opaque = out_opaque->reordered_opaque;
461  wallclock = out_opaque->wallclock;
462  } else {
463  // Unexpected opaque pointer on picture output
464  ctx->reordered_opaque = 0;
465  }
466 
467  switch (pic_out.i_type) {
468  case X264_TYPE_IDR:
469  case X264_TYPE_I:
470  pict_type = AV_PICTURE_TYPE_I;
471  break;
472  case X264_TYPE_P:
473  pict_type = AV_PICTURE_TYPE_P;
474  break;
475  case X264_TYPE_B:
476  case X264_TYPE_BREF:
477  pict_type = AV_PICTURE_TYPE_B;
478  break;
479  default:
480  av_log(ctx, AV_LOG_ERROR, "Unknown picture type encountered.\n");
481  return AVERROR_EXTERNAL;
482  }
483 #if FF_API_CODED_FRAME
485  ctx->coded_frame->pict_type = pict_type;
487 #endif
488 
489  pkt->flags |= AV_PKT_FLAG_KEY*pic_out.b_keyframe;
490  if (ret) {
491  ff_side_data_set_encoder_stats(pkt, (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA, NULL, 0, pict_type);
492  if (wallclock)
493  ff_side_data_set_prft(pkt, wallclock);
494 
495 #if FF_API_CODED_FRAME
497  ctx->coded_frame->quality = (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA;
499 #endif
500  }
501 
502  *got_packet = ret;
503  return 0;
504 }
505 
507 {
508  X264Context *x4 = avctx->priv_data;
509 
510  av_freep(&avctx->extradata);
511  av_freep(&x4->sei);
513 
514  if (x4->enc) {
515  x264_encoder_close(x4->enc);
516  x4->enc = NULL;
517  }
518 
519  return 0;
520 }
521 
522 #define OPT_STR(opt, param) \
523  do { \
524  int ret; \
525  if ((ret = x264_param_parse(&x4->params, opt, param)) < 0) { \
526  if(ret == X264_PARAM_BAD_NAME) \
527  av_log(avctx, AV_LOG_ERROR, \
528  "bad option '%s': '%s'\n", opt, param); \
529  else \
530  av_log(avctx, AV_LOG_ERROR, \
531  "bad value for '%s': '%s'\n", opt, param); \
532  return -1; \
533  } \
534  } while (0)
535 
537 {
538  switch (pix_fmt) {
539  case AV_PIX_FMT_YUV420P:
540  case AV_PIX_FMT_YUVJ420P:
541  case AV_PIX_FMT_YUV420P9:
542  case AV_PIX_FMT_YUV420P10: return X264_CSP_I420;
543  case AV_PIX_FMT_YUV422P:
544  case AV_PIX_FMT_YUVJ422P:
545  case AV_PIX_FMT_YUV422P10: return X264_CSP_I422;
546  case AV_PIX_FMT_YUV444P:
547  case AV_PIX_FMT_YUVJ444P:
548  case AV_PIX_FMT_YUV444P9:
549  case AV_PIX_FMT_YUV444P10: return X264_CSP_I444;
550 #if CONFIG_LIBX264RGB_ENCODER
551  case AV_PIX_FMT_BGR0:
552  return X264_CSP_BGRA;
553  case AV_PIX_FMT_BGR24:
554  return X264_CSP_BGR;
555 
556  case AV_PIX_FMT_RGB24:
557  return X264_CSP_RGB;
558 #endif
559  case AV_PIX_FMT_NV12: return X264_CSP_NV12;
560  case AV_PIX_FMT_NV16:
561  case AV_PIX_FMT_NV20: return X264_CSP_NV16;
562 #ifdef X264_CSP_NV21
563  case AV_PIX_FMT_NV21: return X264_CSP_NV21;
564 #endif
565 #ifdef X264_CSP_I400
566  case AV_PIX_FMT_GRAY8:
567  case AV_PIX_FMT_GRAY10: return X264_CSP_I400;
568 #endif
569  };
570  return 0;
571 }
572 
573 #define PARSE_X264_OPT(name, var)\
574  if (x4->var && x264_param_parse(&x4->params, name, x4->var) < 0) {\
575  av_log(avctx, AV_LOG_ERROR, "Error parsing option '%s' with value '%s'.\n", name, x4->var);\
576  return AVERROR(EINVAL);\
577  }
578 
579 static av_cold int X264_init(AVCodecContext *avctx)
580 {
581  X264Context *x4 = avctx->priv_data;
582  AVCPBProperties *cpb_props;
583  int sw,sh;
584 
585  if (avctx->global_quality > 0)
586  av_log(avctx, AV_LOG_WARNING, "-qscale is ignored, -crf is recommended.\n");
587 
588 #if CONFIG_LIBX262_ENCODER
589  if (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
590  x4->params.b_mpeg2 = 1;
591  x264_param_default_mpeg2(&x4->params);
592  } else
593 #endif
594  x264_param_default(&x4->params);
595 
596  x4->params.b_deblocking_filter = avctx->flags & AV_CODEC_FLAG_LOOP_FILTER;
597 
598  if (x4->preset || x4->tune)
599  if (x264_param_default_preset(&x4->params, x4->preset, x4->tune) < 0) {
600  int i;
601  av_log(avctx, AV_LOG_ERROR, "Error setting preset/tune %s/%s.\n", x4->preset, x4->tune);
602  av_log(avctx, AV_LOG_INFO, "Possible presets:");
603  for (i = 0; x264_preset_names[i]; i++)
604  av_log(avctx, AV_LOG_INFO, " %s", x264_preset_names[i]);
605  av_log(avctx, AV_LOG_INFO, "\n");
606  av_log(avctx, AV_LOG_INFO, "Possible tunes:");
607  for (i = 0; x264_tune_names[i]; i++)
608  av_log(avctx, AV_LOG_INFO, " %s", x264_tune_names[i]);
609  av_log(avctx, AV_LOG_INFO, "\n");
610  return AVERROR(EINVAL);
611  }
612 
613  if (avctx->level > 0)
614  x4->params.i_level_idc = avctx->level;
615 
616  x4->params.pf_log = X264_log;
617  x4->params.p_log_private = avctx;
618  x4->params.i_log_level = X264_LOG_DEBUG;
619  x4->params.i_csp = convert_pix_fmt(avctx->pix_fmt);
620 #if X264_BUILD >= 153
621  x4->params.i_bitdepth = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth;
622 #endif
623 
624  PARSE_X264_OPT("weightp", wpredp);
625 
626  if (avctx->bit_rate) {
627  if (avctx->bit_rate / 1000 > INT_MAX || avctx->rc_max_rate / 1000 > INT_MAX) {
628  av_log(avctx, AV_LOG_ERROR, "bit_rate and rc_max_rate > %d000 not supported by libx264\n", INT_MAX);
629  return AVERROR(EINVAL);
630  }
631  x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
632  x4->params.rc.i_rc_method = X264_RC_ABR;
633  }
634  x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
635  x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
636  x4->params.rc.b_stat_write = avctx->flags & AV_CODEC_FLAG_PASS1;
637  if (avctx->flags & AV_CODEC_FLAG_PASS2) {
638  x4->params.rc.b_stat_read = 1;
639  } else {
640  if (x4->crf >= 0) {
641  x4->params.rc.i_rc_method = X264_RC_CRF;
642  x4->params.rc.f_rf_constant = x4->crf;
643  } else if (x4->cqp >= 0) {
644  x4->params.rc.i_rc_method = X264_RC_CQP;
645  x4->params.rc.i_qp_constant = x4->cqp;
646  }
647 
648  if (x4->crf_max >= 0)
649  x4->params.rc.f_rf_constant_max = x4->crf_max;
650  }
651 
652  if (avctx->rc_buffer_size && avctx->rc_initial_buffer_occupancy > 0 &&
653  (avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
654  x4->params.rc.f_vbv_buffer_init =
655  (float)avctx->rc_initial_buffer_occupancy / avctx->rc_buffer_size;
656  }
657 
658  PARSE_X264_OPT("level", level);
659 
660  if (avctx->i_quant_factor > 0)
661  x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
662  if (avctx->b_quant_factor > 0)
663  x4->params.rc.f_pb_factor = avctx->b_quant_factor;
664 
665 #if FF_API_PRIVATE_OPT
667  if (avctx->chromaoffset >= 0)
668  x4->chroma_offset = avctx->chromaoffset;
670 #endif
671  if (x4->chroma_offset >= 0)
672  x4->params.analyse.i_chroma_qp_offset = x4->chroma_offset;
673 
674  if (avctx->gop_size >= 0)
675  x4->params.i_keyint_max = avctx->gop_size;
676  if (avctx->max_b_frames >= 0)
677  x4->params.i_bframe = avctx->max_b_frames;
678 
679 #if FF_API_PRIVATE_OPT
681  if (avctx->scenechange_threshold >= 0)
684 #endif
685  if (x4->scenechange_threshold >= 0)
686  x4->params.i_scenecut_threshold = x4->scenechange_threshold;
687 
688  if (avctx->qmin >= 0)
689  x4->params.rc.i_qp_min = avctx->qmin;
690  if (avctx->qmax >= 0)
691  x4->params.rc.i_qp_max = avctx->qmax;
692  if (avctx->max_qdiff >= 0)
693  x4->params.rc.i_qp_step = avctx->max_qdiff;
694  if (avctx->qblur >= 0)
695  x4->params.rc.f_qblur = avctx->qblur; /* temporally blur quants */
696  if (avctx->qcompress >= 0)
697  x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */
698  if (avctx->refs >= 0)
699  x4->params.i_frame_reference = avctx->refs;
700  else if (x4->params.i_level_idc > 0) {
701  int i;
702  int mbn = AV_CEIL_RSHIFT(avctx->width, 4) * AV_CEIL_RSHIFT(avctx->height, 4);
703  int scale = X264_BUILD < 129 ? 384 : 1;
704 
705  for (i = 0; i<x264_levels[i].level_idc; i++)
706  if (x264_levels[i].level_idc == x4->params.i_level_idc)
707  x4->params.i_frame_reference = av_clip(x264_levels[i].dpb / mbn / scale, 1, x4->params.i_frame_reference);
708  }
709 
710  if (avctx->trellis >= 0)
711  x4->params.analyse.i_trellis = avctx->trellis;
712  if (avctx->me_range >= 0)
713  x4->params.analyse.i_me_range = avctx->me_range;
714 #if FF_API_PRIVATE_OPT
716  if (avctx->noise_reduction >= 0)
717  x4->noise_reduction = avctx->noise_reduction;
719 #endif
720  if (x4->noise_reduction >= 0)
721  x4->params.analyse.i_noise_reduction = x4->noise_reduction;
722  if (avctx->me_subpel_quality >= 0)
723  x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality;
724 #if FF_API_PRIVATE_OPT
726  if (avctx->b_frame_strategy >= 0)
727  x4->b_frame_strategy = avctx->b_frame_strategy;
729 #endif
730  if (avctx->keyint_min >= 0)
731  x4->params.i_keyint_min = avctx->keyint_min;
732 #if FF_API_CODER_TYPE
734  if (avctx->coder_type >= 0)
735  x4->coder = avctx->coder_type == FF_CODER_TYPE_AC;
737 #endif
738  if (avctx->me_cmp >= 0)
739  x4->params.analyse.b_chroma_me = avctx->me_cmp & FF_CMP_CHROMA;
740 
741  if (x4->aq_mode >= 0)
742  x4->params.rc.i_aq_mode = x4->aq_mode;
743  if (x4->aq_strength >= 0)
744  x4->params.rc.f_aq_strength = x4->aq_strength;
745  PARSE_X264_OPT("psy-rd", psy_rd);
746  PARSE_X264_OPT("deblock", deblock);
747  PARSE_X264_OPT("partitions", partitions);
748  PARSE_X264_OPT("stats", stats);
749  if (x4->psy >= 0)
750  x4->params.analyse.b_psy = x4->psy;
751  if (x4->rc_lookahead >= 0)
752  x4->params.rc.i_lookahead = x4->rc_lookahead;
753  if (x4->weightp >= 0)
754  x4->params.analyse.i_weighted_pred = x4->weightp;
755  if (x4->weightb >= 0)
756  x4->params.analyse.b_weighted_bipred = x4->weightb;
757  if (x4->cplxblur >= 0)
758  x4->params.rc.f_complexity_blur = x4->cplxblur;
759 
760  if (x4->ssim >= 0)
761  x4->params.analyse.b_ssim = x4->ssim;
762  if (x4->intra_refresh >= 0)
763  x4->params.b_intra_refresh = x4->intra_refresh;
764  if (x4->bluray_compat >= 0) {
765  x4->params.b_bluray_compat = x4->bluray_compat;
766  x4->params.b_vfr_input = 0;
767  }
768  if (x4->avcintra_class >= 0)
769 #if X264_BUILD >= 142
770  x4->params.i_avcintra_class = x4->avcintra_class;
771 #else
772  av_log(avctx, AV_LOG_ERROR,
773  "x264 too old for AVC Intra, at least version 142 needed\n");
774 #endif
775  if (x4->b_bias != INT_MIN)
776  x4->params.i_bframe_bias = x4->b_bias;
777  if (x4->b_pyramid >= 0)
778  x4->params.i_bframe_pyramid = x4->b_pyramid;
779  if (x4->mixed_refs >= 0)
780  x4->params.analyse.b_mixed_references = x4->mixed_refs;
781  if (x4->dct8x8 >= 0)
782  x4->params.analyse.b_transform_8x8 = x4->dct8x8;
783  if (x4->fast_pskip >= 0)
784  x4->params.analyse.b_fast_pskip = x4->fast_pskip;
785  if (x4->aud >= 0)
786  x4->params.b_aud = x4->aud;
787  if (x4->mbtree >= 0)
788  x4->params.rc.b_mb_tree = x4->mbtree;
789  if (x4->direct_pred >= 0)
790  x4->params.analyse.i_direct_mv_pred = x4->direct_pred;
791 
792  if (x4->slice_max_size >= 0)
793  x4->params.i_slice_max_size = x4->slice_max_size;
794 
795  if (x4->fastfirstpass)
796  x264_param_apply_fastfirstpass(&x4->params);
797 
798  /* Allow specifying the x264 profile through AVCodecContext. */
799  if (!x4->profile)
800  switch (avctx->profile) {
802  x4->profile = av_strdup("baseline");
803  break;
805  x4->profile = av_strdup("high");
806  break;
808  x4->profile = av_strdup("high10");
809  break;
811  x4->profile = av_strdup("high422");
812  break;
814  x4->profile = av_strdup("high444");
815  break;
817  x4->profile = av_strdup("main");
818  break;
819  default:
820  break;
821  }
822 
823  if (x4->nal_hrd >= 0)
824  x4->params.i_nal_hrd = x4->nal_hrd;
825 
826  if (x4->motion_est >= 0)
827  x4->params.analyse.i_me_method = x4->motion_est;
828 
829  if (x4->coder >= 0)
830  x4->params.b_cabac = x4->coder;
831 
832  if (x4->b_frame_strategy >= 0)
833  x4->params.i_bframe_adaptive = x4->b_frame_strategy;
834 
835  if (x4->profile)
836  if (x264_param_apply_profile(&x4->params, x4->profile) < 0) {
837  int i;
838  av_log(avctx, AV_LOG_ERROR, "Error setting profile %s.\n", x4->profile);
839  av_log(avctx, AV_LOG_INFO, "Possible profiles:");
840  for (i = 0; x264_profile_names[i]; i++)
841  av_log(avctx, AV_LOG_INFO, " %s", x264_profile_names[i]);
842  av_log(avctx, AV_LOG_INFO, "\n");
843  return AVERROR(EINVAL);
844  }
845 
846  x4->params.i_width = avctx->width;
847  x4->params.i_height = avctx->height;
848  av_reduce(&sw, &sh, avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den, 4096);
849  x4->params.vui.i_sar_width = sw;
850  x4->params.vui.i_sar_height = sh;
851  x4->params.i_timebase_den = avctx->time_base.den;
852  x4->params.i_timebase_num = avctx->time_base.num;
853  if (avctx->framerate.num > 0 && avctx->framerate.den > 0) {
854  x4->params.i_fps_num = avctx->framerate.num;
855  x4->params.i_fps_den = avctx->framerate.den;
856  } else {
857  x4->params.i_fps_num = avctx->time_base.den;
858  x4->params.i_fps_den = avctx->time_base.num * avctx->ticks_per_frame;
859  }
860 
861  x4->params.analyse.b_psnr = avctx->flags & AV_CODEC_FLAG_PSNR;
862 
863  x4->params.i_threads = avctx->thread_count;
864  if (avctx->thread_type)
865  x4->params.b_sliced_threads = avctx->thread_type == FF_THREAD_SLICE;
866 
867  x4->params.b_interlaced = avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT;
868 
869  x4->params.b_open_gop = !(avctx->flags & AV_CODEC_FLAG_CLOSED_GOP);
870 
871  x4->params.i_slice_count = avctx->slices;
872 
873  x4->params.vui.b_fullrange = avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
874  avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
875  avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
876  avctx->color_range == AVCOL_RANGE_JPEG;
877 
878  if (avctx->colorspace != AVCOL_SPC_UNSPECIFIED)
879  x4->params.vui.i_colmatrix = avctx->colorspace;
881  x4->params.vui.i_colorprim = avctx->color_primaries;
882  if (avctx->color_trc != AVCOL_TRC_UNSPECIFIED)
883  x4->params.vui.i_transfer = avctx->color_trc;
884 
885  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)
886  x4->params.b_repeat_headers = 0;
887 
888  if(x4->x264opts){
889  const char *p= x4->x264opts;
890  while(p){
891  char param[4096]={0}, val[4096]={0};
892  if(sscanf(p, "%4095[^:=]=%4095[^:]", param, val) == 1){
893  OPT_STR(param, "1");
894  }else
895  OPT_STR(param, val);
896  p= strchr(p, ':');
897  p+=!!p;
898  }
899  }
900 
901 
902  {
903  AVDictionaryEntry *en = NULL;
904  while (en = av_dict_get(x4->x264_params, "", en, AV_DICT_IGNORE_SUFFIX)) {
905  if (x264_param_parse(&x4->params, en->key, en->value) < 0)
906  av_log(avctx, AV_LOG_WARNING,
907  "Error parsing option '%s = %s'.\n",
908  en->key, en->value);
909  }
910  }
911 
912  // update AVCodecContext with x264 parameters
913  avctx->has_b_frames = x4->params.i_bframe ?
914  x4->params.i_bframe_pyramid ? 2 : 1 : 0;
915  if (avctx->max_b_frames < 0)
916  avctx->max_b_frames = 0;
917 
918  avctx->bit_rate = x4->params.rc.i_bitrate*1000LL;
919 
920  x4->enc = x264_encoder_open(&x4->params);
921  if (!x4->enc)
922  return AVERROR_EXTERNAL;
923 
924  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
925  x264_nal_t *nal;
926  uint8_t *p;
927  int nnal, s, i;
928 
929  s = x264_encoder_headers(x4->enc, &nal, &nnal);
931  if (!p)
932  return AVERROR(ENOMEM);
933 
934  for (i = 0; i < nnal; i++) {
935  /* Don't put the SEI in extradata. */
936  if (nal[i].i_type == NAL_SEI) {
937  av_log(avctx, AV_LOG_INFO, "%s\n", nal[i].p_payload+25);
938  x4->sei_size = nal[i].i_payload;
939  x4->sei = av_malloc(x4->sei_size);
940  if (!x4->sei)
941  return AVERROR(ENOMEM);
942  memcpy(x4->sei, nal[i].p_payload, nal[i].i_payload);
943  continue;
944  }
945  memcpy(p, nal[i].p_payload, nal[i].i_payload);
946  p += nal[i].i_payload;
947  }
948  avctx->extradata_size = p - avctx->extradata;
949  }
950 
951  cpb_props = ff_add_cpb_side_data(avctx);
952  if (!cpb_props)
953  return AVERROR(ENOMEM);
954  cpb_props->buffer_size = x4->params.rc.i_vbv_buffer_size * 1000;
955  cpb_props->max_bitrate = x4->params.rc.i_vbv_max_bitrate * 1000LL;
956  cpb_props->avg_bitrate = x4->params.rc.i_bitrate * 1000LL;
957 
958  // Overestimate the reordered opaque buffer size, in case a runtime
959  // reconfigure would increase the delay (which it shouldn't).
960  x4->nb_reordered_opaque = x264_encoder_maximum_delayed_frames(x4->enc) + 17;
962  sizeof(*x4->reordered_opaque));
963  if (!x4->reordered_opaque)
964  return AVERROR(ENOMEM);
965 
966  return 0;
967 }
968 
969 static const enum AVPixelFormat pix_fmts_8bit[] = {
978 #ifdef X264_CSP_NV21
980 #endif
982 };
983 static const enum AVPixelFormat pix_fmts_9bit[] = {
987 };
988 static const enum AVPixelFormat pix_fmts_10bit[] = {
994 };
995 static const enum AVPixelFormat pix_fmts_all[] = {
1004 #ifdef X264_CSP_NV21
1006 #endif
1011 #ifdef X264_CSP_I400
1014 #endif
1016 };
1017 #if CONFIG_LIBX264RGB_ENCODER
1018 static const enum AVPixelFormat pix_fmts_8bit_rgb[] = {
1023 };
1024 #endif
1025 
1026 static av_cold void X264_init_static(AVCodec *codec)
1027 {
1028 #if X264_BUILD < 153
1029  if (x264_bit_depth == 8)
1030  codec->pix_fmts = pix_fmts_8bit;
1031  else if (x264_bit_depth == 9)
1032  codec->pix_fmts = pix_fmts_9bit;
1033  else if (x264_bit_depth == 10)
1034  codec->pix_fmts = pix_fmts_10bit;
1035 #else
1036  codec->pix_fmts = pix_fmts_all;
1037 #endif
1038 }
1039 
1040 #define OFFSET(x) offsetof(X264Context, x)
1041 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1042 static const AVOption options[] = {
1043  { "preset", "Set the encoding preset (cf. x264 --fullhelp)", OFFSET(preset), AV_OPT_TYPE_STRING, { .str = "medium" }, 0, 0, VE},
1044  { "tune", "Tune the encoding params (cf. x264 --fullhelp)", OFFSET(tune), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1045  { "profile", "Set profile restrictions (cf. x264 --fullhelp) ", OFFSET(profile), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1046  { "fastfirstpass", "Use fast settings when encoding first pass", OFFSET(fastfirstpass), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE},
1047  {"level", "Specify level (as defined by Annex A)", OFFSET(level), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1048  {"passlogfile", "Filename for 2 pass stats", OFFSET(stats), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1049  {"wpredp", "Weighted prediction for P-frames", OFFSET(wpredp), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1050  {"a53cc", "Use A53 Closed Captions (if available)", OFFSET(a53_cc), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, VE},
1051  {"x264opts", "x264 options", OFFSET(x264opts), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1052  { "crf", "Select the quality for constant quality mode", OFFSET(crf), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
1053  { "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 },
1054  { "qp", "Constant quantization parameter rate control method",OFFSET(cqp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
1055  { "aq-mode", "AQ method", OFFSET(aq_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "aq_mode"},
1056  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_NONE}, INT_MIN, INT_MAX, VE, "aq_mode" },
1057  { "variance", "Variance AQ (complexity mask)", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_VARIANCE}, INT_MIN, INT_MAX, VE, "aq_mode" },
1058  { "autovariance", "Auto-variance AQ", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_AUTOVARIANCE}, INT_MIN, INT_MAX, VE, "aq_mode" },
1059 #if X264_BUILD >= 144
1060  { "autovariance-biased", "Auto-variance AQ with bias to dark scenes", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_AUTOVARIANCE_BIASED}, INT_MIN, INT_MAX, VE, "aq_mode" },
1061 #endif
1062  { "aq-strength", "AQ strength. Reduces blocking and blurring in flat and textured areas.", OFFSET(aq_strength), AV_OPT_TYPE_FLOAT, {.dbl = -1}, -1, FLT_MAX, VE},
1063  { "psy", "Use psychovisual optimizations.", OFFSET(psy), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1064  { "psy-rd", "Strength of psychovisual optimization, in <psy-rd>:<psy-trellis> format.", OFFSET(psy_rd), AV_OPT_TYPE_STRING, {0 }, 0, 0, VE},
1065  { "rc-lookahead", "Number of frames to look ahead for frametype and ratecontrol", OFFSET(rc_lookahead), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
1066  { "weightb", "Weighted prediction for B-frames.", OFFSET(weightb), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1067  { "weightp", "Weighted prediction analysis method.", OFFSET(weightp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "weightp" },
1068  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_NONE}, INT_MIN, INT_MAX, VE, "weightp" },
1069  { "simple", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_SIMPLE}, INT_MIN, INT_MAX, VE, "weightp" },
1070  { "smart", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_SMART}, INT_MIN, INT_MAX, VE, "weightp" },
1071  { "ssim", "Calculate and print SSIM stats.", OFFSET(ssim), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1072  { "intra-refresh", "Use Periodic Intra Refresh instead of IDR frames.",OFFSET(intra_refresh),AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1073  { "bluray-compat", "Bluray compatibility workarounds.", OFFSET(bluray_compat) ,AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1074  { "b-bias", "Influences how often B-frames are used", OFFSET(b_bias), AV_OPT_TYPE_INT, { .i64 = INT_MIN}, INT_MIN, INT_MAX, VE },
1075  { "b-pyramid", "Keep some B-frames as references.", OFFSET(b_pyramid), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "b_pyramid" },
1076  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_NONE}, INT_MIN, INT_MAX, VE, "b_pyramid" },
1077  { "strict", "Strictly hierarchical pyramid", 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_STRICT}, INT_MIN, INT_MAX, VE, "b_pyramid" },
1078  { "normal", "Non-strict (not Blu-ray compatible)", 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_NORMAL}, INT_MIN, INT_MAX, VE, "b_pyramid" },
1079  { "mixed-refs", "One reference per partition, as opposed to one reference per macroblock", OFFSET(mixed_refs), AV_OPT_TYPE_BOOL, { .i64 = -1}, -1, 1, VE },
1080  { "8x8dct", "High profile 8x8 transform.", OFFSET(dct8x8), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1081  { "fast-pskip", NULL, OFFSET(fast_pskip), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1082  { "aud", "Use access unit delimiters.", OFFSET(aud), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1083  { "mbtree", "Use macroblock tree ratecontrol.", OFFSET(mbtree), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1084  { "deblock", "Loop filter parameters, in <alpha:beta> form.", OFFSET(deblock), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1085  { "cplxblur", "Reduce fluctuations in QP (before curve compression)", OFFSET(cplxblur), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE},
1086  { "partitions", "A comma-separated list of partitions to consider. "
1087  "Possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all", OFFSET(partitions), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1088  { "direct-pred", "Direct MV prediction mode", OFFSET(direct_pred), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "direct-pred" },
1089  { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_NONE }, 0, 0, VE, "direct-pred" },
1090  { "spatial", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_SPATIAL }, 0, 0, VE, "direct-pred" },
1091  { "temporal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_TEMPORAL }, 0, 0, VE, "direct-pred" },
1092  { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_AUTO }, 0, 0, VE, "direct-pred" },
1093  { "slice-max-size","Limit the size of each slice in bytes", OFFSET(slice_max_size),AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
1094  { "stats", "Filename for 2 pass stats", OFFSET(stats), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
1095  { "nal-hrd", "Signal HRD information (requires vbv-bufsize; "
1096  "cbr not allowed in .mp4)", OFFSET(nal_hrd), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "nal-hrd" },
1097  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_NONE}, INT_MIN, INT_MAX, VE, "nal-hrd" },
1098  { "vbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_VBR}, INT_MIN, INT_MAX, VE, "nal-hrd" },
1099  { "cbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_CBR}, INT_MIN, INT_MAX, VE, "nal-hrd" },
1100  { "avcintra-class","AVC-Intra class 50/100/200", OFFSET(avcintra_class),AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 200 , VE},
1101  { "me_method", "Set motion estimation method", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, X264_ME_TESA, VE, "motion-est"},
1102  { "motion-est", "Set motion estimation method", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, X264_ME_TESA, VE, "motion-est"},
1103  { "dia", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_DIA }, INT_MIN, INT_MAX, VE, "motion-est" },
1104  { "hex", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_HEX }, INT_MIN, INT_MAX, VE, "motion-est" },
1105  { "umh", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_UMH }, INT_MIN, INT_MAX, VE, "motion-est" },
1106  { "esa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_ESA }, INT_MIN, INT_MAX, VE, "motion-est" },
1107  { "tesa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_TESA }, INT_MIN, INT_MAX, VE, "motion-est" },
1108  { "forced-idr", "If forcing keyframes, force them as IDR frames.", OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = 0 }, -1, 1, VE },
1109  { "coder", "Coder type", OFFSET(coder), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE, "coder" },
1110  { "default", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, INT_MIN, INT_MAX, VE, "coder" },
1111  { "cavlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "coder" },
1112  { "cabac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "coder" },
1113  { "vlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "coder" },
1114  { "ac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "coder" },
1115  { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2, VE },
1116  { "chromaoffset", "QP difference between chroma and luma", OFFSET(chroma_offset), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE },
1117  { "sc_threshold", "Scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE },
1118  { "noise_reduction", "Noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE },
1119 
1120  { "x264-params", "Override the x264 configuration using a :-separated list of key=value parameters", OFFSET(x264_params), AV_OPT_TYPE_DICT, { 0 }, 0, 0, VE },
1121  { NULL },
1122 };
1123 
1124 static const AVCodecDefault x264_defaults[] = {
1125  { "b", "0" },
1126  { "bf", "-1" },
1127  { "flags2", "0" },
1128  { "g", "-1" },
1129  { "i_qfactor", "-1" },
1130  { "b_qfactor", "-1" },
1131  { "qmin", "-1" },
1132  { "qmax", "-1" },
1133  { "qdiff", "-1" },
1134  { "qblur", "-1" },
1135  { "qcomp", "-1" },
1136 // { "rc_lookahead", "-1" },
1137  { "refs", "-1" },
1138 #if FF_API_PRIVATE_OPT
1139  { "sc_threshold", "-1" },
1140 #endif
1141  { "trellis", "-1" },
1142 #if FF_API_PRIVATE_OPT
1143  { "nr", "-1" },
1144 #endif
1145  { "me_range", "-1" },
1146  { "subq", "-1" },
1147 #if FF_API_PRIVATE_OPT
1148  { "b_strategy", "-1" },
1149 #endif
1150  { "keyint_min", "-1" },
1151 #if FF_API_CODER_TYPE
1152  { "coder", "-1" },
1153 #endif
1154  { "cmp", "-1" },
1155  { "threads", AV_STRINGIFY(X264_THREADS_AUTO) },
1156  { "thread_type", "0" },
1157  { "flags", "+cgop" },
1158  { "rc_init_occupancy","-1" },
1159  { NULL },
1160 };
1161 
1162 #if CONFIG_LIBX264_ENCODER
1163 static const AVClass x264_class = {
1164  .class_name = "libx264",
1165  .item_name = av_default_item_name,
1166  .option = options,
1167  .version = LIBAVUTIL_VERSION_INT,
1168 };
1169 
1171  .name = "libx264",
1172  .long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
1173  .type = AVMEDIA_TYPE_VIDEO,
1174  .id = AV_CODEC_ID_H264,
1175  .priv_data_size = sizeof(X264Context),
1176  .init = X264_init,
1177  .encode2 = X264_frame,
1178  .close = X264_close,
1179  .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS |
1181  .priv_class = &x264_class,
1184 #if X264_BUILD >= 158
1186 #else
1187  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
1188 #endif
1189  .wrapper_name = "libx264",
1190 };
1191 #endif
1192 
1193 #if CONFIG_LIBX264RGB_ENCODER
1194 static const AVClass rgbclass = {
1195  .class_name = "libx264rgb",
1196  .item_name = av_default_item_name,
1197  .option = options,
1198  .version = LIBAVUTIL_VERSION_INT,
1199 };
1200 
1202  .name = "libx264rgb",
1203  .long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB"),
1204  .type = AVMEDIA_TYPE_VIDEO,
1205  .id = AV_CODEC_ID_H264,
1206  .priv_data_size = sizeof(X264Context),
1207  .init = X264_init,
1208  .encode2 = X264_frame,
1209  .close = X264_close,
1210  .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS |
1212  .priv_class = &rgbclass,
1214  .pix_fmts = pix_fmts_8bit_rgb,
1215 #if X264_BUILD >= 158
1217 #else
1218  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
1219 #endif
1220  .wrapper_name = "libx264",
1221 };
1222 #endif
1223 
1224 #if CONFIG_LIBX262_ENCODER
1225 static const AVClass X262_class = {
1226  .class_name = "libx262",
1227  .item_name = av_default_item_name,
1228  .option = options,
1229  .version = LIBAVUTIL_VERSION_INT,
1230 };
1231 
1233  .name = "libx262",
1234  .long_name = NULL_IF_CONFIG_SMALL("libx262 MPEG2VIDEO"),
1235  .type = AVMEDIA_TYPE_VIDEO,
1236  .id = AV_CODEC_ID_MPEG2VIDEO,
1237  .priv_data_size = sizeof(X264Context),
1238  .init = X264_init,
1239  .encode2 = X264_frame,
1240  .close = X264_close,
1241  .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS |
1243  .priv_class = &X262_class,
1246  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
1247  .wrapper_name = "libx264",
1248 };
1249 #endif
av_vlog
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.
Definition: log.c:424
AVCodec
AVCodec.
Definition: codec.h:190
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:85
bit_depth
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
Definition: af_astats.c:254
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:40
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
level
uint8_t level
Definition: svq3.c:210
AVCodecContext::keyint_min
int keyint_min
minimum GOP size
Definition: avcodec.h:1107
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
X264Context
Definition: libx264.c:54
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:1154
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:739
X264Context::avcintra_class
int avcintra_class
Definition: libx264.c:95
stats
static void stats(AVPacket *const *in, int n_in, unsigned *_max, unsigned *_sum)
Definition: vp9_superframe_bsf.c:34
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2549
ff_side_data_set_encoder_stats
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
Definition: avpacket.c:728
X264Context::tune
char * tune
Definition: libx264.c:62
FF_PROFILE_H264_BASELINE
#define FF_PROFILE_H264_BASELINE
Definition: avcodec.h:1898
X264Context::cplxblur
float cplxblur
Definition: libx264.c:89
X264Context::fastfirstpass
int fastfirstpass
Definition: libx264.c:65
X264Context::fast_pskip
int fast_pskip
Definition: libx264.c:85
AVCodec::pix_fmts
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
Definition: codec.h:211
profile
mfxU16 profile
Definition: qsvenc.c:45
X264_log
static void X264_log(void *p, int level, const char *fmt, va_list args)
Definition: libx264.c:117
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:300
pixdesc.h
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:1147
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
the normal 2^n-1 "JPEG" YUV ranges
Definition: pixfmt.h:535
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:355
AVComponentDescriptor::depth
int depth
Number of bits in the component.
Definition: pixdesc.h:58
level_idc
int level_idc
Definition: h264_levels.c:25
AVOption
AVOption.
Definition: opt.h:246
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:483
X264Context::stats
char * stats
Definition: libx264.c:93
X264Context::nb_reordered_opaque
int nb_reordered_opaque
Definition: libx264.c:107
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:397
AV_DICT_IGNORE_SUFFIX
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
Definition: dict.h:70
av_mallocz_array
void * av_mallocz_array(size_t nmemb, size_t size)
Definition: mem.c:190
float.h
X264Context::sei_size
int sei_size
Definition: libx264.c:60
AV_PIX_FMT_BGR24
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition: pixfmt.h:69
AVDictionary
Definition: dict.c:30
AV_CODEC_FLAG_PSNR
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:312
ff_add_cpb_side_data
AVCPBProperties * ff_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
Definition: utils.c:2037
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1375
X264Context::intra_refresh
int intra_refresh
Definition: libx264.c:79
AVCodecContext::me_subpel_quality
int me_subpel_quality
subpel ME quality
Definition: avcodec.h:988
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:388
X264Context::cqp
int cqp
Definition: libx264.c:70
X264Context::roi_warned
int roi_warned
If the encoder does not support ROI then warn the first time we encounter a frame with ROI side data.
Definition: libx264.c:114
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:31
AV_CODEC_FLAG_GLOBAL_HEADER
#define AV_CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
Definition: avcodec.h:329
X264_init
static av_cold int X264_init(AVCodecContext *avctx)
Definition: libx264.c:579
X264Context::slice_max_size
int slice_max_size
Definition: libx264.c:92
X264Context::profile
char * profile
Definition: libx264.c:63
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:2069
AV_STEREO3D_SIDEBYSIDE
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
Definition: stereo3d.h:67
ff_libx264_encoder
AVCodec ff_libx264_encoder
AVCodecContext::i_quant_factor
float i_quant_factor
qscale factor between P- and I-frames If > 0 then the last P-frame quantizer will be used (q = lastp_...
Definition: avcodec.h:831
init_static_data
static av_cold void init_static_data(void)
Definition: mv30.c:665
X264Context::chroma_offset
int chroma_offset
Definition: libx264.c:101
AV_PIX_FMT_NV20
#define AV_PIX_FMT_NV20
Definition: pixfmt.h:444
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:1785
AV_STEREO3D_2D
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
Definition: stereo3d.h:55
X264Context::weightb
int weightb
Definition: libx264.c:77
ff_side_data_set_prft
int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp)
Definition: avpacket.c:753
X264Context::pic
x264_picture_t pic
Definition: libx264.c:58
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:1114
defaults
static const AVCodecDefault defaults[]
Definition: amfenc_h264.c:361
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:606
FF_CMP_CHROMA
#define FF_CMP_CHROMA
Definition: avcodec.h:947
FF_PROFILE_H264_HIGH
#define FF_PROFILE_H264_HIGH
Definition: avcodec.h:1902
val
static double val(void *priv, double ch)
Definition: aeval.c:76
X264Context::params
x264_param_t params
Definition: libx264.c:56
X264Context::nal_hrd
int nal_hrd
Definition: libx264.c:94
AV_CODEC_FLAG_LOOP_FILTER
#define AV_CODEC_FLAG_LOOP_FILTER
loop filter.
Definition: avcodec.h:304
X264Context::bluray_compat
int bluray_compat
Definition: libx264.c:80
av_reduce
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition: rational.c:35
AVRational::num
int num
Numerator.
Definition: rational.h:59
AV_CODEC_FLAG_INTERLACED_DCT
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
Definition: avcodec.h:321
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:400
AVFormatContext::bit_rate
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
Definition: avformat.h:1457
preset
preset
Definition: vf_curves.c:46
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:1140
AV_STEREO3D_FRAMESEQUENCE
@ AV_STEREO3D_FRAMESEQUENCE
Views are alternated temporally.
Definition: stereo3d.h:92
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
av_cold
#define av_cold
Definition: attributes.h:90
pix_fmts_10bit
static enum AVPixelFormat pix_fmts_10bit[]
Definition: libx264.c:988
AVRegionOfInterest
Structure describing a single Region Of Interest.
Definition: frame.h:225
AVCodecContext::rc_initial_buffer_occupancy
int rc_initial_buffer_occupancy
Number of bits which should be loaded into the rc buffer before decoding starts.
Definition: avcodec.h:1432
av_dict_get
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:40
AV_PIX_FMT_YUVJ422P
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
Definition: pixfmt.h:79
X264Context::b_pyramid
int b_pyramid
Definition: libx264.c:82
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:628
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:816
AV_STEREO3D_LINES
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
Definition: stereo3d.h:129
stereo3d.h
intreadwrite.h
s
#define s(width, name)
Definition: cbs_vp9.c:257
AVCodecContext::global_quality
int global_quality
Global quality for codecs which cannot change it per frame.
Definition: avcodec.h:592
AV_CEIL_RSHIFT
#define AV_CEIL_RSHIFT(a, b)
Definition: common.h:58
AVRegionOfInterest::bottom
int bottom
Definition: frame.h:241
X264Context::mixed_refs
int mixed_refs
Definition: libx264.c:83
AVDictionaryEntry::key
char * key
Definition: dict.h:82
AV_CODEC_EXPORT_DATA_PRFT
#define AV_CODEC_EXPORT_DATA_PRFT
Export encoder Producer Reference Time through packet side data.
Definition: avcodec.h:407
AVCodecContext::ticks_per_frame
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:658
pix_fmts_all
static enum AVPixelFormat pix_fmts_all[]
Definition: libx264.c:995
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This codec takes the reordered_opaque field from input AVFrames and returns it in the corresponding f...
Definition: codec.h:164
AVCodecContext::thread_type
int thread_type
Which multithreading methods to use.
Definition: avcodec.h:1795
pix_fmts
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:275
AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:394
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
ctx
AVFormatContext * ctx
Definition: movenc.c:48
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demuxing_decoding.c:40
X264Context::weightp
int weightp
Definition: libx264.c:76
ff_libx264rgb_encoder
AVCodec ff_libx264rgb_encoder
ff_alloc_a53_sei
int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len, void **data, size_t *sei_size)
Check AVFrame for A53 side data and allocate and fill SEI message with A53 info.
Definition: utils.c:2241
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:66
AVCodecContext::rc_max_rate
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:1404
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:458
AVCPBProperties
This structure describes the bitrate properties of an encoded bitstream.
Definition: avcodec.h:448
X264Opaque
Definition: libx264.c:49
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:76
AV_PIX_FMT_YUVJ444P
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition: pixfmt.h:80
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:536
X264Context::noise_reduction
int noise_reduction
Definition: libx264.c:103
AVStereo3D::flags
int flags
Additional information about the frame packing.
Definition: stereo3d.h:185
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:378
if
if(ret)
Definition: filter_design.txt:179
AVCodecDefault
Definition: internal.h:201
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1389
AVCPBProperties::avg_bitrate
int avg_bitrate
Average bitrate of the stream, in bits per second.
Definition: avcodec.h:472
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
pix_fmts_9bit
static enum AVPixelFormat pix_fmts_9bit[]
Definition: libx264.c:983
NULL
#define NULL
Definition: coverity.c:32
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:1161
X264Context::crf_max
float crf_max
Definition: libx264.c:69
X264Context::forced_idr
int forced_idr
Definition: libx264.c:97
X264Opaque::reordered_opaque
int64_t reordered_opaque
Definition: libx264.c:50
X264Context::aud
int aud
Definition: libx264.c:86
AVCodecContext::qblur
float qblur
amount of qscale smoothing over time (0.0-1.0)
Definition: avcodec.h:1361
AV_PIX_FMT_YUVJ420P
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:78
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:576
AV_OPT_TYPE_DICT
@ AV_OPT_TYPE_DICT
Definition: opt.h:230
AVRegionOfInterest::self_size
uint32_t self_size
Must be set to the size of this data structure (that is, sizeof(AVRegionOfInterest)).
Definition: frame.h:230
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:274
X264Context::direct_pred
int direct_pred
Definition: libx264.c:91
AVCodecContext::b_frame_strategy
attribute_deprecated int b_frame_strategy
Definition: avcodec.h:800
AVCodecContext::noise_reduction
attribute_deprecated int noise_reduction
Definition: avcodec.h:1044
AV_PIX_FMT_BGR0
@ AV_PIX_FMT_BGR0
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
Definition: pixfmt.h:240
time.h
AVCodecContext::me_cmp
int me_cmp
motion estimation comparison function
Definition: avcodec.h:912
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:398
AVCodecContext::trellis
int trellis
trellis RD quantization
Definition: avcodec.h:1475
AV_PIX_FMT_GRAY8
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition: pixfmt.h:74
AVCodecContext::level
int level
level
Definition: avcodec.h:1982
X264Context::preset
char * preset
Definition: libx264.c:61
dct8x8
static void dct8x8(int16_t *coef, int bit_depth)
Definition: h264dsp.c:164
X264Context::x264_params
AVDictionary * x264_params
Definition: libx264.c:105
PARSE_X264_OPT
#define PARSE_X264_OPT(name, var)
Definition: libx264.c:573
AVCodecContext::qcompress
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
Definition: avcodec.h:1360
AVCodecContext::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition: avcodec.h:649
aud
static int FUNC() aud(CodedBitstreamContext *ctx, RWContext *rw, H264RawAUD *current)
Definition: cbs_h264_syntax_template.c:1006
eval.h
AV_CODEC_CAP_AUTO_THREADS
#define AV_CODEC_CAP_AUTO_THREADS
Codec supports avctx->thread_count == 0 (auto).
Definition: codec.h:118
AV_PIX_FMT_RGB24
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:68
pix_fmts_8bit
static enum AVPixelFormat pix_fmts_8bit[]
Definition: libx264.c:969
AV_STEREO3D_CHECKERBOARD
@ AV_STEREO3D_CHECKERBOARD
Views are packed in a checkerboard-like structure per pixel.
Definition: stereo3d.h:104
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
AVCodecContext::gop_size
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:721
X264_close
static av_cold int X264_close(AVCodecContext *avctx)
Definition: libx264.c:506
FF_PROFILE_H264_HIGH_422
#define FF_PROFILE_H264_HIGH_422
Definition: avcodec.h:1906
encode_nals
static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, const x264_nal_t *nals, int nnal)
Definition: libx264.c:133
size
int size
Definition: twinvq_data.h:11134
AVCodecContext::me_range
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
Definition: avcodec.h:997
AVFrameSideData::data
uint8_t * data
Definition: frame.h:208
FF_THREAD_SLICE
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
Definition: avcodec.h:1797
AV_PIX_FMT_NV16
@ AV_PIX_FMT_NV16
interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:201
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:354
AV_CODEC_FLAG_PASS2
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition: avcodec.h:300
X264Context::motion_est
int motion_est
Definition: libx264.c:96
FFMIN
#define FFMIN(a, b)
Definition: common.h:96
AVCodecContext::coder_type
attribute_deprecated int coder_type
Definition: avcodec.h:1443
AVCPBProperties::max_bitrate
int max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition: avcodec.h:454
AVERROR_EXTERNAL
#define AVERROR_EXTERNAL
Generic error in an external library.
Definition: error.h:57
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:361
X264Context::b_bias
int b_bias
Definition: libx264.c:81
AVRegionOfInterest::right
int right
Definition: frame.h:243
AV_STEREO3D_FLAG_INVERT
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition: stereo3d.h:167
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
AVCodecContext::b_quant_factor
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...
Definition: avcodec.h:795
OPT_STR
#define OPT_STR(opt, param)
Definition: libx264.c:522
AV_OPT_TYPE_FLOAT
@ AV_OPT_TYPE_FLOAT
Definition: opt.h:226
VE
#define VE
Definition: libx264.c:1041
X264Context::sei
uint8_t * sei
Definition: libx264.c:59
AVRegionOfInterest::left
int left
Definition: frame.h:242
x264_defaults
static const AVCodecDefault x264_defaults[]
Definition: libx264.c:1124
X264Context::aq_mode
int aq_mode
Definition: libx264.c:71
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:348
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:627
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: internal.h:48
AVRegionOfInterest::top
int top
Distance in pixels from the top edge of the frame to the top and bottom edges and from the left edge ...
Definition: frame.h:240
internal.h
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:32
AV_STEREO3D_TOPBOTTOM
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
Definition: stereo3d.h:79
X264Context::a53_cc
int a53_cc
Definition: libx264.c:99
AV_FRAME_DATA_STEREO3D
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition: frame.h:63
AV_STRINGIFY
#define AV_STRINGIFY(s)
Definition: macros.h:36
uint8_t
uint8_t
Definition: audio_convert.c:194
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:237
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:197
AV_PIX_FMT_NV21
@ AV_PIX_FMT_NV21
as above, but U and V bytes are swapped
Definition: pixfmt.h:90
options
static const AVOption options[]
Definition: libx264.c:1042
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:512
AVCodecContext::height
int height
Definition: avcodec.h:699
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:736
X264_init_static
static av_cold void X264_init_static(AVCodec *codec)
Definition: libx264.c:1026
AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:396
avcodec.h
X264Context::mbtree
int mbtree
Definition: libx264.c:87
AV_CODEC_FLAG_CLOSED_GOP
#define AV_CODEC_FLAG_CLOSED_GOP
Definition: avcodec.h:343
ret
ret
Definition: filter_design.txt:187
X264Context::reordered_opaque
X264Opaque * reordered_opaque
Definition: libx264.c:108
AV_PIX_FMT_NV12
@ AV_PIX_FMT_NV12
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition: pixfmt.h:89
X264Context::crf
float crf
Definition: libx264.c:68
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:72
X264Context::level
char * level
Definition: libx264.c:64
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
AV_STEREO3D_COLUMNS
@ AV_STEREO3D_COLUMNS
Views are packed per column.
Definition: stereo3d.h:141
AVCPBProperties::buffer_size
int buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition: avcodec.h:481
AVStereo3D::type
enum AVStereo3DType type
How views are packed within the video.
Definition: stereo3d.h:180
X264Context::wpredp
char * wpredp
Definition: libx264.c:66
FF_PROFILE_H264_HIGH_444
#define FF_PROFILE_H264_HIGH_444
Definition: avcodec.h:1909
X264Context::next_reordered_opaque
int next_reordered_opaque
Definition: libx264.c:107
X264Opaque::wallclock
int64_t wallclock
Definition: libx264.c:51
X264Context::scenechange_threshold
int scenechange_threshold
Definition: libx264.c:102
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: avcodec.h:215
X264Context::x264opts
char * x264opts
Definition: libx264.c:67
AVCodecContext::scenechange_threshold
attribute_deprecated int scenechange_threshold
Definition: avcodec.h:1040
AVCodecContext::max_qdiff
int max_qdiff
maximum quantizer difference between frames
Definition: avcodec.h:1382
AVCodecContext
main external API structure.
Definition: avcodec.h:526
reconfig_encoder
static void reconfig_encoder(AVCodecContext *ctx, const AVFrame *frame)
Definition: libx264.c:193
X264Context::coder
int coder
Definition: libx264.c:98
X264Context::aq_strength
float aq_strength
Definition: libx264.c:72
pkt
static AVPacket pkt
Definition: demuxing_decoding.c:54
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:276
AVCodecContext::qmin
int qmin
minimum quantizer
Definition: avcodec.h:1368
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1859
MB_SIZE
#define MB_SIZE
Definition: libx264.c:47
X264Context::rc_lookahead
int rc_lookahead
Definition: libx264.c:75
FF_CODER_TYPE_AC
#define FF_CODER_TYPE_AC
Definition: avcodec.h:1436
AVPixFmtDescriptor::comp
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
Definition: pixdesc.h:117
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:75
FF_PROFILE_H264_MAIN
#define FF_PROFILE_H264_MAIN
Definition: avcodec.h:1900
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:71
OFFSET
#define OFFSET(x)
Definition: libx264.c:1040
av_gettime
int64_t av_gettime(void)
Get the current time in microseconds.
Definition: time.c:39
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:84
av_strdup
char * av_strdup(const char *s)
Duplicate a string.
Definition: mem.c:253
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:275
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
X264Context::dct8x8
int dct8x8
Definition: libx264.c:84
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:70
mem.h
AVCodecContext::max_b_frames
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...
Definition: avcodec.h:786
X264Context::psy_rd
char * psy_rd
Definition: libx264.c:73
packet_internal.h
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:206
AVCodecContext::chromaoffset
attribute_deprecated int chromaoffset
Definition: avcodec.h:1119
X264Context::deblock
char * deblock
Definition: libx264.c:88
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVDictionaryEntry
Definition: dict.h:81
AVCodecContext::slices
int slices
Number of slices.
Definition: avcodec.h:1177
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:553
AVPacket
This structure stores compressed data.
Definition: packet.h:332
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:240
AVFrameSideData::size
int size
Definition: frame.h:209
avfmt2_num_planes
static int avfmt2_num_planes(int avfmt)
Definition: libx264.c:171
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
X264Context::ssim
int ssim
Definition: libx264.c:78
FF_PROFILE_H264_HIGH_10
#define FF_PROFILE_H264_HIGH_10
Definition: avcodec.h:1903
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:699
AV_FRAME_DATA_REGIONS_OF_INTEREST
@ AV_FRAME_DATA_REGIONS_OF_INTEREST
Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of array element is ...
Definition: frame.h:181
X264Context::psy
int psy
Definition: libx264.c:74
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
AVStereo3D
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition: stereo3d.h:176
AVDictionaryEntry::value
char * value
Definition: dict.h:83
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Definition: opt.h:227
FF_QP2LAMBDA
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:227
X264Context::enc
x264_t * enc
Definition: libx264.c:57
ff_alloc_packet2
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
Definition: encode.c:32
AV_CODEC_ID_MPEG2VIDEO
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition: codec_id.h:51
AVRegionOfInterest::qoffset
AVRational qoffset
Quantisation offset.
Definition: frame.h:267
X264_frame
static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: libx264.c:293
X264Context::b_frame_strategy
int b_frame_strategy
Definition: libx264.c:100
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:232
ff_libx262_encoder
AVCodec ff_libx262_encoder
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1363
convert_pix_fmt
static int convert_pix_fmt(enum AVPixelFormat pix_fmt)
Definition: libx264.c:536
AVCodecContext::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition: avcodec.h:905
AV_CODEC_FLAG_PASS1
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition: avcodec.h:296
X264Context::partitions
char * partitions
Definition: libx264.c:90