From c5e8a587e12505082e36fac0946e4ab8ad5e71b0 Mon Sep 17 00:00:00 2001 From: "keke.li" Date: Mon, 10 Sep 2018 16:43:31 +0800 Subject: [PATCH] gdc: modify the line offset of gdc PD#173042: gdc: modify the line offset param of gdc Change-Id: I946f174282fe6583432c408065a56f685db424d2 Signed-off-by: Keke Li --- drivers/amlogic/media/gdc/app/gdc_main.c | 5 ++--- drivers/amlogic/media/gdc/src/fw_lib/acamera_gdc.c | 25 ++++++++++++---------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/amlogic/media/gdc/app/gdc_main.c b/drivers/amlogic/media/gdc/app/gdc_main.c index 6b43d73..6e4a947 100644 --- a/drivers/amlogic/media/gdc/app/gdc_main.c +++ b/drivers/amlogic/media/gdc/app/gdc_main.c @@ -49,9 +49,8 @@ int gdc_run(struct gdc_settings *g) //start gdc process with input address for y and uv planes if (g->gdc_config.format == NV12) { - gdc_process(g, - (uint32_t)g->y_base_addr, - (uint32_t)g->uv_base_addr); + gdc_process(g, (uint32_t)g->y_base_addr, + (uint32_t)g->uv_base_addr); } else { gdc_process_yuv420p(g, (uint32_t)g->y_base_addr, (uint32_t)g->u_base_addr, diff --git a/drivers/amlogic/media/gdc/src/fw_lib/acamera_gdc.c b/drivers/amlogic/media/gdc/src/fw_lib/acamera_gdc.c index 6900f42..560e104 100644 --- a/drivers/amlogic/media/gdc/src/fw_lib/acamera_gdc.c +++ b/drivers/amlogic/media/gdc/src/fw_lib/acamera_gdc.c @@ -115,10 +115,13 @@ int gdc_process(struct gdc_settings *gdc_settings, uint32_t y_base_addr, uint32_t uv_base_addr) { uint32_t gdc_out_base_addr = gdc_settings->current_addr; - uint32_t active_width = gdc_settings->gdc_config.output_width; - uint32_t active_height = gdc_settings->gdc_config.output_height; - uint32_t y_line_offset = active_width; //420 format - uint32_t uv_line_offset = active_width; //420 format + uint32_t input_width = gdc_settings->gdc_config.input_width; + uint32_t input_height = gdc_settings->gdc_config.input_height; + uint32_t output_height = gdc_settings->gdc_config.output_height; + uint32_t i_y_line_offset = gdc_settings->gdc_config.input_y_stride; + uint32_t i_uv_line_offset = gdc_settings->gdc_config.input_c_stride; + uint32_t o_y_line_offset = gdc_settings->gdc_config.output_y_stride; + uint32_t o_uv_line_offset = gdc_settings->gdc_config.output_c_stride; if (gdc_settings->is_waiting_gdc) { gdc_start_flag_write(0); @@ -130,24 +133,24 @@ int gdc_process(struct gdc_settings *gdc_settings, LOG(LOG_DEBUG, "starting GDC process.\n"); - gdc_datain_width_write(active_width); - gdc_datain_height_write(active_height); + gdc_datain_width_write(input_width); + gdc_datain_height_write(input_height); //input y plane gdc_data1in_addr_write(y_base_addr); - gdc_data1in_line_offset_write(y_line_offset); + gdc_data1in_line_offset_write(i_y_line_offset); //input uv plane gdc_data2in_addr_write(uv_base_addr); - gdc_data2in_line_offset_write(uv_line_offset); + gdc_data2in_line_offset_write(i_uv_line_offset); //gdc y output gdc_data1out_addr_write(gdc_out_base_addr); - gdc_data1out_line_offset_write(y_line_offset); + gdc_data1out_line_offset_write(o_y_line_offset); //gdc uv output - gdc_out_base_addr += active_height * y_line_offset; + gdc_out_base_addr += output_height * o_y_line_offset; gdc_data2out_addr_write(gdc_out_base_addr); - gdc_data2out_line_offset_write(uv_line_offset); + gdc_data2out_line_offset_write(o_uv_line_offset); gdc_start(gdc_settings); -- 2.7.4