gdc: modify the line offset of gdc
authorkeke.li <keke.li@amlogic.com>
Mon, 10 Sep 2018 08:43:31 +0000 (16:43 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Tue, 11 Sep 2018 08:07:45 +0000 (01:07 -0700)
PD#173042: gdc: modify the line offset param of gdc

Change-Id: I946f174282fe6583432c408065a56f685db424d2
Signed-off-by: Keke Li <keke.li@amlogic.com>
drivers/amlogic/media/gdc/app/gdc_main.c
drivers/amlogic/media/gdc/src/fw_lib/acamera_gdc.c

index 6b43d73..6e4a947 100644 (file)
@@ -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,
index 6900f42..560e104 100644 (file)
@@ -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);