23 #include <vdpau/vdpau.h> 
   41     VdpPictureInfoHEVC *
info = &pic_ctx->
info.hevc;
 
   42 #ifdef VDP_YCBCR_FORMAT_Y_U_V_444 
   43     VdpPictureInfoHEVC444 *info2 = &pic_ctx->
info.hevc_444;
 
   50                             &
pps->scaling_list : &
sps->scaling_list;
 
   55     info->chroma_format_idc = 
sps->chroma_format_idc;
 
   56     info->separate_colour_plane_flag = 
sps->separate_colour_plane_flag;
 
   57     info->pic_width_in_luma_samples = 
sps->width;
 
   58     info->pic_height_in_luma_samples = 
sps->height;
 
   59     info->bit_depth_luma_minus8 = 
sps->bit_depth - 8;
 
   60     info->bit_depth_chroma_minus8 = 
sps->bit_depth - 8;
 
   61     info->log2_max_pic_order_cnt_lsb_minus4 = 
sps->log2_max_poc_lsb - 4;
 
   64     info->sps_max_dec_pic_buffering_minus1 = 
sps->temporal_layer[
sps->max_sub_layers - 1].max_dec_pic_buffering - 1;
 
   65     info->log2_min_luma_coding_block_size_minus3 = 
sps->log2_min_cb_size - 3;
 
   66     info->log2_diff_max_min_luma_coding_block_size = 
sps->log2_diff_max_min_coding_block_size;
 
   67     info->log2_min_transform_block_size_minus2 = 
sps->log2_min_tb_size - 2;
 
   68     info->log2_diff_max_min_transform_block_size = 
sps->log2_max_trafo_size - 
sps->log2_min_tb_size;
 
   69     info->max_transform_hierarchy_depth_inter = 
sps->max_transform_hierarchy_depth_inter;
 
   70     info->max_transform_hierarchy_depth_intra = 
sps->max_transform_hierarchy_depth_intra;
 
   71     info->scaling_list_enabled_flag = 
