Exemplo n.º 1
0
static  void  set_vout_mode(char * name)
{
#ifdef CONFIG_AML_HDMI_TX
    extern void hdmi_pre_set_change_mode(void);
#endif
	vmode_t    mode;

	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"tvmode set to %s\r\n",name);
	mode=validate_vmode(name);
	if(VMODE_MAX==mode)
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"no matched vout mode\n");
		return ; 
	}
	if(mode==get_current_vmode())
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"don't set the same mode as current.\r\n");	
		return ;
	}
#ifdef CONFIG_AML_HDMI_TX
	if(mode < VMODE_LCD)
		hdmi_pre_set_change_mode();
#endif
	set_current_vmode(mode);
	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"new mode %s set ok\r\n",name);
	vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&mode) ;
	printk("%s[%d]\n", __func__, __LINE__);
}
Exemplo n.º 2
0
static int framerate_automation_set_mode(vmode_t mode_target)
{
	int auto_mode = 0;

	auto_mode = get_exchange_mode(mode_target);

	printk("vout [%s] mode_target = %d\n", __FUNCTION__, mode_target);
	printk("+++++++++++++++++%s[%d]auto_mode=%d++++++++++++++++\n",__func__,__LINE__,auto_mode);
	switch( auto_mode )
	{
		case 0:
			// need not change vmode
			break;
		case 1:
			// just change pll to adjust clock
		 	update_vmode_status(get_name_from_vmode(mode_target));
			update_current_vinfo(mode_target);
			clock_fine_tune();
			vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&mode_target) ;
			break;
		case 2:
			// change vmode and notify all client
			set_vout_mode_fr_auto(get_name_from_vmode(mode_target));
			break;
		default:
			break;
	}

	return 0;
}
Exemplo n.º 3
0
void set_vout_mode_fr_auto(char* name)
{
	vmode_t    vmode;

	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"tvmode set to %s\n",name);

	vmode=validate_vmode(name);
	if(VMODE_MAX==vmode)
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"no matched vout mode\n");
		return ; 
	}
	if(vmode==get_current_vmode())
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"don't set the same mode as current.\n");
		return ;
	}
	
	update_vmode_status(name);

	set_current_vmode(vmode);
	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"new mode %s set ok\n",name);
	vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&vmode) ;
	printk("%s[%d]\n", __func__, __LINE__);
}
Exemplo n.º 4
0
static  void  set_vout_mode(char * name)
{
	vmode_t    mode;

	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"tvmode set to %s\n",name);
	mode=validate_vmode(name);
	if(VMODE_MAX==mode)
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"no matched vout mode\n");
		return ; 
	}

#ifdef CONFIG_AML_VOUT_FRAMERATE_AUTOMATION
	mode_by_user = mode;
#endif

	if(mode==get_current_vmode())
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"don't set the same mode as current.\n");
		return ;
	}
#ifdef CONFIG_AML_VOUT_FRAMERATE_AUTOMATION
	//if plug hdmi during fps (stream is playing), then adjust mode to fps vmode
	fps_auto_adjust_mode(&mode);
	printk("%s[%d]fps_target_mode=%d\n",__func__,__LINE__,mode);
	update_vmode_status(get_name_from_vmode(mode));
#endif
	set_current_vmode(mode);
#ifdef CONFIG_AML_VOUT_FRAMERATE_AUTOMATION
	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"new mode =%s set ok\n",get_name_from_vmode(mode));
