FFmpeg
vaapi_encode_av1.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 Intel Corporation
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include <va/va.h>
22 #include <va/va_enc_av1.h>
23 
24 #include "libavutil/pixdesc.h"
25 #include "libavutil/opt.h"
27 
28 #include "cbs_av1.h"
29 #include "put_bits.h"
30 #include "codec_internal.h"
31 #include "av1_levels.h"
32 #include "vaapi_encode.h"
33 
34 #define AV1_MAX_QUANT 255
35 
36 typedef struct VAAPIEncodeAV1Picture {
37  int64_t last_idr_frame;
38  int slot;
40 
41 typedef struct VAAPIEncodeAV1Context {
43  AV1RawOBU sh; /**< sequence header.*/
44  AV1RawOBU fh; /**< frame header.*/
45  AV1RawOBU mh[4]; /**< metadata header.*/
46  int nb_mh;
49  VAConfigAttribValEncAV1 attr;
50  VAConfigAttribValEncAV1Ext1 attr_ext1;
51  VAConfigAttribValEncAV1Ext2 attr_ext2;
52 
53  char sh_data[MAX_PARAM_BUFFER_SIZE]; /**< coded sequence header data. */
54  size_t sh_data_len; /**< bit length of sh_data. */
55  char fh_data[MAX_PARAM_BUFFER_SIZE]; /**< coded frame header data. */
56  size_t fh_data_len; /**< bit length of fh_data. */
57 
58  uint8_t uniform_tile;
60  int sb_cols;
61  int sb_rows;
68 
73 
74  int q_idx_idr;
75  int q_idx_p;
76  int q_idx_b;
77 
78  /** bit positions in current frame header */
83 
84  /** user options */
85  int profile;
86  int level;
87  int tier;
91 
93  PutBitContext *pbc, int length,
94  const char *str, const int *subscripts,
95  int64_t value)
96 {
97  VAAPIEncodeAV1Context *priv = ctx;
98  int position;
99 
100  position = put_bits_count(pbc);
101  av_assert0(position >= length);
102 
103  if (!strcmp(str, "base_q_idx"))
104  priv->qindex_offset = position - length;
105  else if (!strcmp(str, "loop_filter_level[0]"))
106  priv->loopfilter_offset = position - length;
107  else if (!strcmp(str, "cdef_damping_minus_3"))
108  priv->cdef_start_offset = position - length;
109  else if (!strcmp(str, "cdef_uv_sec_strength[i]"))
110  priv->cdef_param_size = position - priv->cdef_start_offset;
111 }
112 
114 {
115  VAAPIEncodeContext *ctx = avctx->priv_data;
116  VAAPIEncodeAV1Context *priv = avctx->priv_data;
117 
118  // Surfaces must be aligned to superblock boundaries.
119  ctx->surface_width = FFALIGN(avctx->width, priv->use_128x128_superblock ? 128 : 64);
120  ctx->surface_height = FFALIGN(avctx->height, priv->use_128x128_superblock ? 128 : 64);
121 
122  return 0;
123 }
124 
126 {
127  VAAPIEncodeContext *ctx = avctx->priv_data;
128  VAAPIEncodeAV1Context *priv = avctx->priv_data;
129  int ret;
130 
131  ret = ff_cbs_init(&priv->cbc, AV_CODEC_ID_AV1, avctx);
132  if (ret < 0)
133  return ret;
134  priv->cbc->trace_enable = 1;
135  priv->cbc->trace_level = AV_LOG_DEBUG;
136  priv->cbc->trace_context = ctx;
138 
139  if (ctx->rc_mode->quality) {
140  priv->q_idx_p = av_clip(ctx->rc_quality, 0, AV1_MAX_QUANT);
141  if (fabs(avctx->i_quant_factor) > 0.0)
142  priv->q_idx_idr =
143  av_clip((fabs(avctx->i_quant_factor) * priv->q_idx_p +
144  avctx->i_quant_offset) + 0.5,
145  0, AV1_MAX_QUANT);
146  else
147  priv->q_idx_idr = priv->q_idx_p;
148 
149  if (fabs(avctx->b_quant_factor) > 0.0)
150  priv->q_idx_b =
151  av_clip((fabs(avctx->b_quant_factor) * priv->q_idx_p +
152  avctx->b_quant_offset) + 0.5,
153  0, AV1_MAX_QUANT);
154  else
155  priv->q_idx_b = priv->q_idx_p;
156  } else {
157  /** Arbitrary value */
158  priv->q_idx_idr = priv->q_idx_p = priv->q_idx_b = 128;
159  }
160 
161  ctx->roi_quant_range = AV1_MAX_QUANT;
162 
163  return 0;
164 }
165 
168  uint8_t type,
169  void *obu_unit)
170 {
171  int ret;
172 
174  type, obu_unit, NULL);
175  if (ret < 0) {
176  av_log(avctx, AV_LOG_ERROR, "Failed to add OBU unit: "
177  "type = %d.\n", type);
178  return ret;
179  }
180 
181  return 0;
182 }
183 
185  char *data, size_t *data_len,
187 {
188  VAAPIEncodeAV1Context *priv = avctx->priv_data;
189  int ret;
190 
191  ret = ff_cbs_write_fragment_data(priv->cbc, bs);
192  if (ret < 0) {
193  av_log(avctx, AV_LOG_ERROR, "Failed to write packed header.\n");
194  return ret;
195  }
196 
197  if ((size_t)8 * MAX_PARAM_BUFFER_SIZE < 8 * bs->data_size - bs->data_bit_padding) {
198  av_log(avctx, AV_LOG_ERROR, "Access unit too large: "
199  "%zu < %zu.\n", (size_t)8 * MAX_PARAM_BUFFER_SIZE,
200  8 * bs->data_size - bs->data_bit_padding);
201  return AVERROR(ENOSPC);
202  }
203 
204  memcpy(data, bs->data, bs->data_size);
205  *data_len = 8 * bs->data_size - bs->data_bit_padding;
206 
207  return 0;
208 }
209 
210 static int tile_log2(int blkSize, int target) {
211  int k;
212  for (k = 0; (blkSize << k) < target; k++);
213  return k;
214 }
215 
217 {
218  VAAPIEncodeAV1Context *priv = avctx->priv_data;
219  int mi_cols, mi_rows, sb_shift, sb_size;
220  int max_tile_area_sb, max_tile_area_sb_varied;
221  int tile_width_sb, tile_height_sb, widest_tile_sb;
222  int tile_cols, tile_rows;
223  int min_log2_tiles;
224  int i;
225 
226  if (priv->tile_cols > AV1_MAX_TILE_COLS ||
227  priv->tile_rows > AV1_MAX_TILE_ROWS) {
228  av_log(avctx, AV_LOG_ERROR, "Invalid tile number %dx%d, should less than %dx%d.\n",
230  return AVERROR(EINVAL);
231  }
232 
233  mi_cols = 2 * ((avctx->width + 7) >> 3);
234  mi_rows = 2 * ((avctx->height + 7) >> 3);
235  priv->sb_cols = priv->use_128x128_superblock ?
236  ((mi_cols + 31) >> 5) : ((mi_cols + 15) >> 4);
237  priv->sb_rows = priv->use_128x128_superblock ?
238  ((mi_rows + 31) >> 5) : ((mi_rows + 15) >> 4);
239  sb_shift = priv->use_128x128_superblock ? 5 : 4;
240  sb_size = sb_shift + 2;
241  priv->max_tile_width_sb = AV1_MAX_TILE_WIDTH >> sb_size;
242  max_tile_area_sb = AV1_MAX_TILE_AREA >> (2 * sb_size);
243 
247  min_log2_tiles = FFMAX(priv->min_log2_tile_cols,
248  tile_log2(max_tile_area_sb, priv->sb_rows * priv->sb_cols));
249 
250  tile_cols = av_clip(priv->tile_cols, (priv->sb_cols + priv->max_tile_width_sb - 1) / priv->max_tile_width_sb, priv->sb_cols);
251 
252  if (!priv->tile_cols)
253  priv->tile_cols = tile_cols;
254  else if (priv->tile_cols != tile_cols){
255  av_log(avctx, AV_LOG_ERROR, "Invalid tile cols %d, should be in range of %d~%d\n",
256  priv->tile_cols,
257  (priv->sb_cols + priv->max_tile_width_sb - 1) / priv->max_tile_width_sb,
258  priv->sb_cols);
259  return AVERROR(EINVAL);
260  }
261 
262  priv->tile_cols_log2 = tile_log2(1, priv->tile_cols);
263  tile_width_sb = (priv->sb_cols + (1 << priv->tile_cols_log2) - 1) >>
264  priv->tile_cols_log2;
265 
266  if (priv->tile_rows > priv->sb_rows) {
267  av_log(avctx, AV_LOG_ERROR, "Invalid tile rows %d, should be less than %d.\n",
268  priv->tile_rows, priv->sb_rows);
269  return AVERROR(EINVAL);
270  }
271 
272  /** Try user setting tile rows number first. */
273  tile_rows = priv->tile_rows ? priv->tile_rows : 1;
274  for (; tile_rows <= priv->sb_rows && tile_rows <= AV1_MAX_TILE_ROWS; tile_rows++) {
275  /** try uniformed tile. */
276  priv->tile_rows_log2 = tile_log2(1, tile_rows);
277  if ((priv->sb_cols + tile_width_sb - 1) / tile_width_sb == priv->tile_cols) {
278  for (i = 0; i < priv->tile_cols - 1; i++)
279  priv->width_in_sbs_minus_1[i] = tile_width_sb - 1;
280  priv->width_in_sbs_minus_1[i] = priv->sb_cols - (priv->tile_cols - 1) * tile_width_sb - 1;
281 
282  tile_height_sb = (priv->sb_rows + (1 << priv->tile_rows_log2) - 1) >>
283  priv->tile_rows_log2;
284 
285  if ((priv->sb_rows + tile_height_sb - 1) / tile_height_sb == tile_rows &&
286  tile_height_sb <= max_tile_area_sb / tile_width_sb) {
287  for (i = 0; i < tile_rows - 1; i++)
288  priv->height_in_sbs_minus_1[i] = tile_height_sb - 1;
289  priv->height_in_sbs_minus_1[i] = priv->sb_rows - (tile_rows - 1) * tile_height_sb - 1;
290 
291  priv->uniform_tile = 1;
292  priv->min_log2_tile_rows = FFMAX(min_log2_tiles - priv->tile_cols_log2, 0);
293 
294  break;
295  }
296  }
297 
298  /** try non-uniformed tile. */
299  widest_tile_sb = 0;
300  for (i = 0; i < priv->tile_cols; i++) {
301  priv->width_in_sbs_minus_1[i] = (i + 1) * priv->sb_cols / priv->tile_cols - i * priv->sb_cols / priv->tile_cols - 1;
302  widest_tile_sb = FFMAX(widest_tile_sb, priv->width_in_sbs_minus_1[i] + 1);
303  }
304 
305  if (min_log2_tiles)
306  max_tile_area_sb_varied = (priv->sb_rows * priv->sb_cols) >> (min_log2_tiles + 1);
307  else
308  max_tile_area_sb_varied = priv->sb_rows * priv->sb_cols;
309  priv->max_tile_height_sb = FFMAX(1, max_tile_area_sb_varied / widest_tile_sb);
310 
311  if (tile_rows == av_clip(tile_rows, (priv->sb_rows + priv->max_tile_height_sb - 1) / priv->max_tile_height_sb, priv->sb_rows)) {
312  for (i = 0; i < tile_rows; i++)
313  priv->height_in_sbs_minus_1[i] = (i + 1) * priv->sb_rows / tile_rows - i * priv->sb_rows / tile_rows - 1;
314 
315  break;
316  }
317 
318  /** Return invalid parameter if explicit tile rows is set. */
319  if (priv->tile_rows) {
320  av_log(avctx, AV_LOG_ERROR, "Invalid tile rows %d.\n", priv->tile_rows);
321  return AVERROR(EINVAL);
322  }
323  }
324 
325  priv->tile_rows = tile_rows;
326  av_log(avctx, AV_LOG_DEBUG, "Setting tile cols/rows to %d/%d.\n",
327  priv->tile_cols, priv->tile_rows);
328 
329  /** check if tile cols/rows is supported by driver. */
330  if (priv->attr_ext2.bits.max_tile_num_minus1) {
331  if ((priv->tile_cols * priv->tile_rows - 1) > priv->attr_ext2.bits.max_tile_num_minus1) {
332  av_log(avctx, AV_LOG_ERROR, "Unsupported tile num %d * %d = %d by driver, "
333  "should be at most %d.\n", priv->tile_cols, priv->tile_rows,
334  priv->tile_cols * priv->tile_rows,
335  priv->attr_ext2.bits.max_tile_num_minus1 + 1);
336  return AVERROR(EINVAL);
337  }
338  }
339 
340  /** check if tile group numbers is valid. */
341  if (priv->tile_groups > priv->tile_cols * priv->tile_rows) {
342  av_log(avctx, AV_LOG_WARNING, "Invalid tile groups number %d, "
343  "correct to %d.\n", priv->tile_groups, priv->tile_cols * priv->tile_rows);
344  priv->tile_groups = priv->tile_cols * priv->tile_rows;
345  }
346 
347  return 0;
348 }
349 
351  char *data, size_t *data_len)
352 {
353  VAAPIEncodeAV1Context *priv = avctx->priv_data;
354 
355  memcpy(data, &priv->sh_data, MAX_PARAM_BUFFER_SIZE * sizeof(char));
356  *data_len = priv->sh_data_len;
357 
358  return 0;
359 }
360 
362 {
363  VAAPIEncodeContext *ctx = avctx->priv_data;
364  VAAPIEncodeAV1Context *priv = avctx->priv_data;
365  AV1RawOBU *sh_obu = &priv->sh;
367  VAEncSequenceParameterBufferAV1 *vseq = ctx->codec_sequence_params;
368  CodedBitstreamFragment *obu = &priv->current_obu;
369  const AVPixFmtDescriptor *desc;
370  int ret;
371 
372  memset(sh_obu, 0, sizeof(*sh_obu));
374 
376  av_assert0(desc);
377 
378  sh->seq_profile = avctx->profile;
381  sh->frame_width_bits_minus_1 = av_log2(avctx->width);
383  sh->max_frame_width_minus_1 = avctx->width - 1;
384  sh->max_frame_height_minus_1 = avctx->height - 1;
385  sh->seq_tier[0] = priv->tier;
386  /** enable order hint and reserve maximum 8 bits for it by default. */
387  sh->enable_order_hint = 1;
388  sh->order_hint_bits_minus_1 = 7;
389 
391  .high_bitdepth = desc->comp[0].depth == 8 ? 0 : 1,
392  .color_primaries = avctx->color_primaries,
393  .transfer_characteristics = avctx->color_trc,
394  .matrix_coefficients = avctx->colorspace,
395  .color_description_present_flag = (avctx->color_primaries != AVCOL_PRI_UNSPECIFIED ||
396  avctx->color_trc != AVCOL_TRC_UNSPECIFIED ||
399  .subsampling_x = desc->log2_chroma_w,
400  .subsampling_y = desc->log2_chroma_h,
401  };
402 
403  switch (avctx->chroma_sample_location) {
404  case AVCHROMA_LOC_LEFT:
406  break;
409  break;
410  default:
412  break;
413  }
414 
415  if (avctx->level != AV_LEVEL_UNKNOWN) {
416  sh->seq_level_idx[0] = avctx->level;
417  } else {
418  const AV1LevelDescriptor *level;
419  float framerate;
420 
421  if (avctx->framerate.num > 0 && avctx->framerate.den > 0)
422  framerate = avctx->framerate.num / avctx->framerate.den;
423  else
424  framerate = 0;
425 
426  level = ff_av1_guess_level(avctx->bit_rate, priv->tier,
427  ctx->surface_width, ctx->surface_height,
428  priv->tile_rows * priv->tile_cols,
429  priv->tile_cols, framerate);
430  if (level) {
431  av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level->name);
432  sh->seq_level_idx[0] = level->level_idx;
433  } else {
434  av_log(avctx, AV_LOG_VERBOSE, "Stream will not conform to "
435  "any normal level, using maximum parameters level by default.\n");
436  sh->seq_level_idx[0] = 31;
437  sh->seq_tier[0] = 1;
438  }
439  }
440  vseq->seq_profile = sh->seq_profile;
441  vseq->seq_level_idx = sh->seq_level_idx[0];
442  vseq->seq_tier = sh->seq_tier[0];
443  vseq->order_hint_bits_minus_1 = sh->order_hint_bits_minus_1;
444  vseq->intra_period = ctx->gop_size;
445  vseq->ip_period = ctx->b_per_p + 1;
446 
447  vseq->seq_fields.bits.enable_order_hint = sh->enable_order_hint;
448 
449  if (!(ctx->va_rc_mode & VA_RC_CQP)) {
450  vseq->bits_per_second = ctx->va_bit_rate;
451  vseq->seq_fields.bits.enable_cdef = sh->enable_cdef = 1;
452  }
453 
455  if (ret < 0)
456  goto end;
457 
458  ret = vaapi_encode_av1_write_obu(avctx, priv->sh_data, &priv->sh_data_len, obu);
459  if (ret < 0)
460  goto end;
461 
462 end:
464  return ret;
465 }
466 
468  VAAPIEncodePicture *pic)
469 {
470  VAAPIEncodeContext *ctx = avctx->priv_data;
471  VAAPIEncodeAV1Context *priv = avctx->priv_data;
472  VAAPIEncodeAV1Picture *hpic = pic->priv_data;
473  AV1RawOBU *fh_obu = &priv->fh;
474  AV1RawFrameHeader *fh = &fh_obu->obu.frame.header;
475  VAEncPictureParameterBufferAV1 *vpic = pic->codec_picture_params;
476  CodedBitstreamFragment *obu = &priv->current_obu;
478  VAAPIEncodeAV1Picture *href;
479  int slot, i;
480  int ret;
481  static const int8_t default_loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME] =
482  { 1, 0, 0, 0, -1, 0, -1, -1 };
483 
484  memset(fh_obu, 0, sizeof(*fh_obu));
485  pic->nb_slices = priv->tile_groups;
488  fh_obu->header.obu_has_size_field = 1;
489 
490  switch (pic->type) {
491  case PICTURE_TYPE_IDR:
492  av_assert0(pic->nb_refs[0] == 0 || pic->nb_refs[1]);
494  fh->refresh_frame_flags = 0xFF;
495  fh->base_q_idx = priv->q_idx_idr;
496  hpic->slot = 0;
497  hpic->last_idr_frame = pic->display_order;
498  break;
499  case PICTURE_TYPE_P:
500  av_assert0(pic->nb_refs[0]);
502  fh->base_q_idx = priv->q_idx_p;
503  ref = pic->refs[0][pic->nb_refs[0] - 1];
504  href = ref->priv_data;
505  hpic->slot = !href->slot;
506  hpic->last_idr_frame = href->last_idr_frame;
507  fh->refresh_frame_flags = 1 << hpic->slot;
508 
509  /** set the nearest frame in L0 as all reference frame. */
510  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
511  fh->ref_frame_idx[i] = href->slot;
512  }
513  fh->primary_ref_frame = href->slot;
514  fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame;
515  vpic->ref_frame_ctrl_l0.fields.search_idx0 = AV1_REF_FRAME_LAST;
516 
517  /** set the 2nd nearest frame in L0 as Golden frame. */
518  if (pic->nb_refs[0] > 1) {
519  ref = pic->refs[0][pic->nb_refs[0] - 2];
520  href = ref->priv_data;
521  fh->ref_frame_idx[3] = href->slot;
522  fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame;
523  vpic->ref_frame_ctrl_l0.fields.search_idx1 = AV1_REF_FRAME_GOLDEN;
524  }
525  break;
526  case PICTURE_TYPE_B:
527  av_assert0(pic->nb_refs[0] && pic->nb_refs[1]);
529  fh->base_q_idx = priv->q_idx_b;
530  fh->refresh_frame_flags = 0x0;
531  fh->reference_select = 1;
532 
533  /** B frame will not be referenced, disable its recon frame. */
534  vpic->picture_flags.bits.disable_frame_recon = 1;
535 
536  /** Use LAST_FRAME and BWDREF_FRAME for reference. */
537  vpic->ref_frame_ctrl_l0.fields.search_idx0 = AV1_REF_FRAME_LAST;
538  vpic->ref_frame_ctrl_l1.fields.search_idx0 = AV1_REF_FRAME_BWDREF;
539 
540  ref = pic->refs[0][pic->nb_refs[0] - 1];
541  href = ref->priv_data;
542  hpic->last_idr_frame = href->last_idr_frame;
543  fh->primary_ref_frame = href->slot;
544  fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame;
545  for (i = 0; i < AV1_REF_FRAME_GOLDEN; i++) {
546  fh->ref_frame_idx[i] = href->slot;
547  }
548 
549  ref = pic->refs[1][pic->nb_refs[1] - 1];
550  href = ref->priv_data;
551  fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame;
553  fh->ref_frame_idx[i] = href->slot;
554  }
555  break;
556  default:
557  av_assert0(0 && "invalid picture type");
558  }
559 
560  fh->show_frame = pic->display_order <= pic->encode_order;
562  fh->frame_width_minus_1 = avctx->width - 1;
563  fh->frame_height_minus_1 = avctx->height - 1;
566  fh->order_hint = pic->display_order - hpic->last_idr_frame;
567  fh->tile_cols = priv->tile_cols;
568  fh->tile_rows = priv->tile_rows;
569  fh->tile_cols_log2 = priv->tile_cols_log2;
570  fh->tile_rows_log2 = priv->tile_rows_log2;
572  fh->tile_size_bytes_minus1 = priv->attr_ext2.bits.tile_size_bytes_minus1;
573 
574  /** ignore ONLY_4x4 mode for codedlossless is not fully implemented. */
575  if (priv->attr_ext2.bits.tx_mode_support & 0x04)
577  else if (priv->attr_ext2.bits.tx_mode_support & 0x02)
579  else {
580  av_log(avctx, AV_LOG_ERROR, "No available tx mode found.\n");
581  return AVERROR(EINVAL);
582  }
583 
584  for (i = 0; i < fh->tile_cols; i++)
585  fh->width_in_sbs_minus_1[i] = vpic->width_in_sbs_minus_1[i] = priv->width_in_sbs_minus_1[i];
586 
587  for (i = 0; i < fh->tile_rows; i++)
588  fh->height_in_sbs_minus_1[i] = vpic->height_in_sbs_minus_1[i] = priv->height_in_sbs_minus_1[i];
589 
590  memcpy(fh->loop_filter_ref_deltas, default_loop_filter_ref_deltas,
591  AV1_TOTAL_REFS_PER_FRAME * sizeof(int8_t));
592 
593  if (fh->frame_type == AV1_FRAME_KEY && fh->show_frame) {
594  fh->error_resilient_mode = 1;
595  }
596 
599 
600  vpic->base_qindex = fh->base_q_idx;
601  vpic->frame_width_minus_1 = fh->frame_width_minus_1;
602  vpic->frame_height_minus_1 = fh->frame_height_minus_1;
603  vpic->primary_ref_frame = fh->primary_ref_frame;
604  vpic->reconstructed_frame = pic->recon_surface;
605  vpic->coded_buf = pic->output_buffer;
606  vpic->tile_cols = fh->tile_cols;
607  vpic->tile_rows = fh->tile_rows;
608  vpic->order_hint = fh->order_hint;
609 #if VA_CHECK_VERSION(1, 15, 0)
610  vpic->refresh_frame_flags = fh->refresh_frame_flags;
611 #endif
612 
613  vpic->picture_flags.bits.enable_frame_obu = 0;
614  vpic->picture_flags.bits.frame_type = fh->frame_type;
615  vpic->picture_flags.bits.reduced_tx_set = fh->reduced_tx_set;
616  vpic->picture_flags.bits.error_resilient_mode = fh->error_resilient_mode;
617 
618  /** let driver decide to use single or compound reference prediction mode. */
619  vpic->mode_control_flags.bits.reference_mode = fh->reference_select ? 2 : 0;
620  vpic->mode_control_flags.bits.tx_mode = fh->tx_mode;
621 
622  vpic->tile_group_obu_hdr_info.bits.obu_has_size_field = 1;
623 
624  /** set reference. */
625  for (i = 0; i < AV1_REFS_PER_FRAME; i++)
626  vpic->ref_frame_idx[i] = fh->ref_frame_idx[i];
627 
628  for (i = 0; i < FF_ARRAY_ELEMS(vpic->reference_frames); i++)
629  vpic->reference_frames[i] = VA_INVALID_SURFACE;
630 
631  for (i = 0; i < MAX_REFERENCE_LIST_NUM; i++) {
632  for (int j = 0; j < pic->nb_refs[i]; j++) {
633  VAAPIEncodePicture *ref_pic = pic->refs[i][j];
634 
635  slot = ((VAAPIEncodeAV1Picture*)ref_pic->priv_data)->slot;
636  av_assert0(vpic->reference_frames[slot] == VA_INVALID_SURFACE);
637 
638  vpic->reference_frames[slot] = ref_pic->recon_surface;
639  }
640  }
641 
642  ret = vaapi_encode_av1_add_obu(avctx, obu, AV1_OBU_FRAME_HEADER, &priv->fh);
643  if (ret < 0)
644  goto end;
645 
646  ret = vaapi_encode_av1_write_obu(avctx, priv->fh_data, &priv->fh_data_len, obu);
647  if (ret < 0)
648  goto end;
649 
650  if (!(ctx->va_rc_mode & VA_RC_CQP)) {
651  vpic->min_base_qindex = av_clip(avctx->qmin, 1, AV1_MAX_QUANT);
652  vpic->max_base_qindex = av_clip(avctx->qmax, 1, AV1_MAX_QUANT);
653 
654  vpic->bit_offset_qindex = priv->qindex_offset;
655  vpic->bit_offset_loopfilter_params = priv->loopfilter_offset;
656  vpic->bit_offset_cdef_params = priv->cdef_start_offset;
657  vpic->size_in_bits_cdef_params = priv->cdef_param_size;
658  vpic->size_in_bits_frame_hdr_obu = priv->fh_data_len;
659  vpic->byte_offset_frame_hdr_obu_size = (((pic->type == PICTURE_TYPE_IDR) ?
660  priv->sh_data_len / 8 : 0) +
661  (fh_obu->header.obu_extension_flag ?
662  2 : 1));
663  }
664 
665  priv->nb_mh = 0;
666 
667  if (pic->type == PICTURE_TYPE_IDR) {
668  AVFrameSideData *sd =
671  if (sd) {
674  if (mdm->has_primaries && mdm->has_luminance) {
675  AV1RawOBU *obu = &priv->mh[priv->nb_mh++];
676  AV1RawMetadata *md = &obu->obu.metadata;
677  AV1RawMetadataHDRMDCV *mdcv = &md->metadata.hdr_mdcv;
678  const int chroma_den = 1 << 16;
679  const int max_luma_den = 1 << 8;
680  const int min_luma_den = 1 << 14;
681 
682  memset(obu, 0, sizeof(*obu));
684  md->metadata_type = AV1_METADATA_TYPE_HDR_MDCV;
685 
686  for (i = 0; i < 3; i++) {
687  mdcv->primary_chromaticity_x[i] =
688  av_rescale(mdm->display_primaries[i][0].num, chroma_den,
689  mdm->display_primaries[i][0].den);
690  mdcv->primary_chromaticity_y[i] =
691  av_rescale(mdm->display_primaries[i][1].num, chroma_den,
692  mdm->display_primaries[i][1].den);
693  }
694 
696  av_rescale(mdm->white_point[0].num, chroma_den,
697  mdm->white_point[0].den);
699  av_rescale(mdm->white_point[1].num, chroma_den,
700  mdm->white_point[1].den);
701 
702  mdcv->luminance_max =
703  av_rescale(mdm->max_luminance.num, max_luma_den,
704  mdm->max_luminance.den);
705  mdcv->luminance_min =
706  av_rescale(mdm->min_luminance.num, min_luma_den,
707  mdm->min_luminance.den);
708  }
709  }
710 
713  if (sd) {
715  AV1RawOBU *obu = &priv->mh[priv->nb_mh++];
716  AV1RawMetadata *md = &obu->obu.metadata;
717  AV1RawMetadataHDRCLL *cll = &md->metadata.hdr_cll;
718 
719  memset(obu, 0, sizeof(*obu));
720  obu->header.obu_type = AV1_OBU_METADATA;
721  md->metadata_type = AV1_METADATA_TYPE_HDR_CLL;
722  cll->max_cll = cllm->MaxCLL;
723  cll->max_fall = cllm->MaxFALL;
724  }
725  }
726 
727 end:
729  return ret;
730 }
731 
733  VAAPIEncodePicture *pic,
734  VAAPIEncodeSlice *slice)
735 {
736  VAAPIEncodeAV1Context *priv = avctx->priv_data;
737  VAEncTileGroupBufferAV1 *vslice = slice->codec_slice_params;
738  CodedBitstreamAV1Context *cbctx = priv->cbc->priv_data;
739  int div;
740 
741  /** Set tile group info. */
742  div = priv->tile_cols * priv->tile_rows / priv->tile_groups;
743  vslice->tg_start = slice->index * div;
744  if (slice->index == (priv->tile_groups - 1)) {
745  vslice->tg_end = priv->tile_cols * priv->tile_rows - 1;
746  cbctx->seen_frame_header = 0;
747  } else {
748  vslice->tg_end = (slice->index + 1) * div - 1;
749  }
750 
751  return 0;
752 }
753 
755  VAAPIEncodePicture *pic,
756  char *data, size_t *data_len)
757 {
758  VAAPIEncodeAV1Context *priv = avctx->priv_data;
759  CodedBitstreamFragment *obu = &priv->current_obu;
760  CodedBitstreamAV1Context *cbctx = priv->cbc->priv_data;
761  AV1RawOBU *fh_obu = &priv->fh;
762  AV1RawFrameHeader *rep_fh = &fh_obu->obu.frame_header;
763  VAAPIEncodeAV1Picture *href;
764  int ret = 0;
765 
766  pic->tail_size = 0;
767  /** Pack repeat frame header. */
768  if (pic->display_order > pic->encode_order) {
769  memset(fh_obu, 0, sizeof(*fh_obu));
770  href = pic->refs[0][pic->nb_refs[0] - 1]->priv_data;
772  fh_obu->header.obu_has_size_field = 1;
773 
774  rep_fh->show_existing_frame = 1;
775  rep_fh->frame_to_show_map_idx = href->slot == 0;
776  rep_fh->frame_type = AV1_FRAME_INTER;
777  rep_fh->frame_width_minus_1 = avctx->width - 1;
778  rep_fh->frame_height_minus_1 = avctx->height - 1;
779  rep_fh->render_width_minus_1 = rep_fh->frame_width_minus_1;
781 
782  cbctx->seen_frame_header = 0;
783 
784  ret = vaapi_encode_av1_add_obu(avctx, obu, AV1_OBU_FRAME_HEADER, &priv->fh);
785  if (ret < 0)
786  goto end;
787 
788  ret = vaapi_encode_av1_write_obu(avctx, pic->tail_data, &pic->tail_size, obu);
789  if (ret < 0)
790  goto end;
791 
792  pic->tail_size /= 8;
793  }
794 
795  memcpy(data, &priv->fh_data, MAX_PARAM_BUFFER_SIZE * sizeof(char));
796  *data_len = priv->fh_data_len;
797 
798 end:
800  return ret;
801 }
802 
804  VAAPIEncodePicture *pic,
805  int index, int *type,
806  char *data, size_t *data_len)
807 {
808  VAAPIEncodeAV1Context *priv = avctx->priv_data;
809  CodedBitstreamFragment *obu = &priv->current_obu;
810  AV1RawOBU *mh_obu;
811  char mh_data[MAX_PARAM_BUFFER_SIZE];
812  size_t mh_data_len;
813  int ret = 0;
814 
815  if (index >= priv->nb_mh)
816  return AVERROR_EOF;
817 
818  mh_obu = &priv->mh[index];
819  ret = vaapi_encode_av1_add_obu(avctx, obu, AV1_OBU_METADATA, mh_obu);
820  if (ret < 0)
821  goto end;
822 
823  ret = vaapi_encode_av1_write_obu(avctx, mh_data, &mh_data_len, obu);
824  if (ret < 0)
825  goto end;
826 
827  memcpy(data, mh_data, MAX_PARAM_BUFFER_SIZE * sizeof(char));
828  *data_len = mh_data_len;
829  *type = VAEncPackedHeaderRawData;
830 
831 end:
833  return ret;
834 }
835 
837  { AV_PROFILE_AV1_MAIN, 8, 3, 1, 1, VAProfileAV1Profile0 },
838  { AV_PROFILE_AV1_MAIN, 10, 3, 1, 1, VAProfileAV1Profile0 },
840 };
841 
845  .default_quality = 25,
846 
847  .get_encoder_caps = &vaapi_encode_av1_get_encoder_caps,
848  .configure = &vaapi_encode_av1_configure,
849 
850  .sequence_header_type = VAEncPackedHeaderSequence,
851  .sequence_params_size = sizeof(VAEncSequenceParameterBufferAV1),
852  .init_sequence_params = &vaapi_encode_av1_init_sequence_params,
853  .write_sequence_header = &vaapi_encode_av1_write_sequence_header,
854 
855  .picture_priv_data_size = sizeof(VAAPIEncodeAV1Picture),
856  .picture_header_type = VAEncPackedHeaderPicture,
857  .picture_params_size = sizeof(VAEncPictureParameterBufferAV1),
858  .init_picture_params = &vaapi_encode_av1_init_picture_params,
859  .write_picture_header = &vaapi_encode_av1_write_picture_header,
860 
861  .slice_params_size = sizeof(VAEncTileGroupBufferAV1),
862  .init_slice_params = &vaapi_encode_av1_init_slice_params,
863 
864  .write_extra_header = &vaapi_encode_av1_write_extra_header,
865 };
866 
868 {
869  VAAPIEncodeContext *ctx = avctx->priv_data;
870  VAAPIEncodeAV1Context *priv = avctx->priv_data;
871  VAConfigAttrib attr;
872  VAStatus vas;
873  int ret;
874 
875  ctx->codec = &vaapi_encode_type_av1;
876 
877  ctx->desired_packed_headers =
878  VA_ENC_PACKED_HEADER_SEQUENCE |
879  VA_ENC_PACKED_HEADER_PICTURE |
880  VA_ENC_PACKED_HEADER_MISC; // Metadata
881 
882  if (avctx->profile == AV_PROFILE_UNKNOWN)
883  avctx->profile = priv->profile;
884  if (avctx->level == AV_LEVEL_UNKNOWN)
885  avctx->level = priv->level;
886 
887  if (avctx->level != AV_LEVEL_UNKNOWN && avctx->level & ~0x1f) {
888  av_log(avctx, AV_LOG_ERROR, "Invalid level %d\n", avctx->level);
889  return AVERROR(EINVAL);
890  }
891 
892  ret = ff_vaapi_encode_init(avctx);
893  if (ret < 0)
894  return ret;
895 
896  attr.type = VAConfigAttribEncAV1;
897  vas = vaGetConfigAttributes(ctx->hwctx->display,
898  ctx->va_profile,
899  ctx->va_entrypoint,
900  &attr, 1);
901  if (vas != VA_STATUS_SUCCESS) {
902  av_log(avctx, AV_LOG_ERROR, "Failed to query "
903  "config attribute: %d (%s).\n", vas, vaErrorStr(vas));
904  return AVERROR_EXTERNAL;
905  } else if (attr.value == VA_ATTRIB_NOT_SUPPORTED) {
906  priv->attr.value = 0;
907  av_log(avctx, AV_LOG_WARNING, "Attribute type:%d is not "
908  "supported.\n", attr.type);
909  } else {
910  priv->attr.value = attr.value;
911  }
912 
913  attr.type = VAConfigAttribEncAV1Ext1;
914  vas = vaGetConfigAttributes(ctx->hwctx->display,
915  ctx->va_profile,
916  ctx->va_entrypoint,
917  &attr, 1);
918  if (vas != VA_STATUS_SUCCESS) {
919  av_log(avctx, AV_LOG_ERROR, "Failed to query "
920  "config attribute: %d (%s).\n", vas, vaErrorStr(vas));
921  return AVERROR_EXTERNAL;
922  } else if (attr.value == VA_ATTRIB_NOT_SUPPORTED) {
923  priv->attr_ext1.value = 0;
924  av_log(avctx, AV_LOG_WARNING, "Attribute type:%d is not "
925  "supported.\n", attr.type);
926  } else {
927  priv->attr_ext1.value = attr.value;
928  }
929 
930  /** This attr provides essential indicators, return error if not support. */
931  attr.type = VAConfigAttribEncAV1Ext2;
932  vas = vaGetConfigAttributes(ctx->hwctx->display,
933  ctx->va_profile,
934  ctx->va_entrypoint,
935  &attr, 1);
936  if (vas != VA_STATUS_SUCCESS || attr.value == VA_ATTRIB_NOT_SUPPORTED) {
937  av_log(avctx, AV_LOG_ERROR, "Failed to query "
938  "config attribute: %d (%s).\n", vas, vaErrorStr(vas));
939  return AVERROR_EXTERNAL;
940  } else {
941  priv->attr_ext2.value = attr.value;
942  }
943 
944  av_opt_set_int(priv->cbc->priv_data, "fixed_obu_size_length",
945  priv->attr_ext2.bits.obu_size_bytes_minus1 + 1, 0);
946 
948  if (ret < 0)
949  return ret;
950 
951  return 0;
952 }
953 
955 {
956  VAAPIEncodeAV1Context *priv = avctx->priv_data;
957 
959  ff_cbs_close(&priv->cbc);
960 
961  return ff_vaapi_encode_close(avctx);
962 }
963 
964 #define OFFSET(x) offsetof(VAAPIEncodeAV1Context, x)
965 #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
966 
970  { "profile", "Set profile (seq_profile)",
972  { .i64 = AV_PROFILE_UNKNOWN }, AV_PROFILE_UNKNOWN, 0xff, FLAGS, .unit = "profile" },
973 
974 #define PROFILE(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
975  { .i64 = value }, 0, 0, FLAGS, .unit = "profile"
976  { PROFILE("main", AV_PROFILE_AV1_MAIN) },
977  { PROFILE("high", AV_PROFILE_AV1_HIGH) },
978  { PROFILE("professional", AV_PROFILE_AV1_PROFESSIONAL) },
979 #undef PROFILE
980 
981  { "tier", "Set tier (seq_tier)",
982  OFFSET(tier), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS, .unit = "tier" },
983  { "main", NULL, 0, AV_OPT_TYPE_CONST,
984  { .i64 = 0 }, 0, 0, FLAGS, .unit = "tier" },
985  { "high", NULL, 0, AV_OPT_TYPE_CONST,
986  { .i64 = 1 }, 0, 0, FLAGS, .unit = "tier" },
987  { "level", "Set level (seq_level_idx)",
989  { .i64 = AV_LEVEL_UNKNOWN }, AV_LEVEL_UNKNOWN, 0x1f, FLAGS, .unit = "level" },
990 
991 #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
992  { .i64 = value }, 0, 0, FLAGS, .unit = "level"
993  { LEVEL("2.0", 0) },
994  { LEVEL("2.1", 1) },
995  { LEVEL("3.0", 4) },
996  { LEVEL("3.1", 5) },
997  { LEVEL("4.0", 8) },
998  { LEVEL("4.1", 9) },
999  { LEVEL("5.0", 12) },
1000  { LEVEL("5.1", 13) },
1001  { LEVEL("5.2", 14) },
1002  { LEVEL("5.3", 15) },
1003  { LEVEL("6.0", 16) },
1004  { LEVEL("6.1", 17) },
1005  { LEVEL("6.2", 18) },
1006  { LEVEL("6.3", 19) },
1007 #undef LEVEL
1008 
1009  { "tiles", "Tile columns x rows (Use minimal tile column/row number automatically by default)",
1010  OFFSET(tile_cols), AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, 0, FLAGS },
1011  { "tile_groups", "Number of tile groups for encoding",
1012  OFFSET(tile_groups), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, AV1_MAX_TILE_ROWS * AV1_MAX_TILE_COLS, FLAGS },
1013 
1014  { NULL },
1015 };
1016 
1018  { "b", "0" },
1019  { "bf", "2" },
1020  { "g", "120" },
1021  { "qmin", "1" },
1022  { "qmax", "255" },
1023  { NULL },
1024 };
1025 
1027  .class_name = "av1_vaapi",
1028  .item_name = av_default_item_name,
1029  .option = vaapi_encode_av1_options,
1030  .version = LIBAVUTIL_VERSION_INT,
1031 };
1032 
1034  .p.name = "av1_vaapi",
1035  CODEC_LONG_NAME("AV1 (VAAPI)"),
1036  .p.type = AVMEDIA_TYPE_VIDEO,
1037  .p.id = AV_CODEC_ID_AV1,
1038  .priv_data_size = sizeof(VAAPIEncodeAV1Context),
1041  .close = &vaapi_encode_av1_close,
1042  .p.priv_class = &vaapi_encode_av1_class,
1043  .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE |
1045  .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
1047  .defaults = vaapi_encode_av1_defaults,
1048  .p.pix_fmts = (const enum AVPixelFormat[]) {
1051  },
1052  .hw_configs = ff_vaapi_encode_hw_configs,
1053  .p.wrapper_name = "vaapi",
1054 };
MAX_PARAM_BUFFER_SIZE
@ MAX_PARAM_BUFFER_SIZE
Definition: vaapi_encode.h:46
AVMasteringDisplayMetadata::has_primaries
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
Definition: mastering_display_metadata.h:62
AV1RawSequenceHeader::seq_force_integer_mv
uint8_t seq_force_integer_mv
Definition: cbs_av1.h:120
vaapi_encode_av1_init
static av_cold int vaapi_encode_av1_init(AVCodecContext *avctx)
Definition: vaapi_encode_av1.c:867
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:70
AVMasteringDisplayMetadata::max_luminance
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:57
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
level
uint8_t level
Definition: svq3.c:205
AV1RawFrameHeader::primary_ref_frame
uint8_t primary_ref_frame
Definition: cbs_av1.h:187
av_clip
#define av_clip
Definition: common.h:99
MAX_REFERENCE_LIST_NUM
@ MAX_REFERENCE_LIST_NUM
Definition: vaapi_encode.h:52
FLAGS
#define FLAGS
Definition: vaapi_encode_av1.c:965
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
AV1RawSequenceHeader::seq_level_idx
uint8_t seq_level_idx[AV1_MAX_OPERATING_POINTS]
Definition: cbs_av1.h:87
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
CodedBitstreamAV1Context::seen_frame_header
int seen_frame_header
Definition: cbs_av1.h:445
CodedBitstreamContext::priv_data
void * priv_data
Internal codec-specific data.
Definition: cbs.h:240
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:685
ff_av1_vaapi_encoder
const FFCodec ff_av1_vaapi_encoder
Definition: vaapi_encode_av1.c:1033
VAAPIEncodeAV1Context::max_log2_tile_rows
int max_log2_tile_rows
Definition: vaapi_encode_av1.c:72
AV1RawSequenceHeader
Definition: cbs_av1.h:73
AV1RawFrameHeader::show_frame
uint8_t show_frame
Definition: cbs_av1.h:172
AV1_REF_FRAME_GOLDEN
@ AV1_REF_FRAME_GOLDEN
Definition: av1.h:66
tile_log2
static int tile_log2(int blkSize, int target)
Definition: vaapi_encode_av1.c:210
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:947
AV1RawMetadataHDRMDCV::primary_chromaticity_x
uint16_t primary_chromaticity_x[3]
Definition: cbs_av1.h:324
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:186
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2965
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:145
VAAPIEncodePicture::tail_size
size_t tail_size
Byte length of tail_data.
Definition: vaapi_encode.h:147
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
ff_cbs_insert_unit_content
int ff_cbs_insert_unit_content(CodedBitstreamFragment *frag, int position, CodedBitstreamUnitType type, void *content, void *content_ref)
Insert a new unit into a fragment with the given content.
Definition: cbs.c:783
VAAPIEncodeAV1Context::cdef_param_size
int cdef_param_size
Definition: vaapi_encode_av1.c:82
ff_av1_guess_level
const AV1LevelDescriptor * ff_av1_guess_level(int64_t bitrate, int tier, int width, int height, int tiles, int tile_cols, float fps)
Guess the level of a stream from some parameters.
Definition: av1_levels.c:48
md
#define md
Definition: vf_colormatrix.c:101
VAAPIEncodeAV1Context::height_in_sbs_minus_1
uint8_t height_in_sbs_minus_1[AV1_MAX_TILE_ROWS]
Definition: vaapi_encode_av1.c:67
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:111
VAAPIEncodeAV1Context::nb_mh
int nb_mh
Definition: vaapi_encode_av1.c:46
VAAPIEncodeAV1Context::fh_data
char fh_data[MAX_PARAM_BUFFER_SIZE]
coded frame header data.
Definition: vaapi_encode_av1.c:55
pixdesc.h
VAAPIEncodeAV1Context::cdef_start_offset
int cdef_start_offset
Definition: vaapi_encode_av1.c:81
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:678
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:686
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:172
AV1_FRAME_INTER
@ AV1_FRAME_INTER
Definition: av1.h:54
CodedBitstreamContext
Context structure for coded bitstream operations.
Definition: cbs.h:219
vaapi_encode_av1_set_tile
static int vaapi_encode_av1_set_tile(AVCodecContext *avctx)
Definition: vaapi_encode_av1.c:216
VAAPIEncodeSlice
Definition: vaapi_encode.h:64
AVOption
AVOption.
Definition: opt.h:357
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:583
AV1RawFrameHeader::uniform_tile_spacing_flag
uint8_t uniform_tile_spacing_flag
Definition: cbs_av1.h:215
data
const char data[16]
Definition: mxf.c:148
VAAPIEncodeAV1Context::current_obu
CodedBitstreamFragment current_obu
Definition: vaapi_encode_av1.c:48
AVCodecContext::b_quant_offset
float b_quant_offset
qscale offset between IP and B-frames
Definition: avcodec.h:811
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:126
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:196
VAAPIEncodeAV1Context::fh
AV1RawOBU fh
frame header.
Definition: vaapi_encode_av1.c:44
ff_vaapi_encode_close
av_cold int ff_vaapi_encode_close(AVCodecContext *avctx)
Definition: vaapi_encode.c:2983
VAAPIEncodeSlice::index
int index
Definition: vaapi_encode.h:65
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AV_PROFILE_AV1_PROFESSIONAL
#define AV_PROFILE_AV1_PROFESSIONAL
Definition: defs.h:169
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1263
VAAPIEncodeAV1Context::common
VAAPIEncodeContext common
Definition: vaapi_encode_av1.c:42
AV1RawOBU::header
AV1RawOBUHeader header
Definition: cbs_av1.h:401
VAAPIEncodeAV1Context::q_idx_b
int q_idx_b
Definition: vaapi_encode_av1.c:76
VAAPIEncodeAV1Context::min_log2_tile_cols
int min_log2_tile_cols
Definition: vaapi_encode_av1.c:69
VAAPIEncodeAV1Context::qindex_offset
int qindex_offset
bit positions in current frame header
Definition: vaapi_encode_av1.c:79
AV1RawSequenceHeader::seq_profile
uint8_t seq_profile
Definition: cbs_av1.h:74
vaapi_encode_av1_init_slice_params
static int vaapi_encode_av1_init_slice_params(AVCodecContext *avctx, VAAPIEncodePicture *pic, VAAPIEncodeSlice *slice)
Definition: vaapi_encode_av1.c:732
ff_cbs_close
av_cold void ff_cbs_close(CodedBitstreamContext **ctx_ptr)
Close a context and free all internal state.
Definition: cbs.c:142
AV1_TX_MODE_LARGEST
@ AV1_TX_MODE_LARGEST
Definition: av1.h:182
VAAPIEncodePicture::refs
struct VAAPIEncodePicture * refs[MAX_REFERENCE_LIST_NUM][MAX_PICTURE_REFERENCES]
Definition: vaapi_encode.h:125
AV1RawFrame::header
AV1RawFrameHeader header
Definition: cbs_av1.h:306
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:107
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:560
AV1RawColorConfig
Definition: cbs_av1.h:41
VAAPIEncodePicture::nb_refs
int nb_refs[MAX_REFERENCE_LIST_NUM]
Definition: vaapi_encode.h:124
AV1RawOBU::obu
union AV1RawOBU::@54 obu
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:820
AV1RawFrameHeader::loop_filter_ref_deltas
int8_t loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME]
Definition: cbs_av1.h:260
FFCodecDefault
Definition: codec_internal.h:96
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:130
vaapi_encode.h
AV1_OBU_FRAME_HEADER
@ AV1_OBU_FRAME_HEADER
Definition: av1.h:32
VAAPIEncodePicture
Definition: vaapi_encode.h:73
AV1_CSP_VERTICAL
@ AV1_CSP_VERTICAL
Definition: av1.h:134
vaapi_encode_av1_profiles
static const VAAPIEncodeProfile vaapi_encode_av1_profiles[]
Definition: vaapi_encode_av1.c:836
VAAPIEncodePicture::non_independent_frame
int non_independent_frame
indicate if current frame is an independent frame that the coded data can be pushed to downstream dir...
Definition: vaapi_encode.h:143
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
AV1RawMetadataHDRMDCV
Definition: cbs_av1.h:323
AVRational::num
int num
Numerator.
Definition: rational.h:59
CodedBitstreamContext::trace_level
int trace_level
Log level to use for default trace output.
Definition: cbs.h:263
AV1RawFrameHeader::tx_mode
uint8_t tx_mode
Definition: cbs_av1.h:275
AV1_CSP_UNKNOWN
@ AV1_CSP_UNKNOWN
Definition: av1.h:133
AV1_REF_FRAME_LAST
@ AV1_REF_FRAME_LAST
Definition: av1.h:63
AV1RawFrameHeader::base_q_idx
uint8_t base_q_idx
Definition: cbs_av1.h:230
cbs_av1.h
AV1_SELECT_INTEGER_MV
@ AV1_SELECT_INTEGER_MV
Definition: av1.h:99
AV1RawOBUHeader::obu_extension_flag
uint8_t obu_extension_flag
Definition: cbs_av1.h:32
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:671
VAAPIEncodeAV1Picture::last_idr_frame
int64_t last_idr_frame
Definition: vaapi_encode_av1.c:37
VAAPIEncodeAV1Picture::slot
int slot
Definition: vaapi_encode_av1.c:38
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:90
AV1_REFS_PER_FRAME
@ AV1_REFS_PER_FRAME
Definition: av1.h:85
AV_PROFILE_UNKNOWN
#define AV_PROFILE_UNKNOWN
Definition: defs.h:65
AV1_MAX_QUANT
#define AV1_MAX_QUANT
Definition: vaapi_encode_av1.c:34
vaapi_encode_av1_init_sequence_params
static int vaapi_encode_av1_init_sequence_params(AVCodecContext *avctx)
Definition: vaapi_encode_av1.c:361
VAAPIEncodePicture::codec_picture_params
void * codec_picture_params
Definition: vaapi_encode.h:111
CodedBitstreamFragment
Coded bitstream fragment structure, combining one or more units.
Definition: cbs.h:122
VAAPIEncodeAV1Context::width_in_sbs_minus_1
uint8_t width_in_sbs_minus_1[AV1_MAX_TILE_COLS]
Definition: vaapi_encode_av1.c:66
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
AV1RawFrameHeader::render_width_minus_1
uint16_t render_width_minus_1
Definition: cbs_av1.h:193
CodedBitstreamFragment::data_size
size_t data_size
The number of bytes in the bitstream.
Definition: cbs.h:135
vaapi_encode_av1_write_sequence_header
static int vaapi_encode_av1_write_sequence_header(AVCodecContext *avctx, char *data, size_t *data_len)
Definition: vaapi_encode_av1.c:350
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
Definition: codec.h:159
tile_rows
int tile_rows
Definition: h265_levels.c:217
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:40
tile_cols
int tile_cols
Definition: av1_levels.c:73
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
AV1RawFrameHeader::frame_width_minus_1
uint16_t frame_width_minus_1
Definition: cbs_av1.h:188
ctx
AVFormatContext * ctx
Definition: movenc.c:49
ff_vaapi_encode_receive_packet
int ff_vaapi_encode_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
Definition: vaapi_encode.c:1397
tier
int tier
Definition: av1_levels.c:48
AV1RawSequenceHeader::seq_tier
uint8_t seq_tier[AV1_MAX_OPERATING_POINTS]
Definition: cbs_av1.h:88
CodedBitstreamFragment::data_bit_padding
size_t data_bit_padding
The number of bits which should be ignored in the final byte.
Definition: cbs.h:139
color_range
color_range
Definition: vf_selectivecolor.c:43
VAAPIEncodeAV1Context::tile_groups
int tile_groups
Definition: vaapi_encode_av1.c:89
AV1RawMetadataHDRCLL
Definition: cbs_av1.h:318
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:558
VAAPIEncodeType
Definition: vaapi_encode.h:419
PutBitContext
Definition: put_bits.h:50
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:271
VAAPIEncodeContext
Definition: vaapi_encode.h:195
if
if(ret)
Definition: filter_design.txt:179
vaapi_encode_av1_trace_write_log
static void vaapi_encode_av1_trace_write_log(void *ctx, PutBitContext *pbc, int length, const char *str, const int *subscripts, int64_t value)
Definition: vaapi_encode_av1.c:92
framerate
float framerate
Definition: av1_levels.c:29
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AV1RawMetadata
Definition: cbs_av1.h:381
AV1RawOBU
Definition: cbs_av1.h:400
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
fabs
static __device__ float fabs(float a)
Definition: cuda_runtime.h:182
AV1RawFrameHeader::tile_size_bytes_minus1
uint8_t tile_size_bytes_minus1
Definition: cbs_av1.h:223
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:210
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:695
VAAPIEncodeAV1Context
Definition: vaapi_encode_av1.c:41
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:280
CodedBitstreamContext::trace_context
void * trace_context
User context pointer to pass to trace callbacks.
Definition: cbs.h:267
AV1RawFrameHeader
Definition: cbs_av1.h:165
AVCHROMA_LOC_LEFT
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
Definition: pixfmt.h:707
AV_LEVEL_UNKNOWN
#define AV_LEVEL_UNKNOWN
Definition: defs.h:196
VAAPIEncodeType::profiles
const VAAPIEncodeProfile * profiles
Definition: vaapi_encode.h:422
AV1RawFrameHeader::width_in_sbs_minus_1
uint8_t width_in_sbs_minus_1[AV1_MAX_TILE_COLS]
Definition: cbs_av1.h:220
AVCHROMA_LOC_TOPLEFT
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
Definition: pixfmt.h:709
vaapi_encode_av1_add_obu
static int vaapi_encode_av1_add_obu(AVCodecContext *avctx, CodedBitstreamFragment *au, uint8_t type, void *obu_unit)
Definition: vaapi_encode_av1.c:166
FF_CODEC_RECEIVE_PACKET_CB
#define FF_CODEC_RECEIVE_PACKET_CB(func)
Definition: codec_internal.h:301
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:495
AV_OPT_TYPE_IMAGE_SIZE
@ AV_OPT_TYPE_IMAGE_SIZE
offset must point to two consecutive ints
Definition: opt.h:255
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
AV1RawColorConfig::chroma_sample_position
uint8_t chroma_sample_position
Definition: cbs_av1.h:54
VAAPIEncodeAV1Context::attr_ext2
VAConfigAttribValEncAV1Ext2 attr_ext2
Definition: vaapi_encode_av1.c:51
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition: frame.h:120
AV1_FRAME_KEY
@ AV1_FRAME_KEY
Definition: av1.h:53
FLAG_B_PICTURES
@ FLAG_B_PICTURES
Definition: vaapi_encode.h:408
VAAPIEncodeAV1Context::cbc
CodedBitstreamContext * cbc
Definition: vaapi_encode_av1.c:47
AVCodecContext::level
int level
Encoding level descriptor.
Definition: avcodec.h:1784
AV1RawSequenceHeader::seq_force_screen_content_tools
uint8_t seq_force_screen_content_tools
Definition: cbs_av1.h:118
index
int index
Definition: gxfenc.c:90
av_opt_set_int
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Definition: opt.c:799
AV1RawSequenceHeader::max_frame_height_minus_1
uint16_t max_frame_height_minus_1
Definition: cbs_av1.h:99
vaapi_encode_av1_close
static av_cold int vaapi_encode_av1_close(AVCodecContext *avctx)
Definition: vaapi_encode_av1.c:954
VAAPIEncodeAV1Context::sh
AV1RawOBU sh
sequence header.
Definition: vaapi_encode_av1.c:43
AV1RawFrameHeader::ref_frame_idx
int8_t ref_frame_idx[AV1_REFS_PER_FRAME]
Definition: cbs_av1.h:204
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:366
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
PICTURE_TYPE_B
@ PICTURE_TYPE_B
Definition: vaapi_encode.h:61
VAAPIEncodePicture::type
int type
Definition: vaapi_encode.h:92
AV1RawMetadataHDRMDCV::luminance_max
uint32_t luminance_max
Definition: cbs_av1.h:328
VAAPIEncodeAV1Context::attr_ext1
VAConfigAttribValEncAV1Ext1 attr_ext1
Definition: vaapi_encode_av1.c:50
AV1RawFrameHeader::refresh_frame_flags
uint8_t refresh_frame_flags
Definition: cbs_av1.h:198
codec_internal.h
VAAPI_ENCODE_RC_OPTIONS
#define VAAPI_ENCODE_RC_OPTIONS
Definition: vaapi_encode.h:532
AV1RawFrameHeader::reduced_tx_set
uint8_t reduced_tx_set
Definition: cbs_av1.h:280
AV1_MAX_TILE_COLS
@ AV1_MAX_TILE_COLS
Definition: av1.h:82
AV1RawMetadataHDRMDCV::white_point_chromaticity_x
uint16_t white_point_chromaticity_x
Definition: cbs_av1.h:326
AV1RawFrameHeader::tile_cols_log2
uint8_t tile_cols_log2
Definition: cbs_av1.h:216
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
VAAPIEncodeAV1Context::sb_rows
int sb_rows
Definition: vaapi_encode_av1.c:61
AV1_METADATA_TYPE_HDR_CLL
@ AV1_METADATA_TYPE_HDR_CLL
Definition: av1.h:44
AV1RawOBU::sequence_header
AV1RawSequenceHeader sequence_header
Definition: cbs_av1.h:406
CodedBitstreamFragment::data
uint8_t * data
Pointer to the bitstream form of this fragment.
Definition: cbs.h:128
AV1RawSequenceHeader::frame_height_bits_minus_1
uint8_t frame_height_bits_minus_1
Definition: cbs_av1.h:97
CodedBitstreamContext::trace_write_callback
CBSTraceWriteCallback trace_write_callback
Callback for write tracing.
Definition: cbs.h:281
AVFrameSideData::data
uint8_t * data
Definition: frame.h:252
AV1_TOTAL_REFS_PER_FRAME
@ AV1_TOTAL_REFS_PER_FRAME
Definition: av1.h:86
AV1_OBU_SEQUENCE_HEADER
@ AV1_OBU_SEQUENCE_HEADER
Definition: av1.h:30
vaapi_encode_av1_options
static const AVOption vaapi_encode_av1_options[]
Definition: vaapi_encode_av1.c:967
AV1LevelDescriptor
Definition: av1_levels.h:26
VAAPIEncodeAV1Context::min_log2_tile_rows
int min_log2_tile_rows
Definition: vaapi_encode_av1.c:71
VAAPI_ENCODE_COMMON_OPTIONS
#define VAAPI_ENCODE_COMMON_OPTIONS
Definition: vaapi_encode.h:505
VAAPIEncodePicture::recon_surface
VASurfaceID recon_surface
Definition: vaapi_encode.h:101
VAAPIEncodeAV1Context::tile_cols
int tile_cols
Definition: vaapi_encode_av1.c:88
VAAPIEncodeAV1Context::use_128x128_superblock
uint8_t use_128x128_superblock
Definition: vaapi_encode_av1.c:59
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:108
VAAPIEncodePicture::priv_data
void * priv_data
Definition: vaapi_encode.h:110
AV_PROFILE_AV1_HIGH
#define AV_PROFILE_AV1_HIGH
Definition: defs.h:168
VAAPIEncodeAV1Context::loopfilter_offset
int loopfilter_offset
Definition: vaapi_encode_av1.c:80
AV1RawFrameHeader::order_hint
uint8_t order_hint
Definition: cbs_av1.h:182
VAAPIEncodePicture::display_order
int64_t display_order
Definition: vaapi_encode.h:76
AV_PIX_FMT_VAAPI
@ AV_PIX_FMT_VAAPI
Hardware acceleration through VA-API, data[3] contains a VASurfaceID.
Definition: pixfmt.h:126
AV1_MAX_TILE_ROWS
@ AV1_MAX_TILE_ROWS
Definition: av1.h:81
AV1RawOBU::frame_header
AV1RawFrameHeader frame_header
Definition: cbs_av1.h:407
vaapi_encode_av1_class
static const AVClass vaapi_encode_av1_class
Definition: vaapi_encode_av1.c:1026
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:804
AV1RawMetadataHDRMDCV::luminance_min
uint32_t luminance_min
Definition: cbs_av1.h:329
AV1RawOBU::metadata
AV1RawMetadata metadata
Definition: cbs_av1.h:411
VAAPIEncodeAV1Context::mh
AV1RawOBU mh[4]
metadata header.
Definition: vaapi_encode_av1.c:45
VAAPIEncodeAV1Picture
Definition: vaapi_encode_av1.c:36
FLAG_TIMESTAMP_NO_DELAY
@ FLAG_TIMESTAMP_NO_DELAY
Definition: vaapi_encode.h:416
AV1RawFrameHeader::frame_to_show_map_idx
uint8_t frame_to_show_map_idx
Definition: cbs_av1.h:167
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: frame.h:137
VAAPIEncodeAV1Context::sh_data
char sh_data[MAX_PARAM_BUFFER_SIZE]
coded sequence header data.
Definition: vaapi_encode_av1.c:53
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
put_bits_count
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:80
VAAPIEncodeAV1Context::sb_cols
int sb_cols
Definition: vaapi_encode_av1.c:60
VAAPIEncodeContext::input_frames
AVHWFramesContext * input_frames
Definition: vaapi_encode.h:275
VAAPIEncodeAV1Context::sh_data_len
size_t sh_data_len
bit length of sh_data.
Definition: vaapi_encode_av1.c:54
vaapi_encode_type_av1
static const VAAPIEncodeType vaapi_encode_type_av1
Definition: vaapi_encode_av1.c:842
AV1RawFrameHeader::tile_rows
uint16_t tile_rows
Definition: cbs_av1.h:228
value
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
Definition: writing_filters.txt:86
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
AV1RawSequenceHeader::max_frame_width_minus_1
uint16_t max_frame_width_minus_1
Definition: cbs_av1.h:98
AV1RawSequenceHeader::color_config
AV1RawColorConfig color_config
Definition: cbs_av1.h:128
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:194
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:702
VAAPIEncodeAV1Context::level
int level
Definition: vaapi_encode_av1.c:86
vaapi_encode_av1_write_picture_header
static int vaapi_encode_av1_write_picture_header(AVCodecContext *avctx, VAAPIEncodePicture *pic, char *data, size_t *data_len)
Definition: vaapi_encode_av1.c:754
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
vaapi_encode_av1_write_extra_header
static int vaapi_encode_av1_write_extra_header(AVCodecContext *avctx, VAAPIEncodePicture *pic, int index, int *type, char *data, size_t *data_len)
Definition: vaapi_encode_av1.c:803
profile
int profile
Definition: mxfenc.c:2227
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:612
AV1RawSequenceHeader::enable_order_hint
uint8_t enable_order_hint
Definition: cbs_av1.h:113
av_rescale
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
Definition: mathematics.c:129
AVCodecContext::height
int height
Definition: avcodec.h:618
AV1_MAX_TILE_AREA
@ AV1_MAX_TILE_AREA
Definition: av1.h:80
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:409
VAAPIEncodeAV1Context::profile
int profile
user options
Definition: vaapi_encode_av1.c:85
AV1RawFrameHeader::ref_order_hint
uint8_t ref_order_hint[AV1_NUM_REF_FRAMES]
Definition: cbs_av1.h:200
AV1RawFrameHeader::height_in_sbs_minus_1
uint8_t height_in_sbs_minus_1[AV1_MAX_TILE_ROWS]
Definition: cbs_av1.h:221
VAAPIEncodePicture::tail_data
char tail_data[MAX_PARAM_BUFFER_SIZE]
Tail data of current pic, used only for repeat header of AV1.
Definition: vaapi_encode.h:145
ff_vaapi_encode_hw_configs
const AVCodecHWConfigInternal *const ff_vaapi_encode_hw_configs[]
Definition: vaapi_encode.c:36
ff_vaapi_encode_init
av_cold int ff_vaapi_encode_init(AVCodecContext *avctx)
Definition: vaapi_encode.c:2774
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
vaapi_encode_av1_init_picture_params
static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, VAAPIEncodePicture *pic)
Definition: vaapi_encode_av1.c:467
VAAPIEncodeAV1Context::max_tile_width_sb
int max_tile_width_sb
Definition: vaapi_encode_av1.c:64
VAAPIEncodeAV1Context::tier
int tier
Definition: vaapi_encode_av1.c:87
AV1RawColorConfig::high_bitdepth
uint8_t high_bitdepth
Definition: cbs_av1.h:42
vaapi_encode_av1_write_obu
static int vaapi_encode_av1_write_obu(AVCodecContext *avctx, char *data, size_t *data_len, CodedBitstreamFragment *bs)
Definition: vaapi_encode_av1.c:184
AV1_TX_MODE_SELECT
@ AV1_TX_MODE_SELECT
Definition: av1.h:183
VAAPIEncodeAV1Context::tile_rows_log2
int tile_rows_log2
Definition: vaapi_encode_av1.c:63
AV1RawFrameHeader::reference_select
uint8_t reference_select
Definition: cbs_av1.h:276
vaapi_encode_av1_get_encoder_caps
static av_cold int vaapi_encode_av1_get_encoder_caps(AVCodecContext *avctx)
Definition: vaapi_encode_av1.c:113
VAAPIEncodeAV1Context::fh_data_len
size_t fh_data_len
bit length of fh_data.
Definition: vaapi_encode_av1.c:56
AV1RawSequenceHeader::frame_width_bits_minus_1
uint8_t frame_width_bits_minus_1
Definition: cbs_av1.h:96
vaapi_encode_av1_defaults
static const FFCodecDefault vaapi_encode_av1_defaults[]
Definition: vaapi_encode_av1.c:1017
AVCodecContext
main external API structure.
Definition: avcodec.h:445
PICTURE_TYPE_IDR
@ PICTURE_TYPE_IDR
Definition: vaapi_encode.h:58
AVCodecContext::qmin
int qmin
minimum quantizer
Definition: avcodec.h:1256
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
VAAPIEncodeAV1Context::tile_cols_log2
int tile_cols_log2
Definition: vaapi_encode_av1.c:62
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:245
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1640
VAAPIEncodeAV1Context::uniform_tile
uint8_t uniform_tile
Definition: vaapi_encode_av1.c:58
av1_levels.h
AV1RawFrameHeader::frame_height_minus_1
uint16_t frame_height_minus_1
Definition: cbs_av1.h:189
AVCodecContext::i_quant_offset
float i_quant_offset
qscale offset between P and I-frames
Definition: avcodec.h:827
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:76
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
AV1RawSequenceHeader::order_hint_bits_minus_1
uint8_t order_hint_bits_minus_1
Definition: cbs_av1.h:122
VAAPIEncodeAV1Context::max_tile_height_sb
int max_tile_height_sb
Definition: vaapi_encode_av1.c:65
AV1RawMetadataHDRMDCV::white_point_chromaticity_y
uint16_t white_point_chromaticity_y
Definition: cbs_av1.h:327
CodedBitstreamContext::trace_enable
int trace_enable
Enable trace output during read/write operations.
Definition: cbs.h:257
AV1RawFrameHeader::show_existing_frame
uint8_t show_existing_frame
Definition: cbs_av1.h:166
desc
const char * desc
Definition: libsvtav1.c:79
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AV1RawOBU::frame
AV1RawFrame frame
Definition: cbs_av1.h:408
VAAPIEncodeAV1Context::q_idx_idr
int q_idx_idr
Definition: vaapi_encode_av1.c:74
AV1_REF_FRAME_BWDREF
@ AV1_REF_FRAME_BWDREF
Definition: av1.h:67
mastering_display_metadata.h
AV1_PRIMARY_REF_NONE
@ AV1_PRIMARY_REF_NONE
Definition: av1.h:87
VAAPIEncodePicture::input_image
AVFrame * input_image
Definition: vaapi_encode.h:97
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:250
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
AV1RawMetadataHDRMDCV::primary_chromaticity_y
uint16_t primary_chromaticity_y[3]
Definition: cbs_av1.h:325
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:90
AV1RawFrameHeader::error_resilient_mode
uint8_t error_resilient_mode
Definition: cbs_av1.h:175
AV1RawFrameHeader::tile_rows_log2
uint8_t tile_rows_log2
Definition: cbs_av1.h:217
VAAPIEncodeAV1Context::attr
VAConfigAttribValEncAV1 attr
Definition: vaapi_encode_av1.c:49
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:116
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:472
VAAPIEncodePicture::encode_order
int64_t encode_order
Definition: vaapi_encode.h:77
OFFSET
#define OFFSET(x)
Definition: vaapi_encode_av1.c:964
AV1RawSequenceHeader::enable_cdef
uint8_t enable_cdef
Definition: cbs_av1.h:125
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:618
AV1_MAX_TILE_WIDTH
@ AV1_MAX_TILE_WIDTH
Definition: av1.h:79
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
VAAPIEncodeAV1Context::tile_rows
int tile_rows
Definition: vaapi_encode_av1.c:88
AV1_CSP_COLOCATED
@ AV1_CSP_COLOCATED
Definition: av1.h:135
AV_PROFILE_AV1_MAIN
#define AV_PROFILE_AV1_MAIN
Definition: defs.h:167
VAAPIEncodeAV1Context::q_idx_p
int q_idx_p
Definition: vaapi_encode_av1.c:75
AV1RawFrameHeader::showable_frame
uint8_t showable_frame
Definition: cbs_av1.h:173
put_bits.h
AV1RawOBUHeader::obu_has_size_field
uint8_t obu_has_size_field
Definition: cbs_av1.h:33
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:254
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
vaapi_encode_av1_configure
static av_cold int vaapi_encode_av1_configure(AVCodecContext *avctx)
Definition: vaapi_encode_av1.c:125
AV1_OBU_METADATA
@ AV1_OBU_METADATA
Definition: av1.h:34
LEVEL
#define LEVEL(name, value)
AV1RawFrameHeader::tile_cols
uint16_t tile_cols
Definition: cbs_av1.h:227
VAAPIEncodeProfile
Definition: vaapi_encode.h:150
AV1_METADATA_TYPE_HDR_MDCV
@ AV1_METADATA_TYPE_HDR_MDCV
Definition: av1.h:45
PROFILE
#define PROFILE(name, value)
VAAPIEncodeAV1Context::max_log2_tile_cols
int max_log2_tile_cols
Definition: vaapi_encode_av1.c:70
AV1RawFrameHeader::render_height_minus_1
uint16_t render_height_minus_1
Definition: cbs_av1.h:194
VAAPIEncodePicture::nb_slices
int nb_slices
Definition: vaapi_encode.h:135
PICTURE_TYPE_P
@ PICTURE_TYPE_P
Definition: vaapi_encode.h:60
AV1RawFrameHeader::frame_type
uint8_t frame_type
Definition: cbs_av1.h:171
CodedBitstreamAV1Context
Definition: cbs_av1.h:438
AV1RawOBUHeader::obu_type
uint8_t obu_type
Definition: cbs_av1.h:31