Lines Matching refs:vdsc_cfg
249 int drm_dsc_compute_rc_parameters(struct drm_dsc_config *vdsc_cfg) in drm_dsc_compute_rc_parameters() argument
259 if (vdsc_cfg->native_420 || vdsc_cfg->native_422) { in drm_dsc_compute_rc_parameters()
261 groups_per_line = DIV_ROUND_UP(vdsc_cfg->slice_width / 2, in drm_dsc_compute_rc_parameters()
265 vdsc_cfg->slice_chunk_size = DIV_ROUND_UP(vdsc_cfg->slice_width / 2 * in drm_dsc_compute_rc_parameters()
266 vdsc_cfg->bits_per_pixel, in drm_dsc_compute_rc_parameters()
270 groups_per_line = DIV_ROUND_UP(vdsc_cfg->slice_width, in drm_dsc_compute_rc_parameters()
274 vdsc_cfg->slice_chunk_size = DIV_ROUND_UP(vdsc_cfg->slice_width * in drm_dsc_compute_rc_parameters()
275 vdsc_cfg->bits_per_pixel, in drm_dsc_compute_rc_parameters()
279 if (vdsc_cfg->convert_rgb) in drm_dsc_compute_rc_parameters()
280 num_extra_mux_bits = 3 * (vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
281 (4 * vdsc_cfg->bits_per_component + 4) in drm_dsc_compute_rc_parameters()
283 else if (vdsc_cfg->native_422) in drm_dsc_compute_rc_parameters()
284 num_extra_mux_bits = 4 * vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
285 (4 * vdsc_cfg->bits_per_component + 4) + in drm_dsc_compute_rc_parameters()
286 3 * (4 * vdsc_cfg->bits_per_component) - 2; in drm_dsc_compute_rc_parameters()
288 num_extra_mux_bits = 3 * vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
289 (4 * vdsc_cfg->bits_per_component + 4) + in drm_dsc_compute_rc_parameters()
290 2 * (4 * vdsc_cfg->bits_per_component) - 2; in drm_dsc_compute_rc_parameters()
292 slice_bits = 8 * vdsc_cfg->slice_chunk_size * vdsc_cfg->slice_height; in drm_dsc_compute_rc_parameters()
295 ((slice_bits - num_extra_mux_bits) % vdsc_cfg->mux_word_size)) in drm_dsc_compute_rc_parameters()
298 if (groups_per_line < vdsc_cfg->initial_scale_value - 8) in drm_dsc_compute_rc_parameters()
299 vdsc_cfg->initial_scale_value = groups_per_line + 8; in drm_dsc_compute_rc_parameters()
302 if (vdsc_cfg->initial_scale_value > 8) in drm_dsc_compute_rc_parameters()
303 vdsc_cfg->scale_decrement_interval = groups_per_line / in drm_dsc_compute_rc_parameters()
304 (vdsc_cfg->initial_scale_value - 8); in drm_dsc_compute_rc_parameters()
306 vdsc_cfg->scale_decrement_interval = DSC_SCALE_DECREMENT_INTERVAL_MAX; in drm_dsc_compute_rc_parameters()
308 vdsc_cfg->final_offset = vdsc_cfg->rc_model_size - in drm_dsc_compute_rc_parameters()
309 (vdsc_cfg->initial_xmit_delay * in drm_dsc_compute_rc_parameters()
310 vdsc_cfg->bits_per_pixel + 8) / 16 + num_extra_mux_bits; in drm_dsc_compute_rc_parameters()
312 if (vdsc_cfg->final_offset >= vdsc_cfg->rc_model_size) { in drm_dsc_compute_rc_parameters()
317 final_scale = (vdsc_cfg->rc_model_size * 8) / in drm_dsc_compute_rc_parameters()
318 (vdsc_cfg->rc_model_size - vdsc_cfg->final_offset); in drm_dsc_compute_rc_parameters()
319 if (vdsc_cfg->slice_height > 1) in drm_dsc_compute_rc_parameters()
325 vdsc_cfg->nfl_bpg_offset = DIV_ROUND_UP((vdsc_cfg->first_line_bpg_offset << 11), in drm_dsc_compute_rc_parameters()
326 (vdsc_cfg->slice_height - 1)); in drm_dsc_compute_rc_parameters()
328 vdsc_cfg->nfl_bpg_offset = 0; in drm_dsc_compute_rc_parameters()
331 groups_total = groups_per_line * vdsc_cfg->slice_height; in drm_dsc_compute_rc_parameters()
334 vdsc_cfg->slice_bpg_offset = DIV_ROUND_UP(((vdsc_cfg->rc_model_size - in drm_dsc_compute_rc_parameters()
335 vdsc_cfg->initial_offset + in drm_dsc_compute_rc_parameters()
346 vdsc_cfg->scale_increment_interval = in drm_dsc_compute_rc_parameters()
347 (vdsc_cfg->final_offset * (1 << 11)) / in drm_dsc_compute_rc_parameters()
348 ((vdsc_cfg->nfl_bpg_offset + in drm_dsc_compute_rc_parameters()
349 vdsc_cfg->slice_bpg_offset) * in drm_dsc_compute_rc_parameters()
356 vdsc_cfg->scale_increment_interval = 0; in drm_dsc_compute_rc_parameters()
364 rbs_min = vdsc_cfg->rc_model_size - vdsc_cfg->initial_offset + in drm_dsc_compute_rc_parameters()
365 DIV_ROUND_UP(vdsc_cfg->initial_xmit_delay * in drm_dsc_compute_rc_parameters()
366 vdsc_cfg->bits_per_pixel, 16) + in drm_dsc_compute_rc_parameters()
367 groups_per_line * vdsc_cfg->first_line_bpg_offset; in drm_dsc_compute_rc_parameters()
369 hrd_delay = DIV_ROUND_UP((rbs_min * 16), vdsc_cfg->bits_per_pixel); in drm_dsc_compute_rc_parameters()
370 vdsc_cfg->rc_bits = (hrd_delay * vdsc_cfg->bits_per_pixel) / 16; in drm_dsc_compute_rc_parameters()
371 vdsc_cfg->initial_dec_delay = hrd_delay - vdsc_cfg->initial_xmit_delay; in drm_dsc_compute_rc_parameters()