Exemple #1
0
__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;
}
Exemple #2
0
__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;
}
Exemple #3
0
__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;
}