Lines Matching refs:vdsc_cfg
256 int drm_dsc_compute_rc_parameters(struct drm_dsc_config *vdsc_cfg) in drm_dsc_compute_rc_parameters() argument
266 if (vdsc_cfg->native_420 || vdsc_cfg->native_422) { in drm_dsc_compute_rc_parameters()
268 groups_per_line = DIV_ROUND_UP(vdsc_cfg->slice_width / 2, in drm_dsc_compute_rc_parameters()
272 vdsc_cfg->slice_chunk_size = DIV_ROUND_UP(vdsc_cfg->slice_width / 2 * in drm_dsc_compute_rc_parameters()
273 vdsc_cfg->bits_per_pixel, in drm_dsc_compute_rc_parameters()
277 groups_per_line = DIV_ROUND_UP(vdsc_cfg->slice_width, in drm_dsc_compute_rc_parameters()
281 vdsc_cfg->slice_chunk_size = DIV_ROUND_UP(vdsc_cfg->slice_width * in drm_dsc_compute_rc_parameters()
282 vdsc_cfg->bits_per_pixel, in drm_dsc_compute_rc_parameters()
286 if (vdsc_cfg->convert_rgb) in drm_dsc_compute_rc_parameters()
287 num_extra_mux_bits = 3 * (vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
288 (4 * vdsc_cfg->bits_per_component + 4) in drm_dsc_compute_rc_parameters()
290 else if (vdsc_cfg->native_422) in drm_dsc_compute_rc_parameters()
291 num_extra_mux_bits = 4 * vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
292 (4 * vdsc_cfg->bits_per_component + 4) + in drm_dsc_compute_rc_parameters()
293 3 * (4 * vdsc_cfg->bits_per_component) - 2; in drm_dsc_compute_rc_parameters()
295 num_extra_mux_bits = 3 * vdsc_cfg->mux_word_size + in drm_dsc_compute_rc_parameters()
296 (4 * vdsc_cfg->bits_per_component + 4) + in drm_dsc_compute_rc_parameters()
297 2 * (4 * vdsc_cfg->bits_per_component) - 2; in drm_dsc_compute_rc_parameters()
299 slice_bits = 8 * vdsc_cfg->slice_chunk_size * vdsc_cfg->slice_height; in drm_dsc_compute_rc_parameters()
302 ((slice_bits - num_extra_mux_bits) % vdsc_cfg->mux_word_size)) in drm_dsc_compute_rc_parameters()
305 if (groups_per_line < vdsc_cfg->initial_scale_value - 8) in drm_dsc_compute_rc_parameters()
306 vdsc_cfg->initial_scale_value = groups_per_line + 8; in drm_dsc_compute_rc_parameters()
309 if (vdsc_cfg->initial_scale_value > 8) in drm_dsc_compute_rc_parameters()
310 vdsc_cfg->scale_decrement_interval = groups_per_line / in drm_dsc_compute_rc_parameters()
311 (vdsc_cfg->initial_scale_value - 8); in drm_dsc_compute_rc_parameters()
313 vdsc_cfg->scale_decrement_interval = DSC_SCALE_DECREMENT_INTERVAL_MAX; in drm_dsc_compute_rc_parameters()
315 vdsc_cfg->final_offset = vdsc_cfg->rc_model_size - in drm_dsc_compute_rc_parameters()
316 (vdsc_cfg->initial_xmit_delay * in drm_dsc_compute_rc_parameters()
317 vdsc_cfg->bits_per_pixel + 8) / 16 + num_extra_mux_bits; in drm_dsc_compute_rc_parameters()
319 if (vdsc_cfg->final_offset >= vdsc_cfg->rc_model_size) { in drm_dsc_compute_rc_parameters()
324 final_scale = (vdsc_cfg->rc_model_size * 8) / in drm_dsc_compute_rc_parameters()
325 (vdsc_cfg->rc_model_size - vdsc_cfg->final_offset); in drm_dsc_compute_rc_parameters()
326 if (vdsc_cfg->slice_height > 1) in drm_dsc_compute_rc_parameters()
332 vdsc_cfg->nfl_bpg_offset = DIV_ROUND_UP((vdsc_cfg->first_line_bpg_offset << 11), in drm_dsc_compute_rc_parameters()
333 (vdsc_cfg->slice_height - 1)); in drm_dsc_compute_rc_parameters()
335 vdsc_cfg->nfl_bpg_offset = 0; in drm_dsc_compute_rc_parameters()
338 groups_total = groups_per_line * vdsc_cfg->slice_height; in drm_dsc_compute_rc_parameters()
341 vdsc_cfg->slice_bpg_offset = DIV_ROUND_UP(((vdsc_cfg->rc_model_size - in drm_dsc_compute_rc_parameters()
342 vdsc_cfg->initial_offset + in drm_dsc_compute_rc_parameters()
353 vdsc_cfg->scale_increment_interval = in drm_dsc_compute_rc_parameters()
354 (vdsc_cfg->final_offset * (1 << 11)) / in drm_dsc_compute_rc_parameters()
355 ((vdsc_cfg->nfl_bpg_offset + in drm_dsc_compute_rc_parameters()
356 vdsc_cfg->slice_bpg_offset) * in drm_dsc_compute_rc_parameters()
363 vdsc_cfg->scale_increment_interval = 0; in drm_dsc_compute_rc_parameters()
371 rbs_min = vdsc_cfg->rc_model_size - vdsc_cfg->initial_offset + in drm_dsc_compute_rc_parameters()
372 DIV_ROUND_UP(vdsc_cfg->initial_xmit_delay * in drm_dsc_compute_rc_parameters()
373 vdsc_cfg->bits_per_pixel, 16) + in drm_dsc_compute_rc_parameters()
374 groups_per_line * vdsc_cfg->first_line_bpg_offset; in drm_dsc_compute_rc_parameters()
376 hrd_delay = DIV_ROUND_UP((rbs_min * 16), vdsc_cfg->bits_per_pixel); in drm_dsc_compute_rc_parameters()
377 vdsc_cfg->rc_bits = (hrd_delay * vdsc_cfg->bits_per_pixel) / 16; in drm_dsc_compute_rc_parameters()
378 vdsc_cfg->initial_dec_delay = hrd_delay - vdsc_cfg->initial_xmit_delay; in drm_dsc_compute_rc_parameters()