__s32 BSP_disp_set_hue(__u32 sel, __u32 hue) { gdisp.screen[sel].hue = hue; DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en, gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue); return DIS_SUCCESS; }
static __s32 BSP_disp_set_output_csc_sun4i(__u32 sel, __disp_output_type_t type) { __disp_color_range_t out_color_range = DISP_COLOR_RANGE_0_255; __csc_t out_csc = DE_RGB; __u32 enhance_en, bright, contrast, saturation, hue; enhance_en = gdisp.screen[sel].enhance_en; bright = gdisp.screen[sel].bright; contrast = gdisp.screen[sel].contrast; saturation = gdisp.screen[sel].saturation; hue = gdisp.screen[sel].hue; if (type == DISP_OUTPUT_TYPE_HDMI) { __s32 ret = 0; __s32 value = 0; out_color_range = DISP_COLOR_RANGE_16_255; #ifdef YUV_COLORSPACE /* Fix me */ out_csc = DE_YUV_HDMI; #endif ret = script_parser_fetch("disp_init", "screen0_out_color_range", &value, 1); if (ret < 0) { DE_INF("fetch script data " "disp_init.screen0_out_color_range fail\n"); } else { out_color_range = value; DE_INF("screen0_out_color_range = %d\n", value); } } else if (type == DISP_OUTPUT_TYPE_TV) { out_csc = DE_YUV_TV; } else if (type == DISP_OUTPUT_TYPE_LCD) { if (enhance_en == 0) { enhance_en = 1; bright = 50; contrast = 50; saturation = 57; hue = 50; } } gdisp.screen[sel].out_color_range = out_color_range; gdisp.screen[sel].out_csc = out_csc; DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, enhance_en, bright, contrast, saturation, hue); return DIS_SUCCESS; }
__s32 BSP_disp_set_output_csc(__u32 sel, __disp_output_type_t type) { __disp_color_range_t out_color_range = DISP_COLOR_RANGE_0_255; __u32 out_csc = 0; __u32 enhance_en, bright, contrast, saturation, hue; enhance_en = gdisp.screen[sel].enhance_en; bright = gdisp.screen[sel].bright; contrast = gdisp.screen[sel].contrast; saturation = gdisp.screen[sel].saturation; hue = gdisp.screen[sel].hue; if(type == DISP_OUTPUT_TYPE_HDMI) { __s32 ret = 0; __s32 value = 0; out_color_range = DISP_COLOR_RANGE_16_255; ret = OSAL_Script_FetchParser_Data("disp_init", "screen0_out_color_range", &value, 1); if(ret < 0) { DE_INF("fetch script data disp_init.screen0_out_color_range fail\n"); } else { out_color_range = value; DE_INF("screen0_out_color_range = %d\n", value); } out_csc = 2; } else if(type == DISP_OUTPUT_TYPE_TV) { out_csc = 1; } else if(type == DISP_OUTPUT_TYPE_LCD) { if(enhance_en == 0) { enhance_en = 1; bright = gdisp.screen[sel].lcd_cfg.lcd_bright; contrast = gdisp.screen[sel].lcd_cfg.lcd_contrast; saturation = gdisp.screen[sel].lcd_cfg.lcd_saturation; hue = gdisp.screen[sel].lcd_cfg.lcd_hue; } } gdisp.screen[sel].out_color_range = out_color_range; gdisp.screen[sel].out_csc = out_csc; DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, enhance_en, bright, contrast, saturation, hue); return DIS_SUCCESS; }
__s32 disp_drc_start_video_mode(__u32 screen_id) { gdisp.screen[screen_id].drc.mode = IEP_DRC_MODE_VIDEO; if(bsp_disp_drc_get_enable(screen_id) == 1) { bsp_disp_cfg_start(screen_id); DE_BE_Set_Enhance_ex(screen_id, 3, DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); IEP_Drc_Set_Mode(screen_id,gdisp.screen[screen_id].drc.mode); bsp_disp_cfg_finish(screen_id); } return DIS_SUCCESS; }
//todo : csc->set_mode or set_mode->csc? __s32 bsp_disp_drc_enable(__u32 screen_id, __u32 en) { if((DISP_OUTPUT_TYPE_LCD == bsp_disp_get_output_type(screen_id)) && disp_drc_get_support(screen_id)) { __iep_drc_t *drc; drc = &gdisp.screen[screen_id].drc; if((1 == en) && (0 == drc->enable)) { IEP_Drc_Set_Imgsize(screen_id, bsp_disp_get_screen_width(screen_id), bsp_disp_get_screen_height(screen_id)); IEP_Drc_Set_Winodw(screen_id, drc->rect); IEP_Drc_Set_Mode(screen_id,drc->mode); bsp_disp_cfg_start(screen_id); /* video mode */ if(drc->mode == IEP_DRC_MODE_VIDEO) { //todo? yuv output DE_BE_Set_Enhance_ex(screen_id, 3, DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); } /* UI mode */ else { DE_BE_Set_Enhance_ex(screen_id, 0,DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); } IEP_Drc_Enable(screen_id,TRUE); bsp_disp_cfg_finish(screen_id); gdisp.screen[screen_id].drc.enable = 1; } else if((0 == en) && (1 == drc->enable)) { bsp_disp_cfg_start(screen_id); IEP_Drc_Enable(screen_id,en); /* video mode */ if(drc->mode == IEP_DRC_MODE_VIDEO) { //todo? change to RGB output DE_BE_Set_Enhance_ex(screen_id, 0,DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); } bsp_disp_cfg_finish(screen_id); gdisp.screen[screen_id].drc.enable = 0; } return DIS_SUCCESS; } return DIS_NOT_SUPPORT; }
__s32 BSP_disp_enhance_enable(__u32 sel, __bool enable) { #ifndef CONFIG_ARCH_SUN5I gdisp.screen[sel].enhance_en = enable; DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en, gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue); #endif return DIS_SUCCESS; }
__s32 BSP_disp_set_contrast(__u32 sel, __u32 contrast) { gdisp.screen[sel].contrast = contrast; #ifndef CONFIG_ARCH_SUN5I DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en, gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue); #else BSP_disp_set_output_csc(sel, gdisp.screen[sel].output_type, gdisp.screen[sel].iep_status & DRC_USED); #endif return DIS_SUCCESS; }
__s32 bsp_disp_set_output_csc(__u32 screen_id, __disp_out_csc_type_t out_type, __u32 drc_csc) { __disp_color_range_t out_color_range = DISP_COLOR_RANGE_0_255; __u32 out_csc = 0; __u32 enhance_en, bright, contrast, saturation, hue; enhance_en = gdisp.screen[screen_id].enhance_en; bright = gdisp.screen[screen_id].bright; contrast = gdisp.screen[screen_id].contrast; saturation = gdisp.screen[screen_id].saturation; hue = gdisp.screen[screen_id].hue; if(out_type == DISP_OUT_CSC_TYPE_HDMI_YUV) { __s32 ret = 0; __s32 value = 0; out_color_range = DISP_COLOR_RANGE_16_255; ret = OSAL_Script_FetchParser_Data("disp_init", "screen0_out_color_range", &value, 1); if(ret < 0) { DE_INF("fetch script data disp_init.screen0_out_color_range fail\n"); } else { out_color_range = value; DE_INF("screen0_out_color_range = %d\n", value); } out_csc = 2; } else if(out_type == DISP_OUT_CSC_TYPE_HDMI_RGB) { __s32 ret = 0; __s32 value = 0; out_color_range = DISP_COLOR_RANGE_16_255; ret = OSAL_Script_FetchParser_Data("disp_init", "screen0_out_color_range", &value, 1); if(ret < 0) { DE_INF("fetch script data disp_init.screen0_out_color_range fail\n"); } else { out_color_range = value; DE_INF("screen0_out_color_range = %d\n", value); } out_csc = 0; } else if(out_type == DISP_OUT_CSC_TYPE_TV) { out_csc = 1; } else if(out_type == DISP_OUT_CSC_TYPE_LCD) { if(enhance_en == 0) { enhance_en = 1; bright = 50;//gdisp.screen[screen_id].lcd_cfg.lcd_bright; contrast = 50;//gdisp.screen[screen_id].lcd_cfg.lcd_contrast; saturation = 57;//gdisp.screen[screen_id].lcd_cfg.lcd_saturation; hue = 50;//gdisp.screen[screen_id].lcd_cfg.lcd_hue; } out_csc = 0; } /* if drc csc eq 1, indicate yuv for drc */ if(drc_csc) { out_csc = 3; } gdisp.screen[screen_id].out_color_range = out_color_range; gdisp.screen[screen_id].out_csc = out_csc; DE_BE_Set_Enhance_ex(screen_id, gdisp.screen[screen_id].out_csc, gdisp.screen[screen_id].out_color_range, enhance_en, bright, contrast, saturation, hue); return DIS_SUCCESS; }