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/internal.h"
31 #include "libavutil/common.h"
32 #include "libavutil/opt.h"
33 #include "libavutil/pixdesc.h"
34 #include "avcodec.h"
35 #include "encode.h"
36 #include "internal.h"
37 #include "packet_internal.h"
38 #include "sei.h"
39 
40 typedef struct libx265Context {
41  const AVClass *class;
42 
43  x265_encoder *encoder;
44  x265_param *params;
45  const x265_api *api;
46 
47  float crf;
48  int cqp;
50  char *preset;
51  char *tune;
52  char *profile;
54 
55  void *sei_data;
57  int udu_sei;
58 
59  /**
60  * If the encoder does not support ROI then warn the first time we
61  * encounter a frame with ROI side data.
62  */
65 
66 static int is_keyframe(NalUnitType naltype)
67 {
68  switch (naltype) {
69  case NAL_UNIT_CODED_SLICE_BLA_W_LP:
70  case NAL_UNIT_CODED_SLICE_BLA_W_RADL:
71  case NAL_UNIT_CODED_SLICE_BLA_N_LP:
72  case NAL_UNIT_CODED_SLICE_IDR_W_RADL:
73  case NAL_UNIT_CODED_SLICE_IDR_N_LP:
74  case NAL_UNIT_CODED_SLICE_CRA:
75  return 1;
76  default:
77  return 0;
78  }
79 }
80 
82 {
83  libx265Context *ctx = avctx->priv_data;
84 
85  ctx->api->param_free(ctx->params);
86  av_freep(&ctx->sei_data);
87 
88  if (ctx->encoder)
89  ctx->api->encoder_close(ctx->encoder);
90 
91  return 0;
92 }
93 
95  const char *key, float value)
96 {
97  libx265Context *ctx = avctx->priv_data;
98  char buf[256];
99 
100  snprintf(buf, sizeof(buf), "%2.2f", value);
101  if (ctx->api->param_parse(ctx->params, key, buf) == X265_PARAM_BAD_VALUE) {
102  av_log(avctx, AV_LOG_ERROR, "Invalid value %2.2f for param \"%s\".\n", value, key);
103  return AVERROR(EINVAL);
104  }
105 
106  return 0;
107 }
108 
110  const char *key, int value)
111 {
112  libx265Context *ctx = avctx->priv_data;
113  char buf[256];
114 
115  snprintf(buf, sizeof(buf), "%d", value);
116  if (ctx->api->param_parse(ctx->params, key, buf) == X265_PARAM_BAD_VALUE) {
117  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for param \"%s\".\n", value, key);
118  return AVERROR(EINVAL);
119  }
120 
121  return 0;
122 }
123 
125 {
126  libx265Context *ctx = avctx->priv_data;
127  AVCPBProperties *cpb_props = NULL;
129  int ret;
130 
131  ctx->api = x265_api_get(desc->comp[0].depth);
132  if (!ctx->api)
133  ctx->api = x265_api_get(0);
134 
135  ctx->params = ctx->api->param_alloc();
136  if (!ctx->params) {
137  av_log(avctx, AV_LOG_ERROR, "Could not allocate x265 param structure.\n");
138  return AVERROR(ENOMEM);
139  }
140 
141  if (ctx->api->param_default_preset(ctx->params, ctx->preset, ctx->tune) < 0) {
142  int i;
143 
144  av_log(avctx, AV_LOG_ERROR, "Error setting preset/tune %s/%s.\n", ctx->preset, ctx->tune);
145  av_log(avctx, AV_LOG_INFO, "Possible presets:");
146  for (i = 0; x265_preset_names[i]; i++)
147  av_log(avctx, AV_LOG_INFO, " %s", x265_preset_names[i]);
148 
149  av_log(avctx, AV_LOG_INFO, "\n");
150  av_log(avctx, AV_LOG_INFO, "Possible tunes:");
151  for (i = 0; x265_tune_names[i]; i++)
152  av_log(avctx, AV_LOG_INFO, " %s", x265_tune_names[i]);
153 
154  av_log(avctx, AV_LOG_INFO, "\n");
155 
156  return AVERROR(EINVAL);
157  }
158 
159  ctx->params->frameNumThreads = avctx->thread_count;
160  if (avctx->framerate.num > 0 && avctx->framerate.den > 0) {
161  ctx->params->fpsNum = avctx->framerate.num;
162  ctx->params->fpsDenom = avctx->framerate.den;
163  } else {
164  ctx->params->fpsNum = avctx->time_base.den;
165  ctx->params->fpsDenom = avctx->time_base.num * avctx->ticks_per_frame;
166  }
167  ctx->params->sourceWidth = avctx->width;
168  ctx->params->sourceHeight = avctx->height;
169  ctx->params->bEnablePsnr = !!(avctx->flags & AV_CODEC_FLAG_PSNR);
170  ctx->params->bOpenGOP = !(avctx->flags & AV_CODEC_FLAG_CLOSED_GOP);
171 
172  /* Tune the CTU size based on input resolution. */
173  if (ctx->params->sourceWidth < 64 || ctx->params->sourceHeight < 64)
174  ctx->params->maxCUSize = 32;
175  if (ctx->params->sourceWidth < 32 || ctx->params->sourceHeight < 32)
176  ctx->params->maxCUSize = 16;
177  if (ctx->params->sourceWidth < 16 || ctx->params->sourceHeight < 16) {
178  av_log(avctx, AV_LOG_ERROR, "Image size is too small (%dx%d).\n",
179  ctx->params->sourceWidth, ctx->params->sourceHeight);
180  return AVERROR(EINVAL);
181  }
182 
183 
184  ctx->params->vui.bEnableVideoSignalTypePresentFlag = 1;
185 
186  if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED)
187  ctx->params->vui.bEnableVideoFullRangeFlag =
188  avctx->color_range == AVCOL_RANGE_JPEG;
189  else
190  ctx->params->vui.bEnableVideoFullRangeFlag =
191  (desc->flags & AV_PIX_FMT_FLAG_RGB) ||
192  avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
193  avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
194  avctx->pix_fmt == AV_PIX_FMT_YUVJ444P;
195 
196  if ((avctx->color_primaries <= AVCOL_PRI_SMPTE432 &&
198  (avctx->color_trc <= AVCOL_TRC_ARIB_STD_B67 &&
199  avctx->color_trc != AVCOL_TRC_UNSPECIFIED) ||
200  (avctx->colorspace <= AVCOL_SPC_ICTCP &&
201  avctx->colorspace != AVCOL_SPC_UNSPECIFIED)) {
202 
203  ctx->params->vui.bEnableColorDescriptionPresentFlag = 1;
204 
205  // x265 validates the parameters internally
206  ctx->params->vui.colorPrimaries = avctx->color_primaries;
207  ctx->params->vui.transferCharacteristics = avctx->color_trc;
208 #if X265_BUILD >= 159
209  if (avctx->color_trc == AVCOL_TRC_ARIB_STD_B67)
210  ctx->params->preferredTransferCharacteristics = ctx->params->vui.transferCharacteristics;
211 #endif
212  ctx->params->vui.matrixCoeffs = avctx->colorspace;
213  }
214 
215  // chroma sample location values are to be ignored in case of non-4:2:0
216  // according to the specification, so we only write them out in case of
217  // 4:2:0 (log2_chroma_{w,h} == 1).
218  ctx->params->vui.bEnableChromaLocInfoPresentFlag =
220  desc->log2_chroma_w == 1 && desc->log2_chroma_h == 1;
221 
222  if (ctx->params->vui.bEnableChromaLocInfoPresentFlag) {
223  ctx->params->vui.chromaSampleLocTypeTopField =
224  ctx->params->vui.chromaSampleLocTypeBottomField =
225  avctx->chroma_sample_location - 1;
226  }
227 
228  if (avctx->sample_aspect_ratio.num > 0 && avctx->sample_aspect_ratio.den > 0) {
229  char sar[12];
230  int sar_num, sar_den;
231 
232  av_reduce(&sar_num, &sar_den,
233  avctx->sample_aspect_ratio.num,
234  avctx->sample_aspect_ratio.den, 65535);
235  snprintf(sar, sizeof(sar), "%d:%d", sar_num, sar_den);
236  if (ctx->api->param_parse(ctx->params, "sar", sar) == X265_PARAM_BAD_VALUE) {
237  av_log(avctx, AV_LOG_ERROR, "Invalid SAR: %d:%d.\n", sar_num, sar_den);
238  return AVERROR_INVALIDDATA;
239  }
240  }
241 
242  switch (avctx->pix_fmt) {
243  case AV_PIX_FMT_YUV420P:
246  ctx->params->internalCsp = X265_CSP_I420;
247  break;
248  case AV_PIX_FMT_YUV422P:
251  ctx->params->internalCsp = X265_CSP_I422;
252  break;
253  case AV_PIX_FMT_GBRP:
254  case AV_PIX_FMT_GBRP10:
255  case AV_PIX_FMT_GBRP12:
256  ctx->params->vui.matrixCoeffs = AVCOL_SPC_RGB;
257  ctx->params->vui.bEnableVideoSignalTypePresentFlag = 1;
258  ctx->params->vui.bEnableColorDescriptionPresentFlag = 1;
259  case AV_PIX_FMT_YUV444P:
262  ctx->params->internalCsp = X265_CSP_I444;
263  break;
264  case AV_PIX_FMT_GRAY8:
265  case AV_PIX_FMT_GRAY10:
266  case AV_PIX_FMT_GRAY12:
267  if (ctx->api->api_build_number < 85) {
268  av_log(avctx, AV_LOG_ERROR,
269  "libx265 version is %d, must be at least 85 for gray encoding.\n",
270  ctx->api->api_build_number);
271  return AVERROR_INVALIDDATA;
272  }
273  ctx->params->internalCsp = X265_CSP_I400;
274  break;
275  }
276 
277  if (ctx->crf >= 0) {
278  char crf[6];
279 
280  snprintf(crf, sizeof(crf), "%2.2f", ctx->crf);
281  if (ctx->api->param_parse(ctx->params, "crf", crf) == X265_PARAM_BAD_VALUE) {
282  av_log(avctx, AV_LOG_ERROR, "Invalid crf: %2.2f.\n", ctx->crf);
283  return AVERROR(EINVAL);
284  }
285  } else if (avctx->bit_rate > 0) {
286  ctx->params->rc.bitrate = avctx->bit_rate / 1000;
287  ctx->params->rc.rateControlMode = X265_RC_ABR;
288  } else if (ctx->cqp >= 0) {
289  ret = libx265_param_parse_int(avctx, "qp", ctx->cqp);
290  if (ret < 0)
291  return ret;
292  }
293 
294 #if X265_BUILD >= 89
295  if (avctx->qmin >= 0) {
296  ret = libx265_param_parse_int(avctx, "qpmin", avctx->qmin);
297  if (ret < 0)
298  return ret;
299  }
300  if (avctx->qmax >= 0) {
301  ret = libx265_param_parse_int(avctx, "qpmax", avctx->qmax);
302  if (ret < 0)
303  return ret;
304  }
305 #endif
306  if (avctx->max_qdiff >= 0) {
307  ret = libx265_param_parse_int(avctx, "qpstep", avctx->max_qdiff);
308  if (ret < 0)
309  return ret;
310  }
311  if (avctx->qblur >= 0) {
312  ret = libx265_param_parse_float(avctx, "qblur", avctx->qblur);
313  if (ret < 0)
314  return ret;
315  }
316  if (avctx->qcompress >= 0) {
317  ret = libx265_param_parse_float(avctx, "qcomp", avctx->qcompress);
318  if (ret < 0)
319  return ret;
320  }
321  if (avctx->i_quant_factor >= 0) {
322  ret = libx265_param_parse_float(avctx, "ipratio", avctx->i_quant_factor);
323  if (ret < 0)
324  return ret;
325  }
326  if (avctx->b_quant_factor >= 0) {
327  ret = libx265_param_parse_float(avctx, "pbratio", avctx->b_quant_factor);
328  if (ret < 0)
329  return ret;
330  }
331 
332  ctx->params->rc.vbvBufferSize = avctx->rc_buffer_size / 1000;
333  ctx->params->rc.vbvMaxBitrate = avctx->rc_max_rate / 1000;
334 
335  cpb_props = ff_add_cpb_side_data(avctx);
336  if (!cpb_props)
337  return AVERROR(ENOMEM);
338  cpb_props->buffer_size = ctx->params->rc.vbvBufferSize * 1000;
339  cpb_props->max_bitrate = ctx->params->rc.vbvMaxBitrate * 1000LL;
340  cpb_props->avg_bitrate = ctx->params->rc.bitrate * 1000LL;
341 
342  if (!(avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER))
343  ctx->params->bRepeatHeaders = 1;
344 
345  if (avctx->gop_size >= 0) {
346  ret = libx265_param_parse_int(avctx, "keyint", avctx->gop_size);
347  if (ret < 0)
348  return ret;
349  }
350  if (avctx->keyint_min > 0) {
351  ret = libx265_param_parse_int(avctx, "min-keyint", avctx->keyint_min);
352  if (ret < 0)
353  return ret;
354  }
355  if (avctx->max_b_frames >= 0) {
356  ret = libx265_param_parse_int(avctx, "bframes", avctx->max_b_frames);
357  if (ret < 0)
358  return ret;
359  }
360  if (avctx->refs >= 0) {
361  ret = libx265_param_parse_int(avctx, "ref", avctx->refs);
362  if (ret < 0)
363  return ret;
364  }
365 
366  {
367  AVDictionaryEntry *en = NULL;
368  while ((en = av_dict_get(ctx->x265_opts, "", en, AV_DICT_IGNORE_SUFFIX))) {
369  int parse_ret = ctx->api->param_parse(ctx->params, en->key, en->value);
370 
371  switch (parse_ret) {
372  case X265_PARAM_BAD_NAME:
373  av_log(avctx, AV_LOG_WARNING,
374  "Unknown option: %s.\n", en->key);
375  break;
376  case X265_PARAM_BAD_VALUE:
377  av_log(avctx, AV_LOG_WARNING,
378  "Invalid value for %s: %s.\n", en->key, en->value);
379  break;
380  default:
381  break;
382  }
383  }
384  }
385 
386  if (ctx->params->rc.vbvBufferSize && avctx->rc_initial_buffer_occupancy > 1000 &&
387  ctx->params->rc.vbvBufferInit == 0.9) {
388  ctx->params->rc.vbvBufferInit = (float)avctx->rc_initial_buffer_occupancy / 1000;
389  }
390 
391  if (ctx->profile) {
392  if (ctx->api->param_apply_profile(ctx->params, ctx->profile) < 0) {
393  int i;
394  av_log(avctx, AV_LOG_ERROR, "Invalid or incompatible profile set: %s.\n", ctx->profile);
395  av_log(avctx, AV_LOG_INFO, "Possible profiles:");
396  for (i = 0; x265_profile_names[i]; i++)
397  av_log(avctx, AV_LOG_INFO, " %s", x265_profile_names[i]);
398  av_log(avctx, AV_LOG_INFO, "\n");
399  return AVERROR(EINVAL);
400  }
401  }
402 
403  ctx->encoder = ctx->api->encoder_open(ctx->params);
404  if (!ctx->encoder) {
405  av_log(avctx, AV_LOG_ERROR, "Cannot open libx265 encoder.\n");
406  libx265_encode_close(avctx);
407  return AVERROR_INVALIDDATA;
408  }
409 
410  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
411  x265_nal *nal;
412  int nnal;
413 
414  avctx->extradata_size = ctx->api->encoder_headers(ctx->encoder, &nal, &nnal);
415  if (avctx->extradata_size <= 0) {
416  av_log(avctx, AV_LOG_ERROR, "Cannot encode headers.\n");
417  libx265_encode_close(avctx);
418  return AVERROR_INVALIDDATA;
419  }
420 
422  if (!avctx->extradata) {
423  av_log(avctx, AV_LOG_ERROR,
424  "Cannot allocate HEVC header of size %d.\n", avctx->extradata_size);
425  libx265_encode_close(avctx);
426  return AVERROR(ENOMEM);
427  }
428 
429  memcpy(avctx->extradata, nal[0].payload, avctx->extradata_size);
430  memset(avctx->extradata + avctx->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
431  }
432 
433  return 0;
434 }
435 
436 static av_cold int libx265_encode_set_roi(libx265Context *ctx, const AVFrame *frame, x265_picture* pic)
437 {
439  if (sd) {
440  if (ctx->params->rc.aqMode == X265_AQ_NONE) {
441  if (!ctx->roi_warned) {
442  ctx->roi_warned = 1;
443  av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n");
444  }
445  } else {
446  /* 8x8 block when qg-size is 8, 16*16 block otherwise. */
447  int mb_size = (ctx->params->rc.qgSize == 8) ? 8 : 16;
448  int mbx = (frame->width + mb_size - 1) / mb_size;
449  int mby = (frame->height + mb_size - 1) / mb_size;
450  int qp_range = 51 + 6 * (pic->bitDepth - 8);
451  int nb_rois;
452  const AVRegionOfInterest *roi;
453  uint32_t roi_size;
454  float *qoffsets; /* will be freed after encode is called. */
455 
456  roi = (const AVRegionOfInterest*)sd->data;
457  roi_size = roi->self_size;
458  if (!roi_size || sd->size % roi_size != 0) {
459  av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n");
460  return AVERROR(EINVAL);
461  }
462  nb_rois = sd->size / roi_size;
463 
464  qoffsets = av_calloc(mbx * mby, sizeof(*qoffsets));
465  if (!qoffsets)
466  return AVERROR(ENOMEM);
467 
468  // This list must be iterated in reverse because the first
469  // region in the list applies when regions overlap.
470  for (int i = nb_rois - 1; i >= 0; i--) {
471  int startx, endx, starty, endy;
472  float qoffset;
473 
474  roi = (const AVRegionOfInterest*)(sd->data + roi_size * i);
475 
476  starty = FFMIN(mby, roi->top / mb_size);
477  endy = FFMIN(mby, (roi->bottom + mb_size - 1)/ mb_size);
478  startx = FFMIN(mbx, roi->left / mb_size);
479  endx = FFMIN(mbx, (roi->right + mb_size - 1)/ mb_size);
480 
481  if (roi->qoffset.den == 0) {
482  av_free(qoffsets);
483  av_log(ctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must not be zero.\n");
484  return AVERROR(EINVAL);
485  }
486  qoffset = roi->qoffset.num * 1.0f / roi->qoffset.den;
487  qoffset = av_clipf(qoffset * qp_range, -qp_range, +qp_range);
488 
489  for (int y = starty; y < endy; y++)
490  for (int x = startx; x < endx; x++)
491  qoffsets[x + y*mbx] = qoffset;
492  }
493 
494  pic->quantOffsets = qoffsets;
495  }
496  }
497  return 0;
498 }
499 
501  const AVFrame *pic, int *got_packet)
502 {
503  libx265Context *ctx = avctx->priv_data;
504  x265_picture x265pic;
505  x265_picture x265pic_out = { 0 };
506  x265_nal *nal;
507  uint8_t *dst;
508  int pict_type;
509  int payload = 0;
510  int nnal;
511  int ret;
512  int i;
513 
514  ctx->api->picture_init(ctx->params, &x265pic);
515 
516  if (pic) {
517  x265_sei *sei = &x265pic.userSEI;
518  sei->numPayloads = 0;
519  for (i = 0; i < 3; i++) {
520  x265pic.planes[i] = pic->data[i];
521  x265pic.stride[i] = pic->linesize[i];
522  }
523 
524  x265pic.pts = pic->pts;
525  x265pic.bitDepth = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth;
526 
527  x265pic.sliceType = pic->pict_type == AV_PICTURE_TYPE_I ?
528  (ctx->forced_idr ? X265_TYPE_IDR : X265_TYPE_I) :
529  pic->pict_type == AV_PICTURE_TYPE_P ? X265_TYPE_P :
530  pic->pict_type == AV_PICTURE_TYPE_B ? X265_TYPE_B :
531  X265_TYPE_AUTO;
532 
533  ret = libx265_encode_set_roi(ctx, pic, &x265pic);
534  if (ret < 0)
535  return ret;
536 
537  if (pic->reordered_opaque) {
538  x265pic.userData = av_malloc(sizeof(pic->reordered_opaque));
539  if (!x265pic.userData) {
540  av_freep(&x265pic.quantOffsets);
541  return AVERROR(ENOMEM);
542  }
543 
544  memcpy(x265pic.userData, &pic->reordered_opaque, sizeof(pic->reordered_opaque));
545  }
546 
547  if (ctx->udu_sei) {
548  for (i = 0; i < pic->nb_side_data; i++) {
549  AVFrameSideData *side_data = pic->side_data[i];
550  void *tmp;
551  x265_sei_payload *sei_payload;
552 
553  if (side_data->type != AV_FRAME_DATA_SEI_UNREGISTERED)
554  continue;
555 
556  tmp = av_fast_realloc(ctx->sei_data,
557  &ctx->sei_data_size,
558  (sei->numPayloads + 1) * sizeof(*sei_payload));
559  if (!tmp) {
560  av_freep(&x265pic.userData);
561  av_freep(&x265pic.quantOffsets);
562  return AVERROR(ENOMEM);
563  }
564  ctx->sei_data = tmp;
565  sei->payloads = ctx->sei_data;
566  sei_payload = &sei->payloads[sei->numPayloads];
567  sei_payload->payload = side_data->data;
568  sei_payload->payloadSize = side_data->size;
569  /* Equal to libx265 USER_DATA_UNREGISTERED */
570  sei_payload->payloadType = SEI_TYPE_USER_DATA_UNREGISTERED;
571  sei->numPayloads++;
572  }
573  }
574  }
575 
576  ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
577  pic ? &x265pic : NULL, &x265pic_out);
578 
579  av_freep(&x265pic.quantOffsets);
580 
581  if (ret < 0)
582  return AVERROR_EXTERNAL;
583 
584  if (!nnal)
585  return 0;
586 
587  for (i = 0; i < nnal; i++)
588  payload += nal[i].sizeBytes;
589 
590  ret = ff_get_encode_buffer(avctx, pkt, payload, 0);
591  if (ret < 0) {
592  av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
593  return ret;
594  }
595  dst = pkt->data;
596 
597  for (i = 0; i < nnal; i++) {
598  memcpy(dst, nal[i].payload, nal[i].sizeBytes);
599  dst += nal[i].sizeBytes;
600 
601  if (is_keyframe(nal[i].type))
603  }
604 
605  pkt->pts = x265pic_out.pts;
606  pkt->dts = x265pic_out.dts;
607 
608  switch (x265pic_out.sliceType) {
609  case X265_TYPE_IDR:
610  case X265_TYPE_I:
611  pict_type = AV_PICTURE_TYPE_I;
612  break;
613  case X265_TYPE_P:
614  pict_type = AV_PICTURE_TYPE_P;
615  break;
616  case X265_TYPE_B:
617  case X265_TYPE_BREF:
618  pict_type = AV_PICTURE_TYPE_B;
619  break;
620  default:
621  av_log(avctx, AV_LOG_ERROR, "Unknown picture type encountered.\n");
622  return AVERROR_EXTERNAL;
623  }
624 
625 #if X265_BUILD >= 130
626  if (x265pic_out.sliceType == X265_TYPE_B)
627 #else
628  if (x265pic_out.frameData.sliceType == 'b')
629 #endif
631 
632  ff_side_data_set_encoder_stats(pkt, x265pic_out.frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type);
633 
634  if (x265pic_out.userData) {
635  memcpy(&avctx->reordered_opaque, x265pic_out.userData, sizeof(avctx->reordered_opaque));
636  av_freep(&x265pic_out.userData);
637  } else
638  avctx->reordered_opaque = 0;
639 
640  *got_packet = 1;
641  return 0;
642 }
643 
644 static const enum AVPixelFormat x265_csp_eight[] = {
654 };
655 
656 static const enum AVPixelFormat x265_csp_ten[] = {
671 };
672 
673 static const enum AVPixelFormat x265_csp_twelve[] = {
693 };
694 
696 {
697  if (x265_api_get(12))
698  codec->pix_fmts = x265_csp_twelve;
699  else if (x265_api_get(10))
700  codec->pix_fmts = x265_csp_ten;
701  else if (x265_api_get(8))
702  codec->pix_fmts = x265_csp_eight;
703 }
704 
705 #define OFFSET(x) offsetof(libx265Context, x)
706 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
707 static const AVOption options[] = {
708  { "crf", "set the x265 crf", OFFSET(crf), AV_OPT_TYPE_FLOAT, { .dbl = -1 }, -1, FLT_MAX, VE },
709  { "qp", "set the x265 qp", OFFSET(cqp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
710  { "forced-idr", "if forcing keyframes, force them as IDR frames", OFFSET(forced_idr),AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
711  { "preset", "set the x265 preset", OFFSET(preset), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
712  { "tune", "set the x265 tune parameter", OFFSET(tune), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
713  { "profile", "set the x265 profile", OFFSET(profile), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
714  { "udu_sei", "Use user data unregistered SEI if available", OFFSET(udu_sei), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
715  { "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 },
716  { NULL }
717 };
718 
719 static const AVClass class = {
720  .class_name = "libx265",
721  .item_name = av_default_item_name,
722  .option = options,
724 };
725 
726 static const AVCodecDefault x265_defaults[] = {
727  { "b", "0" },
728  { "bf", "-1" },
729  { "g", "-1" },
730  { "keyint_min", "-1" },
731  { "refs", "-1" },
732  { "qmin", "-1" },
733  { "qmax", "-1" },
734  { "qdiff", "-1" },
735  { "qblur", "-1" },
736  { "qcomp", "-1" },
737  { "i_qfactor", "-1" },
738  { "b_qfactor", "-1" },
739  { NULL },
740 };
741 
743  .name = "libx265",
744  .long_name = NULL_IF_CONFIG_SMALL("libx265 H.265 / HEVC"),
745  .type = AVMEDIA_TYPE_VIDEO,
746  .id = AV_CODEC_ID_HEVC,
747  .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
750  .init = libx265_encode_init,
751  .init_static_data = libx265_encode_init_csp,
752  .encode2 = libx265_encode_frame,
753  .close = libx265_encode_close,
754  .priv_data_size = sizeof(libx265Context),
755  .priv_class = &class,
757  .caps_internal = FF_CODEC_CAP_AUTO_THREADS,
758  .wrapper_name = "libx265",
759 };
AVCodec
AVCodec.
Definition: codec.h:202
x265_defaults
static const AVCodecDefault x265_defaults[]
Definition: libx265.c:726
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
AVCodecContext::keyint_min
int keyint_min
minimum GOP size
Definition: avcodec.h:925
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
libx265_param_parse_int
static av_cold int libx265_param_parse_int(AVCodecContext *avctx, const char *key, int value)
Definition: libx265.c:109
libx265_param_parse_float
static av_cold int libx265_param_parse_float(AVCodecContext *avctx, const char *key, float value)
Definition: libx265.c:94
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:960
libx265Context::forced_idr
int forced_idr
Definition: libx265.c:49
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:617
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2660
ff_side_data_set_encoder_stats
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
Definition: avpacket.c:604
libx265Context::params
x265_param * params
Definition: libx265.c:44
AVFrame::nb_side_data
int nb_side_data
Definition: frame.h:534
options
static const AVOption options[]
Definition: libx265.c:707
AVCodec::pix_fmts
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
Definition: codec.h:224
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:317
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:26
pixdesc.h
AVFrame::pts
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:424
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:953
VE
#define VE
Definition: libx265.c:706
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:597
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:373
AVComponentDescriptor::depth
int depth
Number of bits in the component.
Definition: pixdesc.h:57
AVOption
AVOption.
Definition: opt.h:247
encode.h
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:497
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:404
AV_DICT_IGNORE_SUFFIX
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
Definition: dict.h:68
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:524
float.h
AVDictionary
Definition: dict.c:30
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:447
AV_CODEC_FLAG_PSNR
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:247
ff_add_cpb_side_data
AVCPBProperties * ff_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
Definition: utils.c:990
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1165
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:428
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:338
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:268
libx265Context::x265_opts
AVDictionary * x265_opts
Definition: libx265.c:53
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:63
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:1710
libx265_encode_frame
static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic, int *got_packet)
Definition: libx265.c:500
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:688
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:1440
AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_GBRP10
Definition: pixfmt.h:420
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:932
defaults
static const AVCodecDefault defaults[]
Definition: amfenc_h264.c:361
libx265Context::preset
char * preset
Definition: libx265.c:50
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:463
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
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_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:407
preset
preset
Definition: vf_curves.c:46
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:946
pkt
AVPacket * pkt
Definition: movenc.c:59
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
AVFrameSideData::size
size_t size
Definition: frame.h:226
av_cold
#define av_cold
Definition: attributes.h:90
AVRegionOfInterest
Structure describing a single Region Of Interest.
Definition: frame.h:242
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:1222
av_dict_get
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:40
AV_PIX_FMT_YUVJ422P
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
Definition: pixfmt.h:79
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:485
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:504
AVRegionOfInterest::bottom
int bottom
Definition: frame.h:258
AVDictionaryEntry::key
char * key
Definition: dict.h:80
AVCodecContext::ticks_per_frame
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:515
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:127
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This codec takes the reordered_opaque field from input AVFrames and returns it in the corresponding f...
Definition: codec.h:176
ctx
AVFormatContext * ctx
Definition: movenc.c:48
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:66
AVCodecContext::rc_max_rate
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:1194
key
const char * key
Definition: hwcontext_opencl.c:168
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:472
AVCPBProperties
This structure describes the bitrate properties of an encoded bitstream.
Definition: defs.h:104
AV_PIX_FMT_YUVJ444P
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition: pixfmt.h:80
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:385
if
if(ret)
Definition: filter_design.txt:179
AVCodecDefault
Definition: internal.h:215
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1179
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
NULL
#define NULL
Definition: coverity.c:32
libx265_encode_init_csp
static av_cold void libx265_encode_init_csp(AVCodec *codec)
Definition: libx265.c:695
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:967
AVCodecContext::qblur
float qblur
amount of qscale smoothing over time (0.0-1.0)
Definition: avcodec.h:1151
AV_PIX_FMT_YUVJ420P
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:78
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:433
libx265_encode_init
static av_cold int libx265_encode_init(AVCodecContext *avctx)
Definition: libx265.c:124
sei.h
AV_OPT_TYPE_DICT
@ AV_OPT_TYPE_DICT
Definition: opt.h:231
av_clipf
#define av_clipf
Definition: common.h:144
libx265Context::tune
char * tune
Definition: libx265.c:51
AVRegionOfInterest::self_size
uint32_t self_size
Must be set to the size of this data structure (that is, sizeof(AVRegionOfInterest)).
Definition: frame.h:247
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:274
libx265Context::encoder
x265_encoder * encoder
Definition: libx265.c:43
OFFSET
#define OFFSET(x)
Definition: libx265.c:705
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:405
AV_PIX_FMT_GRAY8
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition: pixfmt.h:74
sei
static int FUNC() sei(CodedBitstreamContext *ctx, RWContext *rw, H264RawSEI *current)
Definition: cbs_h264_syntax_template.c:825
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:563
SEI_TYPE_USER_DATA_UNREGISTERED
@ SEI_TYPE_USER_DATA_UNREGISTERED
Definition: sei.h:35
AV_FRAME_DATA_SEI_UNREGISTERED
@ AV_FRAME_DATA_SEI_UNREGISTERED
User data unregistered metadata associated with a video frame.
Definition: frame.h:177
AVCodecContext::qcompress
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
Definition: avcodec.h:1150
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:506
FF_CODEC_CAP_AUTO_THREADS
#define FF_CODEC_CAP_AUTO_THREADS
Codec handles avctx->thread_count == 0 (auto) internally.
Definition: internal.h:81
AVFrame::pict_type
enum AVPictureType pict_type
Picture type of the frame.
Definition: frame.h:414
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
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
AVCodecContext::gop_size
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:578
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
AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:409
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:411
AVFrameSideData::data
uint8_t * data
Definition: frame.h:225
AVCHROMA_LOC_UNSPECIFIED
@ AVCHROMA_LOC_UNSPECIFIED
Definition: pixfmt.h:617
libx265Context::udu_sei
int udu_sei
Definition: libx265.c:57
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:372
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:379
AVCPBProperties::avg_bitrate
int64_t avg_bitrate
Average bitrate of the stream, in bits per second.
Definition: defs.h:119
AVRegionOfInterest::right
int right
Definition: frame.h:260
libx265Context::cqp
int cqp
Definition: libx265.c:48
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:191
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:664
AV_OPT_TYPE_FLOAT
@ AV_OPT_TYPE_FLOAT
Definition: opt.h:227
ff_libx265_encoder
AVCodec ff_libx265_encoder
Definition: libx265.c:742
AVRegionOfInterest::left
int left
Definition: frame.h:259
libx265Context::crf
float crf
Definition: libx265.c:47
libx265Context::api
const x265_api * api
Definition: libx265.c:45
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:271
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:366
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:484
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:257
internal.h
AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_GBRP12
Definition: pixfmt.h:421
common.h
AVCPBProperties::max_bitrate
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition: defs.h:109
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:224
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:209
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:974
AVFrame::side_data
AVFrameSideData ** side_data
Definition: frame.h:533
profile
int profile
Definition: mxfenc.c:2003
libx265_encode_set_roi
static av_cold int libx265_encode_set_roi(libx265Context *ctx, const AVFrame *frame, x265_picture *pic)
Definition: libx265.c:436
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:526
AVCodecContext::height
int height
Definition: avcodec.h:556
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:593
libx265Context::sei_data
void * sei_data
Definition: libx265.c:55
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:271
avcodec.h
AV_CODEC_FLAG_CLOSED_GOP
#define AV_CODEC_FLAG_CLOSED_GOP
Definition: avcodec.h:282
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:71
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:125
AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:408
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
AVCodecContext::max_qdiff
int max_qdiff
maximum quantizer difference between frames
Definition: avcodec.h:1172
AVCodecContext
main external API structure.
Definition: avcodec.h:383
AVCOL_TRC_ARIB_STD_B67
@ AVCOL_TRC_ARIB_STD_B67
ARIB STD-B67, known as "Hybrid log-gamma".
Definition: pixfmt.h:515
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:276
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:78
AVCodecContext::qmin
int qmin
minimum quantizer
Definition: avcodec.h:1158
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:224
AVFrameSideData::type
enum AVFrameSideDataType type
Definition: frame.h:224
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:656
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:82
libx265_encode_close
static av_cold int libx265_encode_close(AVCodecContext *avctx)
Definition: libx265.c:81
AVFrame::reordered_opaque
int64_t reordered_opaque
reordered opaque 64 bits (generally an integer or a double precision float PTS but can be anything).
Definition: frame.h:489
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:71
libx265Context::sei_data_size
int sei_data_size
Definition: libx265.c:56
AV_PIX_FMT_GBRP
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
Definition: pixfmt.h:158
desc
const char * desc
Definition: libsvtav1.c:79
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:275
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:70
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:655
packet_internal.h
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:223
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
AVCOL_PRI_SMPTE432
@ AVCOL_PRI_SMPTE432
SMPTE ST 432-1 (2010) / P3 D65 / Display P3.
Definition: pixfmt.h:484
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVDictionaryEntry
Definition: dict.h:79
AVPacket
This structure stores compressed data.
Definition: packet.h:350
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:410
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:241
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
AVCodecContext::reordered_opaque
int64_t reordered_opaque
opaque 64-bit number (generally a PTS) that will be reordered and output in AVFrame....
Definition: avcodec.h:1352
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:556
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:164
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:362
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
libx265Context::profile
char * profile
Definition: libx265.c:52
AVDictionaryEntry::value
char * value
Definition: dict.h:81
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Definition: opt.h:228
AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GRAY12
Definition: pixfmt.h:386
FF_QP2LAMBDA
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:227
libx265Context
Definition: libx265.c:40
AVRegionOfInterest::qoffset
AVRational qoffset
Quantisation offset.
Definition: frame.h:284
AVCOL_SPC_ICTCP
@ AVCOL_SPC_ICTCP
ITU-R BT.2100-0, ICtCp.
Definition: pixfmt.h:539
snprintf
#define snprintf
Definition: snprintf.h:34
x265_csp_eight
static enum AVPixelFormat x265_csp_eight[]
Definition: libx265.c:644
x265_csp_twelve
static enum AVPixelFormat x265_csp_twelve[]
Definition: libx265.c:673
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:753
is_keyframe
static int is_keyframe(NalUnitType naltype)
Definition: libx265.c:66