#endif
	vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&mode) ;
	printk("%s[%d]\n", __func__, __LINE__);
}
Exemplo n.º 5
0
// change tv mode and show logo immediatly when hdmi pluged
int set_mode_and_show_logo(int hpd_state) {
    int value;
    logo_object_t* plogo = get_current_logo_obj();

    if((plogo->para.vout_mode & VMODE_MODE_BIT_MASK) > VMODE_4K2K_SMPTE) {
        return 0;    //  MID
    }

    printk("hdmi detect: %s.\n", (hpd_state==1)?"plug":"unplug");
    // osd2 freescale enable,   the logo is shown on osd2, reset freescale.
    value = aml_read_reg32(P_VPP_OSD_SC_CTRL0) & 0xb;
    if(value == 0x9) {
        vmode_t cur_mode;
        if (hpd_state == 0){
            cur_mode = cvbsmode_hdmionly;
        }
        else{
            cur_mode = hdmimode_hdmionly;
        }
        if(tvmode != cur_mode) {
            tvmode = cur_mode;
            osd_enable_hw(0, plogo->para.output_dev_type);
            set_current_vmode(cur_mode);
            vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&cur_mode) ;
            set_osd_freescaler(plogo->para.output_dev_type, plogo, cur_mode); 
        }
    }
    return 1;
}
Exemplo n.º 6
0
static ssize_t store_preblend_enable(struct device *device, struct device_attribute *attr,
			 const char *buf, size_t count)
{
	struct fb_info *fb_info = dev_get_drvdata(device);
	struct myfb_dev *fbdev = (struct myfb_dev *)fb_info->par;
	fbdev->preblend_enable= simple_strtoul(buf, NULL, 0);
	vout_notifier_call_chain(VOUT_EVENT_OSD_PREBLEND_ENABLE,&fbdev->preblend_enable) ;
	return count;
}
//axis type : 0x12  0x100 0x120 0x130
static void  set_vout_window(char *para) 
{
#define   OSD_COUNT   2
	static  disp_rect_t  disp_rect[OSD_COUNT];
	char  count=OSD_COUNT*4;	
	int   *pt=&disp_rect[0].x;
	

	//parse window para .
	memcpy(pt,parse_para(para,&count),sizeof(disp_rect_t)*OSD_COUNT);
	
	if(count >=4 && count <8 )
	{
		disp_rect[1]=disp_rect[0] ;
	}
	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_LOW,"osd0=>x:%d ,y:%d,w:%d,h:%d\r\n osd1=> x:%d,y:%d,w:%d,h:%d \r\n", \
			*pt,*(pt+1),*(pt+2),*(pt+3),*(pt+4),*(pt+5),*(pt+6),*(pt+7));
	vout_notifier_call_chain(VOUT_EVENT_OSD_DISP_AXIS,&disp_rect[0]) ;
}
static  void  set_vout_mode(char * name)
{
	vmode_t    mode;

	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_LOW,"tvmode set to %s\r\n",name);
	mode=validate_vmode(name);
	if(VMODE_MAX==mode)
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"no matched vout mode\n");
		return ; 
	}
	if(mode==get_current_vmode())
	{
		amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"don't set the same mode as current.\r\n");	
		return ;
	}
	set_current_vmode(mode);
	amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_LOW,"new mode %s set ok\r\n",name);
	vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&mode) ;
}
Exemplo n.º 9
0
static int framerate_automation_set_mode(
	enum vmode_e mode_target, enum hint_mode_e hint_mode)
{
	const struct vinfo_s *pvinfo;
	enum vmode_e mode_current = VMODE_INIT_NULL;
	if ((mode_target&VMODE_MODE_BIT_MASK) > VMODE_MAX)
		return 1;
	pvinfo = tv_get_current_info();
	if (!pvinfo) {
		vout_log_err("don't get tv_info, mode is %d\n", mode_target);
		return 1;
	}
	mode_current = pvinfo->mode;
	if (!want_hdmi_mode(mode_current)) {
		vout_log_info("not in valid HDMI mode!\n");
		return 1;
	}

	if (mode_current == mode_target) {
		if (fine_tune_mode == KEEP_HPLL)
			return 0;
	}
	vout_log_info("vout [%s] mode_target = %d\n", __func__, mode_target);
	if (START_HINT == hint_mode) {
		info->vinfo = update_tv_info_duration(mode_target,
			fine_tune_mode);
	} else if (END_HINT == hint_mode) {
		/*recovery tv_info array, e.g. 1080p59hz->1080p50hz
		or 1080p59hz->1080p60hz, recovery 1080p60hz vinfo*/
		update_tv_info_duration(fps_target_mode, fine_tune_mode);
		/*get current vinfo, maybe change is 1080p->1080p50,
		then get info->vinfo  for 1080p50hz*/
		info->vinfo = get_tv_info(mode_target & VMODE_MODE_BIT_MASK);
	}
	update_vmode_status(get_name_from_vmode(mode_target));
	vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE, &mode_target);
	return 0;
}