|
|
@@ -38,6 +38,9 @@ static int vdpau_hevc_start_frame(AVCodecContext *avctx, |
|
|
|
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private; |
|
|
|
|
|
|
|
VdpPictureInfoHEVC *info = &pic_ctx->info.hevc; |
|
|
|
#ifdef VDP_YCBCR_FORMAT_Y_U_V_444 |
|
|
|
VdpPictureInfoHEVC444 *info2 = &pic_ctx->info.hevc_444; |
|
|
|
#endif |
|
|
|
|
|
|
|
const HEVCSPS *sps = h->ps.sps; |
|
|
|
const HEVCPPS *pps = h->ps.pps; |
|
|
@@ -355,6 +358,41 @@ static int vdpau_hevc_start_frame(AVCodecContext *avctx, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef VDP_YCBCR_FORMAT_Y_U_V_444 |
|
|
|
if (sps->sps_range_extension_flag) { |
|
|
|
info2->sps_range_extension_flag = 1; |
|
|
|
info2->transformSkipRotationEnableFlag = sps->transform_skip_rotation_enabled_flag; |
|
|
|
info2->transformSkipContextEnableFlag = sps->transform_skip_context_enabled_flag; |
|
|
|
info2->implicitRdpcmEnableFlag = sps->implicit_rdpcm_enabled_flag; |
|
|
|
info2->explicitRdpcmEnableFlag = sps->explicit_rdpcm_enabled_flag; |
|
|
|
info2->extendedPrecisionProcessingFlag = sps->extended_precision_processing_flag; |
|
|
|
info2->intraSmoothingDisabledFlag = sps->intra_smoothing_disabled_flag; |
|
|
|
info2->highPrecisionOffsetsEnableFlag = sps->high_precision_offsets_enabled_flag; |
|
|
|
info2->persistentRiceAdaptationEnableFlag = sps->persistent_rice_adaptation_enabled_flag; |
|
|
|
info2->cabacBypassAlignmentEnableFlag = sps->cabac_bypass_alignment_enabled_flag; |
|
|
|
} else { |
|
|
|
info2->sps_range_extension_flag = 0; |
|
|
|
} |
|
|
|
if (pps->pps_range_extensions_flag) { |
|
|
|
info2->pps_range_extension_flag = 1; |
|
|
|
info2->log2MaxTransformSkipSize = pps->log2_max_transform_skip_block_size; |
|
|
|
info2->crossComponentPredictionEnableFlag = pps->cross_component_prediction_enabled_flag; |
|
|
|
info2->chromaQpAdjustmentEnableFlag = pps->chroma_qp_offset_list_enabled_flag; |
|
|
|
info2->diffCuChromaQpAdjustmentDepth = pps->diff_cu_chroma_qp_offset_depth; |
|
|
|
info2->chromaQpAdjustmentTableSize = pps->chroma_qp_offset_list_len_minus1 + 1; |
|
|
|
info2->log2SaoOffsetScaleLuma = pps->log2_sao_offset_scale_luma; |
|
|
|
info2->log2SaoOffsetScaleChroma = pps->log2_sao_offset_scale_chroma; |
|
|
|
for (ssize_t i = 0; i < info2->chromaQpAdjustmentTableSize; i++) |
|
|
|
{ |
|
|
|
info2->cb_qp_adjustment[i] = pps->cb_qp_offset_list[i]; |
|
|
|
info2->cr_qp_adjustment[i] = pps->cr_qp_offset_list[i]; |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
info2->pps_range_extension_flag = 0; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
return ff_vdpau_common_start_frame(pic_ctx, buffer, size); |
|
|
|
} |
|
|
|
|
|
|
@@ -406,6 +444,9 @@ static int vdpau_hevc_init(AVCodecContext *avctx) |
|
|
|
case FF_PROFILE_HEVC_MAIN_STILL_PICTURE: |
|
|
|
profile = VDP_DECODER_PROFILE_HEVC_MAIN_STILL; |
|
|
|
break; |
|
|
|
case FF_PROFILE_HEVC_REXT: |
|
|
|
profile = VDP_DECODER_PROFILE_HEVC_MAIN_444; |
|
|
|
break; |
|
|
|
default: |
|
|
|
return AVERROR(ENOTSUP); |
|
|
|
} |
|
|
|