FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
vdpau_hevc.c
Go to the documentation of this file.
1 /*
2  * MPEG-H Part 2 / HEVC / H.265 HW decode acceleration through VDPAU
3  *
4  * Copyright (c) 2013 Philip Langdale
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #include <vdpau/vdpau.h>
24 
25 #include "avcodec.h"
26 #include "internal.h"
27 #include "hevc.h"
28 #include "vdpau.h"
29 #include "vdpau_internal.h"
30 
32  const uint8_t *buffer, uint32_t size)
33 {
34  HEVCContext *h = avctx->priv_data;
35  HEVCFrame *pic = h->ref;
36  struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
37 
38  VdpPictureInfoHEVC *info = &pic_ctx->info.hevc;
39 
40  const HEVCSPS *sps = h->ps.sps;
41  const HEVCPPS *pps = h->ps.pps;
42  const SliceHeader *sh = &h->sh;
44  &pps->scaling_list : &sps->scaling_list;
45 
46  /* init VdpPictureInfoHEVC */
47 
48  /* SPS */
49  info->chroma_format_idc = sps->chroma_format_idc;
50  info->separate_colour_plane_flag = sps->separate_colour_plane_flag;
51  info->pic_width_in_luma_samples = sps->width;
52  info->pic_height_in_luma_samples = sps->height;
53  info->bit_depth_luma_minus8 = sps->bit_depth - 8;
54  info->bit_depth_chroma_minus8 = sps->bit_depth - 8;
55  info->log2_max_pic_order_cnt_lsb_minus4 = sps->log2_max_poc_lsb - 4;
56  /* Provide the value corresponding to the nuh_temporal_id of the frame
57  to be decoded. */
58  info->sps_max_dec_pic_buffering_minus1 = sps->temporal_layer[sps->max_sub_layers - 1].max_dec_pic_buffering - 1;
59  info->log2_min_luma_coding_block_size_minus3 = sps->log2_min_cb_size - 3;
60  info->log2_diff_max_min_luma_coding_block_size = sps->log2_diff_max_min_coding_block_size;
61  info->log2_min_transform_block_size_minus2 = sps->log2_min_tb_size - 2;
62  info->log2_diff_max_min_transform_block_size = sps->log2_max_trafo_size - sps->log2_min_tb_size;
63  info->max_transform_hierarchy_depth_inter = sps->max_transform_hierarchy_depth_inter;
64  info->max_transform_hierarchy_depth_intra = sps->max_transform_hierarchy_depth_intra;
65  info->scaling_list_enabled_flag = sps->scaling_list_enable_flag;
66  /* Scaling lists, in diagonal order, to be used for this frame. */
67  for (size_t i = 0; i < 6; i++) {
68  for (size_t j = 0; j < 16; j++) {
69  /* Scaling List for 4x4 quantization matrix,
70  indexed as ScalingList4x4[matrixId][i]. */
72  info->ScalingList4x4[i][j] = sl->sl[0][i][pos];
73  }
74  for (size_t j = 0; j < 64; j++) {
76  /* Scaling List for 8x8 quantization matrix,
77  indexed as ScalingList8x8[matrixId][i]. */
78  info->ScalingList8x8[i][j] = sl->sl[1][i][pos];
79  /* Scaling List for 16x16 quantization matrix,
80  indexed as ScalingList16x16[matrixId][i]. */
81  info->ScalingList16x16[i][j] = sl->sl[2][i][pos];
82  if (i < 2) {
83  /* Scaling List for 32x32 quantization matrix,
84  indexed as ScalingList32x32[matrixId][i]. */
85  info->ScalingList32x32[i][j] = sl->sl[3][i * 3][pos];
86  }
87  }
88  /* Scaling List DC Coefficients for 16x16,
89  indexed as ScalingListDCCoeff16x16[matrixId]. */
90  info->ScalingListDCCoeff16x16[i] = sl->sl_dc[0][i];
91  if (i < 2) {
92  /* Scaling List DC Coefficients for 32x32,
93  indexed as ScalingListDCCoeff32x32[matrixId]. */
94  info->ScalingListDCCoeff32x32[i] = sl->sl_dc[1][i * 3];
95  }
96  }
97  info->amp_enabled_flag = sps->amp_enabled_flag;
98  info->sample_adaptive_offset_enabled_flag = sps->sao_enabled;
99  info->pcm_enabled_flag = sps->pcm_enabled_flag;
100  if (info->pcm_enabled_flag) {
101  /* Only needs to be set if pcm_enabled_flag is set. Ignored otherwise. */
102  info->pcm_sample_bit_depth_luma_minus1 = sps->pcm.bit_depth - 1;
103  /* Only needs to be set if pcm_enabled_flag is set. Ignored otherwise. */
104  info->pcm_sample_bit_depth_chroma_minus1 = sps->pcm.bit_depth_chroma - 1;
105  /* Only needs to be set if pcm_enabled_flag is set. Ignored otherwise. */
106  info->log2_min_pcm_luma_coding_block_size_minus3 = sps->pcm.log2_min_pcm_cb_size - 3;
107  /* Only needs to be set if pcm_enabled_flag is set. Ignored otherwise. */
108  info->log2_diff_max_min_pcm_luma_coding_block_size = sps->pcm.log2_max_pcm_cb_size - sps->pcm.log2_min_pcm_cb_size;
109  /* Only needs to be set if pcm_enabled_flag is set. Ignored otherwise. */
110  info->pcm_loop_filter_disabled_flag = sps->pcm.loop_filter_disable_flag;
111  }
112  /* Per spec, when zero, assume short_term_ref_pic_set_sps_flag
113  is also zero. */
114  info->num_short_term_ref_pic_sets = sps->nb_st_rps;
115  info->long_term_ref_pics_present_flag = sps->long_term_ref_pics_present_flag;
116  /* Only needed if long_term_ref_pics_present_flag is set. Ignored
117  otherwise. */
118  info->num_long_term_ref_pics_sps = sps->num_long_term_ref_pics_sps;
119  info->sps_temporal_mvp_enabled_flag = sps->sps_temporal_mvp_enabled_flag;
120  info->strong_intra_smoothing_enabled_flag = sps->sps_strong_intra_smoothing_enable_flag;
121 
122  /* Copy the HEVC Picture Parameter Set bitstream fields. */
123  info->dependent_slice_segments_enabled_flag = pps->dependent_slice_segments_enabled_flag;
124  info->output_flag_present_flag = pps->output_flag_present_flag;
125  info->num_extra_slice_header_bits = pps->num_extra_slice_header_bits;
126  info->sign_data_hiding_enabled_flag = pps->sign_data_hiding_flag;
127  info->cabac_init_present_flag = pps->cabac_init_present_flag;
128  info->num_ref_idx_l0_default_active_minus1 = pps->num_ref_idx_l0_default_active - 1;
129  info->num_ref_idx_l1_default_active_minus1 = pps->num_ref_idx_l1_default_active - 1;
130  info->init_qp_minus26 = pps->pic_init_qp_minus26;
131  info->constrained_intra_pred_flag = pps->constrained_intra_pred_flag;
132  info->transform_skip_enabled_flag = pps->transform_skip_enabled_flag;
133  info->cu_qp_delta_enabled_flag = pps->cu_qp_delta_enabled_flag;
134  /* Only needed if cu_qp_delta_enabled_flag is set. Ignored otherwise. */
135  info->diff_cu_qp_delta_depth = pps->diff_cu_qp_delta_depth;
136  info->pps_cb_qp_offset = pps->cb_qp_offset;
137  info->pps_cr_qp_offset = pps->cr_qp_offset;
138  info->pps_slice_chroma_qp_offsets_present_flag = pps->pic_slice_level_chroma_qp_offsets_present_flag;
139  info->weighted_pred_flag = pps->weighted_pred_flag;
140  info->weighted_bipred_flag = pps->weighted_bipred_flag;
141  info->transquant_bypass_enabled_flag = pps->transquant_bypass_enable_flag;
142  info->tiles_enabled_flag = pps->tiles_enabled_flag;
143  info->entropy_coding_sync_enabled_flag = pps->entropy_coding_sync_enabled_flag;
144  if (info->tiles_enabled_flag) {
145  /* Only valid if tiles_enabled_flag is set. Ignored otherwise. */
146  info->num_tile_columns_minus1 = pps->num_tile_columns - 1;
147  /* Only valid if tiles_enabled_flag is set. Ignored otherwise. */
148  info->num_tile_rows_minus1 = pps->num_tile_rows - 1;
149  /* Only valid if tiles_enabled_flag is set. Ignored otherwise. */
150  info->uniform_spacing_flag = pps->uniform_spacing_flag;
151  /* Only need to set 0..num_tile_columns_minus1. The struct
152  definition reserves up to the maximum of 20. Invalid values are
153  ignored. */
154  for (ssize_t i = 0; i < pps->num_tile_columns; i++) {
155  info->column_width_minus1[i] = pps->column_width[i] - 1;
156  }
157  /* Only need to set 0..num_tile_rows_minus1. The struct
158  definition reserves up to the maximum of 22. Invalid values are
159  ignored.*/
160  for (ssize_t i = 0; i < pps->num_tile_rows; i++) {
161  info->row_height_minus1[i] = pps->row_height[i] - 1;
162  }
163  /* Only needed if tiles_enabled_flag is set. Invalid values are
164  ignored. */
165  info->loop_filter_across_tiles_enabled_flag = pps->loop_filter_across_tiles_enabled_flag;
166  }
167  info->pps_loop_filter_across_slices_enabled_flag = pps->seq_loop_filter_across_slices_enabled_flag;
168  info->deblocking_filter_control_present_flag = pps->deblocking_filter_control_present_flag;
169  /* Only valid if deblocking_filter_control_present_flag is set. Ignored
170  otherwise. */
171  info->deblocking_filter_override_enabled_flag = pps->deblocking_filter_override_enabled_flag;
172  /* Only valid if deblocking_filter_control_present_flag is set. Ignored
173  otherwise. */
174  info->pps_deblocking_filter_disabled_flag = pps->disable_dbf;
175  /* Only valid if deblocking_filter_control_present_flag is set and
176  pps_deblocking_filter_disabled_flag is not set. Ignored otherwise.*/
177  info->pps_beta_offset_div2 = pps->beta_offset / 2;
178  /* Only valid if deblocking_filter_control_present_flag is set and
179  pps_deblocking_filter_disabled_flag is not set. Ignored otherwise. */
180  info->pps_tc_offset_div2 = pps->tc_offset / 2;
181  info->lists_modification_present_flag = pps->lists_modification_present_flag;
182  info->log2_parallel_merge_level_minus2 = pps->log2_parallel_merge_level - 2;
183  info->slice_segment_header_extension_present_flag = pps->slice_header_extension_present_flag;
184 
185  /* Set to 1 if nal_unit_type is equal to IDR_W_RADL or IDR_N_LP.
186  Set to zero otherwise. */
187  info->IDRPicFlag = IS_IDR(h);
188  /* Set to 1 if nal_unit_type in the range of BLA_W_LP to
189  RSV_IRAP_VCL23, inclusive. Set to zero otherwise.*/
190  info->RAPPicFlag = IS_IRAP(h);
191  /* See section 7.4.7.1 of the specification. */
192  info->CurrRpsIdx = sps->nb_st_rps;
193  if (sh->short_term_ref_pic_set_sps_flag == 1) {
194  for (size_t i = 0; i < sps->nb_st_rps; i++) {
195  if (sh->short_term_rps == &sps->st_rps[i]) {
196  info->CurrRpsIdx = i;
197  break;
198  }
199  }
200  }
201  /* See section 7.4.7.2 of the specification. */
202  info->NumPocTotalCurr = ff_hevc_frame_nb_refs(h);
203  if (sh->short_term_ref_pic_set_sps_flag == 0 && sh->short_term_rps) {
204  /* Corresponds to specification field, NumDeltaPocs[RefRpsIdx].
205  Only applicable when short_term_ref_pic_set_sps_flag == 0.
206  Implementations will ignore this value in other cases. See 7.4.8. */
207  info->NumDeltaPocsOfRefRpsIdx = sh->short_term_rps->rps_idx_num_delta_pocs;
208  }
209  /* Section 7.6.3.1 of the H.265/HEVC Specification defines the syntax of
210  the slice_segment_header. This header contains information that
211  some VDPAU implementations may choose to skip. The VDPAU API
212  requires client applications to track the number of bits used in the
213  slice header for structures associated with short term and long term
214  reference pictures. First, VDPAU requires the number of bits used by
215  the short_term_ref_pic_set array in the slice_segment_header. */
216  info->NumShortTermPictureSliceHeaderBits = sh->short_term_ref_pic_set_size;
217  /* Second, VDPAU requires the number of bits used for long term reference
218  pictures in the slice_segment_header. This is equal to the number
219  of bits used for the contents of the block beginning with
220  "if(long_term_ref_pics_present_flag)". */
221  info->NumLongTermPictureSliceHeaderBits = sh->long_term_ref_pic_set_size;
222 
223  /* The value of PicOrderCntVal of the picture in the access unit
224  containing the SEI message. The picture being decoded. */
225  info->CurrPicOrderCntVal = h->poc;
226 
227  /* Slice Decoding Process - Reference Picture Sets */
228  for (size_t i = 0; i < 16; i++) {
229  info->RefPics[i] = VDP_INVALID_HANDLE;
230  info->PicOrderCntVal[i] = 0;
231  info->IsLongTerm[i] = 0;
232  }
233  for (size_t i = 0, j = 0; i < FF_ARRAY_ELEMS(h->DPB); i++) {
234  const HEVCFrame *frame = &h->DPB[i];
235  if (frame != h->ref && (frame->flags & (HEVC_FRAME_FLAG_LONG_REF |
237  if (j > 16) {
238  av_log(avctx, AV_LOG_WARNING,
239  "VDPAU only supports up to 16 references in the DPB. "
240  "This frame may not be decoded correctly.\n");
241  break;
242  }
243  /* Array of video reference surfaces.
244  Set any unused positions to VDP_INVALID_HANDLE. */
245  info->RefPics[j] = ff_vdpau_get_surface_id(frame->frame);
246  /* Array of picture order counts. These correspond to positions
247  in the RefPics array. */
248  info->PicOrderCntVal[j] = frame->poc;
249  /* Array used to specify whether a particular RefPic is
250  a long term reference. A value of "1" indicates a long-term
251  reference. */
252  // XXX: Setting this caused glitches in the nvidia implementation
253  // Always setting it to zero, produces correct results
254  //info->IsLongTerm[j] = frame->flags & HEVC_FRAME_FLAG_LONG_REF;
255  info->IsLongTerm[j] = 0;
256  j++;
257  }
258  }
259  /* Copy of specification field, see Section 8.3.2 of the
260  H.265/HEVC Specification. */
261  info->NumPocStCurrBefore = h->rps[ST_CURR_BEF].nb_refs;
262  if (info->NumPocStCurrBefore > 8) {
263  av_log(avctx, AV_LOG_WARNING,
264  "VDPAU only supports up to 8 references in StCurrBefore. "
265  "This frame may not be decoded correctly.\n");
266  info->NumPocStCurrBefore = 8;
267  }
268  /* Copy of specification field, see Section 8.3.2 of the
269  H.265/HEVC Specification. */
270  info->NumPocStCurrAfter = h->rps[ST_CURR_AFT].nb_refs;
271  if (info->NumPocStCurrAfter > 8) {
272  av_log(avctx, AV_LOG_WARNING,
273  "VDPAU only supports up to 8 references in StCurrAfter. "
274  "This frame may not be decoded correctly.\n");
275  info->NumPocStCurrAfter = 8;
276  }
277  /* Copy of specification field, see Section 8.3.2 of the
278  H.265/HEVC Specification. */
279  info->NumPocLtCurr = h->rps[LT_CURR].nb_refs;
280  if (info->NumPocLtCurr > 8) {
281  av_log(avctx, AV_LOG_WARNING,
282  "VDPAU only supports up to 8 references in LtCurr. "
283  "This frame may not be decoded correctly.\n");
284  info->NumPocLtCurr = 8;
285  }
286  /* Reference Picture Set list, one of the short-term RPS. These
287  correspond to positions in the RefPics array. */
288  for (ssize_t i = 0, j = 0; i < h->rps[ST_CURR_BEF].nb_refs; i++) {
289  HEVCFrame *frame = h->rps[ST_CURR_BEF].ref[i];
290  if (frame) {
291  uint8_t found = 0;
292  uintptr_t id = ff_vdpau_get_surface_id(frame->frame);
293  for (size_t k = 0; k < 16; k++) {
294  if (id == info->RefPics[k]) {
295  info->RefPicSetStCurrBefore[j] = k;
296  j++;
297  found = 1;
298  break;
299  }
300  }
301  if (!found) {
302  av_log(avctx, AV_LOG_WARNING, "missing surface: %p\n",
303  (void *)id);
304  }
305  } else {
306  av_log(avctx, AV_LOG_WARNING, "missing STR Before frame: %zd\n", i);
307  }
308  }
309  /* Reference Picture Set list, one of the short-term RPS. These
310  correspond to positions in the RefPics array. */
311  for (ssize_t i = 0, j = 0; i < h->rps[ST_CURR_AFT].nb_refs; i++) {
312  HEVCFrame *frame = h->rps[ST_CURR_AFT].ref[i];
313  if (frame) {
314  uint8_t found = 0;
315  uintptr_t id = ff_vdpau_get_surface_id(frame->frame);
316  for (size_t k = 0; k < 16; k++) {
317  if (id == info->RefPics[k]) {
318  info->RefPicSetStCurrAfter[j] = k;
319  j++;
320  found = 1;
321  break;
322  }
323  }
324  if (!found) {
325  av_log(avctx, AV_LOG_WARNING, "missing surface: %p\n",
326  (void *)id);
327  }
328  } else {
329  av_log(avctx, AV_LOG_WARNING, "missing STR After frame: %zd\n", i);
330  }
331  }
332  /* Reference Picture Set list, one of the long-term RPS. These
333  correspond to positions in the RefPics array. */
334  for (ssize_t i = 0, j = 0; i < h->rps[LT_CURR].nb_refs; i++) {
335  HEVCFrame *frame = h->rps[LT_CURR].ref[i];
336  if (frame) {
337  uint8_t found = 0;
338  uintptr_t id = ff_vdpau_get_surface_id(frame->frame);
339  for (size_t k = 0; k < 16; k++) {
340  if (id == info->RefPics[k]) {
341  info->RefPicSetLtCurr[j] = k;
342  j++;
343  found = 1;
344  break;
345  }
346  }
347  if (!found) {
348  av_log(avctx, AV_LOG_WARNING, "missing surface: %p\n",
349  (void *)id);
350  }
351  } else {
352  av_log(avctx, AV_LOG_WARNING, "missing LTR frame: %zd\n", i);
353  }
354  }
355 
356  return ff_vdpau_common_start_frame(pic_ctx, buffer, size);
357 }
358 
359 static const uint8_t start_code_prefix[3] = { 0x00, 0x00, 0x01 };
360 
362  const uint8_t *buffer, uint32_t size)
363 {
364  HEVCContext *h = avctx->priv_data;
365  struct vdpau_picture_context *pic_ctx = h->ref->hwaccel_picture_private;
366  int val;
367 
368  val = ff_vdpau_add_buffer(pic_ctx, start_code_prefix, 3);
369  if (val)
370  return val;
371 
372  val = ff_vdpau_add_buffer(pic_ctx, buffer, size);
373  if (val)
374  return val;
375 
376  return 0;
377 }
378 
380 {
381  HEVCContext *h = avctx->priv_data;
382  struct vdpau_picture_context *pic_ctx = h->ref->hwaccel_picture_private;
383  int val;
384 
385  val = ff_vdpau_common_end_frame(avctx, h->ref->frame, pic_ctx);
386  if (val < 0)
387  return val;
388 
389  return 0;
390 }
391 
392 static int vdpau_hevc_init(AVCodecContext *avctx)
393 {
394  VdpDecoderProfile profile;
395  uint32_t level = avctx->level;
396 
397  switch (avctx->profile) {
399  profile = VDP_DECODER_PROFILE_HEVC_MAIN;
400  break;
402  profile = VDP_DECODER_PROFILE_HEVC_MAIN_10;
403  break;
405  profile = VDP_DECODER_PROFILE_HEVC_MAIN_STILL;
406  break;
407  default:
408  return AVERROR(ENOTSUP);
409  }
410 
411  return ff_vdpau_common_init(avctx, profile, level);
412 }
413 
415  .name = "hevc_vdpau",
416  .type = AVMEDIA_TYPE_VIDEO,
417  .id = AV_CODEC_ID_HEVC,
418  .pix_fmt = AV_PIX_FMT_VDPAU,
419  .start_frame = vdpau_hevc_start_frame,
420  .end_frame = vdpau_hevc_end_frame,
421  .decode_slice = vdpau_hevc_decode_slice,
422  .frame_priv_data_size = sizeof(struct vdpau_picture_context),
423  .init = vdpau_hevc_init,
424  .uninit = ff_vdpau_common_uninit,
425  .priv_data_size = sizeof(VDPAUContext),
426 };
const HEVCPPS * pps
Definition: hevc.h:579
AVFrame * frame
Definition: hevc.h:729
unsigned int log2_min_cb_size
Definition: hevc.h:454
const char const char void * val
Definition: avisynth_c.h:771
int short_term_ref_pic_set_sps_flag
Definition: hevc.h:600
int ff_hevc_frame_nb_refs(HEVCContext *s)
Get the number of candidate references for the current frame.
Definition: hevc_refs.c:541
HEVCFrame * ref
Definition: hevc.h:840
struct HEVCSPS::@68 pcm
int max_dec_pic_buffering
Definition: hevc.h:422
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
unsigned int * row_height
RowHeight.
Definition: hevc.h:555
int ff_vdpau_common_start_frame(struct vdpau_picture_context *pic_ctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
Definition: vdpau.c:273
void * hwaccel_picture_private
Definition: hevc.h:745
int pic_init_qp_minus26
Definition: hevc.h:503
const uint8_t ff_hevc_diag_scan4x4_x[16]
Definition: hevc_data.c:25
uint8_t weighted_bipred_flag
Definition: hevc.h:515
uint8_t seq_loop_filter_across_slices_enabled_flag
Definition: hevc.h:528
uint8_t cabac_init_present_flag
Definition: hevc.h:499
HEVCParamSets ps
Definition: hevc.h:827
int num_ref_idx_l0_default_active
num_ref_idx_l0_default_active_minus1 + 1
Definition: hevc.h:501
Public libavcodec VDPAU header.
struct HEVCFrame * ref[MAX_REFS]
Definition: hevc.h:292
int profile
profile
Definition: avcodec.h:3181
ShortTermRPS st_rps[MAX_SHORT_TERM_RPS_COUNT]
Definition: hevc.h:434
int width
Definition: hevc.h:472
uint8_t entropy_coding_sync_enabled_flag
Definition: hevc.h:521
int log2_parallel_merge_level
log2_parallel_merge_level_minus2 + 2
Definition: hevc.h:540
int nb_refs
Definition: hevc.h:295
int chroma_format_idc
Definition: hevc.h:404
uint8_t disable_dbf
Definition: hevc.h:532
unsigned int log2_max_trafo_size
Definition: hevc.h:457
int ff_vdpau_common_uninit(AVCodecContext *avctx)
Definition: vdpau.c:235
uint8_t
#define FF_PROFILE_HEVC_MAIN
Definition: avcodec.h:3269
int num_ref_idx_l1_default_active
num_ref_idx_l1_default_active_minus1 + 1
Definition: hevc.h:502
unsigned int log2_min_pcm_cb_size
Definition: hevc.h:447
static AVFrame * frame
static int vdpau_hevc_end_frame(AVCodecContext *avctx)
Definition: vdpau_hevc.c:379
uint8_t scaling_list_data_present_flag
Definition: hevc.h:536
uint8_t bit_depth_chroma
Definition: hevc.h:446
uint8_t loop_filter_disable_flag
Definition: hevc.h:449
ptrdiff_t size
Definition: opengl_enc.c:101
#define FF_PROFILE_HEVC_MAIN_10
Definition: avcodec.h:3270
static int vdpau_hevc_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
Definition: vdpau_hevc.c:361
uint8_t transquant_bypass_enable_flag
Definition: hevc.h:517
#define av_log(a,...)
#define HEVC_FRAME_FLAG_LONG_REF
Definition: hevc.h:725
int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile, int level)
Definition: vdpau.c:122
Definition: hevc.h:126
unsigned int log2_max_poc_lsb
Definition: hevc.h:417
static int vdpau_hevc_init(AVCodecContext *avctx)
Definition: vdpau_hevc.c:392
#define AVERROR(e)
Definition: error.h:43
uint8_t amp_enabled_flag
Definition: hevc.h:436
const ShortTermRPS * short_term_rps
Definition: hevc.h:603
uint8_t tiles_enabled_flag
Definition: hevc.h:520
const HEVCSPS * sps
Definition: hevc.h:578
uint8_t lists_modification_present_flag
Definition: hevc.h:539
#define HEVC_FRAME_FLAG_SHORT_REF
Definition: hevc.h:724
const char * name
Name of the hardware accelerated codec.
Definition: avcodec.h:3726
int max_transform_hierarchy_depth_inter
Definition: hevc.h:461
#define IS_IDR(s)
Definition: hevc.h:86
int num_tile_columns
num_tile_columns_minus1 + 1
Definition: hevc.h:523
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE
Definition: avcodec.h:3271
uint8_t cu_qp_delta_enabled_flag
Definition: hevc.h:508
int level
level
Definition: avcodec.h:3279
uint8_t sl_dc[2][6]
Definition: hevc.h:399
uint8_t sign_data_hiding_flag
Definition: hevc.h:497
int height
Definition: hevc.h:473
uint8_t output_flag_present_flag
Definition: hevc.h:516
#define FF_ARRAY_ELEMS(a)
uint8_t constrained_intra_pred_flag
Definition: hevc.h:505
uint8_t sl[4][6][64]
Definition: hevc.h:398
uint8_t pic_slice_level_chroma_qp_offsets_present_flag
Definition: hevc.h:513
HEVCFrame DPB[32]
Definition: hevc.h:841
Definition: hevc.h:402
Definition: hevc.h:494
uint8_t transform_skip_enabled_flag
Definition: hevc.h:506
int short_term_ref_pic_set_size
Definition: hevc.h:601
#define IS_IRAP(s)
Definition: hevc.h:89
Libavcodec external API header.
uint8_t uniform_spacing_flag
Definition: hevc.h:525
int max_sub_layers
Definition: hevc.h:420
ScalingList scaling_list
Definition: hevc.h:537
int long_term_ref_pic_set_size
Definition: hevc.h:604
main external API structure.
Definition: avcodec.h:1676
uint8_t sao_enabled
Definition: hevc.h:437
int num_extra_slice_header_bits
Definition: hevc.h:541
static int vdpau_hevc_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
Definition: vdpau_hevc.c:31
uint8_t loop_filter_across_tiles_enabled_flag
Definition: hevc.h:526
uint8_t num_long_term_ref_pics_sps
Definition: hevc.h:442
uint8_t deblocking_filter_control_present_flag
Definition: hevc.h:530
uint8_t sps_temporal_mvp_enabled_flag
Definition: hevc.h:451
unsigned int nb_st_rps
Definition: hevc.h:433
int num_tile_rows
num_tile_rows_minus1 + 1
Definition: hevc.h:524
const uint8_t ff_hevc_diag_scan8x8_y[64]
Definition: hevc_data.c:58
int poc
Definition: hevc.h:735
HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface.
Definition: pixfmt.h:209
unsigned int log2_min_tb_size
Definition: hevc.h:456
int poc
Definition: hevc.h:842
uint8_t scaling_list_enable_flag
Definition: hevc.h:430
int tc_offset
tc_offset_div2 * 2
Definition: hevc.h:534
uint8_t flags
A combination of HEVC_FRAME_FLAG_*.
Definition: hevc.h:756
struct HEVCSPS::@67 temporal_layer[MAX_SUB_LAYERS]
mfxU16 profile
Definition: qsvenc.c:42
int cr_qp_offset
Definition: hevc.h:512
ScalingList scaling_list
Definition: hevc.h:431
unsigned int log2_diff_max_min_coding_block_size
Definition: hevc.h:455
uint8_t level
Definition: svq3.c:207
unsigned int log2_max_pcm_cb_size
Definition: hevc.h:448
int max_transform_hierarchy_depth_intra
Definition: hevc.h:462
common internal api header.
uint8_t weighted_pred_flag
Definition: hevc.h:514
int ff_vdpau_add_buffer(struct vdpau_picture_context *pic_ctx, const uint8_t *buf, uint32_t size)
Definition: vdpau.c:346
unsigned int * column_width
ColumnWidth.
Definition: hevc.h:554
uint8_t slice_header_extension_present_flag
Definition: hevc.h:542
int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame, struct vdpau_picture_context *pic_ctx)
Definition: vdpau.c:283
void * priv_data
Definition: avcodec.h:1718
AVHWAccel ff_hevc_vdpau_hwaccel
Definition: vdpau_hevc.c:414
RefPicList rps[5]
Definition: hevc.h:833
uint8_t sps_strong_intra_smoothing_enable_flag
Definition: hevc.h:452
int rps_idx_num_delta_pocs
Definition: hevc.h:280
union VDPAUPictureInfo info
VDPAU picture information.
uint8_t long_term_ref_pics_present_flag
Definition: hevc.h:439
int diff_cu_qp_delta_depth
Definition: hevc.h:509
const uint8_t ff_hevc_diag_scan8x8_x[64]
Definition: hevc_data.c:39
int cb_qp_offset
Definition: hevc.h:511
uint8_t deblocking_filter_override_enabled_flag
Definition: hevc.h:531
int bit_depth
Definition: hevc.h:413
int beta_offset
beta_offset_div2 * 2
Definition: hevc.h:533
SliceHeader sh
Definition: hevc.h:835
static const uint8_t start_code_prefix[3]
Definition: vdpau_hevc.c:359
int pcm_enabled_flag
Definition: hevc.h:418
uint8_t separate_colour_plane_flag
output (i.e. cropped) values
Definition: hevc.h:405
const uint8_t ff_hevc_diag_scan4x4_y[16]
Definition: hevc_data.c:32
GLuint buffer
Definition: opengl_enc.c:102
static uintptr_t ff_vdpau_get_surface_id(AVFrame *pic)
Extract VdpVideoSurface from an AVFrame.
uint8_t dependent_slice_segments_enabled_flag
Definition: hevc.h:519