FFmpeg
vaapi_encode_h265.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #include <string.h>
20 
21 #include <va/va.h>
22 #include <va/va_enc_hevc.h>
23 
24 #include "libavutil/avassert.h"
25 #include "libavutil/common.h"
26 #include "libavutil/pixdesc.h"
27 #include "libavutil/opt.h"
29 
30 #include "avcodec.h"
31 #include "cbs.h"
32 #include "cbs_h265.h"
33 #include "codec_internal.h"
34 #include "h2645data.h"
35 #include "h265_profile_level.h"
36 #include "hevc.h"
37 #include "hevc_sei.h"
38 #include "put_bits.h"
39 #include "vaapi_encode.h"
40 
41 enum {
44 };
45 
46 typedef struct VAAPIEncodeH265Picture {
48 
49  int64_t last_idr_frame;
50 
53  int pic_type;
55 
56 typedef struct VAAPIEncodeH265Context {
58 
59  // Encoder features.
60  uint32_t va_features;
61  // Block size info.
62  uint32_t va_bs;
63  uint32_t ctu_size;
64  uint32_t min_cb_size;
65 
66  // User options.
67  int qp;
68  int aud;
69  int profile;
70  int tier;
71  int level;
72  int sei;
73 
74  // Derived settings.
78 
79  // Writer structures.
85 
88 
94 
95 
97  char *data, size_t *data_len,
99 {
100  VAAPIEncodeH265Context *priv = avctx->priv_data;
101  int err;
102 
103  err = ff_cbs_write_fragment_data(priv->cbc, au);
104  if (err < 0) {
105  av_log(avctx, AV_LOG_ERROR, "Failed to write packed header.\n");
106  return err;
107  }
108 
109  if (*data_len < 8 * au->data_size - au->data_bit_padding) {
110  av_log(avctx, AV_LOG_ERROR, "Access unit too large: "
111  "%zu < %zu.\n", *data_len,
112  8 * au->data_size - au->data_bit_padding);
113  return AVERROR(ENOSPC);
114  }
115 
116  memcpy(data, au->data, au->data_size);
117  *data_len = 8 * au->data_size - au->data_bit_padding;
118 
119  return 0;
120 }
121 
124  void *nal_unit)
125 {
126  H265RawNALUnitHeader *header = nal_unit;
127  int err;
128 
129  err = ff_cbs_insert_unit_content(au, -1,
130  header->nal_unit_type, nal_unit, NULL);
131  if (err < 0) {
132  av_log(avctx, AV_LOG_ERROR, "Failed to add NAL unit: "
133  "type = %d.\n", header->nal_unit_type);
134  return err;
135  }
136 
137  return 0;
138 }
139 
141  char *data, size_t *data_len)
142 {
143  VAAPIEncodeH265Context *priv = avctx->priv_data;
145  int err;
146 
147  if (priv->aud_needed) {
148  err = vaapi_encode_h265_add_nal(avctx, au, &priv->raw_aud);
149  if (err < 0)
150  goto fail;
151  priv->aud_needed = 0;
152  }
153 
154  err = vaapi_encode_h265_add_nal(avctx, au, &priv->raw_vps);
155  if (err < 0)
156  goto fail;
157 
158  err = vaapi_encode_h265_add_nal(avctx, au, &priv->raw_sps);
159  if (err < 0)
160  goto fail;
161 
162  err = vaapi_encode_h265_add_nal(avctx, au, &priv->raw_pps);
163  if (err < 0)
164  goto fail;
165 
166  err = vaapi_encode_h265_write_access_unit(avctx, data, data_len, au);
167 fail:
169  return err;
170 }
171 
173  VAAPIEncodePicture *pic,
174  VAAPIEncodeSlice *slice,
175  char *data, size_t *data_len)
176 {
177  VAAPIEncodeH265Context *priv = avctx->priv_data;
179  int err;
180 
181  if (priv->aud_needed) {
182  err = vaapi_encode_h265_add_nal(avctx, au, &priv->raw_aud);
183  if (err < 0)
184  goto fail;
185  priv->aud_needed = 0;
186  }
187 
188  err = vaapi_encode_h265_add_nal(avctx, au, &priv->raw_slice);
189  if (err < 0)
190  goto fail;
191 
192  err = vaapi_encode_h265_write_access_unit(avctx, data, data_len, au);
193 fail:
195  return err;
196 }
197 
199  VAAPIEncodePicture *pic,
200  int index, int *type,
201  char *data, size_t *data_len)
202 {
203  VAAPIEncodeH265Context *priv = avctx->priv_data;
205  int err;
206 
207  if (priv->sei_needed) {
208  if (priv->aud_needed) {
209  err = vaapi_encode_h265_add_nal(avctx, au, &priv->aud);
210  if (err < 0)
211  goto fail;
212  priv->aud_needed = 0;
213  }
214 
215  if (priv->sei_needed & SEI_MASTERING_DISPLAY) {
216  err = ff_cbs_sei_add_message(priv->cbc, au, 1,
218  &priv->sei_mastering_display, NULL);
219  if (err < 0)
220  goto fail;
221  }
222 
223  if (priv->sei_needed & SEI_CONTENT_LIGHT_LEVEL) {
224  err = ff_cbs_sei_add_message(priv->cbc, au, 1,
226  &priv->sei_content_light_level, NULL);
227  if (err < 0)
228  goto fail;
229  }
230 
231  priv->sei_needed = 0;
232 
233  err = vaapi_encode_h265_write_access_unit(avctx, data, data_len, au);
234  if (err < 0)
235  goto fail;
236 
238 
239  *type = VAEncPackedHeaderRawData;
240  return 0;
241  } else {
242  return AVERROR_EOF;
243  }
244 
245 fail:
247  return err;
248 }
249 
251 {
252  VAAPIEncodeContext *ctx = avctx->priv_data;
253  VAAPIEncodeH265Context *priv = avctx->priv_data;
254  H265RawVPS *vps = &priv->raw_vps;
255  H265RawSPS *sps = &priv->raw_sps;
256  H265RawPPS *pps = &priv->raw_pps;
257  H265RawProfileTierLevel *ptl = &vps->profile_tier_level;
258  H265RawVUI *vui = &sps->vui;
259  VAEncSequenceParameterBufferHEVC *vseq = ctx->codec_sequence_params;
260  VAEncPictureParameterBufferHEVC *vpic = ctx->codec_picture_params;
261  const AVPixFmtDescriptor *desc;
262  int chroma_format, bit_depth;
263  int i;
264 
265  memset(vps, 0, sizeof(*vps));
266  memset(sps, 0, sizeof(*sps));
267  memset(pps, 0, sizeof(*pps));
268 
269 
271  av_assert0(desc);
272  if (desc->nb_components == 1) {
273  chroma_format = 0;
274  } else {
275  if (desc->log2_chroma_w == 1 && desc->log2_chroma_h == 1) {
276  chroma_format = 1;
277  } else if (desc->log2_chroma_w == 1 && desc->log2_chroma_h == 0) {
278  chroma_format = 2;
279  } else if (desc->log2_chroma_w == 0 && desc->log2_chroma_h == 0) {
280  chroma_format = 3;
281  } else {
282  av_log(avctx, AV_LOG_ERROR, "Chroma format of input pixel format "
283  "%s is not supported.\n", desc->name);
284  return AVERROR(EINVAL);
285  }
286  }
287  bit_depth = desc->comp[0].depth;
288 
289 
290  // VPS
291 
292  vps->nal_unit_header = (H265RawNALUnitHeader) {
293  .nal_unit_type = HEVC_NAL_VPS,
294  .nuh_layer_id = 0,
295  .nuh_temporal_id_plus1 = 1,
296  };
297 
298  vps->vps_video_parameter_set_id = 0;
299 
300  vps->vps_base_layer_internal_flag = 1;
301  vps->vps_base_layer_available_flag = 1;
302  vps->vps_max_layers_minus1 = 0;
303  vps->vps_max_sub_layers_minus1 = 0;
304  vps->vps_temporal_id_nesting_flag = 1;
305 
307  ptl->general_profile_idc = avctx->profile;
308  ptl->general_tier_flag = priv->tier;
309 
311 
317  }
318 
323 
328 
329  ptl->general_max_422chroma_constraint_flag = chroma_format <= 2;
330  ptl->general_max_420chroma_constraint_flag = chroma_format <= 1;
331  ptl->general_max_monochrome_constraint_flag = chroma_format == 0;
332 
333  ptl->general_intra_constraint_flag = ctx->gop_size == 1;
335 
337 
338  if (avctx->level != FF_LEVEL_UNKNOWN) {
339  ptl->general_level_idc = avctx->level;
340  } else {
341  const H265LevelDescriptor *level;
342 
344  ctx->surface_width, ctx->surface_height,
345  ctx->nb_slices, ctx->tile_rows, ctx->tile_cols,
346  (ctx->b_per_p > 0) + 1);
347  if (level) {
348  av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level->name);
349  ptl->general_level_idc = level->level_idc;
350  } else {
351  av_log(avctx, AV_LOG_VERBOSE, "Stream will not conform to "
352  "any normal level; using level 8.5.\n");
353  ptl->general_level_idc = 255;
354  // The tier flag must be set in level 8.5.
355  ptl->general_tier_flag = 1;
356  }
357  }
358 
359  vps->vps_sub_layer_ordering_info_present_flag = 0;
360  vps->vps_max_dec_pic_buffering_minus1[0] = ctx->max_b_depth + 1;
361  vps->vps_max_num_reorder_pics[0] = ctx->max_b_depth;
362  vps->vps_max_latency_increase_plus1[0] = 0;
363 
364  vps->vps_max_layer_id = 0;
365  vps->vps_num_layer_sets_minus1 = 0;
366  vps->layer_id_included_flag[0][0] = 1;
367 
368  vps->vps_timing_info_present_flag = 1;
369  if (avctx->framerate.num > 0 && avctx->framerate.den > 0) {
370  vps->vps_num_units_in_tick = avctx->framerate.den;
371  vps->vps_time_scale = avctx->framerate.num;
372  vps->vps_poc_proportional_to_timing_flag = 1;
373  vps->vps_num_ticks_poc_diff_one_minus1 = 0;
374  } else {
375  vps->vps_num_units_in_tick = avctx->time_base.num;
376  vps->vps_time_scale = avctx->time_base.den;
377  vps->vps_poc_proportional_to_timing_flag = 0;
378  }
379  vps->vps_num_hrd_parameters = 0;
380 
381 
382  // SPS
383 
384  sps->nal_unit_header = (H265RawNALUnitHeader) {
385  .nal_unit_type = HEVC_NAL_SPS,
386  .nuh_layer_id = 0,
387  .nuh_temporal_id_plus1 = 1,
388  };
389 
390  sps->sps_video_parameter_set_id = vps->vps_video_parameter_set_id;
391 
392  sps->sps_max_sub_layers_minus1 = vps->vps_max_sub_layers_minus1;
393  sps->sps_temporal_id_nesting_flag = vps->vps_temporal_id_nesting_flag;
394 
395  sps->profile_tier_level = vps->profile_tier_level;
396 
397  sps->sps_seq_parameter_set_id = 0;
398 
399  sps->chroma_format_idc = chroma_format;
400  sps->separate_colour_plane_flag = 0;
401 
402  sps->pic_width_in_luma_samples = ctx->surface_width;
403  sps->pic_height_in_luma_samples = ctx->surface_height;
404 
405  if (avctx->width != ctx->surface_width ||
406  avctx->height != ctx->surface_height) {
407  sps->conformance_window_flag = 1;
408  sps->conf_win_left_offset = 0;
409  sps->conf_win_right_offset =
410  (ctx->surface_width - avctx->width) >> desc->log2_chroma_w;
411  sps->conf_win_top_offset = 0;
412  sps->conf_win_bottom_offset =
413  (ctx->surface_height - avctx->height) >> desc->log2_chroma_h;
414  } else {
415  sps->conformance_window_flag = 0;
416  }
417 
418  sps->bit_depth_luma_minus8 = bit_depth - 8;
419  sps->bit_depth_chroma_minus8 = bit_depth - 8;
420 
421  sps->log2_max_pic_order_cnt_lsb_minus4 = 8;
422 
423  sps->sps_sub_layer_ordering_info_present_flag =
424  vps->vps_sub_layer_ordering_info_present_flag;
425  for (i = 0; i <= sps->sps_max_sub_layers_minus1; i++) {
426  sps->sps_max_dec_pic_buffering_minus1[i] =
427  vps->vps_max_dec_pic_buffering_minus1[i];
428  sps->sps_max_num_reorder_pics[i] =
429  vps->vps_max_num_reorder_pics[i];
430  sps->sps_max_latency_increase_plus1[i] =
431  vps->vps_max_latency_increase_plus1[i];
432  }
433 
434  // These values come from the capabilities of the first encoder
435  // implementation in the i965 driver on Intel Skylake. They may
436  // fail badly with other platforms or drivers.
437  // CTB size from 8x8 to 32x32.
438  sps->log2_min_luma_coding_block_size_minus3 = 0;
439  sps->log2_diff_max_min_luma_coding_block_size = 2;
440  // Transform size from 4x4 to 32x32.
441  sps->log2_min_luma_transform_block_size_minus2 = 0;
442  sps->log2_diff_max_min_luma_transform_block_size = 3;
443  // Full transform hierarchy allowed (2-5).
444  sps->max_transform_hierarchy_depth_inter = 3;
445  sps->max_transform_hierarchy_depth_intra = 3;
446  // AMP works.
447  sps->amp_enabled_flag = 1;
448  // SAO and temporal MVP do not work.
449  sps->sample_adaptive_offset_enabled_flag = 0;
450  sps->sps_temporal_mvp_enabled_flag = 0;
451 
452  sps->pcm_enabled_flag = 0;
453 
454 // update sps setting according to queried result
455 #if VA_CHECK_VERSION(1, 13, 0)
456  if (priv->va_features) {
457  VAConfigAttribValEncHEVCFeatures features = { .value = priv->va_features };
458 
459  // Enable feature if get queried result is VA_FEATURE_SUPPORTED | VA_FEATURE_REQUIRED
460  sps->amp_enabled_flag =
461  !!features.bits.amp;
462  sps->sample_adaptive_offset_enabled_flag =
463  !!features.bits.sao;
464  sps->sps_temporal_mvp_enabled_flag =
465  !!features.bits.temporal_mvp;
466  sps->pcm_enabled_flag =
467  !!features.bits.pcm;
468  }
469 
470  if (priv->va_bs) {
471  VAConfigAttribValEncHEVCBlockSizes bs = { .value = priv->va_bs };
472  sps->log2_min_luma_coding_block_size_minus3 =
473  ff_ctz(priv->min_cb_size) - 3;
474  sps->log2_diff_max_min_luma_coding_block_size =
475  ff_ctz(priv->ctu_size) - ff_ctz(priv->min_cb_size);
476 
477  sps->log2_min_luma_transform_block_size_minus2 =
478  bs.bits.log2_min_luma_transform_block_size_minus2;
479  sps->log2_diff_max_min_luma_transform_block_size =
480  bs.bits.log2_max_luma_transform_block_size_minus2 -
481  bs.bits.log2_min_luma_transform_block_size_minus2;
482 
483  sps->max_transform_hierarchy_depth_inter =
484  bs.bits.max_max_transform_hierarchy_depth_inter;
485  sps->max_transform_hierarchy_depth_intra =
486  bs.bits.max_max_transform_hierarchy_depth_intra;
487  }
488 #endif
489 
490  // STRPSs should ideally be here rather than defined individually in
491  // each slice, but the structure isn't completely fixed so for now
492  // don't bother.
493  sps->num_short_term_ref_pic_sets = 0;
494  sps->long_term_ref_pics_present_flag = 0;
495 
496  sps->vui_parameters_present_flag = 1;
497 
498  if (avctx->sample_aspect_ratio.num != 0 &&
499  avctx->sample_aspect_ratio.den != 0) {
500  int num, den, i;
501  av_reduce(&num, &den, avctx->sample_aspect_ratio.num,
502  avctx->sample_aspect_ratio.den, 65535);
503  for (i = 0; i < FF_ARRAY_ELEMS(ff_h2645_pixel_aspect); i++) {
504  if (num == ff_h2645_pixel_aspect[i].num &&
505  den == ff_h2645_pixel_aspect[i].den) {
506  vui->aspect_ratio_idc = i;
507  break;
508  }
509  }
511  vui->aspect_ratio_idc = 255;
512  vui->sar_width = num;
513  vui->sar_height = den;
514  }
516  }
517 
518  // Unspecified video format, from table E-2.
519  vui->video_format = 5;
520  vui->video_full_range_flag =
521  avctx->color_range == AVCOL_RANGE_JPEG;
522  vui->colour_primaries = avctx->color_primaries;
523  vui->transfer_characteristics = avctx->color_trc;
524  vui->matrix_coefficients = avctx->colorspace;
525  if (avctx->color_primaries != AVCOL_PRI_UNSPECIFIED ||
526  avctx->color_trc != AVCOL_TRC_UNSPECIFIED ||
529  if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED ||
532 
537  avctx->chroma_sample_location - 1;
538  }
539 
541  vui->vui_num_units_in_tick = vps->vps_num_units_in_tick;
542  vui->vui_time_scale = vps->vps_time_scale;
543  vui->vui_poc_proportional_to_timing_flag = vps->vps_poc_proportional_to_timing_flag;
544  vui->vui_num_ticks_poc_diff_one_minus1 = vps->vps_num_ticks_poc_diff_one_minus1;
546 
550  vui->max_bytes_per_pic_denom = 0;
551  vui->max_bits_per_min_cu_denom = 0;
553  vui->log2_max_mv_length_vertical = 15;
554 
555 
556  // PPS
557 
558  pps->nal_unit_header = (H265RawNALUnitHeader) {
559  .nal_unit_type = HEVC_NAL_PPS,
560  .nuh_layer_id = 0,
561  .nuh_temporal_id_plus1 = 1,
562  };
563 
564  pps->pps_pic_parameter_set_id = 0;
565  pps->pps_seq_parameter_set_id = sps->sps_seq_parameter_set_id;
566 
567  pps->num_ref_idx_l0_default_active_minus1 = 0;
568  pps->num_ref_idx_l1_default_active_minus1 = 0;
569 
570  pps->init_qp_minus26 = priv->fixed_qp_idr - 26;
571 
572  pps->cu_qp_delta_enabled_flag = (ctx->va_rc_mode != VA_RC_CQP);
573  pps->diff_cu_qp_delta_depth = 0;
574 
575 // update pps setting according to queried result
576 #if VA_CHECK_VERSION(1, 13, 0)
577  if (priv->va_features) {
578  VAConfigAttribValEncHEVCFeatures features = { .value = priv->va_features };
579  if (ctx->va_rc_mode != VA_RC_CQP)
580  pps->cu_qp_delta_enabled_flag =
581  !!features.bits.cu_qp_delta;
582 
583  pps->transform_skip_enabled_flag =
584  !!features.bits.transform_skip;
585  // set diff_cu_qp_delta_depth as its max value if cu_qp_delta enabled. Otherwise
586  // 0 will make cu_qp_delta invalid.
587  if (pps->cu_qp_delta_enabled_flag)
588  pps->diff_cu_qp_delta_depth = sps->log2_diff_max_min_luma_coding_block_size;
589  }
590 #endif
591 
592  if (ctx->tile_rows && ctx->tile_cols) {
593  int uniform_spacing;
594 
595  pps->tiles_enabled_flag = 1;
596  pps->num_tile_columns_minus1 = ctx->tile_cols - 1;
597  pps->num_tile_rows_minus1 = ctx->tile_rows - 1;
598 
599  // Test whether the spacing provided matches the H.265 uniform
600  // spacing, and set the flag if it does.
601  uniform_spacing = 1;
602  for (i = 0; i <= pps->num_tile_columns_minus1 &&
603  uniform_spacing; i++) {
604  if (ctx->col_width[i] !=
605  (i + 1) * ctx->slice_block_cols / ctx->tile_cols -
606  i * ctx->slice_block_cols / ctx->tile_cols)
607  uniform_spacing = 0;
608  }
609  for (i = 0; i <= pps->num_tile_rows_minus1 &&
610  uniform_spacing; i++) {
611  if (ctx->row_height[i] !=
612  (i + 1) * ctx->slice_block_rows / ctx->tile_rows -
613  i * ctx->slice_block_rows / ctx->tile_rows)
614  uniform_spacing = 0;
615  }
616  pps->uniform_spacing_flag = uniform_spacing;
617 
618  for (i = 0; i <= pps->num_tile_columns_minus1; i++)
619  pps->column_width_minus1[i] = ctx->col_width[i] - 1;
620  for (i = 0; i <= pps->num_tile_rows_minus1; i++)
621  pps->row_height_minus1[i] = ctx->row_height[i] - 1;
622 
623  pps->loop_filter_across_tiles_enabled_flag = 1;
624  }
625 
626  pps->pps_loop_filter_across_slices_enabled_flag = 1;
627 
628  // Fill VAAPI parameter buffers.
629 
630  *vseq = (VAEncSequenceParameterBufferHEVC) {
631  .general_profile_idc = vps->profile_tier_level.general_profile_idc,
632  .general_level_idc = vps->profile_tier_level.general_level_idc,
633  .general_tier_flag = vps->profile_tier_level.general_tier_flag,
634 
635  .intra_period = ctx->gop_size,
636  .intra_idr_period = ctx->gop_size,
637  .ip_period = ctx->b_per_p + 1,
638  .bits_per_second = ctx->va_bit_rate,
639 
640  .pic_width_in_luma_samples = sps->pic_width_in_luma_samples,
641  .pic_height_in_luma_samples = sps->pic_height_in_luma_samples,
642 
643  .seq_fields.bits = {
644  .chroma_format_idc = sps->chroma_format_idc,
645  .separate_colour_plane_flag = sps->separate_colour_plane_flag,
646  .bit_depth_luma_minus8 = sps->bit_depth_luma_minus8,
647  .bit_depth_chroma_minus8 = sps->bit_depth_chroma_minus8,
648  .scaling_list_enabled_flag = sps->scaling_list_enabled_flag,
649  .strong_intra_smoothing_enabled_flag =
650  sps->strong_intra_smoothing_enabled_flag,
651  .amp_enabled_flag = sps->amp_enabled_flag,
652  .sample_adaptive_offset_enabled_flag =
653  sps->sample_adaptive_offset_enabled_flag,
654  .pcm_enabled_flag = sps->pcm_enabled_flag,
655  .pcm_loop_filter_disabled_flag = sps->pcm_loop_filter_disabled_flag,
656  .sps_temporal_mvp_enabled_flag = sps->sps_temporal_mvp_enabled_flag,
657  },
658 
659  .log2_min_luma_coding_block_size_minus3 =
660  sps->log2_min_luma_coding_block_size_minus3,
661  .log2_diff_max_min_luma_coding_block_size =
662  sps->log2_diff_max_min_luma_coding_block_size,
663  .log2_min_transform_block_size_minus2 =
664  sps->log2_min_luma_transform_block_size_minus2,
665  .log2_diff_max_min_transform_block_size =
666  sps->log2_diff_max_min_luma_transform_block_size,
667  .max_transform_hierarchy_depth_inter =
668  sps->max_transform_hierarchy_depth_inter,
669  .max_transform_hierarchy_depth_intra =
670  sps->max_transform_hierarchy_depth_intra,
671 
672  .pcm_sample_bit_depth_luma_minus1 =
673  sps->pcm_sample_bit_depth_luma_minus1,
674  .pcm_sample_bit_depth_chroma_minus1 =
675  sps->pcm_sample_bit_depth_chroma_minus1,
676  .log2_min_pcm_luma_coding_block_size_minus3 =
677  sps->log2_min_pcm_luma_coding_block_size_minus3,
678  .log2_max_pcm_luma_coding_block_size_minus3 =
679  sps->log2_min_pcm_luma_coding_block_size_minus3 +
680  sps->log2_diff_max_min_pcm_luma_coding_block_size,
681 
682  .vui_parameters_present_flag = 0,
683  };
684 
685  *vpic = (VAEncPictureParameterBufferHEVC) {
686  .decoded_curr_pic = {
687  .picture_id = VA_INVALID_ID,
688  .flags = VA_PICTURE_HEVC_INVALID,
689  },
690 
691  .coded_buf = VA_INVALID_ID,
692 
693  .collocated_ref_pic_index = sps->sps_temporal_mvp_enabled_flag ?
694  0 : 0xff,
695  .last_picture = 0,
696 
697  .pic_init_qp = pps->init_qp_minus26 + 26,
698  .diff_cu_qp_delta_depth = pps->diff_cu_qp_delta_depth,
699  .pps_cb_qp_offset = pps->pps_cb_qp_offset,
700  .pps_cr_qp_offset = pps->pps_cr_qp_offset,
701 
702  .num_tile_columns_minus1 = pps->num_tile_columns_minus1,
703  .num_tile_rows_minus1 = pps->num_tile_rows_minus1,
704 
705  .log2_parallel_merge_level_minus2 = pps->log2_parallel_merge_level_minus2,
706  .ctu_max_bitsize_allowed = 0,
707 
708  .num_ref_idx_l0_default_active_minus1 =
709  pps->num_ref_idx_l0_default_active_minus1,
710  .num_ref_idx_l1_default_active_minus1 =
711  pps->num_ref_idx_l1_default_active_minus1,
712 
713  .slice_pic_parameter_set_id = pps->pps_pic_parameter_set_id,
714 
715  .pic_fields.bits = {
716  .sign_data_hiding_enabled_flag = pps->sign_data_hiding_enabled_flag,
717  .constrained_intra_pred_flag = pps->constrained_intra_pred_flag,
718  .transform_skip_enabled_flag = pps->transform_skip_enabled_flag,
719  .cu_qp_delta_enabled_flag = pps->cu_qp_delta_enabled_flag,
720  .weighted_pred_flag = pps->weighted_pred_flag,
721  .weighted_bipred_flag = pps->weighted_bipred_flag,
722  .transquant_bypass_enabled_flag = pps->transquant_bypass_enabled_flag,
723  .tiles_enabled_flag = pps->tiles_enabled_flag,
724  .entropy_coding_sync_enabled_flag = pps->entropy_coding_sync_enabled_flag,
725  .loop_filter_across_tiles_enabled_flag =
726  pps->loop_filter_across_tiles_enabled_flag,
727  .pps_loop_filter_across_slices_enabled_flag =
728  pps->pps_loop_filter_across_slices_enabled_flag,
729  .scaling_list_data_present_flag = (sps->sps_scaling_list_data_present_flag |
730  pps->pps_scaling_list_data_present_flag),
731  .screen_content_flag = 0,
732  .enable_gpu_weighted_prediction = 0,
733  .no_output_of_prior_pics_flag = 0,
734  },
735  };
736 
737  if (pps->tiles_enabled_flag) {
738  for (i = 0; i <= vpic->num_tile_rows_minus1; i++)
739  vpic->row_height_minus1[i] = pps->row_height_minus1[i];
740  for (i = 0; i <= vpic->num_tile_columns_minus1; i++)
741  vpic->column_width_minus1[i] = pps->column_width_minus1[i];
742  }
743 
744  return 0;
745 }
746 
748  VAAPIEncodePicture *pic)
749 {
750  VAAPIEncodeContext *ctx = avctx->priv_data;
751  VAAPIEncodeH265Context *priv = avctx->priv_data;
752  VAAPIEncodeH265Picture *hpic = pic->priv_data;
753  VAAPIEncodePicture *prev = pic->prev;
754  VAAPIEncodeH265Picture *hprev = prev ? prev->priv_data : NULL;
755  VAEncPictureParameterBufferHEVC *vpic = pic->codec_picture_params;
756  int i;
757 
758  if (pic->type == PICTURE_TYPE_IDR) {
759  av_assert0(pic->display_order == pic->encode_order);
760 
761  hpic->last_idr_frame = pic->display_order;
762 
764  hpic->slice_type = HEVC_SLICE_I;
765  hpic->pic_type = 0;
766  } else {
767  av_assert0(prev);
768  hpic->last_idr_frame = hprev->last_idr_frame;
769 
770  if (pic->type == PICTURE_TYPE_I) {
772  hpic->slice_type = HEVC_SLICE_I;
773  hpic->pic_type = 0;
774  } else if (pic->type == PICTURE_TYPE_P) {
775  av_assert0(pic->refs[0]);
777  hpic->slice_type = HEVC_SLICE_P;
778  hpic->pic_type = 1;
779  } else {
780  VAAPIEncodePicture *irap_ref;
781  av_assert0(pic->refs[0] && pic->refs[1]);
782  for (irap_ref = pic; irap_ref; irap_ref = irap_ref->refs[1]) {
783  if (irap_ref->type == PICTURE_TYPE_I)
784  break;
785  }
786  if (pic->b_depth == ctx->max_b_depth) {
787  hpic->slice_nal_unit = irap_ref ? HEVC_NAL_RASL_N
789  } else {
790  hpic->slice_nal_unit = irap_ref ? HEVC_NAL_RASL_R
792  }
793  hpic->slice_type = HEVC_SLICE_B;
794  hpic->pic_type = 2;
795  }
796  }
797  hpic->pic_order_cnt = pic->display_order - hpic->last_idr_frame;
798 
799  if (priv->aud) {
800  priv->aud_needed = 1;
801  priv->raw_aud = (H265RawAUD) {
802  .nal_unit_header = {
804  .nuh_layer_id = 0,
805  .nuh_temporal_id_plus1 = 1,
806  },
807  .pic_type = hpic->pic_type,
808  };
809  } else {
810  priv->aud_needed = 0;
811  }
812 
813  priv->sei_needed = 0;
814 
815  // Only look for the metadata on I/IDR frame on the output. We
816  // may force an IDR frame on the output where the medadata gets
817  // changed on the input frame.
818  if ((priv->sei & SEI_MASTERING_DISPLAY) &&
819  (pic->type == PICTURE_TYPE_I || pic->type == PICTURE_TYPE_IDR)) {
820  AVFrameSideData *sd =
823 
824  if (sd) {
827 
828  // SEI is needed when both the primaries and luminance are set
829  if (mdm->has_primaries && mdm->has_luminance) {
831  &priv->sei_mastering_display;
832  const int mapping[3] = {1, 2, 0};
833  const int chroma_den = 50000;
834  const int luma_den = 10000;
835 
836  for (i = 0; i < 3; i++) {
837  const int j = mapping[i];
838  mdcv->display_primaries_x[i] =
839  FFMIN(lrint(chroma_den *
840  av_q2d(mdm->display_primaries[j][0])),
841  chroma_den);
842  mdcv->display_primaries_y[i] =
843  FFMIN(lrint(chroma_den *
844  av_q2d(mdm->display_primaries[j][1])),
845  chroma_den);
846  }
847 
848  mdcv->white_point_x =
849  FFMIN(lrint(chroma_den * av_q2d(mdm->white_point[0])),
850  chroma_den);
851  mdcv->white_point_y =
852  FFMIN(lrint(chroma_den * av_q2d(mdm->white_point[1])),
853  chroma_den);
854 
856  lrint(luma_den * av_q2d(mdm->max_luminance));
858  FFMIN(lrint(luma_den * av_q2d(mdm->min_luminance)),
860 
862  }
863  }
864  }
865 
866  if ((priv->sei & SEI_CONTENT_LIGHT_LEVEL) &&
867  (pic->type == PICTURE_TYPE_I || pic->type == PICTURE_TYPE_IDR)) {
868  AVFrameSideData *sd =
871 
872  if (sd) {
877 
878  clli->max_content_light_level = FFMIN(clm->MaxCLL, 65535);
879  clli->max_pic_average_light_level = FFMIN(clm->MaxFALL, 65535);
880 
882  }
883  }
884 
885  vpic->decoded_curr_pic = (VAPictureHEVC) {
886  .picture_id = pic->recon_surface,
887  .pic_order_cnt = hpic->pic_order_cnt,
888  .flags = 0,
889  };
890 
891  for (i = 0; i < pic->nb_refs; i++) {
892  VAAPIEncodePicture *ref = pic->refs[i];
894 
895  av_assert0(ref && ref->encode_order < pic->encode_order);
896  href = ref->priv_data;
897 
898  vpic->reference_frames[i] = (VAPictureHEVC) {
899  .picture_id = ref->recon_surface,
900  .pic_order_cnt = href->pic_order_cnt,
901  .flags = (ref->display_order < pic->display_order ?
902  VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE : 0) |
903  (ref->display_order > pic->display_order ?
904  VA_PICTURE_HEVC_RPS_ST_CURR_AFTER : 0),
905  };
906  }
907  for (; i < FF_ARRAY_ELEMS(vpic->reference_frames); i++) {
908  vpic->reference_frames[i] = (VAPictureHEVC) {
909  .picture_id = VA_INVALID_ID,
910  .flags = VA_PICTURE_HEVC_INVALID,
911  };
912  }
913 
914  vpic->coded_buf = pic->output_buffer;
915 
916  vpic->nal_unit_type = hpic->slice_nal_unit;
917 
918  switch (pic->type) {
919  case PICTURE_TYPE_IDR:
920  vpic->pic_fields.bits.idr_pic_flag = 1;
921  vpic->pic_fields.bits.coding_type = 1;
922  vpic->pic_fields.bits.reference_pic_flag = 1;
923  break;
924  case PICTURE_TYPE_I:
925  vpic->pic_fields.bits.idr_pic_flag = 0;
926  vpic->pic_fields.bits.coding_type = 1;
927  vpic->pic_fields.bits.reference_pic_flag = 1;
928  break;
929  case PICTURE_TYPE_P:
930  vpic->pic_fields.bits.idr_pic_flag = 0;
931  vpic->pic_fields.bits.coding_type = 2;
932  vpic->pic_fields.bits.reference_pic_flag = 1;
933  break;
934  case PICTURE_TYPE_B:
935  vpic->pic_fields.bits.idr_pic_flag = 0;
936  vpic->pic_fields.bits.coding_type = 3;
937  vpic->pic_fields.bits.reference_pic_flag = 0;
938  break;
939  default:
940  av_assert0(0 && "invalid picture type");
941  }
942 
943  return 0;
944 }
945 
947  VAAPIEncodePicture *pic,
948  VAAPIEncodeSlice *slice)
949 {
950  VAAPIEncodeContext *ctx = avctx->priv_data;
951  VAAPIEncodeH265Context *priv = avctx->priv_data;
952  VAAPIEncodeH265Picture *hpic = pic->priv_data;
953  const H265RawSPS *sps = &priv->raw_sps;
954  const H265RawPPS *pps = &priv->raw_pps;
955  H265RawSliceHeader *sh = &priv->raw_slice.header;
956  VAEncPictureParameterBufferHEVC *vpic = pic->codec_picture_params;
957  VAEncSliceParameterBufferHEVC *vslice = slice->codec_slice_params;
958  int i;
959 
961  .nal_unit_type = hpic->slice_nal_unit,
962  .nuh_layer_id = 0,
963  .nuh_temporal_id_plus1 = 1,
964  };
965 
966  sh->slice_pic_parameter_set_id = pps->pps_pic_parameter_set_id;
967 
968  sh->first_slice_segment_in_pic_flag = slice->index == 0;
969  sh->slice_segment_address = slice->block_start;
970 
971  sh->slice_type = hpic->slice_type;
972 
973  if (sh->slice_type == HEVC_SLICE_P && ctx->p_to_gpb)
974  sh->slice_type = HEVC_SLICE_B;
975 
977  (1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4)) - 1;
978 
979  if (pic->type != PICTURE_TYPE_IDR) {
980  H265RawSTRefPicSet *rps;
981  const VAAPIEncodeH265Picture *strp;
982  int rps_poc[MAX_DPB_SIZE];
983  int rps_used[MAX_DPB_SIZE];
984  int i, j, poc, rps_pics;
985 
987 
988  rps = &sh->short_term_ref_pic_set;
989  memset(rps, 0, sizeof(*rps));
990 
991  rps_pics = 0;
992  for (i = 0; i < pic->nb_refs; i++) {
993  strp = pic->refs[i]->priv_data;
994  rps_poc[rps_pics] = strp->pic_order_cnt;
995  rps_used[rps_pics] = 1;
996  ++rps_pics;
997  }
998  for (i = 0; i < pic->nb_dpb_pics; i++) {
999  if (pic->dpb[i] == pic)
1000  continue;
1001  for (j = 0; j < pic->nb_refs; j++) {
1002  if (pic->dpb[i] == pic->refs[j])
1003  break;
1004  }
1005  if (j < pic->nb_refs)
1006  continue;
1007  strp = pic->dpb[i]->priv_data;
1008  rps_poc[rps_pics] = strp->pic_order_cnt;
1009  rps_used[rps_pics] = 0;
1010  ++rps_pics;
1011  }
1012 
1013  for (i = 1; i < rps_pics; i++) {
1014  for (j = i; j > 0; j--) {
1015  if (rps_poc[j] > rps_poc[j - 1])
1016  break;
1017  av_assert0(rps_poc[j] != rps_poc[j - 1]);
1018  FFSWAP(int, rps_poc[j], rps_poc[j - 1]);
1019  FFSWAP(int, rps_used[j], rps_used[j - 1]);
1020  }
1021  }
1022 
1023  av_log(avctx, AV_LOG_DEBUG, "RPS for POC %d:",
1024  hpic->pic_order_cnt);
1025  for (i = 0; i < rps_pics; i++) {
1026  av_log(avctx, AV_LOG_DEBUG, " (%d,%d)",
1027  rps_poc[i], rps_used[i]);
1028  }
1029  av_log(avctx, AV_LOG_DEBUG, "\n");
1030 
1031  for (i = 0; i < rps_pics; i++) {
1032  av_assert0(rps_poc[i] != hpic->pic_order_cnt);
1033  if (rps_poc[i] > hpic->pic_order_cnt)
1034  break;
1035  }
1036 
1037  rps->num_negative_pics = i;
1038  poc = hpic->pic_order_cnt;
1039  for (j = i - 1; j >= 0; j--) {
1040  rps->delta_poc_s0_minus1[i - 1 - j] = poc - rps_poc[j] - 1;
1041  rps->used_by_curr_pic_s0_flag[i - 1 - j] = rps_used[j];
1042  poc = rps_poc[j];
1043  }
1044 
1045  rps->num_positive_pics = rps_pics - i;
1046  poc = hpic->pic_order_cnt;
1047  for (j = i; j < rps_pics; j++) {
1048  rps->delta_poc_s1_minus1[j - i] = rps_poc[j] - poc - 1;
1049  rps->used_by_curr_pic_s1_flag[j - i] = rps_used[j];
1050  poc = rps_poc[j];
1051  }
1052 
1053  sh->num_long_term_sps = 0;
1054  sh->num_long_term_pics = 0;
1055 
1056  // when this flag is not present, it is inerred to 1.
1057  sh->collocated_from_l0_flag = 1;
1059  sps->sps_temporal_mvp_enabled_flag;
1061  if (sh->slice_type == HEVC_SLICE_B)
1062  sh->collocated_from_l0_flag = 1;
1063  sh->collocated_ref_idx = 0;
1064  }
1065 
1067  sh->num_ref_idx_l0_active_minus1 = pps->num_ref_idx_l0_default_active_minus1;
1068  sh->num_ref_idx_l1_active_minus1 = pps->num_ref_idx_l1_default_active_minus1;
1069  }
1070 
1072  sps->sample_adaptive_offset_enabled_flag;
1073 
1074  if (pic->type == PICTURE_TYPE_B)
1075  sh->slice_qp_delta = priv->fixed_qp_b - (pps->init_qp_minus26 + 26);
1076  else if (pic->type == PICTURE_TYPE_P)
1077  sh->slice_qp_delta = priv->fixed_qp_p - (pps->init_qp_minus26 + 26);
1078  else
1079  sh->slice_qp_delta = priv->fixed_qp_idr - (pps->init_qp_minus26 + 26);
1080 
1081 
1082  *vslice = (VAEncSliceParameterBufferHEVC) {
1083  .slice_segment_address = sh->slice_segment_address,
1084  .num_ctu_in_slice = slice->block_size,
1085 
1086  .slice_type = sh->slice_type,
1087  .slice_pic_parameter_set_id = sh->slice_pic_parameter_set_id,
1088 
1089  .num_ref_idx_l0_active_minus1 = sh->num_ref_idx_l0_active_minus1,
1090  .num_ref_idx_l1_active_minus1 = sh->num_ref_idx_l1_active_minus1,
1091 
1092  .luma_log2_weight_denom = sh->luma_log2_weight_denom,
1093  .delta_chroma_log2_weight_denom = sh->delta_chroma_log2_weight_denom,
1094 
1095  .max_num_merge_cand = 5 - sh->five_minus_max_num_merge_cand,
1096 
1097  .slice_qp_delta = sh->slice_qp_delta,
1098  .slice_cb_qp_offset = sh->slice_cb_qp_offset,
1099  .slice_cr_qp_offset = sh->slice_cr_qp_offset,
1100 
1101  .slice_beta_offset_div2 = sh->slice_beta_offset_div2,
1102  .slice_tc_offset_div2 = sh->slice_tc_offset_div2,
1103 
1104  .slice_fields.bits = {
1105  .last_slice_of_pic_flag = slice->index == pic->nb_slices - 1,
1106  .dependent_slice_segment_flag = sh->dependent_slice_segment_flag,
1107  .colour_plane_id = sh->colour_plane_id,
1108  .slice_temporal_mvp_enabled_flag =
1110  .slice_sao_luma_flag = sh->slice_sao_luma_flag,
1111  .slice_sao_chroma_flag = sh->slice_sao_chroma_flag,
1112  .num_ref_idx_active_override_flag =
1114  .mvd_l1_zero_flag = sh->mvd_l1_zero_flag,
1115  .cabac_init_flag = sh->cabac_init_flag,
1116  .slice_deblocking_filter_disabled_flag =
1118  .slice_loop_filter_across_slices_enabled_flag =
1120  .collocated_from_l0_flag = sh->collocated_from_l0_flag,
1121  },
1122  };
1123 
1124  for (i = 0; i < FF_ARRAY_ELEMS(vslice->ref_pic_list0); i++) {
1125  vslice->ref_pic_list0[i].picture_id = VA_INVALID_ID;
1126  vslice->ref_pic_list0[i].flags = VA_PICTURE_HEVC_INVALID;
1127  vslice->ref_pic_list1[i].picture_id = VA_INVALID_ID;
1128  vslice->ref_pic_list1[i].flags = VA_PICTURE_HEVC_INVALID;
1129  }
1130 
1131  av_assert0(pic->nb_refs <= 2);
1132  if (pic->nb_refs >= 1) {
1133  // Backward reference for P- or B-frame.
1134  av_assert0(pic->type == PICTURE_TYPE_P ||
1135  pic->type == PICTURE_TYPE_B);
1136  vslice->ref_pic_list0[0] = vpic->reference_frames[0];
1137  if (ctx->p_to_gpb && pic->type == PICTURE_TYPE_P)
1138  // Reference for GPB B-frame, L0 == L1
1139  vslice->ref_pic_list1[0] = vpic->reference_frames[0];
1140  }
1141  if (pic->nb_refs >= 2) {
1142  // Forward reference for B-frame.
1143  av_assert0(pic->type == PICTURE_TYPE_B);
1144  vslice->ref_pic_list1[0] = vpic->reference_frames[1];
1145  }
1146 
1147  if (pic->type == PICTURE_TYPE_P && ctx->p_to_gpb) {
1148  vslice->slice_type = HEVC_SLICE_B;
1149  for (i = 0; i < FF_ARRAY_ELEMS(vslice->ref_pic_list0); i++) {
1150  vslice->ref_pic_list1[i].picture_id = vslice->ref_pic_list0[i].picture_id;
1151  vslice->ref_pic_list1[i].flags = vslice->ref_pic_list0[i].flags;
1152  }
1153  }
1154 
1155  return 0;
1156 }
1157 
1159 {
1160  VAAPIEncodeContext *ctx = avctx->priv_data;
1161  VAAPIEncodeH265Context *priv = avctx->priv_data;
1162 
1163 #if VA_CHECK_VERSION(1, 13, 0)
1164  {
1165  VAConfigAttribValEncHEVCBlockSizes block_size;
1166  VAConfigAttrib attr;
1167  VAStatus vas;
1168 
1169  attr.type = VAConfigAttribEncHEVCFeatures;
1170  vas = vaGetConfigAttributes(ctx->hwctx->display, ctx->va_profile,
1171  ctx->va_entrypoint, &attr, 1);
1172  if (vas != VA_STATUS_SUCCESS) {
1173  av_log(avctx, AV_LOG_ERROR, "Failed to query encoder "
1174  "features, using guessed defaults.\n");
1175  return AVERROR_EXTERNAL;
1176  } else if (attr.value == VA_ATTRIB_NOT_SUPPORTED) {
1177  av_log(avctx, AV_LOG_WARNING, "Driver does not advertise "
1178  "encoder features, using guessed defaults.\n");
1179  } else {
1180  priv->va_features = attr.value;
1181  }
1182 
1183  attr.type = VAConfigAttribEncHEVCBlockSizes;
1184  vas = vaGetConfigAttributes(ctx->hwctx->display, ctx->va_profile,
1185  ctx->va_entrypoint, &attr, 1);
1186  if (vas != VA_STATUS_SUCCESS) {
1187  av_log(avctx, AV_LOG_ERROR, "Failed to query encoder "
1188  "block size, using guessed defaults.\n");
1189  return AVERROR_EXTERNAL;
1190  } else if (attr.value == VA_ATTRIB_NOT_SUPPORTED) {
1191  av_log(avctx, AV_LOG_WARNING, "Driver does not advertise "
1192  "encoder block size, using guessed defaults.\n");
1193  } else {
1194  priv->va_bs = block_size.value = attr.value;
1195 
1196  priv->ctu_size =
1197  1 << block_size.bits.log2_max_coding_tree_block_size_minus3 + 3;
1198  priv->min_cb_size =
1199  1 << block_size.bits.log2_min_luma_coding_block_size_minus3 + 3;
1200  }
1201  }
1202 #endif
1203 
1204  if (!priv->ctu_size) {
1205  priv->ctu_size = 32;
1206  priv->min_cb_size = 16;
1207  }
1208  av_log(avctx, AV_LOG_VERBOSE, "Using CTU size %dx%d, "
1209  "min CB size %dx%d.\n", priv->ctu_size, priv->ctu_size,
1210  priv->min_cb_size, priv->min_cb_size);
1211 
1212  ctx->surface_width = FFALIGN(avctx->width, priv->min_cb_size);
1213  ctx->surface_height = FFALIGN(avctx->height, priv->min_cb_size);
1214 
1215  ctx->slice_block_width = ctx->slice_block_height = priv->ctu_size;
1216 
1217  return 0;
1218 }
1219 
1221 {
1222  VAAPIEncodeContext *ctx = avctx->priv_data;
1223  VAAPIEncodeH265Context *priv = avctx->priv_data;
1224  int err;
1225 
1226  err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_HEVC, avctx);
1227  if (err < 0)
1228  return err;
1229 
1230  if (ctx->va_rc_mode == VA_RC_CQP) {
1231  // Note that VAAPI only supports positive QP values - the range is
1232  // therefore always bounded below by 1, even in 10-bit mode where
1233  // it should go down to -12.
1234 
1235  priv->fixed_qp_p = av_clip(ctx->rc_quality, 1, 51);
1236  if (avctx->i_quant_factor > 0.0)
1237  priv->fixed_qp_idr =
1238  av_clip((avctx->i_quant_factor * priv->fixed_qp_p +
1239  avctx->i_quant_offset) + 0.5, 1, 51);
1240  else
1241  priv->fixed_qp_idr = priv->fixed_qp_p;
1242  if (avctx->b_quant_factor > 0.0)
1243  priv->fixed_qp_b =
1244  av_clip((avctx->b_quant_factor * priv->fixed_qp_p +
1245  avctx->b_quant_offset) + 0.5, 1, 51);
1246  else
1247  priv->fixed_qp_b = priv->fixed_qp_p;
1248 
1249  av_log(avctx, AV_LOG_DEBUG, "Using fixed QP = "
1250  "%d / %d / %d for IDR- / P- / B-frames.\n",
1251  priv->fixed_qp_idr, priv->fixed_qp_p, priv->fixed_qp_b);
1252 
1253  } else {
1254  // These still need to be set for init_qp/slice_qp_delta.
1255  priv->fixed_qp_idr = 30;
1256  priv->fixed_qp_p = 30;
1257  priv->fixed_qp_b = 30;
1258  }
1259 
1260  ctx->roi_quant_range = 51 + 6 * (ctx->profile->depth - 8);
1261 
1262  return 0;
1263 }
1264 
1266  { FF_PROFILE_HEVC_MAIN, 8, 3, 1, 1, VAProfileHEVCMain },
1267  { FF_PROFILE_HEVC_REXT, 8, 3, 1, 1, VAProfileHEVCMain },
1268 #if VA_CHECK_VERSION(0, 37, 0)
1269  { FF_PROFILE_HEVC_MAIN_10, 10, 3, 1, 1, VAProfileHEVCMain10 },
1270  { FF_PROFILE_HEVC_REXT, 10, 3, 1, 1, VAProfileHEVCMain10 },
1271 #endif
1272 #if VA_CHECK_VERSION(1, 2, 0)
1273  { FF_PROFILE_HEVC_REXT, 12, 3, 1, 1, VAProfileHEVCMain12 },
1274  { FF_PROFILE_HEVC_REXT, 8, 3, 1, 0, VAProfileHEVCMain422_10 },
1275  { FF_PROFILE_HEVC_REXT, 10, 3, 1, 0, VAProfileHEVCMain422_10 },
1276  { FF_PROFILE_HEVC_REXT, 12, 3, 1, 0, VAProfileHEVCMain422_12 },
1277  { FF_PROFILE_HEVC_REXT, 8, 3, 0, 0, VAProfileHEVCMain444 },
1278  { FF_PROFILE_HEVC_REXT, 10, 3, 0, 0, VAProfileHEVCMain444_10 },
1279  { FF_PROFILE_HEVC_REXT, 12, 3, 0, 0, VAProfileHEVCMain444_12 },
1280 #endif
1281  { FF_PROFILE_UNKNOWN }
1282 };
1283 
1286 
1287  .flags = FLAG_SLICE_CONTROL |
1288  FLAG_B_PICTURES |
1291 
1292  .default_quality = 25,
1293 
1294  .get_encoder_caps = &vaapi_encode_h265_get_encoder_caps,
1295  .configure = &vaapi_encode_h265_configure,
1296 
1297  .picture_priv_data_size = sizeof(VAAPIEncodeH265Picture),
1298 
1299  .sequence_params_size = sizeof(VAEncSequenceParameterBufferHEVC),
1300  .init_sequence_params = &vaapi_encode_h265_init_sequence_params,
1301 
1302  .picture_params_size = sizeof(VAEncPictureParameterBufferHEVC),
1303  .init_picture_params = &vaapi_encode_h265_init_picture_params,
1304 
1305  .slice_params_size = sizeof(VAEncSliceParameterBufferHEVC),
1306  .init_slice_params = &vaapi_encode_h265_init_slice_params,
1307 
1308  .sequence_header_type = VAEncPackedHeaderSequence,
1309  .write_sequence_header = &vaapi_encode_h265_write_sequence_header,
1310 
1311  .slice_header_type = VAEncPackedHeaderHEVC_Slice,
1312  .write_slice_header = &vaapi_encode_h265_write_slice_header,
1313 
1314  .write_extra_header = &vaapi_encode_h265_write_extra_header,
1315 };
1316 
1318 {
1319  VAAPIEncodeContext *ctx = avctx->priv_data;
1320  VAAPIEncodeH265Context *priv = avctx->priv_data;
1321 
1322  ctx->codec = &vaapi_encode_type_h265;
1323 
1324  if (avctx->profile == FF_PROFILE_UNKNOWN)
1325  avctx->profile = priv->profile;
1326  if (avctx->level == FF_LEVEL_UNKNOWN)
1327  avctx->level = priv->level;
1328 
1329  if (avctx->level != FF_LEVEL_UNKNOWN && avctx->level & ~0xff) {
1330  av_log(avctx, AV_LOG_ERROR, "Invalid level %d: must fit "
1331  "in 8-bit unsigned integer.\n", avctx->level);
1332  return AVERROR(EINVAL);
1333  }
1334 
1335  ctx->desired_packed_headers =
1336  VA_ENC_PACKED_HEADER_SEQUENCE | // VPS, SPS and PPS.
1337  VA_ENC_PACKED_HEADER_SLICE | // Slice headers.
1338  VA_ENC_PACKED_HEADER_MISC; // SEI
1339 
1340  if (priv->qp > 0)
1341  ctx->explicit_qp = priv->qp;
1342 
1343  return ff_vaapi_encode_init(avctx);
1344 }
1345 
1347 {
1348  VAAPIEncodeH265Context *priv = avctx->priv_data;
1349 
1351  ff_cbs_close(&priv->cbc);
1352 
1353  return ff_vaapi_encode_close(avctx);
1354 }
1355 
1356 #define OFFSET(x) offsetof(VAAPIEncodeH265Context, x)
1357 #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
1361 
1362  { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)",
1363  OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 52, FLAGS },
1364 
1365  { "aud", "Include AUD",
1366  OFFSET(aud), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
1367 
1368  { "profile", "Set profile (general_profile_idc)",
1370  { .i64 = FF_PROFILE_UNKNOWN }, FF_PROFILE_UNKNOWN, 0xff, FLAGS, "profile" },
1371 
1372 #define PROFILE(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
1373  { .i64 = value }, 0, 0, FLAGS, "profile"
1374  { PROFILE("main", FF_PROFILE_HEVC_MAIN) },
1375  { PROFILE("main10", FF_PROFILE_HEVC_MAIN_10) },
1376  { PROFILE("rext", FF_PROFILE_HEVC_REXT) },
1377 #undef PROFILE
1378 
1379  { "tier", "Set tier (general_tier_flag)",
1380  OFFSET(tier), AV_OPT_TYPE_INT,
1381  { .i64 = 0 }, 0, 1, FLAGS, "tier" },
1382  { "main", NULL, 0, AV_OPT_TYPE_CONST,
1383  { .i64 = 0 }, 0, 0, FLAGS, "tier" },
1384  { "high", NULL, 0, AV_OPT_TYPE_CONST,
1385  { .i64 = 1 }, 0, 0, FLAGS, "tier" },
1386 
1387  { "level", "Set level (general_level_idc)",
1389  { .i64 = FF_LEVEL_UNKNOWN }, FF_LEVEL_UNKNOWN, 0xff, FLAGS, "level" },
1390 
1391 #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
1392  { .i64 = value }, 0, 0, FLAGS, "level"
1393  { LEVEL("1", 30) },
1394  { LEVEL("2", 60) },
1395  { LEVEL("2.1", 63) },
1396  { LEVEL("3", 90) },
1397  { LEVEL("3.1", 93) },
1398  { LEVEL("4", 120) },
1399  { LEVEL("4.1", 123) },
1400  { LEVEL("5", 150) },
1401  { LEVEL("5.1", 153) },
1402  { LEVEL("5.2", 156) },
1403  { LEVEL("6", 180) },
1404  { LEVEL("6.1", 183) },
1405  { LEVEL("6.2", 186) },
1406 #undef LEVEL
1407 
1408  { "sei", "Set SEI to include",
1411  0, INT_MAX, FLAGS, "sei" },
1412  { "hdr",
1413  "Include HDR metadata for mastering display colour volume "
1414  "and content light level information",
1415  0, AV_OPT_TYPE_CONST,
1417  INT_MIN, INT_MAX, FLAGS, "sei" },
1418 
1419  { "tiles", "Tile columns x rows",
1420  OFFSET(common.tile_cols), AV_OPT_TYPE_IMAGE_SIZE,
1421  { .str = NULL }, 0, 0, FLAGS },
1422 
1423  { NULL },
1424 };
1425 
1427  { "b", "0" },
1428  { "bf", "2" },
1429  { "g", "120" },
1430  { "i_qfactor", "1" },
1431  { "i_qoffset", "0" },
1432  { "b_qfactor", "6/5" },
1433  { "b_qoffset", "0" },
1434  { "qmin", "-1" },
1435  { "qmax", "-1" },
1436  { NULL },
1437 };
1438 
1440  .class_name = "h265_vaapi",
1441  .item_name = av_default_item_name,
1442  .option = vaapi_encode_h265_options,
1443  .version = LIBAVUTIL_VERSION_INT,
1444 };
1445 
1447  .p.name = "hevc_vaapi",
1448  CODEC_LONG_NAME("H.265/HEVC (VAAPI)"),
1449  .p.type = AVMEDIA_TYPE_VIDEO,
1450  .p.id = AV_CODEC_ID_HEVC,
1451  .priv_data_size = sizeof(VAAPIEncodeH265Context),
1454  .close = &vaapi_encode_h265_close,
1455  .p.priv_class = &vaapi_encode_h265_class,
1456  .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE |
1458  .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
1460  .defaults = vaapi_encode_h265_defaults,
1461  .p.pix_fmts = (const enum AVPixelFormat[]) {
1464  },
1465  .hw_configs = ff_vaapi_encode_hw_configs,
1466  .p.wrapper_name = "vaapi",
1467 };
H265RawSliceHeader::slice_sao_chroma_flag
uint8_t slice_sao_chroma_flag
Definition: cbs_h265.h:476
AVMasteringDisplayMetadata::has_primaries
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
Definition: mastering_display_metadata.h:62
H265RawSliceHeader::collocated_from_l0_flag
uint8_t collocated_from_l0_flag
Definition: cbs_h265.h:489
H265RawVUI::log2_max_mv_length_horizontal
uint8_t log2_max_mv_length_horizontal
Definition: cbs_h265.h:173
FF_PROFILE_HEVC_REXT
#define FF_PROFILE_HEVC_REXT
Definition: avcodec.h:1641
SEIRawMasteringDisplayColourVolume::display_primaries_x
uint16_t display_primaries_x[3]
Definition: cbs_sei.h:51
H265RawSliceHeader::colour_plane_id
uint8_t colour_plane_id
Definition: cbs_h265.h:457
VAAPIEncodeH265Context::va_features
uint32_t va_features
Definition: vaapi_encode_h265.c:60
bit_depth
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
Definition: af_astats.c:226
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
VAAPIEncodeSlice::codec_slice_params
void * codec_slice_params
Definition: vaapi_encode.h:69
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:64
H265RawSliceHeader::first_slice_segment_in_pic_flag
uint8_t first_slice_segment_in_pic_flag
Definition: cbs_h265.h:446
H265RawSliceHeader::num_ref_idx_l0_active_minus1
uint8_t num_ref_idx_l0_active_minus1
Definition: cbs_h265.h:479
ff_cbs_sei_add_message
int ff_cbs_sei_add_message(CodedBitstreamContext *ctx, CodedBitstreamFragment *au, int prefix, uint32_t payload_type, void *payload_data, AVBufferRef *payload_buf)
Add an SEI message to an access unit.
Definition: cbs_sei.c:247
level
uint8_t level
Definition: svq3.c:204
av_clip
#define av_clip
Definition: common.h:95
H265RawVUI::bitstream_restriction_flag
uint8_t bitstream_restriction_flag
Definition: cbs_h265.h:166
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:42
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
H265RawSliceHeader::num_ref_idx_active_override_flag
uint8_t num_ref_idx_active_override_flag
Definition: cbs_h265.h:478
H265RawProfileTierLevel::general_interlaced_source_flag
uint8_t general_interlaced_source_flag
Definition: cbs_h265.h:43
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:975
ff_ctz
#define ff_ctz
Definition: intmath.h:107
H265RawProfileTierLevel::general_level_idc
uint8_t general_level_idc
Definition: cbs_h265.h:60
PICTURE_TYPE_IDR
@ PICTURE_TYPE_IDR
Definition: vaapi_encode.h:57
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:691
ff_cbs_fragment_free
av_cold void ff_cbs_fragment_free(CodedBitstreamFragment *frag)
Free the units array of a fragment in addition to what ff_cbs_fragment_reset does.
Definition: cbs.c:171
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2858
AVERROR_EOF
#define AVERROR_EOF
End of file.
Definition: error.h:57
AV_CODEC_CAP_HARDWARE
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition: codec.h:162
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
AVMasteringDisplayMetadata::has_luminance
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
Definition: mastering_display_metadata.h:67
H265RawSliceHeader::slice_deblocking_filter_disabled_flag
uint8_t slice_deblocking_filter_disabled_flag
Definition: cbs_h265.h:519
VAAPIEncodeH265Context::raw_aud
H265RawAUD raw_aud
Definition: vaapi_encode_h265.c:80
H265RawVUI::colour_primaries
uint8_t colour_primaries
Definition: cbs_h265.h:140
H265RawSlice::header
H265RawSliceHeader header
Definition: cbs_h265.h:534
VAAPIEncodeH265Context::cbc
CodedBitstreamContext * cbc
Definition: vaapi_encode_h265.c:89
VAAPIEncodeH265Context::raw_pps
H265RawPPS raw_pps
Definition: vaapi_encode_h265.c:83
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:102
H265RawVUI
Definition: cbs_h265.h:127
vaapi_encode_h265_add_nal
static int vaapi_encode_h265_add_nal(AVCodecContext *avctx, CodedBitstreamFragment *au, void *nal_unit)
Definition: vaapi_encode_h265.c:122
pixdesc.h
VAAPIEncodeH265Context::raw_sps
H265RawSPS raw_sps
Definition: vaapi_encode_h265.c:82
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:968
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:661
ff_cbs_fragment_reset
void ff_cbs_fragment_reset(CodedBitstreamFragment *frag)
Free the units contained in a fragment as well as the fragment's own data buffer, but not the units a...
Definition: cbs.c:157
H265RawSTRefPicSet::delta_poc_s1_minus1
uint16_t delta_poc_s1_minus1[HEVC_MAX_REFS]
Definition: cbs_h265.h:233
H265RawProfileTierLevel::general_max_8bit_constraint_flag
uint8_t general_max_8bit_constraint_flag
Definition: cbs_h265.h:49
H265RawVUI::aspect_ratio_info_present_flag
uint8_t aspect_ratio_info_present_flag
Definition: cbs_h265.h:128
CodedBitstreamContext
Context structure for coded bitstream operations.
Definition: cbs.h:173
VAAPIEncodeSlice
Definition: vaapi_encode.h:63
AVOption
AVOption.
Definition: opt.h:251
VAAPIEncodePicture::refs
struct VAAPIEncodePicture * refs[MAX_PICTURE_REFERENCES]
Definition: vaapi_encode.h:118
H265RawSTRefPicSet::used_by_curr_pic_s1_flag
uint8_t used_by_curr_pic_s1_flag[HEVC_MAX_REFS]
Definition: cbs_h265.h:234
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:561
H265RawSliceHeader::slice_temporal_mvp_enabled_flag
uint8_t slice_temporal_mvp_enabled_flag
Definition: cbs_h265.h:473
data
const char data[16]
Definition: mxf.c:146
AVCodecContext::b_quant_offset
float b_quant_offset
qscale offset between IP and B-frames
Definition: avcodec.h:686
VAAPIEncodeSlice::block_start
int block_start
Definition: vaapi_encode.h:67
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:119
HEVC_NAL_RASL_N
@ HEVC_NAL_RASL_N
Definition: hevc.h:37
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:196
H265RawVUI::vui_timing_info_present_flag
uint8_t vui_timing_info_present_flag
Definition: cbs_h265.h:158
ff_vaapi_encode_close
av_cold int ff_vaapi_encode_close(AVCodecContext *avctx)
Definition: vaapi_encode.c:2744
cbs.h
cbs_h265.h
FF_LEVEL_UNKNOWN
#define FF_LEVEL_UNKNOWN
Definition: avcodec.h:1677
VAAPIEncodeSlice::index
int index
Definition: vaapi_encode.h:64
VAAPIEncodePicture::nb_refs
int nb_refs
Definition: vaapi_encode.h:117
VAAPIEncodeH265Context::raw_vps
H265RawVPS raw_vps
Definition: vaapi_encode_h265.c:81
H265RawProfileTierLevel::general_frame_only_constraint_flag
uint8_t general_frame_only_constraint_flag
Definition: cbs_h265.h:45
H265RawSliceHeader::num_long_term_sps
uint8_t num_long_term_sps
Definition: cbs_h265.h:465
H265RawSliceHeader::luma_log2_weight_denom
uint8_t luma_log2_weight_denom
Definition: cbs_h265.h:492
H265RawVUI::log2_max_mv_length_vertical
uint8_t log2_max_mv_length_vertical
Definition: cbs_h265.h:174
VAAPIEncodeH265Context::profile
int profile
Definition: vaapi_encode_h265.c:69
H265RawSliceHeader::five_minus_max_num_merge_cand
uint8_t five_minus_max_num_merge_cand
Definition: cbs_h265.h:507
ff_cbs_close
av_cold void ff_cbs_close(CodedBitstreamContext **ctx_ptr)
Close a context and free all internal state.
Definition: cbs.c:127
H265LevelDescriptor
Definition: h265_profile_level.h:27
H265RawProfileTierLevel::general_max_422chroma_constraint_flag
uint8_t general_max_422chroma_constraint_flag
Definition: cbs_h265.h:50
H265RawSPS
Definition: cbs_h265.h:244
H265RawVPS
Definition: cbs_h265.h:183
vaapi_encode_h265_close
static av_cold int vaapi_encode_h265_close(AVCodecContext *avctx)
Definition: vaapi_encode_h265.c:1346
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:98
H265RawPPS
Definition: cbs_h265.h:346
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:1735
SEIRawContentLightLevelInfo
Definition: cbs_sei.h:59
H265RawVUI::video_format
uint8_t video_format
Definition: cbs_h265.h:137
H265RawVUI::max_bits_per_min_cu_denom
uint8_t max_bits_per_min_cu_denom
Definition: cbs_h265.h:172
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:703
H265RawProfileTierLevel::general_progressive_source_flag
uint8_t general_progressive_source_flag
Definition: cbs_h265.h:42
FFCodecDefault
Definition: codec_internal.h:89
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:123
H265RawSTRefPicSet::used_by_curr_pic_s0_flag
uint8_t used_by_curr_pic_s0_flag[HEVC_MAX_REFS]
Definition: cbs_h265.h:232
FLAG_NON_IDR_KEY_PICTURES
@ FLAG_NON_IDR_KEY_PICTURES
Definition: vaapi_encode.h:378
H265RawSliceHeader::num_long_term_pics
uint8_t num_long_term_pics
Definition: cbs_h265.h:466
vaapi_encode.h
fail
#define fail()
Definition: checkasm.h:134
vaapi_encode_h265_init_sequence_params
static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx)
Definition: vaapi_encode_h265.c:250
H265RawSTRefPicSet::delta_poc_s0_minus1
uint16_t delta_poc_s0_minus1[HEVC_MAX_REFS]
Definition: cbs_h265.h:231
VAAPIEncodePicture
Definition: vaapi_encode.h:72
H265RawSliceHeader::short_term_ref_pic_set
H265RawSTRefPicSet short_term_ref_pic_set
Definition: cbs_h265.h:462
SEIRawMasteringDisplayColourVolume::max_display_mastering_luminance
uint32_t max_display_mastering_luminance
Definition: cbs_sei.h:55
vaapi_encode_h265_class
static const AVClass vaapi_encode_h265_class
Definition: vaapi_encode_h265.c:1439
H265RawProfileTierLevel::general_max_12bit_constraint_flag
uint8_t general_max_12bit_constraint_flag
Definition: cbs_h265.h:47
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
H265RawSliceHeader::mvd_l1_zero_flag
uint8_t mvd_l1_zero_flag
Definition: cbs_h265.h:487
H265RawProfileTierLevel::general_intra_constraint_flag
uint8_t general_intra_constraint_flag
Definition: cbs_h265.h:53
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
FLAG_B_PICTURES
@ FLAG_B_PICTURES
Definition: vaapi_encode.h:373
PICTURE_TYPE_I
@ PICTURE_TYPE_I
Definition: vaapi_encode.h:58
VAAPIEncodeH265Context::fixed_qp_idr
int fixed_qp_idr
Definition: vaapi_encode_h265.c:75
H265RawVUI::sar_height
uint16_t sar_height
Definition: cbs_h265.h:131
H265RawSliceHeader::collocated_ref_idx
uint8_t collocated_ref_idx
Definition: cbs_h265.h:490
avassert.h
lrint
#define lrint
Definition: tablegen.h:53
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:961
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
H265RawSliceHeader::slice_cb_qp_offset
int8_t slice_cb_qp_offset
Definition: cbs_h265.h:511
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:90
H265RawSliceHeader::slice_pic_order_cnt_lsb
uint16_t slice_pic_order_cnt_lsb
Definition: cbs_h265.h:459
FF_PROFILE_HEVC_MAIN
#define FF_PROFILE_HEVC_MAIN
Definition: avcodec.h:1638
ptl
const H265RawProfileTierLevel * ptl
Definition: h265_levels.c:170
VAAPIEncodePicture::codec_picture_params
void * codec_picture_params
Definition: vaapi_encode.h:105
ff_h265_guess_level
const H265LevelDescriptor * ff_h265_guess_level(const H265RawProfileTierLevel *ptl, int64_t bitrate, int width, int height, int slice_segments, int tile_rows, int tile_cols, int max_dec_pic_buffering)
Guess the level of a stream from some parameters.
Definition: h265_profile_level.c:162
CodedBitstreamFragment
Coded bitstream fragment structure, combining one or more units.
Definition: cbs.h:121
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
SEIRawMasteringDisplayColourVolume::white_point_y
uint16_t white_point_y
Definition: cbs_sei.h:54
CodedBitstreamFragment::data_size
size_t data_size
The number of bytes in the bitstream.
Definition: cbs.h:134
H265RawProfileTierLevel::general_profile_idc
uint8_t general_profile_idc
Definition: cbs_h265.h:38
FLAGS
#define FLAGS
Definition: vaapi_encode_h265.c:1357
H265RawProfileTierLevel::general_non_packed_constraint_flag
uint8_t general_non_packed_constraint_flag
Definition: cbs_h265.h:44
H265RawSliceHeader::slice_sao_luma_flag
uint8_t slice_sao_luma_flag
Definition: cbs_h265.h:475
av_q2d
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition: rational.h:104
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts_bsf.c:363
FF_PROFILE_UNKNOWN
#define FF_PROFILE_UNKNOWN
Definition: avcodec.h:1551
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
H265RawSliceHeader::num_ref_idx_l1_active_minus1
uint8_t num_ref_idx_l1_active_minus1
Definition: cbs_h265.h:480
H265RawSTRefPicSet::num_positive_pics
uint8_t num_positive_pics
Definition: cbs_h265.h:230
H265RawSliceHeader::slice_pic_parameter_set_id
uint8_t slice_pic_parameter_set_id
Definition: cbs_h265.h:448
ctx
AVFormatContext * ctx
Definition: movenc.c:48
VAAPIEncodeH265Context::aud
int aud
Definition: vaapi_encode_h265.c:68
H265RawProfileTierLevel::general_max_14bit_constraint_flag
uint8_t general_max_14bit_constraint_flag
Definition: cbs_h265.h:56
ff_vaapi_encode_receive_packet
int ff_vaapi_encode_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
Definition: vaapi_encode.c:1185
H265RawVUI::vui_time_scale
uint32_t vui_time_scale
Definition: cbs_h265.h:160
H265RawVUI::video_signal_type_present_flag
uint8_t video_signal_type_present_flag
Definition: cbs_h265.h:136
HEVC_SLICE_I
@ HEVC_SLICE_I
Definition: hevc.h:98
VAAPIEncodeH265Context::tier
int tier
Definition: vaapi_encode_h265.c:70
CodedBitstreamFragment::data_bit_padding
size_t data_bit_padding
The number of bits which should be ignored in the final byte.
Definition: cbs.h:138
h2645data.h
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:536
VAAPIEncodeType
Definition: vaapi_encode.h:381
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:264
VAAPIEncodeH265Picture
Definition: vaapi_encode_h265.c:46
VAAPIEncodeContext
Definition: vaapi_encode.h:177
VAAPIEncodePicture::prev
struct VAAPIEncodePicture * prev
Definition: vaapi_encode.h:121
if
if(ret)
Definition: filter_design.txt:179
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
SEIRawMasteringDisplayColourVolume::min_display_mastering_luminance
uint32_t min_display_mastering_luminance
Definition: cbs_sei.h:56
HEVC_SLICE_B
@ HEVC_SLICE_B
Definition: hevc.h:96
H265RawVUI::matrix_coefficients
uint8_t matrix_coefficients
Definition: cbs_h265.h:142
H265RawSliceHeader::slice_segment_address
uint16_t slice_segment_address
Definition: cbs_h265.h:451
NULL
#define NULL
Definition: coverity.c:32
AVHWFramesContext::sw_format
enum AVPixelFormat sw_format
The pixel format identifying the actual data layout of the hardware frames.
Definition: hwcontext.h:222
H265RawAUD
Definition: cbs_h265.h:437
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:982
PROFILE
#define PROFILE(name, value)
H265RawSliceHeader::slice_tc_offset_div2
int8_t slice_tc_offset_div2
Definition: cbs_h265.h:521
HEVC_NAL_PPS
@ HEVC_NAL_PPS
Definition: hevc.h:63
H265RawSliceHeader::short_term_ref_pic_set_sps_flag
uint8_t short_term_ref_pic_set_sps_flag
Definition: cbs_h265.h:461
VAAPIEncodePicture::dpb
struct VAAPIEncodePicture * dpb[MAX_DPB_SIZE]
Definition: vaapi_encode.h:114
vaapi_encode_h265_write_slice_header
static int vaapi_encode_h265_write_slice_header(AVCodecContext *avctx, VAAPIEncodePicture *pic, VAAPIEncodeSlice *slice, char *data, size_t *data_len)
Definition: vaapi_encode_h265.c:172
ff_cbs_insert_unit_content
int ff_cbs_insert_unit_content(CodedBitstreamFragment *frag, int position, CodedBitstreamUnitType type, void *content, AVBufferRef *content_buf)
Insert a new unit into a fragment with the given content.
Definition: cbs.c:740
VAAPIEncodeType::profiles
const VAAPIEncodeProfile * profiles
Definition: vaapi_encode.h:384
VAAPIEncodeH265Context::aud_needed
int aud_needed
Definition: vaapi_encode_h265.c:91
SEIRawMasteringDisplayColourVolume
Definition: cbs_sei.h:50
FF_CODEC_RECEIVE_PACKET_CB
#define FF_CODEC_RECEIVE_PACKET_CB(func)
Definition: codec_internal.h:313
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:448
AV_OPT_TYPE_IMAGE_SIZE
@ AV_OPT_TYPE_IMAGE_SIZE
offset must point to two consecutive integers
Definition: opt.h:235
OFFSET
#define OFFSET(x)
Definition: vaapi_encode_h265.c:1356
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
PICTURE_TYPE_P
@ PICTURE_TYPE_P
Definition: vaapi_encode.h:59
FF_PROFILE_HEVC_MAIN_10
#define FF_PROFILE_HEVC_MAIN_10
Definition: avcodec.h:1639
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition: frame.h:120
HEVC_NAL_CRA_NUT
@ HEVC_NAL_CRA_NUT
Definition: hevc.h:50
vaapi_encode_h265_write_access_unit
static int vaapi_encode_h265_write_access_unit(AVCodecContext *avctx, char *data, size_t *data_len, CodedBitstreamFragment *au)
Definition: vaapi_encode_h265.c:96
H265RawVUI::chroma_sample_loc_type_bottom_field
uint8_t chroma_sample_loc_type_bottom_field
Definition: cbs_h265.h:146
vaapi_encode_h265_options
static const AVOption vaapi_encode_h265_options[]
Definition: vaapi_encode_h265.c:1358
vaapi_encode_h265_init_picture_params
static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx, VAAPIEncodePicture *pic)
Definition: vaapi_encode_h265.c:747
vps
static int FUNC() vps(CodedBitstreamContext *ctx, RWContext *rw, H265RawVPS *current)
Definition: cbs_h265_syntax_template.c:423
H265RawProfileTierLevel::general_max_10bit_constraint_flag
uint8_t general_max_10bit_constraint_flag
Definition: cbs_h265.h:48
H265RawVUI::vui_num_ticks_poc_diff_one_minus1
uint32_t vui_num_ticks_poc_diff_one_minus1
Definition: cbs_h265.h:162
H265RawSliceHeader::slice_type
uint8_t slice_type
Definition: cbs_h265.h:454
VAAPIEncodeH265Context::sei_content_light_level
SEIRawContentLightLevelInfo sei_content_light_level
Definition: vaapi_encode_h265.c:87
H265RawVUI::video_full_range_flag
uint8_t video_full_range_flag
Definition: cbs_h265.h:138
H265RawProfileTierLevel::general_tier_flag
uint8_t general_tier_flag
Definition: cbs_h265.h:37
H265RawNALUnitHeader::nal_unit_type
uint8_t nal_unit_type
Definition: cbs_h265.h:30
sei
static int FUNC() sei(CodedBitstreamContext *ctx, RWContext *rw, H264RawSEI *current)
Definition: cbs_h264_syntax_template.c:825
AVCodecContext::level
int level
level
Definition: avcodec.h:1676
H265RawSliceHeader::slice_qp_delta
int8_t slice_qp_delta
Definition: cbs_h265.h:510
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:627
HEVC_NAL_RASL_R
@ HEVC_NAL_RASL_R
Definition: hevc.h:38
H265RawNALUnitHeader
Definition: cbs_h265.h:29
index
int index
Definition: gxfenc.c:89
VAAPIEncodeH265Context::va_bs
uint32_t va_bs
Definition: vaapi_encode_h265.c:62
vaapi_encode_h265_init
static av_cold int vaapi_encode_h265_init(AVCodecContext *avctx)
Definition: vaapi_encode_h265.c:1317
VAAPIEncodeH265Context::fixed_qp_b
int fixed_qp_b
Definition: vaapi_encode_h265.c:77
VAAPIEncodeH265Context::ctu_size
uint32_t ctu_size
Definition: vaapi_encode_h265.c:63
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:521
aud
static int FUNC() aud(CodedBitstreamContext *ctx, RWContext *rw, H264RawAUD *current)
Definition: cbs_h264_syntax_template.c:842
VAAPIEncodeH265Picture::slice_type
int slice_type
Definition: vaapi_encode_h265.c:52
H265RawVUI::chroma_loc_info_present_flag
uint8_t chroma_loc_info_present_flag
Definition: cbs_h265.h:144
H265RawVUI::sar_width
uint16_t sar_width
Definition: cbs_h265.h:130
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
VAAPIEncodePicture::type
int type
Definition: vaapi_encode.h:87
pps
static int FUNC() pps(CodedBitstreamContext *ctx, RWContext *rw, H264RawPPS *current)
Definition: cbs_h264_syntax_template.c:404
codec_internal.h
VAAPI_ENCODE_RC_OPTIONS
#define VAAPI_ENCODE_RC_OPTIONS
Definition: vaapi_encode.h:494
H265RawSliceHeader::cabac_init_flag
uint8_t cabac_init_flag
Definition: cbs_h265.h:488
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
H265RawProfileTierLevel::general_lower_bit_rate_constraint_flag
uint8_t general_lower_bit_rate_constraint_flag
Definition: cbs_h265.h:55
vaapi_encode_h265_get_encoder_caps
static av_cold int vaapi_encode_h265_get_encoder_caps(AVCodecContext *avctx)
Definition: vaapi_encode_h265.c:1158
CodedBitstreamFragment::data
uint8_t * data
Pointer to the bitstream form of this fragment.
Definition: cbs.h:127
VAAPIEncodeH265Context::raw_slice
H265RawSlice raw_slice
Definition: vaapi_encode_h265.c:84
H265RawProfileTierLevel::general_max_monochrome_constraint_flag
uint8_t general_max_monochrome_constraint_flag
Definition: cbs_h265.h:52
AVFrameSideData::data
uint8_t * data
Definition: frame.h:233
h265_profile_level.h
AVCHROMA_LOC_UNSPECIFIED
@ AVCHROMA_LOC_UNSPECIFIED
Definition: pixfmt.h:681
H265RawSliceHeader::dependent_slice_segment_flag
uint8_t dependent_slice_segment_flag
Definition: cbs_h265.h:450
H265RawSliceHeader::slice_cr_qp_offset
int8_t slice_cr_qp_offset
Definition: cbs_h265.h:512
header
static const uint8_t header[24]
Definition: sdr2.c:67
H265RawProfileTierLevel::general_one_picture_only_constraint_flag
uint8_t general_one_picture_only_constraint_flag
Definition: cbs_h265.h:54
H265RawAUD::nal_unit_header
H265RawNALUnitHeader nal_unit_header
Definition: cbs_h265.h:438
vaapi_encode_type_h265
static const VAAPIEncodeType vaapi_encode_type_h265
Definition: vaapi_encode_h265.c:1284
vaapi_encode_h265_profiles
static const VAAPIEncodeProfile vaapi_encode_h265_profiles[]
Definition: vaapi_encode_h265.c:1265
VAAPI_ENCODE_COMMON_OPTIONS
#define VAAPI_ENCODE_COMMON_OPTIONS
Definition: vaapi_encode.h:467
SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME
@ SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME
Definition: sei.h:96
VAAPIEncodePicture::recon_surface
VASurfaceID recon_surface
Definition: vaapi_encode.h:96
AVERROR_EXTERNAL
#define AVERROR_EXTERNAL
Generic error in an external library.
Definition: error.h:59
VAAPIEncodePicture::output_buffer
VABufferID output_buffer
Definition: vaapi_encode.h:102
VAAPIEncodePicture::priv_data
void * priv_data
Definition: vaapi_encode.h:104
vaapi_encode_h265_configure
static av_cold int vaapi_encode_h265_configure(AVCodecContext *avctx)
Definition: vaapi_encode_h265.c:1220
vaapi_encode_h265_init_slice_params
static int vaapi_encode_h265_init_slice_params(AVCodecContext *avctx, VAAPIEncodePicture *pic, VAAPIEncodeSlice *slice)
Definition: vaapi_encode_h265.c:946
H265RawVUI::chroma_sample_loc_type_top_field
uint8_t chroma_sample_loc_type_top_field
Definition: cbs_h265.h:145
ff_hevc_vaapi_encoder
const FFCodec ff_hevc_vaapi_encoder
Definition: vaapi_encode_h265.c:1446
VAAPIEncodePicture::display_order
int64_t display_order
Definition: vaapi_encode.h:75
AV_PIX_FMT_VAAPI
@ AV_PIX_FMT_VAAPI
Hardware acceleration through VA-API, data[3] contains a VASurfaceID.
Definition: pixfmt.h:119
VAAPIEncodePicture::nb_dpb_pics
int nb_dpb_pics
Definition: vaapi_encode.h:113
VAAPIEncodePicture::b_depth
int b_depth
Definition: vaapi_encode.h:88
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:679
H265RawVUI::max_bytes_per_pic_denom
uint8_t max_bytes_per_pic_denom
Definition: cbs_h265.h:171
H265RawSliceHeader
Definition: cbs_h265.h:443
HEVC_NAL_TRAIL_R
@ HEVC_NAL_TRAIL_R
Definition: hevc.h:30
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: frame.h:137
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
VAAPIEncodeH265Picture::slice_nal_unit
int slice_nal_unit
Definition: vaapi_encode_h265.c:51
H265RawVUI::vui_hrd_parameters_present_flag
uint8_t vui_hrd_parameters_present_flag
Definition: cbs_h265.h:163
SEIRawMasteringDisplayColourVolume::white_point_x
uint16_t white_point_x
Definition: cbs_sei.h:53
VAAPIEncodeContext::input_frames
AVHWFramesContext * input_frames
Definition: vaapi_encode.h:254
VAAPIEncodeH265Context
Definition: vaapi_encode_h265.c:56
FLAG_SLICE_CONTROL
@ FLAG_SLICE_CONTROL
Definition: vaapi_encode.h:367
common.h
H265RawVUI::vui_num_units_in_tick
uint32_t vui_num_units_in_tick
Definition: cbs_h265.h:159
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:226
HEVC_SLICE_P
@ HEVC_SLICE_P
Definition: hevc.h:97
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
H265RawSliceHeader::nal_unit_header
H265RawNALUnitHeader nal_unit_header
Definition: cbs_h265.h:444
H265RawSliceHeader::slice_beta_offset_div2
int8_t slice_beta_offset_div2
Definition: cbs_h265.h:520
H265RawSTRefPicSet
Definition: cbs_h265.h:219
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:211
ff_h2645_pixel_aspect
const AVRational ff_h2645_pixel_aspect[]
Definition: h2645data.c:21
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:989
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
profile
int profile
Definition: mxfenc.c:2006
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:590
VAAPIEncodeH265Context::sei_mastering_display
SEIRawMasteringDisplayColourVolume sei_mastering_display
Definition: vaapi_encode_h265.c:86
AVCodecContext::height
int height
Definition: avcodec.h:571
H265RawProfileTierLevel
Definition: cbs_h265.h:35
SEIRawMasteringDisplayColourVolume::display_primaries_y
uint16_t display_primaries_y[3]
Definition: cbs_sei.h:52
SEI_MASTERING_DISPLAY
@ SEI_MASTERING_DISPLAY
Definition: vaapi_encode_h265.c:42
H265RawProfileTierLevel::general_max_420chroma_constraint_flag
uint8_t general_max_420chroma_constraint_flag
Definition: cbs_h265.h:51
ff_cbs_write_fragment_data
int ff_cbs_write_fragment_data(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Write the content of the fragment to its own internal buffer.
Definition: cbs.c:394
hevc.h
H265RawProfileTierLevel::general_profile_space
uint8_t general_profile_space
Definition: cbs_h265.h:36
avcodec.h
HEVC_NAL_VPS
@ HEVC_NAL_VPS
Definition: hevc.h:61
ff_vaapi_encode_hw_configs
const AVCodecHWConfigInternal *const ff_vaapi_encode_hw_configs[]
Definition: vaapi_encode.c:34
HEVC_NAL_IDR_W_RADL
@ HEVC_NAL_IDR_W_RADL
Definition: hevc.h:48
H265RawProfileTierLevel::general_profile_compatibility_flag
uint8_t general_profile_compatibility_flag[32]
Definition: cbs_h265.h:40
ff_vaapi_encode_init
av_cold int ff_vaapi_encode_init(AVCodecContext *avctx)
Definition: vaapi_encode.c:2542
FFSWAP
#define FFSWAP(type, a, b)
Definition: macros.h:52
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
VAAPIEncodeH265Context::common
VAAPIEncodeContext common
Definition: vaapi_encode_h265.c:57
SEIRawContentLightLevelInfo::max_content_light_level
uint16_t max_content_light_level
Definition: cbs_sei.h:60
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
VAAPIEncodeH265Context::fixed_qp_p
int fixed_qp_p
Definition: vaapi_encode_h265.c:76
LEVEL
#define LEVEL(name, value)
HEVC_NAL_TRAIL_N
@ HEVC_NAL_TRAIL_N
Definition: hevc.h:29
H265RawSliceHeader::slice_loop_filter_across_slices_enabled_flag
uint8_t slice_loop_filter_across_slices_enabled_flag
Definition: cbs_h265.h:522
HEVC_NAL_AUD
@ HEVC_NAL_AUD
Definition: hevc.h:64
AVCodecContext
main external API structure.
Definition: avcodec.h:398
H265RawSTRefPicSet::num_negative_pics
uint8_t num_negative_pics
Definition: cbs_h265.h:229
vaapi_encode_h265_write_sequence_header
static int vaapi_encode_h265_write_sequence_header(AVCodecContext *avctx, char *data, size_t *data_len)
Definition: vaapi_encode_h265.c:140
SEI_CONTENT_LIGHT_LEVEL
@ SEI_CONTENT_LIGHT_LEVEL
Definition: vaapi_encode_h265.c:43
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
H265RawVUI::colour_description_present_flag
uint8_t colour_description_present_flag
Definition: cbs_h265.h:139
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:225
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1550
VAAPIEncodeH265Context::qp
int qp
Definition: vaapi_encode_h265.c:67
AVCodecContext::i_quant_offset
float i_quant_offset
qscale offset between P and I-frames
Definition: avcodec.h:710
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:112
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
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
VAAPIEncodeH265Picture::pic_type
int pic_type
Definition: vaapi_encode_h265.c:53
PICTURE_TYPE_B
@ PICTURE_TYPE_B
Definition: vaapi_encode.h:60
FLAG_B_PICTURE_REFERENCES
@ FLAG_B_PICTURE_REFERENCES
Definition: vaapi_encode.h:375
H265RawVUI::transfer_characteristics
uint8_t transfer_characteristics
Definition: cbs_h265.h:141
desc
const char * desc
Definition: libsvtav1.c:83
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
HEVC_NAL_SPS
@ HEVC_NAL_SPS
Definition: hevc.h:62
mastering_display_metadata.h
vaapi_encode_h265_write_extra_header
static int vaapi_encode_h265_write_extra_header(AVCodecContext *avctx, VAAPIEncodePicture *pic, int index, int *type, char *data, size_t *data_len)
Definition: vaapi_encode_h265.c:198
VAAPIEncodePicture::input_image
AVFrame * input_image
Definition: vaapi_encode.h:92
MAX_DPB_SIZE
@ MAX_DPB_SIZE
Definition: vaapi_encode.h:43
VAAPIEncodeSlice::block_size
int block_size
Definition: vaapi_encode.h:68
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:231
VAAPIEncodeH265Picture::last_idr_frame
int64_t last_idr_frame
Definition: vaapi_encode_h265.c:49
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
ff_cbs_init
av_cold int ff_cbs_init(CodedBitstreamContext **ctx_ptr, enum AVCodecID codec_id, void *log_ctx)
Create and initialise a new context for the given codec.
Definition: cbs.c:76
VAAPIEncodeH265Context::sei
int sei
Definition: vaapi_encode_h265.c:72
FFALIGN
#define FFALIGN(x, a)
Definition: macros.h:78
AVContentLightMetadata::MaxFALL
unsigned MaxFALL
Max average light level per frame (cd/m^2).
Definition: mastering_display_metadata.h:107
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:425
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:244
VAAPIEncodePicture::encode_order
int64_t encode_order
Definition: vaapi_encode.h:76
VAAPIEncodeH265Context::current_access_unit
CodedBitstreamFragment current_access_unit
Definition: vaapi_encode_h265.c:90
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:571
AV_OPT_TYPE_FLAGS
@ AV_OPT_TYPE_FLAGS
Definition: opt.h:224
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
H265RawVUI::vui_poc_proportional_to_timing_flag
uint8_t vui_poc_proportional_to_timing_flag
Definition: cbs_h265.h:161
SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO
@ SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO
Definition: sei.h:103
VAAPIEncodeH265Context::level
int level
Definition: vaapi_encode_h265.c:71
H265RawVUI::aspect_ratio_idc
uint8_t aspect_ratio_idc
Definition: cbs_h265.h:129
put_bits.h
H265RawVUI::restricted_ref_pic_lists_flag
uint8_t restricted_ref_pic_lists_flag
Definition: cbs_h265.h:169
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:234
hevc_sei.h
H265RawSliceHeader::delta_chroma_log2_weight_denom
int8_t delta_chroma_log2_weight_denom
Definition: cbs_h265.h:493
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:768
VAAPIEncodeH265Context::min_cb_size
uint32_t min_cb_size
Definition: vaapi_encode_h265.c:64
VAAPIEncodeProfile
Definition: vaapi_encode.h:132
H265RawVUI::motion_vectors_over_pic_boundaries_flag
uint8_t motion_vectors_over_pic_boundaries_flag
Definition: cbs_h265.h:168
H265RawSlice
Definition: cbs_h265.h:533
VAAPIEncodePicture::nb_slices
int nb_slices
Definition: vaapi_encode.h:128
vaapi_encode_h265_defaults
static const FFCodecDefault vaapi_encode_h265_defaults[]
Definition: vaapi_encode_h265.c:1426
VAAPIEncodeH265Context::sei_needed
int sei_needed
Definition: vaapi_encode_h265.c:92
VAAPIEncodeH265Picture::pic_order_cnt
int pic_order_cnt
Definition: vaapi_encode_h265.c:47