Пример #1
0
int hdmitx_set_display(hdmitx_dev_t* hdmitx_device, HDMI_Video_Codes_t VideoCode)
{
    Hdmi_tx_video_para_t *param;
    int i,ret=-1;
    unsigned char AVI_DB[32];
    unsigned char AVI_HB[32];
    AVI_HB[0] = TYPE_AVI_INFOFRAMES ; 
    AVI_HB[1] = AVI_INFOFRAMES_VERSION ; 
    AVI_HB[2] = AVI_INFOFRAMES_LENGTH ; 
    for(i=0;i<32;i++){
        AVI_DB[i]=0;
    }

    param = hdmi_get_video_param(VideoCode);
    if(param){
        param->color = param->color_prefer;
        if(param->color == COLOR_SPACE_YUV444 &&
            (hdmitx_device->RXCap.native_Mode&0x20) == 0){
            param->color = COLOR_SPACE_YUV422;        
        }
        if(param->color == COLOR_SPACE_YUV422 &&
            (hdmitx_device->RXCap.native_Mode&0x10) == 0){
            param->color = COLOR_SPACE_RGB444;        
        }
        if(hdmitx_device->HWOp.SetDispMode(param)>=0){
    
            hdmi_tx_construct_avi_packet(param, AVI_DB);
    
            hdmitx_device->HWOp.SetPacket(HDMI_PACKET_AVI, AVI_DB, AVI_HB);
            ret = 0;
        }
    }
    else{
        hdmitx_device->HWOp.SetDispMode(NULL); //disable HDMI    
    }
    return ret;

}
Пример #2
0
int hdmitx_set_display(hdmitx_dev_t* hdmitx_device, HDMI_Video_Codes_t VideoCode)
{
    Hdmi_tx_video_para_t *param;
    int i,ret=-1;
    unsigned char AVI_DB[32];
    unsigned char AVI_HB[32];
    AVI_HB[0] = TYPE_AVI_INFOFRAMES ;
    AVI_HB[1] = AVI_INFOFRAMES_VERSION ;
    AVI_HB[2] = AVI_INFOFRAMES_LENGTH ;
    for(i=0;i<32;i++){
        AVI_DB[i]=0;
    }

    param = hdmi_get_video_param(VideoCode);
    hdmitx_device->cur_video_param = param;
    if(param){
        param->color = param->color_prefer;
        if(hdmi_output_rgb){
            param->color = COLOR_SPACE_RGB444;
        }
        else{
//HDMI CT 7-24 Pixel Encoding - YCbCr to YCbCr Sink
            switch(hdmitx_device->RXCap.native_Mode & 0x30)
            {
                case 0x20:    //bit5==1, then support YCBCR444 + RGB
                case 0x30:
                    param->color = COLOR_SPACE_YUV444;
                    break;
                case 0x10:    //bit4==1, then support YCBCR422 + RGB
                    param->color = COLOR_SPACE_YUV422;
                    break;
                default:
                    param->color = COLOR_SPACE_RGB444;
            }
        }
        if(hdmitx_device->HWOp.SetDispMode(hdmitx_device, param)>=0){
//HDMI CT 7-33 DVI Sink, no HDMI VSDB nor any other VSDB, No GB or DI expected
//TMDS_MODE[hdmi_config]
//0: DVI Mode       1: HDMI Mode
            //if(hdmitx_device->hdmi_info.output_state==CABLE_PLUGIN_DVI_OUT)
            if(is_dvi_device(&hdmitx_device->RXCap)) {
                hdmi_print(1,"Sink is DVI device\n");
                hdmitx_device->HWOp.CntlConfig(hdmitx_device, CONF_HDMI_DVI_MODE, DVI_MODE);        //todo ColorFormat
            }
            else {
                hdmi_print(1,"Sink is HDMI device\n");
                hdmitx_device->HWOp.CntlConfig(hdmitx_device, CONF_HDMI_DVI_MODE, HDMI_MODE);
            }
//check system status by reading EDID_STATUS
            switch(hdmitx_device->HWOp.CntlConfig(hdmitx_device, CONF_SYSTEM_ST, 0))
            {
                case 0:
                    hdmi_print(1,"No sink attached\n");
                    break;
                case 1:
                    hdmi_print(1,"Source reading EDID\n");
                    break;
                case 2:
                    hdmi_print(1,"Source in DVI Mode\n");
                    break;
                case 3:
                    hdmi_print(1,"Source in HDMI Mode\n");
                    break;
                default:
                    hdmi_print(1,"EDID Status error\n");
            }

            hdmi_tx_construct_avi_packet(param, (char*)AVI_DB);

            if((VideoCode == HDMI_4k2k_30) || (VideoCode == HDMI_4k2k_25) || (VideoCode == HDMI_4k2k_24) || (VideoCode == HDMI_4k2k_smpte_24)) {
                hdmi_set_vend_spec_infofram(hdmitx_device, VideoCode);
            }
            else {
                hdmi_set_vend_spec_infofram(hdmitx_device, 0);
            }

            hdmitx_device->HWOp.SetPacket(HDMI_PACKET_AVI, AVI_DB, AVI_HB);
            ret = 0;
        }
    }
    else{
        if(hdmitx_device->HWOp.SetDispMode) {
            hdmitx_device->HWOp.SetDispMode(hdmitx_device, NULL); //disable HDMI
        }
    }
    hdmitx_set_spd_info(hdmitx_device);
    return ret;
}
Пример #3
0
int hdmitx_set_display(struct hdmitx_dev *hdmitx_device,
	enum hdmi_vic VideoCode)
{
	struct hdmitx_vidpara *param;
	enum hdmi_vic vic;
	int i, ret = -1;
	unsigned char AVI_DB[32];
	unsigned char AVI_HB[32];
	AVI_HB[0] = TYPE_AVI_INFOFRAMES;
	AVI_HB[1] = AVI_INFOFRAMES_VERSION;
	AVI_HB[2] = AVI_INFOFRAMES_LENGTH;
	for (i = 0; i < 32; i++)
		AVI_DB[i] = 0;

