__s32 Video_Operation_In_Vblanking(__u32 sel, __u32 tcon_index) { __u32 id=0; for(id = 0; id<4; id++) { if((g_video[sel][id].enable == TRUE) && (g_video[sel][id].have_got_frame == TRUE)) { Hal_Set_Frame(sel, tcon_index, id); } } return DIS_SUCCESS; }
__s32 Video_Operation_In_Vblanking(__u32 screen_id, __u32 tcon_index) { __u32 id=0; __u32 num_layers; num_layers = bsp_disp_feat_get_num_layers(screen_id); for(id = 0; id<num_layers; id++) { if((g_video[screen_id][id].enable == TRUE) && (g_video[screen_id][id].have_got_frame == TRUE)) { Hal_Set_Frame(screen_id, tcon_index, id); } } return DIS_SUCCESS; }
__s32 Video_Operation_In_Vblanking(__u32 sel, __u32 tcon_index) { __u32 id=0; #if 0 for(id = 0; id<4; id++) { if((g_video[sel][id].enable == TRUE) && (g_video[sel][id].have_got_frame == TRUE)) { Hal_Set_Frame(sel, tcon_index, id); } } #else //de-interlace for(id = 0; id < 2; id++) { if((g_interlace[id].enable) && (gdisp.scaler[id].status & SCALER_USED)) { unsigned long flags; dit_mode_t dit_mod; __u32 maf_linestride = 0; __u32 pre_frame_addr_luma = 0; __u32 pre_frame_addr_chroma = 0; __scal_src_type_t in_type; __scal_out_type_t out_type; __scal_src_size_t in_size; __scal_out_size_t out_size; __scal_scan_mod_t in_scan; __scal_scan_mod_t out_scan; __disp_scaler_t *scaler = &(gdisp.scaler[id]); __scal_buf_addr_t scal_addr; __bool fetch_bot; __bool tempdiff_en; __bool diagintp_en; #ifdef __LINUX_OSAL__ spin_lock_irqsave(&g_video[sel][0].flag_lock, flags); #endif fetch_bot = scaler->in_fb.b_top_field_first ^ g_interlace[id].first_field; g_interlace[id].first_field = false; #ifdef __LINUX_OSAL__ spin_unlock_irqrestore(&g_video[sel][0].flag_lock, flags); #endif dit_mod = dit_mode_default[id]; maf_linestride = (((scaler->src_win.width + 31) & 0xffffffe0)*2/8 + 31) & 0xffffffe0; if(!g_interlace[id].first_frame) { if(dit_mod == DIT_MODE_MAF) { pre_frame_addr_luma = g_interlace[id].pre_frame_addr_luma; pre_frame_addr_chroma = g_interlace[id].pre_frame_addr_chroma; tempdiff_en = true; diagintp_en = true; } else { tempdiff_en = false; diagintp_en = false; } } else { tempdiff_en = false; g_interlace[id].first_frame = false; } in_type.fmt = Scaler_sw_para_to_reg(0,scaler->in_fb.mode,scaler->in_fb.format,scaler->in_fb.seq); in_type.mod = Scaler_sw_para_to_reg(1,scaler->in_fb.mode,scaler->in_fb.format,scaler->in_fb.seq); in_type.ps = Scaler_sw_para_to_reg(2,scaler->in_fb.mode,scaler->in_fb.format,scaler->in_fb.seq); in_type.byte_seq = 0; in_type.sample_method = 0; in_scan.field = false; in_scan.bottom = fetch_bot; out_scan.field = (gdisp.screen[sel].de_flicker_status & DE_FLICKER_USED) ? 0: gdisp.screen[sel].b_out_interlace; in_size.src_width = scaler->in_fb.size.width; in_size.src_height = scaler->in_fb.size.height; in_size.x_off = scaler->src_win.x; in_size.y_off = scaler->src_win.y; in_size.scal_height= scaler->src_win.height; in_size.scal_width= scaler->src_win.width; out_type.byte_seq = scaler->out_fb.seq; out_type.fmt = scaler->out_fb.format; out_size.width = scaler->out_size.width; out_size.height = scaler->out_size.height; scal_addr.ch0_addr= (__u32)OSAL_VAtoPA((void*)(scaler->in_fb.addr[0])); scal_addr.ch1_addr= (__u32)OSAL_VAtoPA((void*)(scaler->in_fb.addr[1])); scal_addr.ch2_addr= (__u32)OSAL_VAtoPA((void*)(scaler->in_fb.addr[2])); DE_SCAL_Config_Src(id,&scal_addr,&in_size,&in_type,FALSE,FALSE); DE_SCAL_Agth_Config(sel, &in_type, &in_size, &out_size, 0, 0, 0); DE_SCAL_Set_Init_Phase(id, &in_scan, &in_size, &in_type, &out_scan, &out_size, &out_type, 1); DE_SCAL_Set_Scaling_Factor(id, &in_scan, &in_size, &in_type, &out_scan, &out_size, &out_type); //DE_SCAL_Set_Scaling_Coef_for_video(scaler_index, &in_scan, &in_size, &in_type, &out_scan, &out_size, &out_type, 0x00000101); DE_SCAL_Set_Scaling_Coef(id, &in_scan, &in_size, &in_type, &out_scan, &out_size, &out_type, scaler->smooth_mode); DE_SCAL_Set_Out_Size(id, &out_scan,&out_type, &out_size); DE_SCAL_Set_Di_Ctrl(id,1,dit_mod,diagintp_en,tempdiff_en); DE_SCAL_Set_Di_PreFrame_Addr(id,pre_frame_addr_luma,pre_frame_addr_chroma); DE_SCAL_Set_Di_MafFlag_Src(id,g_interlace[id].cur_maf_flag_addr, g_interlace[id].pre_maf_flag_addr,maf_linestride); } else { DE_SCAL_Set_Di_Ctrl(id,0,DIT_MODE_WEAVE,0,0); } } #endif return DIS_SUCCESS; }