FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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 "config_components.h"
23 
24 #include "libavutil/buffer.h"
25 #include "libavutil/internal.h"
26 #include "libavutil/opt.h"
28 #include "libavutil/mem.h"
29 #include "libavutil/pixdesc.h"
30 #include "libavutil/stereo3d.h"
31 #include "libavutil/time.h"
32 #include "libavutil/video_hint.h"
33 #include "avcodec.h"
34 #include "codec_internal.h"
35 #include "encode.h"
36 #include "internal.h"
37 #include "packet_internal.h"
38 #include "atsc_a53.h"
39 #include "sei.h"
40 #include "golomb.h"
41 
42 #include <x264.h>
43 #include <float.h>
44 #include <math.h>
45 #include <stdio.h>
46 #include <stdlib.h>
47 #include <string.h>
48 
49 // from x264.h, for quant_offsets, Macroblocks are 16x16
50 // blocks of pixels (with respect to the luma plane)
51 #define MB_SIZE 16
52 #define MB_LSIZE 4
53 #define MB_FLOOR(x) ((x) >> (MB_LSIZE))
54 #define MB_CEIL(x) MB_FLOOR((x) + (MB_SIZE - 1))
55 
56 typedef struct X264Opaque {
59 
60  void *frame_opaque;
62 } X264Opaque;
63 
64 typedef struct X264Context {
65  AVClass *class;
66  x264_param_t params;
67  x264_t *enc;
68  x264_picture_t pic;
69  uint8_t *sei;
70  int sei_size;
71  char *preset;
72  char *tune;
73  const char *profile;
74  char *profile_opt;
75  char *level;
77  char *wpredp;
78  char *x264opts;
79  float crf;
80  float crf_max;
81  int cqp;
82  int aq_mode;
83  float aq_strength;
84  char *psy_rd;
85  int psy;
87  int weightp;
88  int weightb;
89  int ssim;
92  int b_bias;
93  int b_pyramid;
95  int dct8x8;
97  int aud;
98  int mbtree;
99  char *deblock;
100  float cplxblur;
101  char *partitions;
104  char *stats;
105  int nal_hrd;
109  int coder;
110  int a53_cc;
115  int udu_sei;
116 
118 
121 
122  /**
123  * If the encoder does not support ROI then warn the first time we
124  * encounter a frame with ROI side data.
125  */
127 
128  int mb_info;
129 } X264Context;
130 
131 static void X264_log(void *p, int level, const char *fmt, va_list args)
132 {
133  static const int level_map[] = {
134  [X264_LOG_ERROR] = AV_LOG_ERROR,
135  [X264_LOG_WARNING] = AV_LOG_WARNING,
136  [X264_LOG_INFO] = AV_LOG_INFO,
137  [X264_LOG_DEBUG] = AV_LOG_DEBUG
138  };
139 
140  if (level < 0 || level > X264_LOG_DEBUG)
141  return;
142 
143  av_vlog(p, level_map[level], fmt, args);
144 }
145 
146 static void opaque_uninit(X264Opaque *o)
147 {
149  memset(o, 0, sizeof(*o));
150 }
151 
153  const x264_nal_t *nals, int nnal)
154 {
155  X264Context *x4 = ctx->priv_data;
156  uint8_t *p;
157  uint64_t size = FFMAX(x4->sei_size, 0);
158  int ret;
159 
160  if (!nnal)
161  return 0;
162 
163  for (int i = 0; i < nnal; i++) {
164  size += nals[i].i_payload;
165  /* ff_get_encode_buffer() accepts an int64_t and
166  * so we need to make sure that no overflow happens before
167  * that. With 32bit ints this is automatically true. */
168 #if INT_MAX > INT64_MAX / INT_MAX - 1
169  if ((int64_t)size < 0)
170  return AVERROR(ERANGE);
171 #endif
172  }
173 
174  if ((ret = ff_get_encode_buffer(ctx, pkt, size, 0)) < 0)
175  return ret;
176 
177  p = pkt->data;
178 
179  /* Write the SEI as part of the first frame. */
180  if (x4->sei_size > 0) {
181  memcpy(p, x4->sei, x4->sei_size);
182  p += x4->sei_size;
183  size -= x4->sei_size;
184  /* Keep the value around in case of flush */
185  x4->sei_size = -x4->sei_size;
186  }
187 
188  /* x264 guarantees the payloads of the NALs
189  * to be sequential in memory. */
190  memcpy(p, nals[0].p_payload, size);
191 
192  return 1;
193 }
194 
196 {
197  X264Context *x4 = ctx->priv_data;
198  AVFrameSideData *side_data;
199 
200 
201  if (x4->avcintra_class < 0) {
202  if (x4->params.b_interlaced && x4->params.b_tff != !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST)) {
203 
204  x4->params.b_tff = !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST);
205  x264_encoder_reconfig(x4->enc, &x4->params);
206  }
207  if (x4->params.vui.i_sar_height*ctx->sample_aspect_ratio.num != ctx->sample_aspect_ratio.den * x4->params.vui.i_sar_width) {
208  x4->params.vui.i_sar_height = ctx->sample_aspect_ratio.den;
209  x4->params.vui.i_sar_width = ctx->sample_aspect_ratio.num;
210  x264_encoder_reconfig(x4->enc, &x4->params);
211  }
212 
213  if (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  x4->params.rc.i_vbv_buffer_size = ctx->rc_buffer_size / 1000;
216  x4->params.rc.i_vbv_max_bitrate = ctx->rc_max_rate / 1000;
217  x264_encoder_reconfig(x4->enc, &x4->params);
218  }
219 
220  if (x4->params.rc.i_rc_method == X264_RC_ABR &&
221  x4->params.rc.i_bitrate != ctx->bit_rate / 1000) {
222  x4->params.rc.i_bitrate = ctx->bit_rate / 1000;
223  x264_encoder_reconfig(x4->enc, &x4->params);
224  }
225 
226  if (x4->crf >= 0 &&
227  x4->params.rc.i_rc_method == X264_RC_CRF &&
228  x4->params.rc.f_rf_constant != x4->crf) {
229  x4->params.rc.f_rf_constant = x4->crf;
230  x264_encoder_reconfig(x4->enc, &x4->params);
231  }
232 
233  if (x4->params.rc.i_rc_method == X264_RC_CQP &&
234  x4->cqp >= 0 &&
235  x4->params.rc.i_qp_constant != x4->cqp) {
236  x4->params.rc.i_qp_constant = x4->cqp;
237  x264_encoder_reconfig(x4->enc, &x4->params);
238  }
239 
240  if (x4->crf_max >= 0 &&
241  x4->params.rc.f_rf_constant_max != x4->crf_max) {
242  x4->params.rc.f_rf_constant_max = x4->crf_max;
243  x264_encoder_reconfig(x4->enc, &x4->params);
244  }
245  }
246 
248  if (side_data) {
249  AVStereo3D *stereo = (AVStereo3D *)side_data->data;
250  int fpa_type;
251 
252  switch (stereo->type) {
254  fpa_type = 0;
255  break;
256  case AV_STEREO3D_COLUMNS:
257  fpa_type = 1;
258  break;
259  case AV_STEREO3D_LINES:
260  fpa_type = 2;
261  break;
263  fpa_type = 3;
264  break;
266  fpa_type = 4;
267  break;
269  fpa_type = 5;
270  break;
271  case AV_STEREO3D_2D:
272  fpa_type = 6;
273  break;
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 
293 static void free_picture(x264_picture_t *pic)
294 {
295  for (int i = 0; i < pic->extra_sei.num_payloads; i++)
296  av_free(pic->extra_sei.payloads[i].payload);
297  av_freep(&pic->extra_sei.payloads);
298  av_freep(&pic->prop.quant_offsets);
299  av_freep(&pic->prop.mb_info);
300  pic->extra_sei.num_payloads = 0;
301 }
302 
303 static enum AVPixelFormat csp_to_pixfmt(int csp)
304 {
305  switch (csp) {
306 #ifdef X264_CSP_I400
307  case X264_CSP_I400: return AV_PIX_FMT_GRAY8;
308  case X264_CSP_I400 | X264_CSP_HIGH_DEPTH: return AV_PIX_FMT_GRAY10;
309 #endif
310  case X264_CSP_I420: return AV_PIX_FMT_YUV420P;
311  case X264_CSP_I420 | X264_CSP_HIGH_DEPTH: return AV_PIX_FMT_YUV420P10;
312  case X264_CSP_I422: return AV_PIX_FMT_YUV422P;
313  case X264_CSP_I422 | X264_CSP_HIGH_DEPTH: return AV_PIX_FMT_YUV422P10;
314  case X264_CSP_I444: return AV_PIX_FMT_YUV444P;
315  case X264_CSP_I444 | X264_CSP_HIGH_DEPTH: return AV_PIX_FMT_YUV444P10;
316  case X264_CSP_NV12: return AV_PIX_FMT_NV12;
317 #ifdef X264_CSP_NV21
318  case X264_CSP_NV21: return AV_PIX_FMT_NV21;
319 #endif
320  case X264_CSP_NV16: return AV_PIX_FMT_NV16;
321  };
322  return AV_PIX_FMT_NONE;
323 }
324 
326  int *min_x,
327  int *max_x,
328  int *min_y,
329  int *max_y)
330 {
331  *min_y = MB_FLOOR(rect->y);
332  *max_y = MB_CEIL(rect->y + rect->height);
333  *min_x = MB_FLOOR(rect->x);
334  *max_x = MB_CEIL(rect->x + rect->width);
335 }
336 
338  int *min_x,
339  int *max_x,
340  int *min_y,
341  int *max_y)
342 {
343  *min_y = MB_CEIL(rect->y);
344  *max_y = MB_FLOOR(rect->y + rect->height);
345  *min_x = MB_CEIL(rect->x);
346  *max_x = MB_FLOOR(rect->x + rect->width);
347 }
348 
349 static int setup_mb_info(AVCodecContext *ctx, x264_picture_t *pic,
350  const AVFrame *frame,
351  const AVVideoHint *info)
352 {
353  int mb_width = (frame->width + MB_SIZE - 1) / MB_SIZE;
354  int mb_height = (frame->height + MB_SIZE - 1) / MB_SIZE;
355 
356  const AVVideoRect *mbinfo_rects;
357  int nb_rects;
358  uint8_t *mbinfo;
359 
360  mbinfo_rects = (const AVVideoRect *)av_video_hint_rects(info);
361  nb_rects = info->nb_rects;
362 
363  mbinfo = av_calloc(mb_width * mb_height, sizeof(*mbinfo));
364  if (!mbinfo)
365  return AVERROR(ENOMEM);
366 
367 #define COMPUTE_MBINFO(mbinfo_filler_, mbinfo_marker_, compute_coords_fn_) \
368  memset(mbinfo, mbinfo_filler_, sizeof(*mbinfo) * mb_width * mb_height); \
369  \
370  for (int i = 0; i < nb_rects; i++) { \
371  int min_x, max_x, min_y, max_y; \
372  \
373  compute_coords_fn_(mbinfo_rects, &min_x, &max_x, &min_y, &max_y); \
374  for (int mb_y = min_y; mb_y < max_y; ++mb_y) { \
375  memset(mbinfo + mb_y * mb_width + min_x, mbinfo_marker_, max_x - min_x); \
376  } \
377  \
378  mbinfo_rects++; \
379  } \
380 
381  if (info->type == AV_VIDEO_HINT_TYPE_CHANGED) {
382  COMPUTE_MBINFO(X264_MBINFO_CONSTANT, 0, mbinfo_compute_changed_coords);
383  } else /* if (info->type == AV_VIDEO_HINT_TYPE_CHANGED) */ {
384  COMPUTE_MBINFO(0, X264_MBINFO_CONSTANT, mbinfo_compute_constant_coords);
385  }
386 
387  pic->prop.mb_info = mbinfo;
388  pic->prop.mb_info_free = av_free;
389 
390  return 0;
391 }
392 
393 static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic,
394  const AVFrame *frame, const uint8_t *data, size_t size)
395 {
396  X264Context *x4 = ctx->priv_data;
397 
398  int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE;
399  int mby = (frame->height + MB_SIZE - 1) / MB_SIZE;
400  int qp_range = 51 + 6 * (x4->params.i_bitdepth - 8);
401  int nb_rois;
402  const AVRegionOfInterest *roi;
403  uint32_t roi_size;
404  float *qoffsets;
405 
406  if (x4->params.rc.i_aq_mode == X264_AQ_NONE) {
407  if (!x4->roi_warned) {
408  x4->roi_warned = 1;
409  av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
410  }
411  return 0;
412  } else if (frame->flags & AV_FRAME_FLAG_INTERLACED) {
413  if (!x4->roi_warned) {
414  x4->roi_warned = 1;
415  av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n");
416  }
417  return 0;
418  }
419 
420  roi = (const AVRegionOfInterest*)data;
421  roi_size = roi->self_size;
422  if (!roi_size || size % roi_size != 0) {
423  av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n");
424  return AVERROR(EINVAL);
425  }
426  nb_rois = size / roi_size;
427 
428  qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets));
429  if (!qoffsets)
430  return AVERROR(ENOMEM);
431 
432  // This list must be iterated in reverse because the first
433  // region in the list applies when regions overlap.
434  for (int i = nb_rois - 1; i >= 0; i--) {
435  int startx, endx, starty, endy;
436  float qoffset;
437 
438  roi = (const AVRegionOfInterest*)(data + roi_size * i);
439 
440  starty = FFMIN(mby, roi->top / MB_SIZE);
441  endy = FFMIN(mby, (roi->bottom + MB_SIZE - 1)/ MB_SIZE);
442  startx = FFMIN(mbx, roi->left / MB_SIZE);
443  endx = FFMIN(mbx, (roi->right + MB_SIZE - 1)/ MB_SIZE);
444 
445  if (roi->qoffset.den == 0) {
446  av_free(qoffsets);
447  av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n");
448  return AVERROR(EINVAL);
449  }
450  qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den;
451  qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range);
452 
453  for (int y = starty; y < endy; y++) {
454  for (int x = startx; x < endx; x++) {
455  qoffsets[x + y*mbx] = qoffset;
456  }
457  }
458  }
459 
460  pic->prop.quant_offsets = qoffsets;
461  pic->prop.quant_offsets_free = av_free;
462 
463  return 0;
464 }
465 
467  x264_picture_t **ppic)
468 {
469  X264Context *x4 = ctx->priv_data;
471  x264_picture_t *pic = &x4->pic;
472  x264_sei_t *sei = &pic->extra_sei;
473  unsigned int sei_data_size = 0;
474  int64_t wallclock = 0;
475  int ret;
476  AVFrameSideData *sd;
477  AVFrameSideData *mbinfo_sd;
478 
479  *ppic = NULL;
480  if (!frame)
481  return 0;
482 
483  x264_picture_init(pic);
484  pic->img.i_csp = x4->params.i_csp;
485  if (x4->params.i_bitdepth > 8)
486  pic->img.i_csp |= X264_CSP_HIGH_DEPTH;
487  pic->img.i_plane = av_pix_fmt_count_planes(ctx->pix_fmt);
488 
489  for (int i = 0; i < pic->img.i_plane; i++) {
490  pic->img.plane[i] = frame->data[i];
491  pic->img.i_stride[i] = frame->linesize[i];
492  }
493 
494  pic->i_pts = frame->pts;
495 
496  opaque_uninit(opaque);
497 
499  opaque->frame_opaque = frame->opaque;
500  ret = av_buffer_replace(&opaque->frame_opaque_ref, frame->opaque_ref);
501  if (ret < 0)
502  goto fail;
503  }
504 
505  opaque->duration = frame->duration;
506  opaque->wallclock = wallclock;
507  if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT)
508  opaque->wallclock = av_gettime();
509 
510  pic->opaque = opaque;
511 
512  x4->next_reordered_opaque++;
514 
515  switch (frame->pict_type) {
516  case AV_PICTURE_TYPE_I:
517  pic->i_type = x4->forced_idr > 0 ? X264_TYPE_IDR : X264_TYPE_KEYFRAME;
518  break;
519  case AV_PICTURE_TYPE_P:
520  pic->i_type = X264_TYPE_P;
521  break;
522  case AV_PICTURE_TYPE_B:
523  pic->i_type = X264_TYPE_B;
524  break;
525  default:
526  pic->i_type = X264_TYPE_AUTO;
527  break;
528  }
530 
531  if (x4->a53_cc) {
532  void *sei_data;
533  size_t sei_size;
534 
535  ret = ff_alloc_a53_sei(frame, 0, &sei_data, &sei_size);
536  if (ret < 0)
537  goto fail;
538 
539  if (sei_data) {
540  sei->payloads = av_mallocz(sizeof(sei->payloads[0]));
541  if (!sei->payloads) {
542  av_free(sei_data);
543  ret = AVERROR(ENOMEM);
544  goto fail;
545  }
546 
547  sei->sei_free = av_free;
548 
549  sei->payloads[0].payload_size = sei_size;
550  sei->payloads[0].payload = sei_data;
551  sei->payloads[0].payload_type = SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35;
552  sei->num_payloads = 1;
553  }
554  }
555 
557  if (sd) {
558  ret = setup_roi(ctx, pic, frame, sd->data, sd->size);
559  if (ret < 0)
560  goto fail;
561  }
562 
564  if (mbinfo_sd) {
565  int err = setup_mb_info(ctx, pic, frame, (const AVVideoHint *)mbinfo_sd->data);
566  if (err < 0) {
567  /* No need to fail here, this is not fatal. We just proceed with no
568  * mb_info and log a message */
569 
570  av_log(ctx, AV_LOG_WARNING, "setup_mb_info failed with error: %s\n", av_err2str(err));
571  }
572  }
573 
574  if (x4->udu_sei) {
575  for (int j = 0; j < frame->nb_side_data; j++) {
576  AVFrameSideData *side_data = frame->side_data[j];
577  void *tmp;
578  x264_sei_payload_t *sei_payload;
579  if (side_data->type != AV_FRAME_DATA_SEI_UNREGISTERED)
580  continue;
581  tmp = av_fast_realloc(sei->payloads, &sei_data_size, (sei->num_payloads + 1) * sizeof(*sei_payload));
582  if (!tmp) {
583  ret = AVERROR(ENOMEM);
584  goto fail;
585  }
586  sei->payloads = tmp;
587  sei->sei_free = av_free;
588  sei_payload = &sei->payloads[sei->num_payloads];
589  sei_payload->payload = av_memdup(side_data->data, side_data->size);
590  if (!sei_payload->payload) {
591  ret = AVERROR(ENOMEM);
592  goto fail;
593  }
594  sei_payload->payload_size = side_data->size;
595  sei_payload->payload_type = SEI_TYPE_USER_DATA_UNREGISTERED;
596  sei->num_payloads++;
597  }
598  }
599 
600  *ppic = pic;
601  return 0;
602 
603 fail:
604  free_picture(pic);
605  *ppic = NULL;
606  return ret;
607 }
608 
610  int *got_packet)
611 {
612  X264Context *x4 = ctx->priv_data;
613  x264_nal_t *nal;
614  int nnal, ret;
615  x264_picture_t pic_out = {0}, *pic_in;
616  int pict_type;
617  int64_t wallclock = 0;
618  X264Opaque *out_opaque;
619 
620  ret = setup_frame(ctx, frame, &pic_in);
621  if (ret < 0)
622  return ret;
623 
624  do {
625  if (x264_encoder_encode(x4->enc, &nal, &nnal, pic_in, &pic_out) < 0)
626  return AVERROR_EXTERNAL;
627 
628  if (nnal && (ctx->flags & AV_CODEC_FLAG_RECON_FRAME)) {
629  AVCodecInternal *avci = ctx->internal;
630 
632 
633  avci->recon_frame->format = csp_to_pixfmt(pic_out.img.i_csp);
634  if (avci->recon_frame->format == AV_PIX_FMT_NONE) {
636  "Unhandled reconstructed frame colorspace: %d\n",
637  pic_out.img.i_csp);
638  return AVERROR(ENOSYS);
639  }
640 
641  avci->recon_frame->width = ctx->width;
642  avci->recon_frame->height = ctx->height;
643  for (int i = 0; i < pic_out.img.i_plane; i++) {
644  avci->recon_frame->data[i] = pic_out.img.plane[i];
645  avci->recon_frame->linesize[i] = pic_out.img.i_stride[i];
646  }
647 
649  if (ret < 0) {
651  return ret;
652  }
653  }
654 
655  ret = encode_nals(ctx, pkt, nal, nnal);
656  if (ret < 0)
657  return ret;
658  } while (!ret && !frame && x264_encoder_delayed_frames(x4->enc));
659 
660  if (!ret)
661  return 0;
662 
663  pkt->pts = pic_out.i_pts;
664  pkt->dts = pic_out.i_dts;
665 
666  out_opaque = pic_out.opaque;
667  if (out_opaque >= x4->reordered_opaque &&
668  out_opaque < &x4->reordered_opaque[x4->nb_reordered_opaque]) {
669  wallclock = out_opaque->wallclock;
670  pkt->duration = out_opaque->duration;
671 
673  pkt->opaque = out_opaque->frame_opaque;
674  pkt->opaque_ref = out_opaque->frame_opaque_ref;
675  out_opaque->frame_opaque_ref = NULL;
676  }
677 
678  opaque_uninit(out_opaque);
679  } else {
680  // Unexpected opaque pointer on picture output
681  av_log(ctx, AV_LOG_ERROR, "Unexpected opaque pointer; "
682  "this is a bug, please report it.\n");
683  }
684 
685  switch (pic_out.i_type) {
686  case X264_TYPE_IDR:
687  case X264_TYPE_I:
688  pict_type = AV_PICTURE_TYPE_I;
689  break;
690  case X264_TYPE_P:
691  pict_type = AV_PICTURE_TYPE_P;
692  break;
693  case X264_TYPE_B:
694  case X264_TYPE_BREF:
695  pict_type = AV_PICTURE_TYPE_B;
696  break;
697  default:
698  av_log(ctx, AV_LOG_ERROR, "Unknown picture type encountered.\n");
699  return AVERROR_EXTERNAL;
700  }
701 
702  pkt->flags |= AV_PKT_FLAG_KEY*pic_out.b_keyframe;
703  if (ret) {
704  int error_count = 0;
705  int64_t *errors = NULL;
706  int64_t sse[3] = {0};
707 
708  if (ctx->flags & AV_CODEC_FLAG_PSNR) {
709  const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(ctx->pix_fmt);
710  double scale[3] = { 1,
711  (double)(1 << pix_desc->log2_chroma_h) * (1 << pix_desc->log2_chroma_w),
712  (double)(1 << pix_desc->log2_chroma_h) * (1 << pix_desc->log2_chroma_w),
713  };
714 
715  error_count = pix_desc->nb_components;
716 
717  for (int i = 0; i < pix_desc->nb_components; ++i) {
718  double max_value = (double)(1 << pix_desc->comp[i].depth) - 1.0;
719  double plane_size = ctx->width * (double)ctx->height / scale[i];
720 
721  /* psnr = 10 * log10(max_value * max_value / mse) */
722  double mse = (max_value * max_value) / pow(10, pic_out.prop.f_psnr[i] / 10.0);
723 
724  /* SSE = MSE * width * height / scale -> because of possible chroma downsampling */
725  sse[i] = (int64_t)floor(mse * plane_size + .5);
726  }
727 
728  errors = sse;
729  }
730 
731  ff_side_data_set_encoder_stats(pkt, (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA,
732  errors, error_count, pict_type);
733 
734  if (wallclock)
735  ff_side_data_set_prft(pkt, wallclock);
736  }
737 
738  *got_packet = ret;
739  return 0;
740 }
741 
742 static void X264_flush(AVCodecContext *avctx)
743 {
744  X264Context *x4 = avctx->priv_data;
745  x264_nal_t *nal;
746  int nnal, ret;
747  x264_picture_t pic_out = {0};
748 
749  do {
750  ret = x264_encoder_encode(x4->enc, &nal, &nnal, NULL, &pic_out);
751  } while (ret > 0 && x264_encoder_delayed_frames(x4->enc));
752 
753  for (int i = 0; i < x4->nb_reordered_opaque; i++)
755 
756  if (x4->sei_size < 0)
757  x4->sei_size = -x4->sei_size;
758 }
759 
761 {
762  X264Context *x4 = avctx->priv_data;
763 
764  av_freep(&x4->sei);
765 
766  for (int i = 0; i < x4->nb_reordered_opaque; i++)
769 
770 #if X264_BUILD >= 161
771  x264_param_cleanup(&x4->params);
772 #endif
773 
774  if (x4->enc) {
775  x264_encoder_close(x4->enc);
776  x4->enc = NULL;
777  }
778 
779  return 0;
780 }
781 
782 static int parse_opts(AVCodecContext *avctx, const char *opt, const char *param)
783 {
784  X264Context *x4 = avctx->priv_data;
785  int ret;
786 
787  if ((ret = x264_param_parse(&x4->params, opt, param)) < 0) {
788  if (ret == X264_PARAM_BAD_NAME) {
789  av_log(avctx, AV_LOG_ERROR,
790  "bad option '%s': '%s'\n", opt, param);
791  ret = AVERROR(EINVAL);
792 #if X264_BUILD >= 161
793  } else if (ret == X264_PARAM_ALLOC_FAILED) {
794  av_log(avctx, AV_LOG_ERROR,
795  "out of memory parsing option '%s': '%s'\n", opt, param);
796  ret = AVERROR(ENOMEM);
797 #endif
798  } else {
799  av_log(avctx, AV_LOG_ERROR,
800  "bad value for '%s': '%s'\n", opt, param);
801  ret = AVERROR(EINVAL);
802  }
803  }
804 
805  return ret;
806 }
807 
809 {
810  switch (pix_fmt) {
811  case AV_PIX_FMT_YUV420P:
812  case AV_PIX_FMT_YUVJ420P:
813  case AV_PIX_FMT_YUV420P9:
814  case AV_PIX_FMT_YUV420P10: return X264_CSP_I420;
815  case AV_PIX_FMT_YUV422P:
816  case AV_PIX_FMT_YUVJ422P:
817  case AV_PIX_FMT_YUV422P10: return X264_CSP_I422;
818  case AV_PIX_FMT_YUV444P:
819  case AV_PIX_FMT_YUVJ444P:
820  case AV_PIX_FMT_YUV444P9:
821  case AV_PIX_FMT_YUV444P10: return X264_CSP_I444;
822  case AV_PIX_FMT_BGR0:
823  return X264_CSP_BGRA;
824  case AV_PIX_FMT_BGR24:
825  return X264_CSP_BGR;
826 
827  case AV_PIX_FMT_RGB24:
828  return X264_CSP_RGB;
829  case AV_PIX_FMT_NV12: return X264_CSP_NV12;
830  case AV_PIX_FMT_NV16:
831  case AV_PIX_FMT_NV20: return X264_CSP_NV16;
832 #ifdef X264_CSP_NV21
833  case AV_PIX_FMT_NV21: return X264_CSP_NV21;
834 #endif
835 #ifdef X264_CSP_I400
836  case AV_PIX_FMT_GRAY8:
837  case AV_PIX_FMT_GRAY10: return X264_CSP_I400;
838 #endif
839  };
840  return 0;
841 }
842 
843 static int save_sei(AVCodecContext *avctx, x264_nal_t *nal)
844 {
845  X264Context *x4 = avctx->priv_data;
846 
847  av_log(avctx, AV_LOG_INFO, "%s\n", nal->p_payload + 25);
848  x4->sei_size = nal->i_payload;
849  x4->sei = av_malloc(x4->sei_size);
850  if (!x4->sei)
851  return AVERROR(ENOMEM);
852 
853  memcpy(x4->sei, nal->p_payload, nal->i_payload);
854 
855  return 0;
856 }
857 
858 #if CONFIG_LIBX264_ENCODER
859 static int set_avcc_extradata(AVCodecContext *avctx, x264_nal_t *nal, int nnal)
860 {
861  x264_nal_t *sps_nal = NULL;
862  x264_nal_t *pps_nal = NULL;
863  uint8_t *p, *sps;
864  int ret;
865 
866  /* We know it's in the order of SPS/PPS/SEI, but it's not documented in x264 API.
867  * The x264 param i_sps_id implies there is a single pair of SPS/PPS.
868  */
869  for (int i = 0; i < nnal; i++) {
870  switch (nal[i].i_type) {
871  case NAL_SPS:
872  sps_nal = &nal[i];
873  break;
874  case NAL_PPS:
875  pps_nal = &nal[i];
876  break;
877  case NAL_SEI:
878  ret = save_sei(avctx, &nal[i]);
879  if (ret < 0)
880  return ret;
881  break;
882  }
883  }
884  if (!sps_nal || !pps_nal)
885  return AVERROR_EXTERNAL;
886 
887  avctx->extradata_size = sps_nal->i_payload + pps_nal->i_payload + 7;
889  if (!avctx->extradata)
890  return AVERROR(ENOMEM);
891 
892  // Now create AVCDecoderConfigurationRecord
893  p = avctx->extradata;
894  // Skip size part
895  sps = sps_nal->p_payload + 4;
896  *p++ = 1; // version
897  *p++ = sps[1]; // AVCProfileIndication
898  *p++ = sps[2]; // profile_compatibility
899  *p++ = sps[3]; // AVCLevelIndication
900  *p++ = 0xFF;
901  *p++ = 0xE0 | 0x01; // 3 bits reserved (111) + 5 bits number of sps
902  memcpy(p, sps_nal->p_payload + 2, sps_nal->i_payload - 2);
903  // Make sps has AV_INPUT_BUFFER_PADDING_SIZE padding, so it can be used
904  // with GetBitContext
905  sps = p + 2;
906  p += sps_nal->i_payload - 2;
907  *p++ = 1;
908  memcpy(p, pps_nal->p_payload + 2, pps_nal->i_payload - 2);
909  p += pps_nal->i_payload - 2;
910 
911  if (sps[3] != 66 && sps[3] != 77 && sps[3] != 88) {
912  GetBitContext gbc;
913  int chroma_format_idc;
914  int bit_depth_luma_minus8, bit_depth_chroma_minus8;
915 
916  /* It's not possible to have emulation prevention byte before
917  * bit_depth_chroma_minus8 due to the range of sps id, chroma_format_idc
918  * and so on. So we can read directly without need to escape emulation
919  * prevention byte.
920  *
921  * +4 to skip until sps id.
922  */
923  ret = init_get_bits8(&gbc, sps + 4, sps_nal->i_payload - 4 - 4);
924  if (ret < 0)
925  return ret;
926  // Skip sps id
927  get_ue_golomb_31(&gbc);
928  chroma_format_idc = get_ue_golomb_31(&gbc);
929  if (chroma_format_idc == 3)
930  skip_bits1(&gbc);
931  bit_depth_luma_minus8 = get_ue_golomb_31(&gbc);
932  bit_depth_chroma_minus8 = get_ue_golomb_31(&gbc);
933 
934  *p++ = 0xFC | chroma_format_idc;
935  *p++ = 0xF8 | bit_depth_luma_minus8;
936  *p++ = 0xF8 | bit_depth_chroma_minus8;
937  *p++ = 0;
938  }
939  av_assert2(avctx->extradata + avctx->extradata_size >= p);
940  avctx->extradata_size = p - avctx->extradata;
941 
942  return 0;
943 }
944 #endif
945 
946 static int set_extradata(AVCodecContext *avctx)
947 {
948  X264Context *x4 = avctx->priv_data;
949  x264_nal_t *nal;
950  uint8_t *p;
951  int nnal, s;
952 
953  s = x264_encoder_headers(x4->enc, &nal, &nnal);
954  if (s < 0)
955  return AVERROR_EXTERNAL;
956 
957 #if CONFIG_LIBX264_ENCODER
958  if (!x4->params.b_annexb)
959  return set_avcc_extradata(avctx, nal, nnal);
960 #endif
961 
963  if (!p)
964  return AVERROR(ENOMEM);
965 
966  for (int i = 0; i < nnal; i++) {
967  /* Don't put the SEI in extradata. */
968  if (nal[i].i_type == NAL_SEI) {
969  s = save_sei(avctx, &nal[i]);
970  if (s < 0)
971  return s;
972  continue;
973  }
974  memcpy(p, nal[i].p_payload, nal[i].i_payload);
975  p += nal[i].i_payload;
976  }
977  avctx->extradata_size = p - avctx->extradata;
978 
979  return 0;
980 }
981 
982 #define PARSE_X264_OPT(name, var)\
983  if (x4->var && x264_param_parse(&x4->params, name, x4->var) < 0) {\
984  av_log(avctx, AV_LOG_ERROR, "Error parsing option '%s' with value '%s'.\n", name, x4->var);\
985  return AVERROR(EINVAL);\
986  }
987 
988 #if CONFIG_LIBX264_HDR10
989 static void handle_mdcv(x264_param_t *params,
990  const AVMasteringDisplayMetadata *mdcv)
991 {
992  if (!mdcv->has_primaries && !mdcv->has_luminance)
993  return;
994 
995  params->mastering_display.b_mastering_display = 1;
996 
997  if (mdcv->has_primaries) {
998  int *const points[][2] = {
999  {
1000  &params->mastering_display.i_red_x,
1001  &params->mastering_display.i_red_y
1002  },
1003  {
1004  &params->mastering_display.i_green_x,
1005  &params->mastering_display.i_green_y
1006  },
1007  {
1008  &params->mastering_display.i_blue_x,
1009  &params->mastering_display.i_blue_y
1010  },
1011  };
1012 
1013  for (int i = 0; i < 3; i++) {
1014  const AVRational *src = mdcv->display_primaries[i];
1015  int *dst[2] = { points[i][0], points[i][1] };
1016 
1017  *dst[0] = av_rescale_q(1, src[0], (AVRational){ 1, 50000 });
1018  *dst[1] = av_rescale_q(1, src[1], (AVRational){ 1, 50000 });
1019  }
1020 
1021  params->mastering_display.i_white_x =
1022  av_rescale_q(1, mdcv->white_point[0], (AVRational){ 1, 50000 });
1023  params->mastering_display.i_white_y =
1024  av_rescale_q(1, mdcv->white_point[1], (AVRational){ 1, 50000 });
1025  }
1026 
1027  if (mdcv->has_luminance) {
1028  params->mastering_display.i_display_max =
1029  av_rescale_q(1, mdcv->max_luminance, (AVRational){ 1, 10000 });
1030  params->mastering_display.i_display_min =
1031  av_rescale_q(1, mdcv->min_luminance, (AVRational){ 1, 10000 });
1032  }
1033 }
1034 #endif // CONFIG_LIBX264_HDR10
1035 
1036 static void handle_side_data(AVCodecContext *avctx, x264_param_t *params)
1037 {
1038 #if CONFIG_LIBX264_HDR10
1039  const AVFrameSideData *cll_sd =
1042  const AVFrameSideData *mdcv_sd =
1044  avctx->nb_decoded_side_data,
1046 
1047  if (cll_sd) {
1048  const AVContentLightMetadata *cll =
1049  (AVContentLightMetadata *)cll_sd->data;
1050 
1051  params->content_light_level.i_max_cll = cll->MaxCLL;
1052  params->content_light_level.i_max_fall = cll->MaxFALL;
1053 
1054  params->content_light_level.b_cll = 1;
1055  }
1056 
1057  if (mdcv_sd) {
1058  handle_mdcv(params, (AVMasteringDisplayMetadata *)mdcv_sd->data);
1059  }
1060 #endif // CONFIG_LIBX264_HDR10
1061 }
1062 
1064 {
1065  X264Context *x4 = avctx->priv_data;
1066  AVCPBProperties *cpb_props;
1067  int sw,sh;
1068  int ret;
1069 
1070  if (avctx->global_quality > 0)
1071  av_log(avctx, AV_LOG_WARNING, "-qscale is ignored, -crf is recommended.\n");
1072 
1073 #if CONFIG_LIBX262_ENCODER
1074  if (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
1075  x4->params.b_mpeg2 = 1;
1076  x264_param_default_mpeg2(&x4->params);
1077  } else
1078 #endif
1079  x264_param_default(&x4->params);
1080 
1081  x4->params.b_deblocking_filter = avctx->flags & AV_CODEC_FLAG_LOOP_FILTER;
1082 
1083  if (x4->preset || x4->tune)
1084  if (x264_param_default_preset(&x4->params, x4->preset, x4->tune) < 0) {
1085  int i;
1086  av_log(avctx, AV_LOG_ERROR, "Error setting preset/tune %s/%s.\n", x4->preset, x4->tune);
1087  av_log(avctx, AV_LOG_INFO, "Possible presets:");
1088  for (i = 0; x264_preset_names[i]; i++)
1089  av_log(avctx, AV_LOG_INFO, " %s", x264_preset_names[i]);
1090  av_log(avctx, AV_LOG_INFO, "\n");
1091  av_log(avctx, AV_LOG_INFO, "Possible tunes:");
1092  for (i = 0; x264_tune_names[i]; i++)
1093  av_log(avctx, AV_LOG_INFO, " %s", x264_tune_names[i]);
1094  av_log(avctx, AV_LOG_INFO, "\n");
1095  return AVERROR(EINVAL);
1096  }
1097 
1098  if (avctx->level > 0)
1099  x4->params.i_level_idc = avctx->level;
1100 
1101  x4->params.pf_log = X264_log;
1102  x4->params.p_log_private = avctx;
1103  x4->params.i_log_level = X264_LOG_DEBUG;
1104  x4->params.i_csp = convert_pix_fmt(avctx->pix_fmt);
1105  x4->params.i_bitdepth = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth;
1106 
1107  PARSE_X264_OPT("weightp", wpredp);
1108 
1109  if (avctx->bit_rate) {
1110  if (avctx->bit_rate / 1000 > INT_MAX || avctx->rc_max_rate / 1000 > INT_MAX) {
1111  av_log(avctx, AV_LOG_ERROR, "bit_rate and rc_max_rate > %d000 not supported by libx264\n", INT_MAX);
1112  return AVERROR(EINVAL);
1113  }
1114  x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
1115  x4->params.rc.i_rc_method = X264_RC_ABR;
1116  }
1117  x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
1118  x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
1119  x4->params.rc.b_stat_write = avctx->flags & AV_CODEC_FLAG_PASS1;
1120  if (avctx->flags & AV_CODEC_FLAG_PASS2) {
1121  x4->params.rc.b_stat_read = 1;
1122  } else {
1123  if (x4->crf >= 0) {
1124  x4->params.rc.i_rc_method = X264_RC_CRF;
1125  x4->params.rc.f_rf_constant = x4->crf;
1126  } else if (x4->cqp >= 0) {
1127  x4->params.rc.i_rc_method = X264_RC_CQP;
1128  x4->params.rc.i_qp_constant = x4->cqp;
1129  }
1130 
1131  if (x4->crf_max >= 0)
1132  x4->params.rc.f_rf_constant_max = x4->crf_max;
1133  }
1134 
1135  if (avctx->rc_buffer_size && avctx->rc_initial_buffer_occupancy > 0 &&
1136  (avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
1137  x4->params.rc.f_vbv_buffer_init =
1139  }
1140 
1141  PARSE_X264_OPT("level", level);
1142 
1143  if (avctx->i_quant_factor > 0)
1144  x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
1145  if (avctx->b_quant_factor > 0)
1146  x4->params.rc.f_pb_factor = avctx->b_quant_factor;
1147 
1148  if (x4->chroma_offset)
1149  x4->params.analyse.i_chroma_qp_offset = x4->chroma_offset;
1150 
1151  if (avctx->gop_size >= 0)
1152  x4->params.i_keyint_max = avctx->gop_size;
1153  if (avctx->max_b_frames >= 0)
1154  x4->params.i_bframe = avctx->max_b_frames;
1155 
1156  if (x4->scenechange_threshold >= 0)
1157  x4->params.i_scenecut_threshold = x4->scenechange_threshold;
1158 
1159  if (avctx->qmin >= 0)
1160  x4->params.rc.i_qp_min = avctx->qmin;
1161  if (avctx->qmax >= 0)
1162  x4->params.rc.i_qp_max = avctx->qmax;
1163  if (avctx->max_qdiff >= 0)
1164  x4->params.rc.i_qp_step = avctx->max_qdiff;
1165  if (avctx->qblur >= 0)
1166  x4->params.rc.f_qblur = avctx->qblur; /* temporally blur quants */
1167  if (avctx->qcompress >= 0)
1168  x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */
1169  if (avctx->refs >= 0)
1170  x4->params.i_frame_reference = avctx->refs;
1171  else if (x4->params.i_level_idc > 0) {
1172  int i;
1173  int mbn = AV_CEIL_RSHIFT(avctx->width, 4) * AV_CEIL_RSHIFT(avctx->height, 4);
1174 
1175  for (i = 0; i<x264_levels[i].level_idc; i++)
1176  if (x264_levels[i].level_idc == x4->params.i_level_idc)
1177  x4->params.i_frame_reference = av_clip(x264_levels[i].dpb / mbn, 1, x4->params.i_frame_reference);
1178  }
1179 
1180  if (avctx->trellis >= 0)
1181  x4->params.analyse.i_trellis = avctx->trellis;
1182  if (avctx->me_range >= 0)
1183  x4->params.analyse.i_me_range = avctx->me_range;
1184  if (x4->noise_reduction >= 0)
1185  x4->params.analyse.i_noise_reduction = x4->noise_reduction;
1186  if (avctx->me_subpel_quality >= 0)
1187  x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality;
1188  if (avctx->keyint_min >= 0)
1189  x4->params.i_keyint_min = avctx->keyint_min;
1190  if (avctx->me_cmp >= 0)
1191  x4->params.analyse.b_chroma_me = avctx->me_cmp & FF_CMP_CHROMA;
1192 
1193  if (x4->aq_mode >= 0)
1194  x4->params.rc.i_aq_mode = x4->aq_mode;
1195  if (x4->aq_strength >= 0)
1196  x4->params.rc.f_aq_strength = x4->aq_strength;
1197  PARSE_X264_OPT("psy-rd", psy_rd);
1198  PARSE_X264_OPT("deblock", deblock);
1199  PARSE_X264_OPT("partitions", partitions);
1200  PARSE_X264_OPT("stats", stats);
1201  if (x4->psy >= 0)
1202  x4->params.analyse.b_psy = x4->psy;
1203  if (x4->rc_lookahead >= 0)
1204  x4->params.rc.i_lookahead = x4->rc_lookahead;
1205  if (x4->weightp >= 0)
1206  x4->params.analyse.i_weighted_pred = x4->weightp;
1207  if (x4->weightb >= 0)
1208  x4->params.analyse.b_weighted_bipred = x4->weightb;
1209  if (x4->cplxblur >= 0)
1210  x4->params.rc.f_complexity_blur = x4->cplxblur;
1211 
1212  if (x4->ssim >= 0)
1213  x4->params.analyse.b_ssim = x4->ssim;
1214  if (x4->intra_refresh >= 0)
1215  x4->params.b_intra_refresh = x4->intra_refresh;
1216  if (x4->bluray_compat >= 0) {
1217  x4->params.b_bluray_compat = x4->bluray_compat;
1218  x4->params.b_vfr_input = 0;
1219  }
1220  if (x4->avcintra_class >= 0)
1221  x4->params.i_avcintra_class = x4->avcintra_class;
1222 
1223  if (x4->avcintra_class > 200) {
1224 #if X264_BUILD < 164
1225  av_log(avctx, AV_LOG_ERROR,
1226  "x264 too old for AVC Intra 300/480, at least version 164 needed\n");
1227  return AVERROR(EINVAL);
1228 #else
1229  /* AVC-Intra 300/480 only supported by Sony XAVC flavor */
1230  x4->params.i_avcintra_flavor = X264_AVCINTRA_FLAVOR_SONY;
1231 #endif
1232  }
1233 
1234  if (x4->b_bias != INT_MIN)
1235  x4->params.i_bframe_bias = x4->b_bias;
1236  if (x4->b_pyramid >= 0)
1237  x4->params.i_bframe_pyramid = x4->b_pyramid;
1238  if (x4->mixed_refs >= 0)
1239  x4->params.analyse.b_mixed_references = x4->mixed_refs;
1240  if (x4->dct8x8 >= 0)
1241  x4->params.analyse.b_transform_8x8 = x4->dct8x8;
1242  if (x4->fast_pskip >= 0)
1243  x4->params.analyse.b_fast_pskip = x4->fast_pskip;
1244  if (x4->aud >= 0)
1245  x4->params.b_aud = x4->aud;
1246  if (x4->mbtree >= 0)
1247  x4->params.rc.b_mb_tree = x4->mbtree;
1248  if (x4->direct_pred >= 0)
1249  x4->params.analyse.i_direct_mv_pred = x4->direct_pred;
1250 
1251  if (x4->slice_max_size >= 0)
1252  x4->params.i_slice_max_size = x4->slice_max_size;
1253 
1254  if (x4->fastfirstpass)
1255  x264_param_apply_fastfirstpass(&x4->params);
1256 
1257  x4->profile = x4->profile_opt;
1258  /* Allow specifying the x264 profile through AVCodecContext. */
1259  if (!x4->profile)
1260  switch (avctx->profile) {
1262  x4->profile = "baseline";
1263  break;
1264  case AV_PROFILE_H264_HIGH:
1265  x4->profile = "high";
1266  break;
1268  x4->profile = "high10";
1269  break;
1271  x4->profile = "high422";
1272  break;
1274  x4->profile = "high444";
1275  break;
1276  case AV_PROFILE_H264_MAIN:
1277  x4->profile = "main";
1278  break;
1279  default:
1280  break;
1281  }
1282 
1283  if (x4->nal_hrd >= 0)
1284  x4->params.i_nal_hrd = x4->nal_hrd;
1285 
1286  if (x4->motion_est >= 0)
1287  x4->params.analyse.i_me_method = x4->motion_est;
1288 
1289  if (x4->coder >= 0)
1290  x4->params.b_cabac = x4->coder;
1291 
1292  if (x4->b_frame_strategy >= 0)
1293  x4->params.i_bframe_adaptive = x4->b_frame_strategy;
1294 
1295  if (x4->profile)
1296  if (x264_param_apply_profile(&x4->params, x4->profile) < 0) {
1297  int i;
1298  av_log(avctx, AV_LOG_ERROR, "Error setting profile %s.\n", x4->profile);
1299  av_log(avctx, AV_LOG_INFO, "Possible profiles:");
1300  for (i = 0; x264_profile_names[i]; i++)
1301  av_log(avctx, AV_LOG_INFO, " %s", x264_profile_names[i]);
1302  av_log(avctx, AV_LOG_INFO, "\n");
1303  return AVERROR(EINVAL);
1304  }
1305 
1306  x4->params.i_width = avctx->width;
1307  x4->params.i_height = avctx->height;
1308  av_reduce(&sw, &sh, avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den, 4096);
1309  x4->params.vui.i_sar_width = sw;
1310  x4->params.vui.i_sar_height = sh;
1311  x4->params.i_timebase_den = avctx->time_base.den;
1312  x4->params.i_timebase_num = avctx->time_base.num;
1313  if (avctx->framerate.num > 0 && avctx->framerate.den > 0) {
1314  x4->params.i_fps_num = avctx->framerate.num;
1315  x4->params.i_fps_den = avctx->framerate.den;
1316  } else {
1317  x4->params.i_fps_num = avctx->time_base.den;
1318  x4->params.i_fps_den = avctx->time_base.num;
1319  }
1320 
1321  x4->params.analyse.b_psnr = avctx->flags & AV_CODEC_FLAG_PSNR;
1322 
1323  x4->params.i_threads = avctx->thread_count;
1324  if (avctx->thread_type)
1325  x4->params.b_sliced_threads = avctx->thread_type == FF_THREAD_SLICE;
1326 
1327  x4->params.b_interlaced = avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT;
1328 
1329  x4->params.b_open_gop = !(avctx->flags & AV_CODEC_FLAG_CLOSED_GOP);
1330 
1331  x4->params.i_slice_count = avctx->slices;
1332 
1333  if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED)
1334  x4->params.vui.b_fullrange = avctx->color_range == AVCOL_RANGE_JPEG;
1335  else if (avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
1336  avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
1337  avctx->pix_fmt == AV_PIX_FMT_YUVJ444P)
1338  x4->params.vui.b_fullrange = 1;
1339 
1340  if (avctx->colorspace != AVCOL_SPC_UNSPECIFIED)
1341  x4->params.vui.i_colmatrix = avctx->colorspace;
1342  if (avctx->color_primaries != AVCOL_PRI_UNSPECIFIED)
1343  x4->params.vui.i_colorprim = avctx->color_primaries;
1344  if (avctx->color_trc != AVCOL_TRC_UNSPECIFIED)
1345  x4->params.vui.i_transfer = avctx->color_trc;
1347  x4->params.vui.i_chroma_loc = avctx->chroma_sample_location - 1;
1348 
1349  handle_side_data(avctx, &x4->params);
1350 
1351  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)
1352  x4->params.b_repeat_headers = 0;
1353 
1354  if (avctx->flags & AV_CODEC_FLAG_RECON_FRAME)
1355  x4->params.b_full_recon = 1;
1356 
1357  if(x4->x264opts){
1358  const char *p= x4->x264opts;
1359  while(p){
1360  char param[4096]={0}, val[4096]={0};
1361  if(sscanf(p, "%4095[^:=]=%4095[^:]", param, val) == 1){
1362  ret = parse_opts(avctx, param, "1");
1363  if (ret < 0)
1364  return ret;
1365  } else {
1366  ret = parse_opts(avctx, param, val);
1367  if (ret < 0)
1368  return ret;
1369  }
1370  p= strchr(p, ':');
1371  if (p) {
1372  ++p;
1373  }
1374  }
1375  }
1376 
1377  /* Separate headers not supported in AVC-Intra mode */
1378  if (x4->avcintra_class >= 0)
1379  x4->params.b_repeat_headers = 1;
1380 
1381  {
1382  const AVDictionaryEntry *en = NULL;
1383  while (en = av_dict_iterate(x4->x264_params, en)) {
1384  if ((ret = x264_param_parse(&x4->params, en->key, en->value)) < 0) {
1385  av_log(avctx, AV_LOG_WARNING,
1386  "Error parsing option '%s = %s'.\n",
1387  en->key, en->value);
1388 #if X264_BUILD >= 161
1389  if (ret == X264_PARAM_ALLOC_FAILED)
1390  return AVERROR(ENOMEM);
1391 #endif
1392  }
1393  }
1394  }
1395 
1396  x4->params.analyse.b_mb_info = x4->mb_info;
1397 
1398  // update AVCodecContext with x264 parameters
1399  avctx->has_b_frames = x4->params.i_bframe ?
1400  x4->params.i_bframe_pyramid ? 2 : 1 : 0;
1401  if (avctx->max_b_frames < 0)
1402  avctx->max_b_frames = 0;
1403 
1404  avctx->bit_rate = x4->params.rc.i_bitrate*1000LL;
1405 
1406  x4->enc = x264_encoder_open(&x4->params);
1407  if (!x4->enc)
1408  return AVERROR_EXTERNAL;
1409 
1410  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
1411  ret = set_extradata(avctx);
1412  if (ret < 0)
1413  return ret;
1414  }
1415 
1416  cpb_props = ff_encode_add_cpb_side_data(avctx);
1417  if (!cpb_props)
1418  return AVERROR(ENOMEM);
1419  cpb_props->buffer_size = x4->params.rc.i_vbv_buffer_size * 1000;
1420  cpb_props->max_bitrate = x4->params.rc.i_vbv_max_bitrate * 1000LL;
1421  cpb_props->avg_bitrate = x4->params.rc.i_bitrate * 1000LL;
1422 
1423  // Overestimate the reordered opaque buffer size, in case a runtime
1424  // reconfigure would increase the delay (which it shouldn't).
1425  x4->nb_reordered_opaque = x264_encoder_maximum_delayed_frames(x4->enc) + 17;
1427  sizeof(*x4->reordered_opaque));
1428  if (!x4->reordered_opaque) {
1429  x4->nb_reordered_opaque = 0;
1430  return AVERROR(ENOMEM);
1431  }
1432 
1433  return 0;
1434 }
1435 
1436 static const enum AVPixelFormat pix_fmts_8bit[] = {
1445 #ifdef X264_CSP_NV21
1447 #endif
1449 };
1450 static const enum AVPixelFormat pix_fmts_9bit[] = {
1454 };
1455 static const enum AVPixelFormat pix_fmts_10bit[] = {
1461 };
1462 static const enum AVPixelFormat pix_fmts_all[] = {
1471 #ifdef X264_CSP_NV21
1473 #endif
1478 #ifdef X264_CSP_I400
1481 #endif
1483 };
1484 #if CONFIG_LIBX264RGB_ENCODER
1485 static const enum AVPixelFormat pix_fmts_8bit_rgb[] = {
1490 };
1491 #endif
1492 
1493 #define OFFSET(x) offsetof(X264Context, x)
1494 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1495 static const AVOption options[] = {
1496  { "preset", "Set the encoding preset (cf. x264 --fullhelp)", OFFSET(preset), AV_OPT_TYPE_STRING, { .str = "medium" }, 0, 0, VE},
1497  { "tune", "Tune the encoding params (cf. x264 --fullhelp)", OFFSET(tune), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1498  { "profile", "Set profile restrictions (cf. x264 --fullhelp)", OFFSET(profile_opt), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1499  { "fastfirstpass", "Use fast settings when encoding first pass", OFFSET(fastfirstpass), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE},
1500  {"level", "Specify level (as defined by Annex A)", OFFSET(level), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1501  {"passlogfile", "Filename for 2 pass stats", OFFSET(stats), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1502  {"wpredp", "Weighted prediction for P-frames", OFFSET(wpredp), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1503  {"a53cc", "Use A53 Closed Captions (if available)", OFFSET(a53_cc), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, VE},
1504  {"x264opts", "x264 options", OFFSET(x264opts), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
1505  { "crf", "Select the quality for constant quality mode", OFFSET(crf), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
1506  { "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 },
1507  { "qp", "Constant quantization parameter rate control method",OFFSET(cqp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
1508  { "aq-mode", "AQ method", OFFSET(aq_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "aq_mode"},
1509  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_NONE}, INT_MIN, INT_MAX, VE, .unit = "aq_mode" },
1510  { "variance", "Variance AQ (complexity mask)", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_VARIANCE}, INT_MIN, INT_MAX, VE, .unit = "aq_mode" },
1511  { "autovariance", "Auto-variance AQ", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_AUTOVARIANCE}, INT_MIN, INT_MAX, VE, .unit = "aq_mode" },
1512  { "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, .unit = "aq_mode" },
1513  { "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},
1514  { "psy", "Use psychovisual optimizations.", OFFSET(psy), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1515  { "psy-rd", "Strength of psychovisual optimization, in <psy-rd>:<psy-trellis> format.", OFFSET(psy_rd), AV_OPT_TYPE_STRING, {0 }, 0, 0, VE},
1516  { "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 },
1517  { "weightb", "Weighted prediction for B-frames.", OFFSET(weightb), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1518  { "weightp", "Weighted prediction analysis method.", OFFSET(weightp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "weightp" },
1519  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_NONE}, INT_MIN, INT_MAX, VE, .unit = "weightp" },
1520  { "simple", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_SIMPLE}, INT_MIN, INT_MAX, VE, .unit = "weightp" },
1521  { "smart", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_SMART}, INT_MIN, INT_MAX, VE, .unit = "weightp" },
1522  { "ssim", "Calculate and print SSIM stats.", OFFSET(ssim), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1523  { "intra-refresh", "Use Periodic Intra Refresh instead of IDR frames.",OFFSET(intra_refresh),AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1524  { "bluray-compat", "Bluray compatibility workarounds.", OFFSET(bluray_compat) ,AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
1525  { "b-bias", "Influences how often B-frames are used", OFFSET(b_bias), AV_OPT_TYPE_INT, { .i64 = INT_MIN}, INT_MIN, INT_MAX, VE },
1526  { "b-pyramid", "Keep some B-frames as references.", OFFSET(b_pyramid), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "b_pyramid" },
1527  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_NONE}, INT_MIN, INT_MAX, VE, .unit = "b_pyramid" },
1528  { "strict", "Strictly hierarchical pyramid", 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_STRICT}, INT_MIN, INT_MAX, VE, .unit = "b_pyramid" },
1529  { "normal", "Non-strict (not Blu-ray compatible)", 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_NORMAL}, INT_MIN, INT_MAX, VE, .unit = "b_pyramid" },
1530  { "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 },
1531  { "8x8dct", "High profile 8x8 transform.", OFFSET(dct8x8), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1532  { "fast-pskip", NULL, OFFSET(fast_pskip), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1533  { "aud", "Use access unit delimiters.", OFFSET(aud), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1534  { "mbtree", "Use macroblock tree ratecontrol.", OFFSET(mbtree), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE},
1535  { "deblock", "Loop filter parameters, in <alpha:beta> form.", OFFSET(deblock), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1536  { "cplxblur", "Reduce fluctuations in QP (before curve compression)", OFFSET(cplxblur), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE},
1537  { "partitions", "A comma-separated list of partitions to consider. "
1538  "Possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all", OFFSET(partitions), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
1539  { "direct-pred", "Direct MV prediction mode", OFFSET(direct_pred), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "direct-pred" },
1540  { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_NONE }, 0, 0, VE, .unit = "direct-pred" },
1541  { "spatial", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_SPATIAL }, 0, 0, VE, .unit = "direct-pred" },
1542  { "temporal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_TEMPORAL }, 0, 0, VE, .unit = "direct-pred" },
1543  { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_AUTO }, 0, 0, VE, .unit = "direct-pred" },
1544  { "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 },
1545  { "stats", "Filename for 2 pass stats", OFFSET(stats), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
1546  { "nal-hrd", "Signal HRD information (requires vbv-bufsize; "
1547  "cbr not allowed in .mp4)", OFFSET(nal_hrd), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, .unit = "nal-hrd" },
1548  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_NONE}, INT_MIN, INT_MAX, VE, .unit = "nal-hrd" },
1549  { "vbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_VBR}, INT_MIN, INT_MAX, VE, .unit = "nal-hrd" },
1550  { "cbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_CBR}, INT_MIN, INT_MAX, VE, .unit = "nal-hrd" },
1551  { "avcintra-class","AVC-Intra class 50/100/200/300/480", OFFSET(avcintra_class),AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 480 , VE},
1552  { "me_method", "Set motion estimation method", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, X264_ME_TESA, VE, .unit = "motion-est"},
1553  { "motion-est", "Set motion estimation method", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, X264_ME_TESA, VE, .unit = "motion-est"},
1554  { "dia", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_DIA }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
1555  { "hex", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_HEX }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
1556  { "umh", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_UMH }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
1557  { "esa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_ESA }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
1558  { "tesa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_TESA }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
1559  { "forced-idr", "If forcing keyframes, force them as IDR frames.", OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = 0 }, -1, 1, VE },
1560  { "coder", "Coder type", OFFSET(coder), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE, .unit = "coder" },
1561  { "default", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, INT_MIN, INT_MAX, VE, .unit = "coder" },
1562  { "cavlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, .unit = "coder" },
1563  { "cabac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, .unit = "coder" },
1564  { "vlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, .unit = "coder" },
1565  { "ac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, .unit = "coder" },
1566  { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2, VE },
1567  { "chromaoffset", "QP difference between chroma and luma", OFFSET(chroma_offset), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, VE },
1568  { "sc_threshold", "Scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE },
1569  { "noise_reduction", "Noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE },
1570  { "udu_sei", "Use user data unregistered SEI if available", OFFSET(udu_sei), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
1571  { "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 },
1572  { "mb_info", "Set mb_info data through AVSideData, only useful when used from the API", OFFSET(mb_info), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
1573  { NULL },
1574 };
1575 
1576 static const FFCodecDefault x264_defaults[] = {
1577  { "b", "0" },
1578  { "bf", "-1" },
1579  { "flags2", "0" },
1580  { "g", "-1" },
1581  { "i_qfactor", "-1" },
1582  { "b_qfactor", "-1" },
1583  { "qmin", "-1" },
1584  { "qmax", "-1" },
1585  { "qdiff", "-1" },
1586  { "qblur", "-1" },
1587  { "qcomp", "-1" },
1588 // { "rc_lookahead", "-1" },
1589  { "refs", "-1" },
1590  { "trellis", "-1" },
1591  { "me_range", "-1" },
1592  { "subq", "-1" },
1593  { "keyint_min", "-1" },
1594  { "cmp", "-1" },
1595  { "threads", AV_STRINGIFY(X264_THREADS_AUTO) },
1596  { "thread_type", "0" },
1597  { "flags", "+cgop" },
1598  { "rc_init_occupancy","-1" },
1599  { NULL },
1600 };
1601 
1602 #if CONFIG_LIBX264_ENCODER
1603 static const AVClass x264_class = {
1604  .class_name = "libx264",
1605  .item_name = av_default_item_name,
1606  .option = options,
1607  .version = LIBAVUTIL_VERSION_INT,
1608 };
1609 
1610 const FFCodec ff_libx264_encoder = {
1611  .p.name = "libx264",
1612  CODEC_LONG_NAME("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
1613  .p.type = AVMEDIA_TYPE_VIDEO,
1614  .p.id = AV_CODEC_ID_H264,
1615  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
1620  .p.priv_class = &x264_class,
1621  .p.wrapper_name = "libx264",
1622  .priv_data_size = sizeof(X264Context),
1623  .init = X264_init,
1625  .flush = X264_flush,
1626  .close = X264_close,
1627  .defaults = x264_defaults,
1629  .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
1631 #if X264_BUILD < 158
1633 #endif
1634  ,
1635 };
1636 #endif
1637 
1638 #if CONFIG_LIBX264RGB_ENCODER
1639 static const AVClass rgbclass = {
1640  .class_name = "libx264rgb",
1641  .item_name = av_default_item_name,
1642  .option = options,
1643  .version = LIBAVUTIL_VERSION_INT,
1644 };
1645 
1647  .p.name = "libx264rgb",
1648  CODEC_LONG_NAME("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB"),
1649  .p.type = AVMEDIA_TYPE_VIDEO,
1650  .p.id = AV_CODEC_ID_H264,
1651  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
1654  CODEC_PIXFMTS_ARRAY(pix_fmts_8bit_rgb),
1655  .p.priv_class = &rgbclass,
1656  .p.wrapper_name = "libx264",
1657  .priv_data_size = sizeof(X264Context),
1658  .init = X264_init,
1660  .close = X264_close,
1661  .defaults = x264_defaults,
1663 #if X264_BUILD < 158
1665 #endif
1666  ,
1667 };
1668 #endif
1669 
1670 #if CONFIG_LIBX262_ENCODER
1671 static const AVClass X262_class = {
1672  .class_name = "libx262",
1673  .item_name = av_default_item_name,
1674  .option = options,
1675  .version = LIBAVUTIL_VERSION_INT,
1676 };
1677 
1678 const FFCodec ff_libx262_encoder = {
1679  .p.name = "libx262",
1680  CODEC_LONG_NAME("libx262 MPEG2VIDEO"),
1681  .p.type = AVMEDIA_TYPE_VIDEO,
1682  .p.id = AV_CODEC_ID_MPEG2VIDEO,
1683  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
1687  .color_ranges = AVCOL_RANGE_MPEG,
1688  .p.priv_class = &X262_class,
1689  .p.wrapper_name = "libx264",
1690  .priv_data_size = sizeof(X264Context),
1691  .init = X264_init,
1693  .close = X264_close,
1694  .defaults = x264_defaults,
1695  .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
1697 };
1698 #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:458
AVMasteringDisplayMetadata::has_primaries
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
Definition: mastering_display_metadata.h:62
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: atsc_a53.c:26
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
AVMasteringDisplayMetadata::max_luminance
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:57
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
level
uint8_t level
Definition: svq3.c:208
av_clip
#define av_clip
Definition: common.h:100
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: codec_internal.h:42
AVCodecContext::keyint_min
int keyint_min
minimum GOP size
Definition: avcodec.h:998
X264Context
Definition: libx264.c:64
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:659
AVCodecContext::decoded_side_data
AVFrameSideData ** decoded_side_data
Array containing static side data, such as HDR10 CLL / MDCV structures.
Definition: avcodec.h:1924
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:657
X264Context::avcintra_class
int avcintra_class
Definition: libx264.c:106
deblock
static void deblock(const RV60Context *s, AVFrame *frame, int xpos, int ypos, int size, int dpos)
Definition: rv60dec.c:2150
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3341
X264Context::tune
char * tune
Definition: libx264.c:72
AV_PROFILE_H264_MAIN
#define AV_PROFILE_H264_MAIN
Definition: defs.h:112
AVMasteringDisplayMetadata::display_primaries
AVRational display_primaries[3][2]
CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
Definition: mastering_display_metadata.h:42
rect
Definition: f_ebur128.c:78
AVMasteringDisplayMetadata::has_luminance
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
Definition: mastering_display_metadata.h:67
int64_t
long long int64_t
Definition: coverity.c:34
X264Context::cplxblur
float cplxblur
Definition: libx264.c:100
rect::y
int y
Definition: f_ebur128.c:78
AV_CODEC_CAP_ENCODER_RECON_FRAME
#define AV_CODEC_CAP_ENCODER_RECON_FRAME
The encoder is able to output reconstructed frame data, i.e.
Definition: codec.h:159
X264Context::fastfirstpass
int fastfirstpass
Definition: libx264.c:76
X264Context::fast_pskip
int fast_pskip
Definition: libx264.c:96
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:111
sse
static int sse(const MPVEncContext *const s, const uint8_t *src1, const uint8_t *src2, int w, int h, int stride)
Definition: mpegvideo_enc.c:2779
X264_log
static void X264_log(void *p, int level, const char *fmt, va_list args)
Definition: libx264.c:131
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:410
av_frame_make_writable
int av_frame_make_writable(AVFrame *frame)
Ensure that the frame data is writable, avoiding data copy if possible.
Definition: frame.c:550
pixdesc.h
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:652
AVFrame::width
int width
Definition: frame.h:482
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:750
ff_libx264rgb_encoder
const FFCodec ff_libx264rgb_encoder
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:535
AVVideoRect
Copyright 2023 Elias Carotti <eliascrt at amazon dot it>
Definition: video_hint.h:29
AVComponentDescriptor::depth
int depth
Number of bits in the component.
Definition: pixdesc.h:57
level_idc
int level_idc
Definition: h264_levels.c:29
AVOption
AVOption.
Definition: opt.h:429
encode.h
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:647
X264Context::stats
char * stats
Definition: libx264.c:104
X264Context::nb_reordered_opaque
int nb_reordered_opaque
Definition: libx264.c:119
data
const char data[16]
Definition: mxf.c:149
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:528
FF_CODEC_CAP_NOT_INIT_THREADSAFE
#define FF_CODEC_CAP_NOT_INIT_THREADSAFE
The codec is not known to be init-threadsafe (i.e.
Definition: codec_internal.h:34
FFCodec
Definition: codec_internal.h:127
float.h
X264_flush
static void X264_flush(AVCodecContext *avctx)
Definition: libx264.c:742
X264Context::sei_size
int sei_size
Definition: libx264.c:70
AV_PIX_FMT_BGR24
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition: pixfmt.h:76
AVPacket::duration
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition: packet.h:553
AVDictionary
Definition: dict.c:32
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AV_CODEC_FLAG_PSNR
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:306
mbinfo_compute_changed_coords
static void av_always_inline mbinfo_compute_changed_coords(const AVVideoRect *rect, int *min_x, int *max_x, int *min_y, int *max_y)
Definition: libx264.c:325
AV_VIDEO_HINT_TYPE_CHANGED
@ AV_VIDEO_HINT_TYPE_CHANGED
Definition: video_hint.h:39
ff_libx264_encoder
const FFCodec ff_libx264_encoder
AVVideoHint
Definition: video_hint.h:42
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1241
X264Context::intra_refresh
int intra_refresh
Definition: libx264.c:90
AVCodecContext::me_subpel_quality
int me_subpel_quality
subpel ME quality
Definition: avcodec.h:920
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:590
X264Context::cqp
int cqp
Definition: libx264.c:81
X264Context::udu_sei
int udu_sei
Definition: libx264.c:115
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:431
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:126
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:318
video_hint.h
X264_init
static av_cold int X264_init(AVCodecContext *avctx)
Definition: libx264.c:1063
X264Context::slice_max_size
int slice_max_size
Definition: libx264.c:103
AV_FRAME_FLAG_TOP_FIELD_FIRST
#define AV_FRAME_FLAG_TOP_FIELD_FIRST
A flag to mark frames where the top field is displayed first if the content is interlaced.
Definition: frame.h:638
av_memdup
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition: mem.c:304
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:107
save_sei
static int save_sei(AVCodecContext *avctx, x264_nal_t *nal)
Definition: libx264.c:843
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:551
golomb.h
exp golomb vlc stuff
AV_STEREO3D_SIDEBYSIDE
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
Definition: stereo3d.h:64
av_pix_fmt_count_planes
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3381
AV_CODEC_FLAG_COPY_OPAQUE
#define AV_CODEC_FLAG_COPY_OPAQUE
Definition: avcodec.h:279
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:794
FFCodecDefault
Definition: codec_internal.h:96
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
X264Context::chroma_offset
int chroma_offset
Definition: libx264.c:112
AVPacket::opaque_ref
AVBufferRef * opaque_ref
AVBufferRef for free use by the API user.
Definition: packet.h:571
fail
#define fail()
Definition: checkasm.h:196
AV_PIX_FMT_NV20
#define AV_PIX_FMT_NV20
Definition: pixfmt.h:583
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:1561
AV_STEREO3D_2D
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
Definition: stereo3d.h:52
X264Context::weightb
int weightb
Definition: libx264.c:88
GetBitContext
Definition: get_bits.h:108
X264Context::pic
x264_picture_t pic
Definition: libx264.c:68
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:689
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:488
FF_CMP_CHROMA
#define FF_CMP_CHROMA
Definition: avcodec.h:885
val
static double val(void *priv, double ch)
Definition: aeval.c:77
av_video_hint_rects
static av_always_inline AVVideoRect * av_video_hint_rects(const AVVideoHint *hints)
Definition: video_hint.h:67
AV_CODEC_CAP_ENCODER_FLUSH
#define AV_CODEC_CAP_ENCODER_FLUSH
This encoder can be flushed using avcodec_flush_buffers().
Definition: codec.h:151
X264Context::params
x264_param_t params
Definition: libx264.c:66
FF_CODEC_ENCODE_CB
#define FF_CODEC_ENCODE_CB(func)
Definition: codec_internal.h:353
X264Context::nal_hrd
int nal_hrd
Definition: libx264.c:105
AV_CODEC_FLAG_LOOP_FILTER
#define AV_CODEC_FLAG_LOOP_FILTER
loop filter.
Definition: avcodec.h:298
X264Context::bluray_compat
int bluray_compat
Definition: libx264.c:91
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:310
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:531
AVFormatContext::bit_rate
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
Definition: avformat.h:1406
preset
preset
Definition: vf_curves.c:47
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:645
AV_STEREO3D_FRAMESEQUENCE
@ AV_STEREO3D_FRAMESEQUENCE
Views are alternated temporally.
Definition: stereo3d.h:89
pkt
AVPacket * pkt
Definition: movenc.c:60
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
AVFrameSideData::size
size_t size
Definition: frame.h:268
av_cold
#define av_cold
Definition: attributes.h:90
pix_fmts_10bit
static enum AVPixelFormat pix_fmts_10bit[]
Definition: libx264.c:1455
AVRegionOfInterest
Structure describing a single Region Of Interest.
Definition: frame.h:336
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:528
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:1298
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:86
X264Context::b_pyramid
int b_pyramid
Definition: libx264.c:93
float
float
Definition: af_crystalizer.c:122
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:515
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:697
av_fast_realloc
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
Definition: mem.c:497
AV_STEREO3D_LINES
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
Definition: stereo3d.h:126
stereo3d.h
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
s
#define s(width, name)
Definition: cbs_vp9.c:198
AVCodecContext::global_quality
int global_quality
Global quality for codecs which cannot change it per frame.
Definition: avcodec.h:1217
AV_CEIL_RSHIFT
#define AV_CEIL_RSHIFT(a, b)
Definition: common.h:60
AVRegionOfInterest::bottom
int bottom
Definition: frame.h:352
AVFormatContext::flags
int flags
Flags modifying the (de)muxer behaviour.
Definition: avformat.h:1415
floor
static __device__ float floor(float a)
Definition: cuda_runtime.h:173
AVCodecContext::nb_decoded_side_data
int nb_decoded_side_data
Definition: avcodec.h:1925
X264Context::mixed_refs
int mixed_refs
Definition: libx264.c:94
errors
FFmpeg currently uses a custom build this text attempts to document some of its obscure features and options Makefile the full command issued by make and its output will be shown on the screen DBG Preprocess x86 external assembler files to a dbg asm file in the object which then gets compiled Helps in developing those assembler files DESTDIR Destination directory for the install useful to prepare packages or install FFmpeg in cross environments GEN Set to ‘1’ to generate the missing or mismatched references Makefile builds all the libraries and the executables fate Run the fate test note that you must have installed it fate list List all fate regression test targets fate list failing List the fate tests that failed the last time they were executed fate clear reports Remove the test reports from previous test libraries and programs examples Build all examples located in doc examples checkheaders Check headers dependencies alltools Build all tools in tools directory config Reconfigure the project with the current configuration tools target_dec_< decoder > _fuzzer Build fuzzer to fuzz the specified decoder tools target_bsf_< filter > _fuzzer Build fuzzer to fuzz the specified bitstream filter Useful standard make this is useful to reduce unneeded rebuilding when changing but note that you must force rebuilds of files that actually need it by hand then make j< num > Rebuild with multiple jobs at the same time Faster on multi processor systems make k Continue build in case of errors
Definition: build_system.txt:71
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demux_decode.c:41
AVDictionaryEntry::key
char * key
Definition: dict.h:91
AV_CODEC_EXPORT_DATA_PRFT
#define AV_CODEC_EXPORT_DATA_PRFT
Export encoder Producer Reference Time through packet side data.
Definition: avcodec.h:390
pix_fmts_all
static enum AVPixelFormat pix_fmts_all[]
Definition: libx264.c:1462
AV_CODEC_CAP_OTHER_THREADS
#define AV_CODEC_CAP_OTHER_THREADS
Codec supports multithreading through a method other than slice- or frame-level multithreading.
Definition: codec.h:109
AV_PROFILE_H264_HIGH_10
#define AV_PROFILE_H264_HIGH_10
Definition: defs.h:115
info
MIPS optimizations info
Definition: mips.txt:2
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
Definition: codec.h:144
AVCodecContext::thread_type
int thread_type
Which multithreading methods to use.
Definition: avcodec.h:1571
AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:525
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
ctx
AVFormatContext * ctx
Definition: movenc.c:49
SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35
@ SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35
Definition: sei.h:34
av_rescale_q
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
COMPUTE_MBINFO
#define COMPUTE_MBINFO(mbinfo_filler_, mbinfo_marker_, compute_coords_fn_)
X264Context::weightp
int weightp
Definition: libx264.c:87
AVPixFmtDescriptor::log2_chroma_w
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
Definition: pixdesc.h:80
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:73
AVCodecContext::rc_max_rate
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:1270
AVPacket::opaque
void * opaque
for some private data of the user
Definition: packet.h:560
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:622
AVCPBProperties
This structure describes the bitrate properties of an encoded bitstream.
Definition: defs.h:279
X264Opaque
Definition: libx264.c:56
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:79
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:326
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:87
AV_PROFILE_H264_HIGH_422
#define AV_PROFILE_H264_HIGH_422
Definition: defs.h:118
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:441
X264Context::noise_reduction
int noise_reduction
Definition: libx264.c:114
setup_roi
static int setup_roi(AVCodecContext *ctx, x264_picture_t *pic, const AVFrame *frame, const uint8_t *data, size_t size)
Definition: libx264.c:393
AVStereo3D::flags
int flags
Additional information about the frame packing.
Definition: stereo3d.h:212
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:508
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1255
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
fabs
static __device__ float fabs(float a)
Definition: cuda_runtime.h:182
pix_fmts_9bit
static enum AVPixelFormat pix_fmts_9bit[]
Definition: libx264.c:1450
NULL
#define NULL
Definition: coverity.c:32
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:669
CODEC_PIXFMTS_ARRAY
#define CODEC_PIXFMTS_ARRAY(array)
Definition: codec_internal.h:387
av_buffer_unref
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition: buffer.c:139
X264Context::crf_max
float crf_max
Definition: libx264.c:80
AVPixFmtDescriptor::nb_components
uint8_t nb_components
The number of components each pixel has, (1-4)
Definition: pixdesc.h:71
X264Context::forced_idr
int forced_idr
Definition: libx264.c:108
tmp
static uint8_t tmp[20]
Definition: aes_ctr.c:47
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
X264Context::aud
int aud
Definition: libx264.c:97
AVCodecContext::qblur
float qblur
amount of qscale smoothing over time (0.0-1.0)
Definition: avcodec.h:1227
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:85
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:481
sei.h
AV_OPT_TYPE_DICT
@ AV_OPT_TYPE_DICT
Underlying C type is AVDictionary*.
Definition: opt.h:290
AVRegionOfInterest::self_size
uint32_t self_size
Must be set to the size of this data structure (that is, sizeof(AVRegionOfInterest)).
Definition: frame.h:341
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:240
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:278
X264Context::direct_pred
int direct_pred
Definition: libx264.c:102
X264Context::profile_opt
char * profile_opt
Definition: libx264.c:74
options
Definition: swscale.c:43
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition: frame.h:120
double
double
Definition: af_crystalizer.c:132
AV_PIX_FMT_BGR0
@ AV_PIX_FMT_BGR0
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
Definition: pixfmt.h:265
time.h
AVCodecContext::me_cmp
int me_cmp
motion estimation comparison function
Definition: avcodec.h:850
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:529
AVCodecContext::trellis
int trellis
trellis RD quantization
Definition: avcodec.h:1305
av_clipf
av_clipf
Definition: af_crystalizer.c:122
AV_PIX_FMT_GRAY8
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition: pixfmt.h:81
sei
static int FUNC() sei(CodedBitstreamContext *ctx, RWContext *rw, H264RawSEI *current)
Definition: cbs_h264_syntax_template.c:858
AVCodecContext::level
int level
Encoding level descriptor.
Definition: avcodec.h:1628
free_picture
static void free_picture(x264_picture_t *pic)
Definition: libx264.c:293
stats
static void stats(AVPacket *const *in, int n_in, unsigned *_max, unsigned *_sum)
Definition: vp9_superframe.c:34
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:716
X264Context::preset
char * preset
Definition: libx264.c:71
AV_FRAME_DATA_SEI_UNREGISTERED
@ AV_FRAME_DATA_SEI_UNREGISTERED
User data unregistered metadata associated with a video frame.
Definition: frame.h:178
dct8x8
static void dct8x8(int16_t *coef, int bit_depth)
Definition: h264dsp.c:165
X264Context::x264_params
AVDictionary * x264_params
Definition: libx264.c:117
PARSE_X264_OPT
#define PARSE_X264_OPT(name, var)
Definition: libx264.c:982
AVCodecContext::qcompress
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
Definition: avcodec.h:1226
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:535
aud
static int FUNC() aud(CodedBitstreamContext *ctx, RWContext *rw, H264RawAUD *current)
Definition: cbs_h264_syntax_template.c:875
mbinfo_compute_constant_coords
static void av_always_inline mbinfo_compute_constant_coords(const AVVideoRect *rect, int *min_x, int *max_x, int *min_y, int *max_y)
Definition: libx264.c:337
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
AV_PIX_FMT_RGB24
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:75
pix_fmts_8bit
static enum AVPixelFormat pix_fmts_8bit[]
Definition: libx264.c:1436
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AV_STEREO3D_CHECKERBOARD
@ AV_STEREO3D_CHECKERBOARD
Views are packed in a checkerboard-like structure per pixel.
Definition: stereo3d.h:101
AVCodecContext::gop_size
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:1005
codec_internal.h
X264_close
static av_cold int X264_close(AVCodecContext *avctx)
Definition: libx264.c:760
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
av_err2str
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: error.h:122
encode_nals
static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, const x264_nal_t *nals, int nnal)
Definition: libx264.c:152
set_extradata
static int set_extradata(AVCodecContext *avctx)
Definition: libx264.c:946
MB_CEIL
#define MB_CEIL(x)
Definition: libx264.c:54
size
int size
Definition: twinvq_data.h:10344
AVCodecContext::me_range
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
Definition: avcodec.h:929
AVFrameSideData::data
uint8_t * data
Definition: frame.h:267
FF_THREAD_SLICE
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
Definition: avcodec.h:1573
AVCHROMA_LOC_UNSPECIFIED
@ AVCHROMA_LOC_UNSPECIFIED
Definition: pixfmt.h:770
AVFrame::format
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
Definition: frame.h:497
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:198
buffer.h
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:534
AV_CODEC_FLAG_PASS2
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition: avcodec.h:294
X264Context::motion_est
int motion_est
Definition: libx264.c:107
opaque_uninit
static void opaque_uninit(X264Opaque *o)
Definition: libx264.c:146
AVERROR_EXTERNAL
#define AVERROR_EXTERNAL
Generic error in an external library.
Definition: error.h:59
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:541
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:396
X264Context::b_bias
int b_bias
Definition: libx264.c:92
AVCodecInternal
Definition: internal.h:49
AVCPBProperties::avg_bitrate
int64_t avg_bitrate
Average bitrate of the stream, in bits per second.
Definition: defs.h:294
AVRegionOfInterest::right
int right
Definition: frame.h:354
rect::x
int x
Definition: f_ebur128.c:78
AV_STEREO3D_FLAG_INVERT
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition: stereo3d.h:194
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:221
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:778
AV_OPT_TYPE_FLOAT
@ AV_OPT_TYPE_FLOAT
Underlying C type is float.
Definition: opt.h:271
VE
#define VE
Definition: libx264.c:1494
X264Context::sei
uint8_t * sei
Definition: libx264.c:69
AVRegionOfInterest::left
int left
Definition: frame.h:353
av_assert2
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:68
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: frame.h:137
X264Context::aq_mode
int aq_mode
Definition: libx264.c:82
X264Opaque::frame_opaque_ref
AVBufferRef * frame_opaque_ref
Definition: libx264.c:61
AV_CODEC_FLAG_RECON_FRAME
#define AV_CODEC_FLAG_RECON_FRAME
Request the encoder to output reconstructed frames, i.e. frames that would be produced by decoding th...
Definition: avcodec.h:244
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:528
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:514
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:351
internal.h
AV_STEREO3D_TOPBOTTOM
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
Definition: stereo3d.h:76
AVCPBProperties::max_bitrate
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition: defs.h:284
X264Context::a53_cc
int a53_cc
Definition: libx264.c:110
setup_mb_info
static int setup_mb_info(AVCodecContext *ctx, x264_picture_t *pic, const AVFrame *frame, const AVVideoHint *info)
Definition: libx264.c:349
x264_defaults
static const FFCodecDefault x264_defaults[]
Definition: libx264.c:1576
av_always_inline
#define av_always_inline
Definition: attributes.h:49
AV_FRAME_DATA_STEREO3D
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition: frame.h:64
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
AV_STRINGIFY
#define AV_STRINGIFY(s)
Definition: macros.h:66
av_frame_unref
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:494
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:256
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
av_buffer_replace
int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src)
Ensure dst refers to the same data as src.
Definition: buffer.c:233
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:676
AV_PIX_FMT_NV21
@ AV_PIX_FMT_NV21
as above, but U and V bytes are swapped
Definition: pixfmt.h:97
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
csp_to_pixfmt
static enum AVPixelFormat csp_to_pixfmt(int csp)
Definition: libx264.c:303
options
static const AVOption options[]
Definition: libx264.c:1495
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:676
AVCodecContext::height
int height
Definition: avcodec.h:592
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:631
AV_FRAME_FLAG_INTERLACED
#define AV_FRAME_FLAG_INTERLACED
A flag to mark frames whose content is interlaced.
Definition: frame.h:633
AVCOL_RANGE_MPEG
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition: pixfmt.h:733
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:527
avcodec.h
X264Context::profile
const char * profile
Definition: libx264.c:73
X264Context::mbtree
int mbtree
Definition: libx264.c:98
AV_CODEC_FLAG_CLOSED_GOP
#define AV_CODEC_FLAG_CLOSED_GOP
Definition: avcodec.h:332
X264Context::mb_info
int mb_info
Definition: libx264.c:128
ret
ret
Definition: filter_design.txt:187
X264Context::reordered_opaque
X264Opaque * reordered_opaque
Definition: libx264.c:120
X264Opaque::frame_opaque
void * frame_opaque
Definition: libx264.c:60
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:96
X264Context::crf
float crf
Definition: libx264.c:79
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:81
X264Context::level
char * level
Definition: libx264.c:75
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
AVCPBProperties::buffer_size
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition: defs.h:300
AV_STEREO3D_COLUMNS
@ AV_STEREO3D_COLUMNS
Views are packed per column.
Definition: stereo3d.h:138
atsc_a53.h
AVStereo3D::type
enum AVStereo3DType type
How views are packed within the video.
Definition: stereo3d.h:207
AV_PROFILE_H264_BASELINE
#define AV_PROFILE_H264_BASELINE
Definition: defs.h:110
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
X264Context::wpredp
char * wpredp
Definition: libx264.c:77
AV_FRAME_DATA_VIDEO_HINT
@ AV_FRAME_DATA_VIDEO_HINT
Provide encoder-specific hinting information about changed/unchanged portions of a frame.
Definition: frame.h:230
ff_libx262_encoder
const FFCodec ff_libx262_encoder
X264Context::next_reordered_opaque
int next_reordered_opaque
Definition: libx264.c:119
X264Opaque::wallclock
int64_t wallclock
Definition: libx264.c:57
AVCodecInternal::recon_frame
AVFrame * recon_frame
When the AV_CODEC_FLAG_RECON_FRAME flag is used.
Definition: internal.h:114
X264Context::scenechange_threshold
int scenechange_threshold
Definition: libx264.c:113
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
X264Context::x264opts
char * x264opts
Definition: libx264.c:78
AVCodecContext::max_qdiff
int max_qdiff
maximum quantizer difference between frames
Definition: avcodec.h:1248
AVCodecContext
main external API structure.
Definition: avcodec.h:431
AVFrame::height
int height
Definition: frame.h:482
reconfig_encoder
static void reconfig_encoder(AVCodecContext *ctx, const AVFrame *frame)
Definition: libx264.c:195
get_ue_golomb_31
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:120
AV_PROFILE_H264_HIGH
#define AV_PROFILE_H264_HIGH
Definition: defs.h:114
X264Context::coder
int coder
Definition: libx264.c:109
X264Context::aq_strength
float aq_strength
Definition: libx264.c:83
MB_FLOOR
#define MB_FLOOR(x)
Definition: libx264.c:53
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:280
ff_get_encode_buffer
int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags)
Get a buffer for a packet.
Definition: encode.c:106
SEI_TYPE_USER_DATA_UNREGISTERED
@ SEI_TYPE_USER_DATA_UNREGISTERED
Definition: sei.h:35
AVCodecContext::qmin
int qmin
minimum quantizer
Definition: avcodec.h:1234
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:259
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1618
MB_SIZE
#define MB_SIZE
Definition: libx264.c:51
X264Context::rc_lookahead
int rc_lookahead
Definition: libx264.c:86
AVFrameSideData::type
enum AVFrameSideDataType type
Definition: frame.h:266
AVPixFmtDescriptor::comp
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
Definition: pixdesc.h:105
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:76
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
ff_side_data_set_prft
int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp)
Definition: packet.c:635
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:78
OFFSET
#define OFFSET(x)
Definition: libx264.c:1493
av_gettime
int64_t av_gettime(void)
Get the current time in microseconds.
Definition: time.c:39
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:279
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
X264Context::dct8x8
int dct8x8
Definition: libx264.c:95
AV_PROFILE_H264_HIGH_444
#define AV_PROFILE_H264_HIGH_444
Definition: defs.h:121
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:77
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:769
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
X264Context::psy_rd
char * psy_rd
Definition: libx264.c:84
packet_internal.h
FF_CODEC_CAP_AUTO_THREADS
#define FF_CODEC_CAP_AUTO_THREADS
Codec handles avctx->thread_count == 0 (auto) internally.
Definition: codec_internal.h:72
mastering_display_metadata.h
setup_frame
static int setup_frame(AVCodecContext *ctx, const AVFrame *frame, x264_picture_t **ppic)
Definition: libx264.c:466
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:265
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
parse_opts
static int parse_opts(AVCodecContext *avctx, const char *opt, const char *param)
Definition: libx264.c:782
X264Context::deblock
char * deblock
Definition: libx264.c:99
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVDictionaryEntry
Definition: dict.h:90
scale
static void scale(int *out, const int *in, const int w, const int h, const int shift)
Definition: intra.c:273
AVCodecContext::slices
int slices
Number of slices.
Definition: avcodec.h:1021
AVContentLightMetadata::MaxFALL
unsigned MaxFALL
Max average light level per frame (cd/m^2).
Definition: mastering_display_metadata.h:116
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:458
AVPacket
This structure stores compressed data.
Definition: packet.h:512
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition: opt.h:327
handle_mdcv
static void handle_mdcv(struct EbSvtAv1MasteringDisplayInfo *dst, const AVMasteringDisplayMetadata *mdcv)
Definition: libsvtav1.c:145
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
X264Context::ssim
int ssim
Definition: libx264.c:89
av_frame_side_data_get
static const AVFrameSideData * av_frame_side_data_get(AVFrameSideData *const *sd, const int nb_sd, enum AVFrameSideDataType type)
Wrapper around av_frame_side_data_get_c() to workaround the limitation that for any type T the conver...
Definition: frame.h:1127
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:592
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:165
X264Context::psy
int psy
Definition: libx264.c:85
AVFrame::linesize
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
Definition: frame.h:455
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
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: packet.c:610
ff_encode_add_cpb_side_data
AVCPBProperties * ff_encode_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
Definition: encode.c:880
AVStereo3D
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition: stereo3d.h:203
AVDictionaryEntry::value
char * value
Definition: dict.h:92
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
Definition: opt.h:276
FF_QP2LAMBDA
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:226
X264Context::enc
x264_t * enc
Definition: libx264.c:67
AV_CODEC_ID_MPEG2VIDEO
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition: codec_id.h:54
X264_frame
static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: libx264.c:609
AVRegionOfInterest::qoffset
AVRational qoffset
Quantisation offset.
Definition: frame.h:378
X264Context::b_frame_strategy
int b_frame_strategy
Definition: libx264.c:111
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition: opt.h:299
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1292
mb_info
Definition: cinepakenc.c:87
convert_pix_fmt
static int convert_pix_fmt(enum AVPixelFormat pix_fmt)
Definition: libx264.c:808
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:616
av_dict_iterate
const AVDictionaryEntry * av_dict_iterate(const AVDictionary *m, const AVDictionaryEntry *prev)
Iterate over a dictionary.
Definition: dict.c:42
AVPixFmtDescriptor::log2_chroma_h
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Definition: pixdesc.h:89
src
#define src
Definition: vp8dsp.c:248
handle_side_data
static void handle_side_data(AVCodecContext *avctx, x264_param_t *params)
Definition: libx264.c:1036
X264Opaque::duration
int64_t duration
Definition: libx264.c:58
AV_CODEC_FLAG_PASS1
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition: avcodec.h:290
X264Context::partitions
char * partitions
Definition: libx264.c:101