	vic = hdmitx_device->HWOp.GetState(hdmitx_device,
		STAT_VIDEO_VIC, 0);
	hdmi_print(IMP, SYS "already init VIC = %d  Now VIC = %d\n",
		vic, VideoCode);
	if ((vic != HDMI_Unkown) && (vic == VideoCode)) {
		hdmitx_device->cur_VIC = vic;
		return 1;
	}

	param = hdmi_get_video_param(VideoCode);
	hdmitx_device->cur_video_param = param;
	if (param) {
		param->color = param->color_prefer;
		if (hdmi_output_rgb) {
			param->color = COLOR_SPACE_RGB444;
		} else {
			/* HDMI CT 7-24 Pixel Encoding
			 * YCbCr to YCbCr Sink
			 */
			switch (hdmitx_device->RXCap.native_Mode & 0x30) {
			case 0x20:/*bit5==1, then support YCBCR444 + RGB*/
			case 0x30:
				param->color = COLOR_SPACE_YUV444;
				break;
			case 0x10:/*bit4==1, then support YCBCR422 + RGB*/
				param->color = COLOR_SPACE_YUV422;
				break;
			default:
				param->color = COLOR_SPACE_RGB444;
			}
		}
		if (hdmitx_device->HWOp.SetDispMode(hdmitx_device,
			param) >= 0) {
			/* HDMI CT 7-33 DVI Sink, no HDMI VSDB nor any
			 * other VSDB, No GB or DI expected
			 * TMDS_MODE[hdmi_config]
			 * 0: DVI Mode	   1: HDMI Mode
			 */
			if (is_dvi_device(&hdmitx_device->RXCap)) {
				hdmi_print(1, "Sink is DVI device\n");
				hdmitx_device->HWOp.CntlConfig(hdmitx_device,
					CONF_HDMI_DVI_MODE, DVI_MODE);
			} else {
				hdmi_print(1, "Sink is HDMI device\n");
				hdmitx_device->HWOp.CntlConfig(hdmitx_device,
					CONF_HDMI_DVI_MODE, HDMI_MODE);
			}
			/*check system status by reading EDID_STATUS*/
			switch (hdmitx_device->HWOp.CntlConfig(
				hdmitx_device, CONF_SYSTEM_ST, 0)) {
			case 0:
				hdmi_print(1, "No sink attached\n");
				break;
			case 1:
				hdmi_print(1, "Source reading EDID\n");
				break;
			case 2:
				hdmi_print(1, "Source in DVI Mode\n");
				break;
			case 3:
				hdmi_print(1, "Source in HDMI Mode\n");
				break;
			default:
				hdmi_print(1, "EDID Status error\n");
			}

			hdmi_tx_construct_avi_packet(param, (char *)AVI_DB);

			if ((VideoCode == HDMI_4k2k_30) ||
				(VideoCode == HDMI_4k2k_25) ||
				(VideoCode == HDMI_4k2k_24) ||
				(VideoCode == HDMI_4k2k_smpte_24))
				hdmi_set_vend_spec_infofram(hdmitx_device,
					VideoCode);
			else
				hdmi_set_vend_spec_infofram(hdmitx_device, 0);

			hdmitx_device->HWOp.SetPacket(HDMI_PACKET_AVI,
				AVI_DB, AVI_HB);
			ret = 0;
		}
	} else {
		if (hdmitx_device->HWOp.SetDispMode)
			/*Disable HDMITX*/
			hdmitx_device->HWOp.SetDispMode(hdmitx_device, NULL);
	}
	hdmitx_set_spd_info(hdmitx_device);
	hdmitx_special_handler_video(hdmitx_device);
	return ret;
}