Lines Matching refs:vdsc_cfg

281 void drm_dsc_set_const_params(struct drm_dsc_config *vdsc_cfg)  in drm_dsc_set_const_params()  argument
283 if (!vdsc_cfg->rc_model_size) in drm_dsc_set_const_params()
284 vdsc_cfg->rc_model_size = DSC_RC_MODEL_SIZE_CONST; in drm_dsc_set_const_params()
285 vdsc_cfg->rc_edge_factor = DSC_RC_EDGE_FACTOR_CONST; in drm_dsc_set_const_params()
286 vdsc_cfg->rc_tgt_offset_high = DSC_RC_TGT_OFFSET_HI_CONST; in drm_dsc_set_const_params()
287 vdsc_cfg->rc_tgt_offset_low = DSC_RC_TGT_OFFSET_LO_CONST; in drm_dsc_set_const_params()
289 if (vdsc_cfg->bits_per_component <= 10) in drm_dsc_set_const_params()
290 vdsc_cfg->mux_word_size = DSC_MUX_WORD_SIZE_8_10_BPC; in drm_dsc_set_const_params()
292 vdsc_cfg->mux_word_size = DSC_MUX_WORD_SIZE_12_BPC; in drm_dsc_set_const_params()
308 void drm_dsc_set_rc_buf_thresh(struct drm_dsc_config *vdsc_cfg) in drm_dsc_set_rc_buf_thresh() argument
315 ARRAY_SIZE(vdsc_cfg->rc_buf_thresh)); in drm_dsc_set_rc_buf_thresh()
318 vdsc_cfg->rc_buf_thresh[i] = drm_dsc_rc_buf_thresh[i] >> 6; in drm_dsc_set_rc_buf_thresh()
324 if (vdsc_cfg->bits_per_pixel == 6 << 4) { in drm_dsc_set_rc_buf_thresh()
325 vdsc_cfg->rc_buf_thresh[12] = 7936 >> 6; in drm_dsc_set_rc_buf_thresh()
326 vdsc_cfg->rc_buf_thresh[13] = 8000 >> 6; in drm_dsc_set_rc_buf_thresh()
1243 int drm_dsc_setup_rc_params(struct drm_dsc_config *vdsc_cfg, enum drm_dsc_params_type type) in drm_dsc_setup_rc_params() argument
1249 if (WARN_ON_ONCE(!vdsc_cfg->bits_per_pixel || in drm_dsc_setup_rc_params()
1250 !vdsc_cfg->bits_per_component)) in drm_dsc_setup_rc_params()
1271 vdsc_cfg->bits_per_pixel, in drm_dsc_setup_rc_params()
1272 vdsc_cfg->bits_per_component); in drm_dsc_setup_rc_params()
1276 vdsc_cfg->first_line_bpg_offset = rc_params->first_line_bpg_offset; in drm_dsc_setup_rc_params()
1277 vdsc_cfg->initial_xmit_delay = rc_params->initial_xmit_delay; in drm_dsc_setup_rc_params()
1278 vdsc_cfg->initial_offset = rc_params->initial_offset; in drm_dsc_setup_rc_params()
1279 vdsc_cfg->flatness_min_qp = rc_params->flatness_min_qp; in drm_dsc_setup_rc_params()
1280 vdsc_cfg->flatness_max_qp = rc_params->flatness_max_qp; in drm_dsc_setup_rc_params()
1281 vdsc_cfg->rc_quant_incr_limit0 = rc_params->rc_quant_incr_limit0; in drm_dsc_setup_rc_params()
1282 vdsc_cfg->rc_quant_incr_limit1 = rc_params->rc_quant_incr_limit1; in drm_dsc_setup_rc_params()
1285 vdsc_cfg->rc_range_params[i].range_min_qp = in drm_dsc_setup_rc_params()
1287 vdsc_cfg->rc_range_params[i].range_max_qp = in drm_dsc_setup_rc_params()
1293 vdsc_cfg->rc_range_params[i].range_bpg_offset = in drm_dsc_setup_rc_params()
1312 int drm_dsc_compute_rc_parameters(struct drm_dsc_config *vdsc_cfg) in drm_dsc_compute_rc_parameters() argument
1322 if (vdsc_cfg->native_420 || vdsc_cfg->native_422) { in drm_dsc_compute_rc_parameters()
1324 groups_per_line = DIV_ROUND_UP(vdsc_cfg->slice_width / 2, in drm_dsc_compute_rc_parameters()
1328 vdsc_cfg->slice_chunk_size = DIV_ROUND_UP(vdsc_cfg->slice_width / 2 * in drm_dsc_compute_rc_parameters()
1329 vdsc_cfg->bits_per_pixel, in drm_dsc_compute_rc_parameters()
1333 groups_per_line = DIV_ROUND_UP(vdsc_cfg->slice_width, in drm_dsc_compute_rc_parameters()
1337 vdsc_cfg->slice_chunk_size = DIV_ROUND_UP(vdsc_cfg->slice_width * in drm_dsc_compute_rc_parameters()
1338 vdsc_cfg->bits_per_pixel, in drm_dsc_compute_rc_parameters()
1342 if (vdsc_cfg->convert_rgb) in drm_dsc_compute_rc_parameters()
1343 num_extra_mux_bits = 3 * (vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
1344 (4 * vdsc_cfg->bits_per_component + 4) in drm_dsc_compute_rc_parameters()
1346 else if (vdsc_cfg->native_422) in drm_dsc_compute_rc_parameters()
1347 num_extra_mux_bits = 4 * vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
1348 (4 * vdsc_cfg->bits_per_component + 4) + in drm_dsc_compute_rc_parameters()
1349 3 * (4 * vdsc_cfg->bits_per_component) - 2; in drm_dsc_compute_rc_parameters()
1351 num_extra_mux_bits = 3 * vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
1352 (4 * vdsc_cfg->bits_per_component + 4) + in drm_dsc_compute_rc_parameters()
1353 2 * (4 * vdsc_cfg->bits_per_component) - 2; in drm_dsc_compute_rc_parameters()
1355 slice_bits = 8 * vdsc_cfg->slice_chunk_size * vdsc_cfg->slice_height; in drm_dsc_compute_rc_parameters()
1358 ((slice_bits - num_extra_mux_bits) % vdsc_cfg->mux_word_size)) in drm_dsc_compute_rc_parameters()
1361 if (groups_per_line < vdsc_cfg->initial_scale_value - 8) in drm_dsc_compute_rc_parameters()
1362 vdsc_cfg->initial_scale_value = groups_per_line + 8; in drm_dsc_compute_rc_parameters()
1365 if (vdsc_cfg->initial_scale_value > 8) in drm_dsc_compute_rc_parameters()
1366 vdsc_cfg->scale_decrement_interval = groups_per_line / in drm_dsc_compute_rc_parameters()
1367 (vdsc_cfg->initial_scale_value - 8); in drm_dsc_compute_rc_parameters()
1369 vdsc_cfg->scale_decrement_interval = DSC_SCALE_DECREMENT_INTERVAL_MAX; in drm_dsc_compute_rc_parameters()
1371 vdsc_cfg->final_offset = vdsc_cfg->rc_model_size - in drm_dsc_compute_rc_parameters()
1372 (vdsc_cfg->initial_xmit_delay * in drm_dsc_compute_rc_parameters()
1373 vdsc_cfg->bits_per_pixel + 8) / 16 + num_extra_mux_bits; in drm_dsc_compute_rc_parameters()
1375 if (vdsc_cfg->final_offset >= vdsc_cfg->rc_model_size) { in drm_dsc_compute_rc_parameters()
1380 final_scale = (vdsc_cfg->rc_model_size * 8) / in drm_dsc_compute_rc_parameters()
1381 (vdsc_cfg->rc_model_size - vdsc_cfg->final_offset); in drm_dsc_compute_rc_parameters()
1382 if (vdsc_cfg->slice_height > 1) in drm_dsc_compute_rc_parameters()
1388 vdsc_cfg->nfl_bpg_offset = DIV_ROUND_UP((vdsc_cfg->first_line_bpg_offset << 11), in drm_dsc_compute_rc_parameters()
1389 (vdsc_cfg->slice_height - 1)); in drm_dsc_compute_rc_parameters()
1391 vdsc_cfg->nfl_bpg_offset = 0; in drm_dsc_compute_rc_parameters()
1394 groups_total = groups_per_line * vdsc_cfg->slice_height; in drm_dsc_compute_rc_parameters()
1397 vdsc_cfg->slice_bpg_offset = DIV_ROUND_UP(((vdsc_cfg->rc_model_size - in drm_dsc_compute_rc_parameters()
1398 vdsc_cfg->initial_offset + in drm_dsc_compute_rc_parameters()
1409 vdsc_cfg->scale_increment_interval = in drm_dsc_compute_rc_parameters()
1410 (vdsc_cfg->final_offset * (1 << 11)) / in drm_dsc_compute_rc_parameters()
1411 ((vdsc_cfg->nfl_bpg_offset + in drm_dsc_compute_rc_parameters()
1412 vdsc_cfg->slice_bpg_offset) * in drm_dsc_compute_rc_parameters()
1419 vdsc_cfg->scale_increment_interval = 0; in drm_dsc_compute_rc_parameters()
1427 rbs_min = vdsc_cfg->rc_model_size - vdsc_cfg->initial_offset + in drm_dsc_compute_rc_parameters()
1428 DIV_ROUND_UP(vdsc_cfg->initial_xmit_delay * in drm_dsc_compute_rc_parameters()
1429 vdsc_cfg->bits_per_pixel, 16) + in drm_dsc_compute_rc_parameters()
1430 groups_per_line * vdsc_cfg->first_line_bpg_offset; in drm_dsc_compute_rc_parameters()
1432 hrd_delay = DIV_ROUND_UP((rbs_min * 16), vdsc_cfg->bits_per_pixel); in drm_dsc_compute_rc_parameters()
1433 vdsc_cfg->rc_bits = (hrd_delay * vdsc_cfg->bits_per_pixel) / 16; in drm_dsc_compute_rc_parameters()
1434 vdsc_cfg->initial_dec_delay = hrd_delay - vdsc_cfg->initial_xmit_delay; in drm_dsc_compute_rc_parameters()
1446 u32 drm_dsc_get_bpp_int(const struct drm_dsc_config *vdsc_cfg) in drm_dsc_get_bpp_int() argument
1448 WARN_ON_ONCE(vdsc_cfg->bits_per_pixel & 0xf); in drm_dsc_get_bpp_int()
1449 return vdsc_cfg->bits_per_pixel >> 4; in drm_dsc_get_bpp_int()