mirror of
https://github.com/espressif/esp-idf
synced 2025-03-09 17:19:09 -04:00
fix(ppa): fix ppa srm potentially get blocked when scaling to YUV420
YUV420 requires scale_x_frag, scale_y_frag be even
This commit is contained in:
parent
e791f14bc4
commit
8038037b07
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -263,6 +263,13 @@ esp_err_t ppa_do_scale_rotate_mirror(ppa_client_handle_t ppa_client, const ppa_s
|
|||||||
srm_trans_desc->scale_x_frag = (uint32_t)(srm_trans_desc->scale_x * PPA_LL_SRM_SCALING_FRAG_MAX) & (PPA_LL_SRM_SCALING_FRAG_MAX - 1);
|
srm_trans_desc->scale_x_frag = (uint32_t)(srm_trans_desc->scale_x * PPA_LL_SRM_SCALING_FRAG_MAX) & (PPA_LL_SRM_SCALING_FRAG_MAX - 1);
|
||||||
srm_trans_desc->scale_y_int = (uint32_t)srm_trans_desc->scale_y;
|
srm_trans_desc->scale_y_int = (uint32_t)srm_trans_desc->scale_y;
|
||||||
srm_trans_desc->scale_y_frag = (uint32_t)(srm_trans_desc->scale_y * PPA_LL_SRM_SCALING_FRAG_MAX) & (PPA_LL_SRM_SCALING_FRAG_MAX - 1);
|
srm_trans_desc->scale_y_frag = (uint32_t)(srm_trans_desc->scale_y * PPA_LL_SRM_SCALING_FRAG_MAX) & (PPA_LL_SRM_SCALING_FRAG_MAX - 1);
|
||||||
|
// SRM processes in blocks. Block x/(y) cannot be scaled to odd number when YUV422/YUV420 is the output color mode
|
||||||
|
// When block size is 16x16, odd number is possible, so needs to make them even
|
||||||
|
// When block size is 32x32, calculated frag values are always even
|
||||||
|
if (config->out.srm_cm == PPA_SRM_COLOR_MODE_YUV420) {
|
||||||
|
srm_trans_desc->scale_x_frag = srm_trans_desc->scale_x_frag & ~1;
|
||||||
|
srm_trans_desc->scale_y_frag = srm_trans_desc->scale_y_frag & ~1;
|
||||||
|
}
|
||||||
srm_trans_desc->alpha_value = new_alpha_value;
|
srm_trans_desc->alpha_value = new_alpha_value;
|
||||||
srm_trans_desc->data_burst_length = ppa_client->data_burst_length;
|
srm_trans_desc->data_burst_length = ppa_client->data_burst_length;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user