sps->scaling_list_enable_flag;
 
   73     for (
size_t i = 0; 
i < 6; 
i++) {
 
   74         for (
size_t j = 0; j < 16; j++) {
 
   80         for (
size_t j = 0; j < 64; j++) {
 
   91                 info->ScalingList32x32[
i][j] = sl->
sl[3][
i * 3][
pos];
 
  100             info->ScalingListDCCoeff32x32[
i] = sl->
sl_dc[1][
i * 3];
 
  103     info->amp_enabled_flag = 
sps->amp_enabled_flag;
 
  104     info->sample_adaptive_offset_enabled_flag = 
sps->sao_enabled;
 
  105     info->pcm_enabled_flag = 
sps->pcm_enabled_flag;
 
  106     if (
info->pcm_enabled_flag) {
 
  108         info->pcm_sample_bit_depth_luma_minus1 = 
sps->pcm.bit_depth - 1;
 
  110         info->pcm_sample_bit_depth_chroma_minus1 = 
sps->pcm.bit_depth_chroma - 1;
 
  112         info->log2_min_pcm_luma_coding_block_size_minus3 = 
sps->pcm.log2_min_pcm_cb_size - 3;
 
  114         info->log2_diff_max_min_pcm_luma_coding_block_size = 
sps->pcm.log2_max_pcm_cb_size - 
sps->pcm.log2_min_pcm_cb_size;
 
  116         info->pcm_loop_filter_disabled_flag = 
sps->pcm.loop_filter_disable_flag;
 
  120     info->num_short_term_ref_pic_sets = 
sps->nb_st_rps;
 
  121     info->long_term_ref_pics_present_flag = 
sps->long_term_ref_pics_present_flag;
 
  124     info->num_long_term_ref_pics_sps = 
sps->num_long_term_ref_pics_sps;
 
  125     info->sps_temporal_mvp_enabled_flag = 
sps->sps_temporal_mvp_enabled_flag;
 
  126     info->strong_intra_smoothing_enabled_flag = 
sps->sps_strong_intra_smoothing_enable_flag;
 
  129     info->dependent_slice_segments_enabled_flag = 
pps->dependent_slice_segments_enabled_flag;
 
  130     info->output_flag_present_flag = 
pps->output_flag_present_flag;
 
  131     info->num_extra_slice_header_bits = 
pps->num_extra_slice_header_bits;
 
  132     info->sign_data_hiding_enabled_flag = 
pps->sign_data_hiding_flag;
 
  133     info->cabac_init_present_flag = 
pps->cabac_init_present_flag;
 
  134     info->num_ref_idx_l0_default_active_minus1 = 
pps->num_ref_idx_l0_default_active - 1;
 
  135     info->num_ref_idx_l1_default_active_minus1 = 
pps->num_ref_idx_l1_default_active - 1;
 
  136     info->init_qp_minus26 = 
pps->pic_init_qp_minus26;
 
  137     info->constrained_intra_pred_flag = 
pps->constrained_intra_pred_flag;
 
  138     info->transform_skip_enabled_flag = 
pps->transform_skip_enabled_flag;
 
  139     info->cu_qp_delta_enabled_flag = 
pps->cu_qp_delta_enabled_flag;
 
  141     info->diff_cu_qp_delta_depth = 
pps->diff_cu_qp_delta_depth;
 
  142     info->pps_cb_qp_offset = 
pps->cb_qp_offset;
 
  143     info->pps_cr_qp_offset = 
pps->cr_qp_offset;
 
  144     info->pps_slice_chroma_qp_offsets_present_flag = 
pps->pic_slice_level_chroma_qp_offsets_present_flag;
 
  145     info->weighted_pred_flag = 
pps->weighted_pred_flag;
 
  146     info->weighted_bipred_flag = 
pps->weighted_bipred_flag;
 
  147     info->transquant_bypass_enabled_flag = 
pps->transquant_bypass_enable_flag;
 
  148     info->tiles_enabled_flag = 
pps->tiles_enabled_flag;
 
  149     info->entropy_coding_sync_enabled_flag = 
pps->entropy_coding_sync_enabled_flag;
 
  150     if (
info->tiles_enabled_flag) {
 
  152         info->num_tile_columns_minus1 = 
pps->num_tile_columns - 1;
 
  154         info->num_tile_rows_minus1 = 
pps->num_tile_rows - 1;
 
  156         info->uniform_spacing_flag = 
pps->uniform_spacing_flag;
 
  160         for (ssize_t 
i = 0; 
i < 
pps->num_tile_columns; 
i++) {
 
  161             info->column_width_minus1[
i] = 
pps->column_width[
i] - 1;
 
  166         for (ssize_t 
i = 0; 
i < 
pps->num_tile_rows; 
i++) {
 
  167             info->row_height_minus1[
i] = 
pps->row_height[
i] - 1;
 
  171         info->loop_filter_across_tiles_enabled_flag = 
pps->loop_filter_across_tiles_enabled_flag;
 
  173     info->pps_loop_filter_across_slices_enabled_flag = 
pps->seq_loop_filter_across_slices_enabled_flag;
 
  174     info->deblocking_filter_control_present_flag = 
pps->deblocking_filter_control_present_flag;
 
  177     info->deblocking_filter_override_enabled_flag = 
pps->deblocking_filter_override_enabled_flag;
 
  180     info->pps_deblocking_filter_disabled_flag = 
pps->disable_dbf;
 
  183     info->pps_beta_offset_div2 = 
pps->beta_offset / 2;
 
  186     info->pps_tc_offset_div2 = 
pps->tc_offset / 2;
 
  187     info->lists_modification_present_flag = 
pps->lists_modification_present_flag;
 
  188     info->log2_parallel_merge_level_minus2 = 
pps->log2_parallel_merge_level - 2;
 
  189     info->slice_segment_header_extension_present_flag = 
pps->slice_header_extension_present_flag;
 
  198     info->CurrRpsIdx = 
sps->nb_st_rps;
 
  200         for (
size_t i = 0; 
i < 
sps->nb_st_rps; 
i++) {
 
  202                 info->CurrRpsIdx = 
i;
 
  231     info->CurrPicOrderCntVal = 
h->poc;
 
  234     for (
size_t i = 0; 
i < 16; 
i++) {
 
  235         info->RefPics[
i] = VDP_INVALID_HANDLE;
 
  236         info->PicOrderCntVal[
i] = 0;
 
  237         info->IsLongTerm[
i] = 0;
 
  245                      "VDPAU only supports up to 16 references in the DPB. " 
  246                      "This frame may not be decoded correctly.\n");
 
  261             info->IsLongTerm[j] = 0;
 
  268     if (
info->NumPocStCurrBefore > 8) {
 
  270              "VDPAU only supports up to 8 references in StCurrBefore. " 
  271              "This frame may not be decoded correctly.\n");
 
  272         info->NumPocStCurrBefore = 8;
 
  277     if (
info->NumPocStCurrAfter > 8) {
 
  279              "VDPAU only supports up to 8 references in StCurrAfter. " 
  280              "This frame may not be decoded correctly.\n");
 
  281         info->NumPocStCurrAfter = 8;
 
  286     if (
info->NumPocLtCurr > 8) {
 
  288              "VDPAU only supports up to 8 references in LtCurr. " 
  289              "This frame may not be decoded correctly.\n");
 
  290         info->NumPocLtCurr = 8;
 
  299             for (
size_t k = 0; k < 16; k++) {
 
  300                 if (
id == 
info->RefPics[k]) {
 
  301                     info->RefPicSetStCurrBefore[j] = k;
 
  322             for (
size_t k = 0; k < 16; k++) {
 
  323                 if (
id == 
info->RefPics[k]) {
 
  324                     info->RefPicSetStCurrAfter[j] = k;
 
  340     for (ssize_t 
i = 0, j = 0; 
i < 
h->rps[
LT_CURR].nb_refs; 
i++) {
 
  345             for (
size_t k = 0; k < 16; k++) {
 
  346                 if (
id == 
info->RefPics[k]) {
 
  347                     info->RefPicSetLtCurr[j] = k;
 
  362 #ifdef VDP_YCBCR_FORMAT_Y_U_V_444 
  363     if (
sps->sps_range_extension_flag) {
 
  364         info2->sps_range_extension_flag             = 1;
 
  365         info2->transformSkipRotationEnableFlag      = 
sps->transform_skip_rotation_enabled_flag;
 
  366         info2->transformSkipContextEnableFlag       = 
sps->transform_skip_context_enabled_flag;
 
  367         info2->implicitRdpcmEnableFlag              = 
sps->implicit_rdpcm_enabled_flag;
 
  368         info2->explicitRdpcmEnableFlag              = 
sps->explicit_rdpcm_enabled_flag;
 
  369         info2->extendedPrecisionProcessingFlag      = 
sps->extended_precision_processing_flag;
 
  370         info2->intraSmoothingDisabledFlag           = 
sps->intra_smoothing_disabled_flag;
 
  371         info2->highPrecisionOffsetsEnableFlag       = 
sps->high_precision_offsets_enabled_flag;
 
  372         info2->persistentRiceAdaptationEnableFlag   = 
sps->persistent_rice_adaptation_enabled_flag;
 
  373         info2->cabacBypassAlignmentEnableFlag       = 
sps->cabac_bypass_alignment_enabled_flag;
 
  375         info2->sps_range_extension_flag = 0;
 
  377     if (
pps->pps_range_extensions_flag) {
 
  378         info2->pps_range_extension_flag             = 1;
 
  379         info2->log2MaxTransformSkipSize             = 
pps->log2_max_transform_skip_block_size;
 
  380         info2->crossComponentPredictionEnableFlag   = 
pps->cross_component_prediction_enabled_flag;
 
  381         info2->chromaQpAdjustmentEnableFlag         = 
pps->chroma_qp_offset_list_enabled_flag;
 
  382         info2->diffCuChromaQpAdjustmentDepth        = 
pps->diff_cu_chroma_qp_offset_depth;
 
  383         info2->chromaQpAdjustmentTableSize          = 
pps->chroma_qp_offset_list_len_minus1 + 1;
 
  384         info2->log2SaoOffsetScaleLuma               = 
pps->log2_sao_offset_scale_luma;
 
  385         info2->log2SaoOffsetScaleChroma             = 
pps->log2_sao_offset_scale_chroma;
 
  386         for (ssize_t 
i = 0; 
i < info2->chromaQpAdjustmentTableSize; 
i++)
 
  388             info2->cb_qp_adjustment[
i] = 
pps->cb_qp_offset_list[
i];
 
  389             info2->cr_qp_adjustment[
i] = 
pps->cr_qp_offset_list[
i];
 
  393         info2->pps_range_extension_flag = 0;
 
  444 #define copy_field(name) h265_raw_ptl->general_ ## name = general_ptl->name 
  486             *vdp_profile = VDP_DECODER_PROFILE_HEVC_MAIN;
 
  492     if (!strcmp(
profile->name, 
"Main 12") ||
 
  493         !strcmp(
profile->name, 
"Main 12 Intra"))
 
  494         *vdp_profile = VDP_DECODER_PROFILE_HEVC_MAIN_12;
 
  495 #ifdef VDP_DECODER_PROFILE_HEVC_MAIN_444 
  496     else if (!strcmp(
profile->name, 
"Main 4:4:4") ||
 
  497              !strcmp(
profile->name, 
"Main 4:4:4 Intra"))
 
  498         *vdp_profile = VDP_DECODER_PROFILE_HEVC_MAIN_444;
 
  500 #ifdef VDP_DECODER_PROFILE_HEVC_MAIN_444_10 
  501     else if (!strcmp(
profile->name, 
"Main 4:4:4 10") ||
 
  502              !strcmp(
profile->name, 
"Main 4:4:4 10 Intra"))
 
  503         *vdp_profile = VDP_DECODER_PROFILE_HEVC_MAIN_444_10;
 
  504     else if (!strcmp(
profile->name, 
"Main 4:4:4 12") ||
 
  505              !strcmp(
profile->name, 
"Main 4:4:4 12 Intra"))
 
  506         *vdp_profile = VDP_DECODER_PROFILE_HEVC_MAIN_444_12;
 
  523         profile = VDP_DECODER_PROFILE_HEVC_MAIN;
 
  526         profile = VDP_DECODER_PROFILE_HEVC_MAIN_10;
 
  529         profile = VDP_DECODER_PROFILE_HEVC_MAIN_STILL;
 
  544     .
p.
name         = 
"hevc_vdpau",