34 return VA_INVALID_SURFACE;
44 VADecPictureParameterBufferVP9 pic_param;
50 pic_param = (VADecPictureParameterBufferVP9) {
51 .frame_width = avctx->
width,
52 .frame_height = avctx->
height,
57 .frame_type = !
h->h.keyframe,
58 .show_frame = !
h->h.invisible,
59 .error_resilient_mode =
h->h.errorres,
60 .intra_only =
h->h.intraonly,
61 .allow_high_precision_mv =
h->h.keyframe ? 0 :
h->h.highprecisionmvs,
62 .mcomp_filter_type =
h->h.filtermode ^ (
h->h.filtermode <= 1),
63 .frame_parallel_decoding_mode =
h->h.parallelmode,
64 .reset_frame_context =
h->h.resetctx,
65 .refresh_frame_context =
h->h.refreshctx,
66 .frame_context_idx =
h->h.framectxid,
68 .segmentation_enabled =
h->h.segmentation.enabled,
69 .segmentation_temporal_update =
h->h.segmentation.temporal,
70 .segmentation_update_map =
h->h.segmentation.update_map,
72 .last_ref_frame =
h->h.refidx[0],
73 .last_ref_frame_sign_bias =
h->h.signbias[0],
74 .golden_ref_frame =
h->h.refidx[1],
75 .golden_ref_frame_sign_bias =
h->h.signbias[1],
76 .alt_ref_frame =
h->h.refidx[2],
77 .alt_ref_frame_sign_bias =
h->h.signbias[2],
78 .lossless_flag =
h->h.lossless,
81 .filter_level =
h->h.filter.level,
82 .sharpness_level =
h->h.filter.sharpness,
83 .log2_tile_rows =
h->h.tiling.log2_tile_rows,
84 .log2_tile_columns =
h->h.tiling.log2_tile_cols,
86 .frame_header_length_in_bytes =
h->h.uncompressed_header_size,
87 .first_partition_size =
h->h.compressed_header_size,
89 .profile =
h->h.profile,
90 .bit_depth =
h->h.bpp,
93 for (
i = 0;
i < 7;
i++)
94 pic_param.mb_segment_tree_probs[
i] =
h->h.segmentation.prob[
i];
96 if (
h->h.segmentation.temporal) {
97 for (
i = 0;
i < 3;
i++)
98 pic_param.segment_pred_probs[
i] =
h->h.segmentation.pred_prob[
i];
100 memset(pic_param.segment_pred_probs, 255,
sizeof(pic_param.segment_pred_probs));
103 for (
i = 0;
i < 8;
i++) {
107 pic_param.reference_frames[
i] = VA_INVALID_ID;
111 VAPictureParameterBufferType,
112 &pic_param,
sizeof(pic_param));
135 VASliceParameterBufferVP9 slice_param;
138 slice_param = (VASliceParameterBufferVP9) {
139 .slice_data_size =
size,
140 .slice_data_offset = 0,
141 .slice_data_flag = VA_SLICE_DATA_FLAG_ALL,
144 for (
i = 0;
i < 8;
i++) {
145 slice_param.seg_param[
i] = (VASegmentParameterVP9) {
146 .segment_flags.fields = {
147 .segment_reference_enabled =
h->h.segmentation.feat[
i].ref_enabled,
148 .segment_reference =
h->h.segmentation.feat[
i].ref_val,
149 .segment_reference_skipped =
h->h.segmentation.feat[
i].skip_enabled,
152 .luma_dc_quant_scale =
h->h.segmentation.feat[
i].qmul[0][0],
153 .luma_ac_quant_scale =
h->h.segmentation.feat[
i].qmul[0][1],
154 .chroma_dc_quant_scale =
h->h.segmentation.feat[
i].qmul[1][0],
155 .chroma_ac_quant_scale =
h->h.segmentation.feat[
i].qmul[1][1],
158 memcpy(slice_param.seg_param[
i].filter_level,
h->h.segmentation.feat[
i].lflvl,
sizeof(slice_param.seg_param[
i].filter_level));
162 &slice_param, 1,
sizeof(slice_param),
173 .
p.
name =
"vp9_vaapi",