FFmpeg
libx265.c
Go to the documentation of this file.
1 /*
2  * libx265 encoder
3  *
4  * Copyright (c) 2013-2014 Derek Buitenhuis
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #if defined(_MSC_VER)
24 #define X265_API_IMPORTS 1
25 #endif
26 
27 #include <x265.h>
28 #include <float.h>
29 
30 #include "libavutil/avassert.h"
31 #include "libavutil/buffer.h"
32 #include "libavutil/internal.h"
34 #include "libavutil/mem.h"
35 #include "libavutil/opt.h"
36 #include "libavutil/pixdesc.h"
37 #include "avcodec.h"
38 #include "codec_internal.h"
39 #include "dovi_rpu.h"
40 #include "encode.h"
41 #include "atsc_a53.h"
42 #include "sei.h"
43 
44 #if defined(X265_ENABLE_ALPHA) && MAX_LAYERS > 2
45 #define FF_X265_MAX_LAYERS MAX_LAYERS
46 #elif X265_BUILD >= 210
47 #define FF_X265_MAX_LAYERS 2
48 #else
49 #define FF_X265_MAX_LAYERS 1
50 #endif
51 
52 typedef struct ReorderedData {
54 
55  void *frame_opaque;
57 
58  int in_use;
60 
61 typedef struct libx265Context {
62  const AVClass *class;
63 
64  x265_encoder *encoder;
65  x265_param *params;
66  const x265_api *api;
67 
68  float crf;
69  int cqp;
71  char *preset;
72  char *tune;
73  char *profile;
75 
76  void *sei_data;
78  int udu_sei;
79  int a53_cc;
80 
82  int nb_rd;
83 
84  /**
85  * If the encoder does not support ROI then warn the first time we
86  * encounter a frame with ROI side data.
87  */
89 
92 
93 static int is_keyframe(NalUnitType naltype)
94 {
95  switch (naltype) {
96  case NAL_UNIT_CODED_SLICE_BLA_W_LP:
97  case NAL_UNIT_CODED_SLICE_BLA_W_RADL:
98  case NAL_UNIT_CODED_SLICE_BLA_N_LP:
99  case NAL_UNIT_CODED_SLICE_IDR_W_RADL:
100  case NAL_UNIT_CODED_SLICE_IDR_N_LP:
101  case NAL_UNIT_CODED_SLICE_CRA:
102  return 1;
103  default:
104  return 0;
105  }
106 }
107 
109 {
110  const int add = 16;
111 
113  int idx;
114 
115  for (int i = 0; i < ctx->nb_rd; i++)
116  if (!ctx->rd[i].in_use) {
117  ctx->rd[i].in_use = 1;
118  return i;
119  }
120 
121  tmp = av_realloc_array(ctx->rd, ctx->nb_rd + add, sizeof(*ctx->rd));
122  if (!tmp)
123  return AVERROR(ENOMEM);
124  memset(tmp + ctx->nb_rd, 0, sizeof(*tmp) * add);
125 
126  ctx->rd = tmp;
127  ctx->nb_rd += add;
128 
129  idx = ctx->nb_rd - add;
130  ctx->rd[idx].in_use = 1;
131 
132  return idx;
133 }
134 
135 static void rd_release(libx265Context *ctx, int idx)
136 {
137  av_assert0(idx >= 0 && idx < ctx->nb_rd);
138  av_buffer_unref(&ctx->rd[idx].frame_opaque_ref);
139  memset(&ctx->rd[idx], 0, sizeof(ctx->rd[idx]));
140 }
141 
143 {
144  libx265Context *ctx = avctx->priv_data;
145 
146  ctx->api->param_free(ctx->params);
147  av_freep(&ctx->sei_data);
148 
149  for (int i = 0; i < ctx->nb_rd; i++)
150  rd_release(ctx, i);
151  av_freep(&ctx->rd);
152 
153  if (ctx->encoder)
154  ctx->api->encoder_close(ctx->encoder);
155 
156  ff_dovi_ctx_unref(&ctx->dovi);
157 
158  return 0;
159 }
160 
162  const char *key, float value)
163 {
164  libx265Context *ctx = avctx->priv_data;
165  char buf[256];
166 
167  snprintf(buf, sizeof(buf), "%2.2f", value);
168  if (ctx->api->param_parse(ctx->params, key, buf) == X265_PARAM_BAD_VALUE) {
169  av_log(avctx, AV_LOG_ERROR, "Invalid value %2.2f for param \"%s\".\n", value, key);
170  return AVERROR(EINVAL);
171  }
172 
173  return 0;
174 }
175 
177  const char *key, int value)
178 {
179  libx265Context *ctx = avctx->priv_data;
180  char buf[256];
181 
182  snprintf(buf, sizeof(buf), "%d", value);
183  if (ctx->api->param_parse(ctx->params, key, buf) == X265_PARAM_BAD_VALUE) {
184  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for param \"%s\".\n", value, key);
185  return AVERROR(EINVAL);
186  }
187 
188  return 0;
189 }
190 
191 static int handle_mdcv(void *logctx, const x265_api *api,
192  x265_param *params,
193  const AVMasteringDisplayMetadata *mdcv)
194 {
195  char buf[10 /* # of PRId64s */ * 20 /* max strlen for %PRId64 */ + sizeof("G(,)B(,)R(,)WP(,)L(,)")];
196 
197  // G(%hu,%hu)B(%hu,%hu)R(%hu,%hu)WP(%hu,%hu)L(%u,%u)
198  snprintf(buf, sizeof(buf),
199  "G(%"PRId64",%"PRId64")B(%"PRId64",%"PRId64")R(%"PRId64",%"PRId64")"
200  "WP(%"PRId64",%"PRId64")L(%"PRId64",%"PRId64")",
201  av_rescale_q(1, mdcv->display_primaries[1][0], (AVRational){ 1, 50000 }),
202  av_rescale_q(1, mdcv->display_primaries[1][1], (AVRational){ 1, 50000 }),
203  av_rescale_q(1, mdcv->display_primaries[2][0], (AVRational){ 1, 50000 }),
204  av_rescale_q(1, mdcv->display_primaries[2][1], (AVRational){ 1, 50000 }),
205  av_rescale_q(1, mdcv->display_primaries[0][0], (AVRational){ 1, 50000 }),
206  av_rescale_q(1, mdcv->display_primaries[0][1], (AVRational){ 1, 50000 }),
207  av_rescale_q(1, mdcv->white_point[0], (AVRational){ 1, 50000 }),
208  av_rescale_q(1, mdcv->white_point[1], (AVRational){ 1, 50000 }),
209  av_rescale_q(1, mdcv->max_luminance, (AVRational){ 1, 10000 }),
210  av_rescale_q(1, mdcv->min_luminance, (AVRational){ 1, 10000 }));
211 
212  if (api->param_parse(params, "master-display", buf) ==
213  X265_PARAM_BAD_VALUE) {
214  av_log(logctx, AV_LOG_ERROR,
215  "Invalid value \"%s\" for param \"master-display\".\n",
216  buf);
217  return AVERROR(EINVAL);
218  }
219 
220  return 0;
221 }
222 
223 static int handle_side_data(AVCodecContext *avctx, const x265_api *api,
224  x265_param *params)
225 {
226  const AVFrameSideData *cll_sd =
229  const AVFrameSideData *mdcv_sd =
231  avctx->nb_decoded_side_data,
233 
234  if (cll_sd) {
235  const AVContentLightMetadata *cll =
236  (AVContentLightMetadata *)cll_sd->data;
237 
238  params->maxCLL = cll->MaxCLL;
239  params->maxFALL = cll->MaxFALL;
240  }
241 
242  if (mdcv_sd) {
243  int ret = handle_mdcv(
244  avctx, api, params,
245  (AVMasteringDisplayMetadata *)mdcv_sd->data);
246  if (ret < 0)
247  return ret;
248  }
249 
250  return 0;
251 }
252 
254 {
255  libx265Context *ctx = avctx->priv_data;
256  AVCPBProperties *cpb_props = NULL;
258  int ret;
259 
260  ctx->api = x265_api_get(desc->comp[0].depth);
261  if (!ctx->api)
262  ctx->api = x265_api_get(0);
263 
264  ctx->params = ctx->api->param_alloc();
265  if (!ctx->params) {
266  av_log(avctx, AV_LOG_ERROR, "Could not allocate x265 param structure.\n");
267  return AVERROR(ENOMEM);
268  }
269 
270  if (ctx->api->param_default_preset(ctx->params, ctx->preset, ctx->tune) < 0) {
271  int i;
272 
273  av_log(avctx, AV_LOG_ERROR, "Error setting preset/tune %s/%s.\n", ctx->preset, ctx->tune);
274  av_log(avctx, AV_LOG_INFO, "Possible presets:");
275  for (i = 0; x265_preset_names[i]; i++)
276  av_log(avctx, AV_LOG_INFO, " %s", x265_preset_names[i]);
277 
278  av_log(avctx, AV_LOG_INFO, "\n");
279  av_log(avctx, AV_LOG_INFO, "Possible tunes:");
280  for (i = 0; x265_tune_names[i]; i++)
281  av_log(avctx, AV_LOG_INFO, " %s", x265_tune_names[i]);
282 
283  av_log(avctx, AV_LOG_INFO, "\n");
284 
285  return AVERROR(EINVAL);
286  }
287 
288  ctx->params->frameNumThreads = avctx->thread_count;
289  if (avctx->framerate.num > 0 && avctx->framerate.den > 0) {
290  ctx->params->fpsNum = avctx->framerate.num;
291  ctx->params->fpsDenom = avctx->framerate.den;
292  } else {
293  ctx->params->fpsNum = avctx->time_base.den;
294  ctx->params->fpsDenom = avctx->time_base.num;
295  }
296  ctx->params->sourceWidth = avctx->width;
297  ctx->params->sourceHeight = avctx->height;
298  ctx->params->bEnablePsnr = !!(avctx->flags & AV_CODEC_FLAG_PSNR);
299  ctx->params->bOpenGOP = !(avctx->flags & AV_CODEC_FLAG_CLOSED_GOP);
300 
301  /* Tune the CTU size based on input resolution. */
302  if (ctx->params->sourceWidth < 64 || ctx->params->sourceHeight < 64)
303  ctx->params->maxCUSize = 32;
304  if (ctx->params->sourceWidth < 32 || ctx->params->sourceHeight < 32)
305  ctx->params->maxCUSize = 16;
306  if (ctx->params->sourceWidth < 16 || ctx->params->sourceHeight < 16) {
307  av_log(avctx, AV_LOG_ERROR, "Image size is too small (%dx%d).\n",
308  ctx->params->sourceWidth, ctx->params->sourceHeight);
309  return AVERROR(EINVAL);
310  }
311 
312 
313  ctx->params->vui.bEnableVideoSignalTypePresentFlag = 1;
314 
315  if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED)
316  ctx->params->vui.bEnableVideoFullRangeFlag =
317  avctx->color_range == AVCOL_RANGE_JPEG;
318  else
319  ctx->params->vui.bEnableVideoFullRangeFlag =
320  (desc->flags & AV_PIX_FMT_FLAG_RGB) ||
321  avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
322  avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
323  avctx->pix_fmt == AV_PIX_FMT_YUVJ444P;
324 
326  avctx->color_trc != AVCOL_TRC_UNSPECIFIED ||
327  avctx->colorspace != AVCOL_SPC_UNSPECIFIED) {
328 
329  ctx->params->vui.bEnableColorDescriptionPresentFlag = 1;
330 
331  // x265 validates the parameters internally
332  ctx->params->vui.colorPrimaries = avctx->color_primaries;
333  ctx->params->vui.transferCharacteristics = avctx->color_trc;
334 #if X265_BUILD >= 159
335  if (avctx->color_trc == AVCOL_TRC_ARIB_STD_B67)
336  ctx->params->preferredTransferCharacteristics = ctx->params->vui.transferCharacteristics;
337 #endif
338  ctx->params->vui.matrixCoeffs = avctx->colorspace;
339  }
340 
341  // chroma sample location values are to be ignored in case of non-4:2:0
342  // according to the specification, so we only write them out in case of
343  // 4:2:0 (log2_chroma_{w,h} == 1).
344  ctx->params->vui.bEnableChromaLocInfoPresentFlag =
346  desc->log2_chroma_w == 1 && desc->log2_chroma_h == 1;
347 
348  if (ctx->params->vui.bEnableChromaLocInfoPresentFlag) {
349  ctx->params->vui.chromaSampleLocTypeTopField =
350  ctx->params->vui.chromaSampleLocTypeBottomField =
351  avctx->chroma_sample_location - 1;
352  }
353 
354  if (avctx->sample_aspect_ratio.num > 0 && avctx->sample_aspect_ratio.den > 0) {
355  char sar[12];
356  int sar_num, sar_den;
357 
358  av_reduce(&sar_num, &sar_den,
359  avctx->sample_aspect_ratio.num,
360  avctx->sample_aspect_ratio.den, 65535);
361  snprintf(sar, sizeof(sar), "%d:%d", sar_num, sar_den);
362  if (ctx->api->param_parse(ctx->params, "sar", sar) == X265_PARAM_BAD_VALUE) {
363  av_log(avctx, AV_LOG_ERROR, "Invalid SAR: %d:%d.\n", sar_num, sar_den);
364  return AVERROR_INVALIDDATA;
365  }
366  }
367 
368  switch (desc->log2_chroma_w) {
369  // 4:4:4, RGB. gray
370  case 0:
371  // gray
372  if (desc->nb_components == 1) {
373  if (ctx->api->api_build_number < 85) {
374  av_log(avctx, AV_LOG_ERROR,
375  "libx265 version is %d, must be at least 85 for gray encoding.\n",
376  ctx->api->api_build_number);
377  return AVERROR_INVALIDDATA;
378  }
379  ctx->params->internalCsp = X265_CSP_I400;
380  break;
381  }
382 
383  // set identity matrix for RGB
384  if (desc->flags & AV_PIX_FMT_FLAG_RGB) {
385  ctx->params->vui.matrixCoeffs = AVCOL_SPC_RGB;
386  ctx->params->vui.bEnableVideoSignalTypePresentFlag = 1;
387  ctx->params->vui.bEnableColorDescriptionPresentFlag = 1;
388  }
389 
390  ctx->params->internalCsp = X265_CSP_I444;
391  break;
392  // 4:2:0, 4:2:2
393  case 1:
394  ctx->params->internalCsp = desc->log2_chroma_h == 1 ?
395  X265_CSP_I420 : X265_CSP_I422;
396  break;
397  default:
398  av_log(avctx, AV_LOG_ERROR,
399  "Pixel format '%s' cannot be mapped to a libx265 CSP!\n",
400  desc->name);
401  return AVERROR_BUG;
402  }
403 
404  ret = handle_side_data(avctx, ctx->api, ctx->params);
405  if (ret < 0) {
406  av_log(avctx, AV_LOG_ERROR, "Failed handling side data! (%s)\n",
407  av_err2str(ret));
408  return ret;
409  }
410 
411  if (ctx->crf >= 0) {
412  char crf[6];
413 
414  snprintf(crf, sizeof(crf), "%2.2f", ctx->crf);
415  if (ctx->api->param_parse(ctx->params, "crf", crf) == X265_PARAM_BAD_VALUE) {
416  av_log(avctx, AV_LOG_ERROR, "Invalid crf: %2.2f.\n", ctx->crf);
417  return AVERROR(EINVAL);
418  }
419  } else if (avctx->bit_rate > 0) {
420  ctx->params->rc.bitrate = avctx->bit_rate / 1000;
421  ctx->params->rc.rateControlMode = X265_RC_ABR;
422  } else if (ctx->cqp >= 0) {
423  ret = libx265_param_parse_int(avctx, "qp", ctx->cqp);
424  if (ret < 0)
425  return ret;
426  }
427 
428  if (avctx->qmin >= 0) {
429  ret = libx265_param_parse_int(avctx, "qpmin", avctx->qmin);
430  if (ret < 0)
431  return ret;
432  }
433  if (avctx->qmax >= 0) {
434  ret = libx265_param_parse_int(avctx, "qpmax", avctx->qmax);
435  if (ret < 0)
436  return ret;
437  }
438  if (avctx->max_qdiff >= 0) {
439  ret = libx265_param_parse_int(avctx, "qpstep", avctx->max_qdiff);
440  if (ret < 0)
441  return ret;
442  }
443  if (avctx->qblur >= 0) {
444  ret = libx265_param_parse_float(avctx, "qblur", avctx->qblur);
445  if (ret < 0)
446  return ret;
447  }
448  if (avctx->qcompress >= 0) {
449  ret = libx265_param_parse_float(avctx, "qcomp", avctx->qcompress);
450  if (ret < 0)
451  return ret;
452  }
453  if (avctx->i_quant_factor >= 0) {
454  ret = libx265_param_parse_float(avctx, "ipratio", avctx->i_quant_factor);
455  if (ret < 0)
456  return ret;
457  }
458  if (avctx->b_quant_factor >= 0) {
459  ret = libx265_param_parse_float(avctx, "pbratio", avctx->b_quant_factor);
460  if (ret < 0)
461  return ret;
462  }
463 
464  ctx->params->rc.vbvBufferSize = avctx->rc_buffer_size / 1000;
465  ctx->params->rc.vbvMaxBitrate = avctx->rc_max_rate / 1000;
466 
467  cpb_props = ff_encode_add_cpb_side_data(avctx);
468  if (!cpb_props)
469  return AVERROR(ENOMEM);
470  cpb_props->buffer_size = ctx->params->rc.vbvBufferSize * 1000;
471  cpb_props->max_bitrate = ctx->params->rc.vbvMaxBitrate * 1000LL;
472  cpb_props->avg_bitrate = ctx->params->rc.bitrate * 1000LL;
473 
474  if (!(avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER))
475  ctx->params->bRepeatHeaders = 1;
476 
477  if (avctx->gop_size >= 0) {
478  ret = libx265_param_parse_int(avctx, "keyint", avctx->gop_size);
479  if (ret < 0)
480  return ret;
481  }
482  if (avctx->keyint_min > 0) {
483  ret = libx265_param_parse_int(avctx, "min-keyint", avctx->keyint_min);
484  if (ret < 0)
485  return ret;
486  }
487  if (avctx->max_b_frames >= 0) {
488  ret = libx265_param_parse_int(avctx, "bframes", avctx->max_b_frames);
489  if (ret < 0)
490  return ret;
491  }
492  if (avctx->refs >= 0) {
493  ret = libx265_param_parse_int(avctx, "ref", avctx->refs);
494  if (ret < 0)
495  return ret;
496  }
497 
498  {
499  const AVDictionaryEntry *en = NULL;
500  while ((en = av_dict_iterate(ctx->x265_opts, en))) {
501  int parse_ret;
502 
503  // ignore forced alpha option. The pixel format is all we need.
504  if (!strncmp(en->key, "alpha", 5)) {
505  if (desc->nb_components == 4) {
506  av_log(avctx, AV_LOG_WARNING,
507  "Ignoring redundant \"alpha\" option.\n");
508  continue;
509  }
510  av_log(avctx, AV_LOG_ERROR,
511  "Alpha encoding was requested through an unsupported "
512  "option when no alpha plane is present\n");
513  return AVERROR(EINVAL);
514  }
515 
516  parse_ret = ctx->api->param_parse(ctx->params, en->key, en->value);
517  switch (parse_ret) {
518  case X265_PARAM_BAD_NAME:
519  av_log(avctx, AV_LOG_WARNING,
520  "Unknown option: %s.\n", en->key);
521  break;
522  case X265_PARAM_BAD_VALUE:
523  av_log(avctx, AV_LOG_WARNING,
524  "Invalid value for %s: %s.\n", en->key, en->value);
525  break;
526  default:
527  break;
528  }
529  }
530  }
531 
532  if (ctx->params->rc.vbvBufferSize && avctx->rc_initial_buffer_occupancy > 1000 &&
533  ctx->params->rc.vbvBufferInit == 0.9) {
534  ctx->params->rc.vbvBufferInit = (float)avctx->rc_initial_buffer_occupancy / 1000;
535  }
536 
537  if (ctx->profile) {
538  if (ctx->api->param_apply_profile(ctx->params, ctx->profile) < 0) {
539  int i;
540  av_log(avctx, AV_LOG_ERROR, "Invalid or incompatible profile set: %s.\n", ctx->profile);
541  av_log(avctx, AV_LOG_INFO, "Possible profiles:");
542  for (i = 0; x265_profile_names[i]; i++)
543  av_log(avctx, AV_LOG_INFO, " %s", x265_profile_names[i]);
544  av_log(avctx, AV_LOG_INFO, "\n");
545  return AVERROR(EINVAL);
546  }
547  }
548 
549 #if X265_BUILD >= 167
550  ctx->dovi.logctx = avctx;
551  if ((ret = ff_dovi_configure(&ctx->dovi, avctx)) < 0)
552  return ret;
553  ctx->params->dolbyProfile = ctx->dovi.cfg.dv_profile * 10 +
554  ctx->dovi.cfg.dv_bl_signal_compatibility_id;
555 #endif
556 
557 #if X265_BUILD >= 210 && FF_X265_MAX_LAYERS > 1
558  if (desc->flags & AV_PIX_FMT_FLAG_ALPHA) {
559  if (ctx->api->param_parse(ctx->params, "alpha", "1") < 0) {
560  av_log(avctx, AV_LOG_ERROR, "Loaded libx265 does not support alpha layer encoding.\n");
561  return AVERROR(ENOTSUP);
562  }
563  }
564 #endif
565 
566  ctx->encoder = ctx->api->encoder_open(ctx->params);
567  if (!ctx->encoder) {
568  av_log(avctx, AV_LOG_ERROR, "Cannot open libx265 encoder.\n");
569  libx265_encode_close(avctx);
570  return AVERROR_INVALIDDATA;
571  }
572 
573  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
574  x265_nal *nal;
575  int nnal;
576 
577  avctx->extradata_size = ctx->api->encoder_headers(ctx->encoder, &nal, &nnal);
578  if (avctx->extradata_size <= 0) {
579  av_log(avctx, AV_LOG_ERROR, "Cannot encode headers.\n");
580  libx265_encode_close(avctx);
581  return AVERROR_INVALIDDATA;
582  }
583 
585  if (!avctx->extradata) {
586  av_log(avctx, AV_LOG_ERROR,
587  "Cannot allocate HEVC header of size %d.\n", avctx->extradata_size);
588  libx265_encode_close(avctx);
589  return AVERROR(ENOMEM);
590  }
591 
592  memcpy(avctx->extradata, nal[0].payload, avctx->extradata_size);
593  memset(avctx->extradata + avctx->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
594  }
595 
596  return 0;
597 }
598 
599 static av_cold int libx265_encode_set_roi(libx265Context *ctx, const AVFrame *frame, x265_picture* pic)
600 {
602  if (sd) {
603  if (ctx->params->rc.aqMode == X265_AQ_NONE) {
604  if (!ctx->roi_warned) {
605  ctx->roi_warned = 1;
606  av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
607  }
608  } else {
609  /* 8x8 block when qg-size is 8, 16*16 block otherwise. */
610  int mb_size = (ctx->params->rc.qgSize == 8) ? 8 : 16;
611  int mbx = (frame->width + mb_size - 1) / mb_size;
612  int mby = (frame->height + mb_size - 1) / mb_size;
613  int qp_range = 51 + 6 * (pic->bitDepth - 8);
614  int nb_rois;
615  const AVRegionOfInterest *roi;
616  uint32_t roi_size;
617  float *qoffsets; /* will be freed after encode is called. */
618 
619  roi = (const AVRegionOfInterest*)sd->data;
620  roi_size = roi->self_size;
621  if (!roi_size || sd->size % roi_size != 0) {
622  av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n");
623  return AVERROR(EINVAL);
624  }
625  nb_rois = sd->size / roi_size;
626 
627  qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets));
628  if (!qoffsets)
629  return AVERROR(ENOMEM);
630 
631  // This list must be iterated in reverse because the first
632  // region in the list applies when regions overlap.
633  for (int i = nb_rois - 1; i >= 0; i--) {
634  int startx, endx, starty, endy;
635  float qoffset;
636 
637  roi = (const AVRegionOfInterest*)(sd->data + roi_size * i);
638 
639  starty = FFMIN(mby, roi->top / mb_size);
640  endy = FFMIN(mby, (roi->bottom + mb_size - 1)/ mb_size);
641  startx = FFMIN(mbx, roi->left / mb_size);
642  endx = FFMIN(mbx, (roi->right + mb_size - 1)/ mb_size);
643 
644  if (roi->qoffset.den == 0) {
645  av_free(qoffsets);
646  av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n");
647  return AVERROR(EINVAL);
648  }
649  qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den;
650  qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range);
651 
652  for (int y = starty; y < endy; y++)
653  for (int x = startx; x < endx; x++)
654  qoffsets[x + y*mbx] = qoffset;
655  }
656 
657  pic->quantOffsets = qoffsets;
658  }
659  }
660  return 0;
661 }
662 
663 static void free_picture(libx265Context *ctx, x265_picture *pic)
664 {
665  x265_sei *sei = &pic->userSEI;
666  for (int i = 0; i < sei->numPayloads; i++)
667  av_free(sei->payloads[i].payload);
668 
669 #if X265_BUILD >= 167
670  av_free(pic->rpu.payload);
671 #endif
672 
673  if (pic->userData) {
674  int idx = (int)(intptr_t)pic->userData - 1;
675  rd_release(ctx, idx);
676  pic->userData = NULL;
677  }
678 
679  av_freep(&pic->quantOffsets);
680  sei->numPayloads = 0;
681 }
682 
684  const AVFrame *pic, int *got_packet)
685 {
687  libx265Context *ctx = avctx->priv_data;
688  x265_picture x265pic;
689  x265_picture x265pic_out[FF_X265_MAX_LAYERS] = { 0 };
690 #if (X265_BUILD >= 210) && (X265_BUILD < 213)
691  x265_picture *x265pic_lyrptr_out[FF_X265_MAX_LAYERS];
692 #endif
693  x265_nal *nal;
694  x265_sei *sei;
695  uint8_t *dst;
696  int payload = 0;
697  int nnal;
698  int ret;
699  int i;
700 
701  ctx->api->picture_init(ctx->params, &x265pic);
702 
703  sei = &x265pic.userSEI;
704  sei->numPayloads = 0;
705 
706  if (pic) {
707  AVFrameSideData *sd;
708  ReorderedData *rd;
709  int rd_idx;
710 
711  for (i = 0; i < desc->nb_components; i++) {
712  x265pic.planes[i] = pic->data[i];
713  x265pic.stride[i] = pic->linesize[i];
714  }
715 
716  x265pic.pts = pic->pts;
717  x265pic.bitDepth = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth;
718 
719  x265pic.sliceType = pic->pict_type == AV_PICTURE_TYPE_I ?
720  (ctx->forced_idr ? X265_TYPE_IDR : X265_TYPE_I) :
721  pic->pict_type == AV_PICTURE_TYPE_P ? X265_TYPE_P :
722  pic->pict_type == AV_PICTURE_TYPE_B ? X265_TYPE_B :
723  X265_TYPE_AUTO;
724 
725  ret = libx265_encode_set_roi(ctx, pic, &x265pic);
726  if (ret < 0)
727  return ret;
728 
729  rd_idx = rd_get(ctx);
730  if (rd_idx < 0) {
731  free_picture(ctx, &x265pic);
732  return rd_idx;
733  }
734  rd = &ctx->rd[rd_idx];
735 
736  rd->duration = pic->duration;
737  if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) {
738  rd->frame_opaque = pic->opaque;
740  if (ret < 0) {
741  rd_release(ctx, rd_idx);
742  free_picture(ctx, &x265pic);
743  return ret;
744  }
745  }
746 
747  x265pic.userData = (void*)(intptr_t)(rd_idx + 1);
748 
749  if (ctx->a53_cc) {
750  void *sei_data;
751  size_t sei_size;
752 
753  ret = ff_alloc_a53_sei(pic, 0, &sei_data, &sei_size);
754  if (ret < 0) {
755  av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n");
756  } else if (sei_data) {
757  void *tmp;
758  x265_sei_payload *sei_payload;
759 
760  tmp = av_fast_realloc(ctx->sei_data,
761  &ctx->sei_data_size,
762  (sei->numPayloads + 1) * sizeof(*sei_payload));
763  if (!tmp) {
764  av_free(sei_data);
765  free_picture(ctx, &x265pic);
766  return AVERROR(ENOMEM);
767  }
768  ctx->sei_data = tmp;
769  sei->payloads = ctx->sei_data;
770  sei_payload = &sei->payloads[sei->numPayloads];
771  sei_payload->payload = sei_data;
772  sei_payload->payloadSize = sei_size;
773  sei_payload->payloadType = SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35;
774  sei->numPayloads++;
775  }
776  }
777 
778  if (ctx->udu_sei) {
779  for (i = 0; i < pic->nb_side_data; i++) {
780  AVFrameSideData *side_data = pic->side_data[i];
781  void *tmp;
782  x265_sei_payload *sei_payload;
783 
784  if (side_data->type != AV_FRAME_DATA_SEI_UNREGISTERED)
785  continue;
786 
787  tmp = av_fast_realloc(ctx->sei_data,
788  &ctx->sei_data_size,
789  (sei->numPayloads + 1) * sizeof(*sei_payload));
790  if (!tmp) {
791  free_picture(ctx, &x265pic);
792  return AVERROR(ENOMEM);
793  }
794  ctx->sei_data = tmp;
795  sei->payloads = ctx->sei_data;
796  sei_payload = &sei->payloads[sei->numPayloads];
797  sei_payload->payload = av_memdup(side_data->data, side_data->size);
798  if (!sei_payload->payload) {
799  free_picture(ctx, &x265pic);
800  return AVERROR(ENOMEM);
801  }
802  sei_payload->payloadSize = side_data->size;
803  /* Equal to libx265 USER_DATA_UNREGISTERED */
804  sei_payload->payloadType = SEI_TYPE_USER_DATA_UNREGISTERED;
805  sei->numPayloads++;
806  }
807  }
808 
809 #if X265_BUILD >= 167
811  if (ctx->dovi.cfg.dv_profile && sd) {
812  const AVDOVIMetadata *metadata = (const AVDOVIMetadata *)sd->data;
814  &x265pic.rpu.payload,
815  &x265pic.rpu.payloadSize);
816  if (ret < 0) {
817  free_picture(ctx, &x265pic);
818  return ret;
819  }
820  } else if (ctx->dovi.cfg.dv_profile) {
821  av_log(avctx, AV_LOG_ERROR, "Dolby Vision enabled, but received frame "
822  "without AV_FRAME_DATA_DOVI_METADATA");
823  free_picture(ctx, &x265pic);
824  return AVERROR_INVALIDDATA;
825  }
826 #endif
827  }
828 
829 #if (X265_BUILD >= 210) && (X265_BUILD < 213)
830  for (i = 0; i < FF_ARRAY_ELEMS(x265pic_out); i++)
831  x265pic_lyrptr_out[i] = &x265pic_out[i];
832 
833  ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
834  pic ? &x265pic : NULL, x265pic_lyrptr_out);
835 #else
836  ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
837  pic ? &x265pic : NULL, x265pic_out);
838 #endif
839 
840  for (i = 0; i < sei->numPayloads; i++)
841  av_free(sei->payloads[i].payload);
842  av_freep(&x265pic.quantOffsets);
843 
844  if (ret < 0)
845  return AVERROR_EXTERNAL;
846 
847  if (!nnal)
848  return 0;
849 
850  for (i = 0; i < nnal; i++)
851  payload += nal[i].sizeBytes;
852 
853  ret = ff_get_encode_buffer(avctx, pkt, payload, 0);
854  if (ret < 0) {
855  av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
856  return ret;
857  }
858  dst = pkt->data;
859 
860  for (i = 0; i < nnal; i++) {
861  memcpy(dst, nal[i].payload, nal[i].sizeBytes);
862  dst += nal[i].sizeBytes;
863 
864  if (is_keyframe(nal[i].type))
866  }
867 
868  pkt->pts = x265pic_out->pts;
869  pkt->dts = x265pic_out->dts;
870 
871  enum AVPictureType pict_type;
872  switch (x265pic_out->sliceType) {
873  case X265_TYPE_IDR:
874  case X265_TYPE_I:
875  pict_type = AV_PICTURE_TYPE_I;
876  break;
877  case X265_TYPE_P:
878  pict_type = AV_PICTURE_TYPE_P;
879  break;
880  case X265_TYPE_B:
881  case X265_TYPE_BREF:
882  pict_type = AV_PICTURE_TYPE_B;
883  break;
884  default:
885  av_log(avctx, AV_LOG_ERROR, "Unknown picture type encountered.\n");
886  return AVERROR_EXTERNAL;
887  }
888 
889 #if X265_BUILD >= 130
890  if (x265pic_out->sliceType == X265_TYPE_B)
891 #else
892  if (x265pic_out->frameData.sliceType == 'b')
893 #endif
895 
896  ff_encode_add_stats_side_data(pkt, x265pic_out->frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type);
897 
898  if (x265pic_out->userData) {
899  int idx = (int)(intptr_t)x265pic_out->userData - 1;
900  ReorderedData *rd = &ctx->rd[idx];
901 
902  pkt->duration = rd->duration;
903 
904  if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) {
905  pkt->opaque = rd->frame_opaque;
907  rd->frame_opaque_ref = NULL;
908  }
909 
910  rd_release(ctx, idx);
911  }
912 
913  *got_packet = 1;
914  return 0;
915 }
916 
917 static const enum AVPixelFormat x265_csp_eight[] = {
926 #if X265_BUILD >= 210 && FF_X265_MAX_LAYERS > 1
928 #endif
930 };
931 
932 static const enum AVPixelFormat x265_csp_ten[] = {
946 #if X265_BUILD >= 210 && FF_X265_MAX_LAYERS > 1
949 #endif
951 };
952 
953 static const enum AVPixelFormat x265_csp_twelve[] = {
972 #if X265_BUILD >= 210 && FF_X265_MAX_LAYERS > 1
975 #endif
977 };
978 
980  const AVCodec *codec,
981  enum AVCodecConfig config,
982  unsigned flags, const void **out,
983  int *out_num)
984 {
986  if (x265_api_get(12)) {
987  *out = x265_csp_twelve;
988  *out_num = FF_ARRAY_ELEMS(x265_csp_twelve) - 1;
989  } else if (x265_api_get(10)) {
990  *out = x265_csp_ten;
991  *out_num = FF_ARRAY_ELEMS(x265_csp_ten) - 1;
992  } else if (x265_api_get(8)) {
993  *out = x265_csp_eight;
994  *out_num = FF_ARRAY_ELEMS(x265_csp_eight) - 1;
995  } else
996  return AVERROR_EXTERNAL;
997  return 0;
998  }
999 
1000  return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num);
1001 }
1002 
1003 #define OFFSET(x) offsetof(libx265Context, x)
1004 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1005 static const AVOption options[] = {
1006  { "crf", "set the x265 crf", OFFSET(crf), AV_OPT_TYPE_FLOAT, { .dbl = -1 }, -1, FLT_MAX, VE },
1007  { "qp", "set the x265 qp", OFFSET(cqp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
1008  { "forced-idr", "if forcing keyframes, force them as IDR frames", OFFSET(forced_idr),AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
1009  { "preset", "set the x265 preset", OFFSET(preset), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
1010  { "tune", "set the x265 tune parameter", OFFSET(tune), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
1011  { "profile", "set the x265 profile", OFFSET(profile), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
1012  { "udu_sei", "Use user data unregistered SEI if available", OFFSET(udu_sei), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
1013  { "a53cc", "Use A53 Closed Captions (if available)", OFFSET(a53_cc), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
1014  { "x265-params", "set the x265 configuration using a :-separated list of key=value parameters", OFFSET(x265_opts), AV_OPT_TYPE_DICT, { 0 }, 0, 0, VE },
1015 #if X265_BUILD >= 167
1016  { "dolbyvision", "Enable Dolby Vision RPU coding", OFFSET(dovi.enable), AV_OPT_TYPE_BOOL, {.i64 = FF_DOVI_AUTOMATIC }, -1, 1, VE, .unit = "dovi" },
1017  { "auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DOVI_AUTOMATIC}, .flags = VE, .unit = "dovi" },
1018 #endif
1019  { NULL }
1020 };
1021 
1022 static const AVClass class = {
1023  .class_name = "libx265",
1024  .item_name = av_default_item_name,
1025  .option = options,
1027 };
1028 
1029 static const FFCodecDefault x265_defaults[] = {
1030  { "b", "0" },
1031  { "bf", "-1" },
1032  { "g", "-1" },
1033  { "keyint_min", "-1" },
1034  { "refs", "-1" },
1035  { "qmin", "-1" },
1036  { "qmax", "-1" },
1037  { "qdiff", "-1" },
1038  { "qblur", "-1" },
1039  { "qcomp", "-1" },
1040  { "i_qfactor", "-1" },
1041  { "b_qfactor", "-1" },
1042  { NULL },
1043 };
1044 
1046  .p.name = "libx265",
1047  CODEC_LONG_NAME("libx265 H.265 / HEVC"),
1048  .p.type = AVMEDIA_TYPE_VIDEO,
1049  .p.id = AV_CODEC_ID_HEVC,
1050  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
1053  .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
1054  .p.priv_class = &class,
1055  .p.wrapper_name = "libx265",
1056  .init = libx265_encode_init,
1057  .get_supported_config = libx265_get_supported_config,
1059  .close = libx265_encode_close,
1060  .priv_data_size = sizeof(libx265Context),
1062  .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
1064 };
flags
const SwsFlags flags[]
Definition: swscale.c:61
AVCodec
AVCodec.
Definition: codec.h:172
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
AVCodecContext::keyint_min
int keyint_min
minimum GOP size
Definition: avcodec.h:998
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
ff_dovi_ctx_unref
void ff_dovi_ctx_unref(DOVIContext *s)
Completely reset a DOVIContext, preserving only logctx.
Definition: dovi_rpu.c:30
libx265_param_parse_int
static av_cold int libx265_param_parse_int(AVCodecContext *avctx, const char *key, int value)
Definition: libx265.c:176
libx265_param_parse_float
static av_cold int libx265_param_parse_float(AVCodecContext *avctx, const char *key, float value)
Definition: libx265.c:161
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
out
FILE * out
Definition: movenc.c:55
libx265Context::forced_idr
int forced_idr
Definition: libx265.c:70
defaults
static const FFCodecDefault defaults[]
Definition: amfenc_av1.c:717
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:659
AVFrame::duration
int64_t duration
Duration of the frame, in the same units as pts.
Definition: frame.h:775
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3456
libx265Context::params
x265_param * params
Definition: libx265.c:65
AVFrame::nb_side_data
int nb_side_data
Definition: frame.h:625
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
AVPictureType
AVPictureType
Definition: avutil.h:276
options
static const AVOption options[]
Definition: libx265.c:1005
AV_FRAME_DATA_DOVI_METADATA
@ AV_FRAME_DATA_DOVI_METADATA
Parsed Dolby Vision metadata, suitable for passing to a software implementation.
Definition: frame.h:208
int64_t
long long int64_t
Definition: coverity.c:34
AVFrame::opaque
void * opaque
Frame owner's private data.
Definition: frame.h:565
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:111
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
pixdesc.h
AVFrame::pts
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:529
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:652
VE
#define VE
Definition: libx265.c:1004
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:777
AVPacket::data
uint8_t * data
Definition: packet.h:588
AVComponentDescriptor::depth
int depth
Number of bits in the component.
Definition: pixdesc.h:57
AV_PIX_FMT_YUVA420P10
#define AV_PIX_FMT_YUVA420P10
Definition: pixfmt.h:590
free_picture
static void free_picture(libx265Context *ctx, x265_picture *pic)
Definition: libx265.c:663
AVOption
AVOption.
Definition: opt.h:429
encode.h
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:669
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:539
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
AVCOL_SPC_RGB
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
Definition: pixfmt.h:701
float.h
AVPacket::duration
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition: packet.h:606
ReorderedData::in_use
int in_use
Definition: libx265.c:58
AVDictionary
Definition: dict.c:32
AV_PKT_FLAG_DISPOSABLE
#define AV_PKT_FLAG_DISPOSABLE
Flag is used to indicate packets that contain frames that can be discarded by the decoder.
Definition: packet.h:662
AV_CODEC_FLAG_PSNR
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:306
AV_CODEC_CONFIG_PIX_FORMAT
@ AV_CODEC_CONFIG_PIX_FORMAT
AVPixelFormat, terminated by AV_PIX_FMT_NONE.
Definition: avcodec.h:2531
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1241
tf_sess_config.config
config
Definition: tf_sess_config.py:33
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:643
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:448
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
libx265Context::x265_opts
AVDictionary * x265_opts
Definition: libx265.c:74
libx265Context::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: libx265.c:88
av_memdup
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition: mem.c:304
AVFrame::opaque_ref
AVBufferRef * opaque_ref
Frame owner's private data.
Definition: frame.h:740
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:107
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:551
FF_X265_MAX_LAYERS
#define FF_X265_MAX_LAYERS
Definition: libx265.c:49
libx265_get_supported_config
static int libx265_get_supported_config(const AVCodecContext *avctx, const AVCodec *codec, enum AVCodecConfig config, unsigned flags, const void **out, int *out_num)
Definition: libx265.c:979
libx265_encode_frame
static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic, int *got_packet)
Definition: libx265.c:683
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
DOVIContext
Definition: dovi_rpu.h:42
AVPacket::opaque_ref
AVBufferRef * opaque_ref
AVBufferRef for free use by the API user.
Definition: packet.h:624
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_PIX_FMT_GBRP10
#define AV_PIX_FMT_GBRP10
Definition: pixfmt.h:558
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:689
libx265Context::a53_cc
int a53_cc
Definition: libx265.c:79
libx265Context::preset
char * preset
Definition: libx265.c:71
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:488
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
dovi_rpu.h
ff_encode_add_stats_side_data
int ff_encode_add_stats_side_data(AVPacket *pkt, int quality, const int64_t error[], int error_count, enum AVPictureType pict_type)
Definition: encode.c:918
FF_CODEC_ENCODE_CB
#define FF_CODEC_ENCODE_CB(func)
Definition: codec_internal.h:359
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
ff_dovi_configure
int ff_dovi_configure(DOVIContext *s, AVCodecContext *avctx)
Variant of ff_dovi_configure_from_codedpar which infers the codec parameters from an AVCodecContext.
Definition: dovi_rpuenc.c:260
FF_DOVI_AUTOMATIC
#define FF_DOVI_AUTOMATIC
Enable tri-state.
Definition: dovi_rpu.h:49
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:542
preset
preset
Definition: vf_curves.c:47
avassert.h
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:645
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:285
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:106
AVRegionOfInterest
Structure describing a single Region Of Interest.
Definition: frame.h:353
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
float
float
Definition: af_crystalizer.c:122
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:515
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
AVDOVIMetadata
Combined struct representing a combination of header, mapping and color metadata, for attaching to fr...
Definition: dovi_meta.h:337
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
AV_PIX_FMT_YUVA420P
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
Definition: pixfmt.h:108
AVRegionOfInterest::bottom
int bottom
Definition: frame.h:369
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:217
AVCodecContext::nb_decoded_side_data
int nb_decoded_side_data
Definition: avcodec.h:1925
AVDictionaryEntry::key
char * key
Definition: dict.h:91
rd_release
static void rd_release(libx265Context *ctx, int idx)
Definition: libx265.c:135
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_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
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:41
AV_PIX_FMT_FLAG_ALPHA
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
Definition: pixdesc.h:147
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
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
key
const char * key
Definition: hwcontext_opencl.c:189
AVPacket::opaque
void * opaque
for some private data of the user
Definition: packet.h:613
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:639
AVCPBProperties
This structure describes the bitrate properties of an encoded bitstream.
Definition: defs.h:282
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
tmp
static uint8_t tmp[40]
Definition: aes_ctr.c:52
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_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:519
if
if(ret)
Definition: filter_design.txt:179
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
metadata
Stream codec metadata
Definition: ogg-flac-chained-meta.txt:2
NULL
#define NULL
Definition: coverity.c:32
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:669
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
ff_dovi_rpu_generate
int ff_dovi_rpu_generate(DOVIContext *s, const AVDOVIMetadata *metadata, int flags, uint8_t **out_rpu, int *out_size)
Synthesize a Dolby Vision RPU reflecting the current state.
Definition: dovi_rpuenc.c:567
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
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
libx265_encode_init
static av_cold int libx265_encode_init(AVCodecContext *avctx)
Definition: libx265.c:253
sei.h
AV_OPT_TYPE_DICT
@ AV_OPT_TYPE_DICT
Underlying C type is AVDictionary*.
Definition: opt.h:290
libx265Context::tune
char * tune
Definition: libx265.c:72
AVRegionOfInterest::self_size
uint32_t self_size
Must be set to the size of this data structure (that is, sizeof(AVRegionOfInterest)).
Definition: frame.h:358
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:241
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:278
libx265Context::encoder
x265_encoder * encoder
Definition: libx265.c:64
libx265Context::dovi
DOVIContext dovi
Definition: libx265.c:90
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
ReorderedData::duration
int64_t duration
Definition: libx265.c:53
OFFSET
#define OFFSET(x)
Definition: libx265.c:1003
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:540
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
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:743
AV_FRAME_DATA_SEI_UNREGISTERED
@ AV_FRAME_DATA_SEI_UNREGISTERED
User data unregistered metadata associated with a video frame.
Definition: frame.h:178
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
AVFrame::pict_type
enum AVPictureType pict_type
Picture type of the frame.
Definition: frame.h:519
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
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
ReorderedData::frame_opaque_ref
AVBufferRef * frame_opaque_ref
Definition: libx265.c:56
AV_PIX_FMT_FLAG_RGB
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
Definition: pixdesc.h:136
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
AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:544
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:546
AVFrameSideData::data
uint8_t * data
Definition: frame.h:284
AVCHROMA_LOC_UNSPECIFIED
@ AVCHROMA_LOC_UNSPECIFIED
Definition: pixfmt.h:797
libx265Context::udu_sei
int udu_sei
Definition: libx265.c:78
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:587
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:594
AVCPBProperties::avg_bitrate
int64_t avg_bitrate
Average bitrate of the stream, in bits per second.
Definition: defs.h:297
AVRegionOfInterest::right
int right
Definition: frame.h:371
libx265Context::cqp
int cqp
Definition: libx265.c:69
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
ReorderedData
Definition: libx265.c:52
AVRegionOfInterest::left
int left
Definition: frame.h:370
handle_mdcv
static int handle_mdcv(void *logctx, const x265_api *api, x265_param *params, const AVMasteringDisplayMetadata *mdcv)
Definition: libx265.c:191
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: frame.h:137
libx265Context::crf
float crf
Definition: libx265.c:68
ff_default_get_supported_config
int ff_default_get_supported_config(const AVCodecContext *avctx, const AVCodec *codec, enum AVCodecConfig config, unsigned flags, const void **out_configs, int *out_num_configs)
Definition: avcodec.c:759
libx265Context::api
const x265_api * api
Definition: libx265.c:66
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:581
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:368
internal.h
AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_GBRP12
Definition: pixfmt.h:559
AVCPBProperties::max_bitrate
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition: defs.h:287
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:228
value
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
Definition: writing_filters.txt:86
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
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
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
AVFrame::side_data
AVFrameSideData ** side_data
Definition: frame.h:624
profile
int profile
Definition: mxfenc.c:2297
libx265_encode_set_roi
static av_cold int libx265_encode_set_roi(libx265Context *ctx, const AVFrame *frame, x265_picture *pic)
Definition: libx265.c:599
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:703
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
libx265Context::sei_data
void * sei_data
Definition: libx265.c:76
AVCOL_RANGE_MPEG
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition: pixfmt.h:760
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
avcodec.h
libx265Context::rd
ReorderedData * rd
Definition: libx265.c:81
AV_CODEC_FLAG_CLOSED_GOP
#define AV_CODEC_FLAG_CLOSED_GOP
Definition: avcodec.h:332
ret
ret
Definition: filter_design.txt:187
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
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:265
AVCPBProperties::buffer_size
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition: defs.h:303
atsc_a53.h
AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:543
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
rd_get
static int rd_get(libx265Context *ctx)
Definition: libx265.c:108
AVCodecContext::max_qdiff
int max_qdiff
maximum quantizer difference between frames
Definition: avcodec.h:1248
AVCodecContext
main external API structure.
Definition: avcodec.h:431
AVCOL_TRC_ARIB_STD_B67
@ AVCOL_TRC_ARIB_STD_B67
ARIB STD-B67, known as "Hybrid log-gamma".
Definition: pixfmt.h:687
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:105
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
AVFrameSideData::type
enum AVFrameSideDataType type
Definition: frame.h:283
AVPixFmtDescriptor::comp
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
Definition: pixdesc.h:105
x265_csp_ten
static enum AVPixelFormat x265_csp_ten[]
Definition: libx265.c:932
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
libx265_encode_close
static av_cold int libx265_encode_close(AVCodecContext *avctx)
Definition: libx265.c:142
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
ff_libx265_encoder
FFCodec ff_libx265_encoder
Definition: libx265.c:1045
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
libx265Context::sei_data_size
int sei_data_size
Definition: libx265.c:77
AV_PIX_FMT_GBRP
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
Definition: pixfmt.h:165
desc
const char * desc
Definition: libsvtav1.c:78
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:279
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
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
handle_side_data
static int handle_side_data(AVCodecContext *avctx, const x265_api *api, x265_param *params)
Definition: libx265.c:223
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
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:282
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
ReorderedData::frame_opaque
void * frame_opaque
Definition: libx265.c:55
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVDictionaryEntry
Definition: dict.h:90
AVPacket
This structure stores compressed data.
Definition: packet.h:565
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
libx265Context::nb_rd
int nb_rd
Definition: libx265.c:82
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition: opt.h:327
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
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:1151
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
AVERROR_BUG
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
Definition: error.h:52
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:472
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
x265_defaults
static const FFCodecDefault x265_defaults[]
Definition: libx265.c:1029
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:887
libx265Context::profile
char * profile
Definition: libx265.c:73
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
AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GRAY12
Definition: pixfmt.h:520
FF_QP2LAMBDA
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:226
FF_DOVI_WRAP_NAL
@ FF_DOVI_WRAP_NAL
wrap inside NAL RBSP
Definition: dovi_rpu.h:159
libx265Context
Definition: libx265.c:61
AVRegionOfInterest::qoffset
AVRational qoffset
Quantisation offset.
Definition: frame.h:395
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition: opt.h:299
snprintf
#define snprintf
Definition: snprintf.h:34
x265_csp_eight
static enum AVPixelFormat x265_csp_eight[]
Definition: libx265.c:917
x265_csp_twelve
static enum AVPixelFormat x265_csp_twelve[]
Definition: libx265.c:953
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
AVCodecConfig
AVCodecConfig
Definition: avcodec.h:2530
av_dict_iterate
const AVDictionaryEntry * av_dict_iterate(const AVDictionary *m, const AVDictionaryEntry *prev)
Iterate over a dictionary.
Definition: dict.c:42
is_keyframe
static int is_keyframe(NalUnitType naltype)
Definition: libx265.c:93