⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proviewdtv_tda9975.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
            videoin |= VIDEO_INPUT_AVI2;
        }

        if((vai_flag[0] & 0x04) == 0x04
        || (vai_flag[0] & 0x02) == 0x02
        || (vai_flag[0] & 0x01) == 0x01)
        {
            videoin |= VIDEO_INPUT_AVI1;
        }

        if((vai_flag[1] & 0x04) == 0x04
        || (vai_flag[1] & 0x02) == 0x02
        || (vai_flag[1] & 0x01) == 0x01)
        {
            videoin |= VIDEO_INPUT_AVI3;
        }
    }

    /*judge the HDMI clock is detected*/
    //if((vai_flag[3] & 0x20) == 0x20)
    {
        if((vai_flag[3] & 0x40) == 0x40)
        {
            videoin |= VIDEO_INPUT_HDMIA;
        }

        if((vai_flag[3] & 0x80) == 0x80)
        {
            videoin |= VIDEO_INPUT_HDMIB;
        }
    }

    return videoin;
}

int TDA9975_VideoInFormatCheck(void)
{
    unsigned char Check_Video_Buffer[5];
    unsigned int STM_VS;
    unsigned int STM_HS;
    unsigned int STM_HW;
    unsigned char i;
    int videoin_format = VIDEO_INPUT_INVALID;
    int ret = -1;


    TDA9975_AVIPage();

    /* Read Sync Timing Measurement registers */
    ret = I2C_Read_TDA9975(V_PER_MSB, &Check_Video_Buffer[0], 1);
    ret |= I2C_Read_TDA9975(V_PER_ISB, &Check_Video_Buffer[1], 1);
    ret |= I2C_Read_TDA9975(H_PER_MSB, &Check_Video_Buffer[2], 1);
    ret |= I2C_Read_TDA9975(HS_WIDTH_MSB, &Check_Video_Buffer[3], 1);
    ret |= I2C_Read_TDA9975(STM_LSB, &Check_Video_Buffer[4], 1);
    if(ret != 0)
    {
        return VIDEO_INPUT_INVALID;
    }

    //STM_VS = (Check_Video_Buffer[0] * 4096) + Check_Video_Buffer[1] * 16 + ((Check_Video_Buffer[4] & 0xF0) / 16);
    STM_VS = (Check_Video_Buffer[0] * 256) + Check_Video_Buffer[1];
    STM_HS = (Check_Video_Buffer[2] * 4) + ((Check_Video_Buffer[4] & 0x0C) / 4);
    STM_HW = (Check_Video_Buffer[3] * 4) + (Check_Video_Buffer[4] & 0x03);

    g_videoinfmtreg[0] = Check_Video_Buffer[0];
    g_videoinfmtreg[1] = Check_Video_Buffer[1];
    g_videoinfmtreg[2] = Check_Video_Buffer[2];
    g_videoinfmtreg[3] = Check_Video_Buffer[3];
    g_videoinfmtreg[4] = Check_Video_Buffer[4];

    for(i = 0 ; i < VIDEO_NB ; i++)
    {
        if(TDA9975_Delta(TDA9975_VIDEOTIMINGS[i][0] , STM_VS) < VIDEO_VS_DELTA)
        {
            if(TDA9975_Delta(TDA9975_VIDEOTIMINGS[i][1] , STM_HS) < VIDEO_HS_DELTA)
            {
                //if(TDA9975_Delta(TDA9975_VIDEOTIMINGS[i][2] , STM_HW) < VIDEO_HW_DELTA)
                {
                    videoin_format = i;
                }
            }
        }
    }

    /*Avoiding compile warning*/
    STM_HW++;

    return videoin_format;
}

int TDA9975_AudioInFormatCheck(void)
 {
    unsigned char Check_Audio_Buffer[6];
    unsigned long ACRP_N;
    unsigned long ACRP_CTS;
    unsigned char i;
    int audioin = AUDIO_INPUT_INVALID;
    int ret = -1;

    TDA9975_HDMIPage() ;

    ret = I2C_Read_TDA9975(ACRP_CTS_LSB, &Check_Audio_Buffer[0], 1);
    ret |= I2C_Read_TDA9975(ACRP_CTS_ISB, &Check_Audio_Buffer[1], 1);
    ret |= I2C_Read_TDA9975(ACRP_CTS_MSB, &Check_Audio_Buffer[2], 1);
    ret |= I2C_Read_TDA9975(ACRP_N_LSB, &Check_Audio_Buffer[3], 1);
    ret |= I2C_Read_TDA9975(ACRP_N_ISB, &Check_Audio_Buffer[4], 1);
    ret |= I2C_Read_TDA9975(ACRP_N_MSB, &Check_Audio_Buffer[5], 1);
    if(ret != 0)
    {
        return AUDIO_INPUT_INVALID;
    }

    ACRP_CTS = (Check_Audio_Buffer[2] * 65536) + (Check_Audio_Buffer[1] * 256) + Check_Audio_Buffer[0] ;
    ACRP_N = (Check_Audio_Buffer[5] * 65536) + (Check_Audio_Buffer[4] * 256) + Check_Audio_Buffer[3] ;

    for(i = 0; i < AUDIO_NB; i++)
    {
        if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][0], ACRP_N) < AUDIO_N_DELTA)
        {
            audioin = i;
        }
        else if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][1], ACRP_N) < AUDIO_N_DELTA)
        {
            audioin = i;
        }
        else
        {
            if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][2], ACRP_N) < AUDIO_N_DELTA)
            {
                if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][3], ACRP_CTS) < AUDIO_CTS_DELTA)
                {
                    audioin = i;
                }
            }
        }
    }

    return audioin;
 }

int TDA9975_HDMIInCheck(void)
{
    unsigned char buffer;

    TDA9975_HDMIPage();

    if(I2C_Read_TDA9975(0x20, &buffer, 1) == 0)
    {
        if((buffer & 0x40) == 0x40)
        {
            return TDA9975_SOURCE_HDMI;
        }
        else
        {
            return TDA9975_SOURCE_DVI;
        }
    }

    return TDA9975_SOURCE_BUTT;
}

unsigned char TDA9975_HDMICheckPixelRepeat(void)
{
    unsigned char pixel_repeat = 0;
    unsigned char buffer[2];

    TDA9975_HDMIPage();

    I2C_Read_TDA9975(0x80, &buffer[0], 1);
    I2C_Read_TDA9975(0x88, &buffer[1], 1);
    if(buffer[0] == 0x82)                       /* Check valid AVI infoframe type */
    {
        pixel_repeat = buffer[1];
    }
    else
    {
        pixel_repeat = 0;
    }

    return pixel_repeat;
}

unsigned char TDA9975_HDMICheckAVIVIC(void)
{
    unsigned char avi_vic = 0;
    unsigned char buffer[2];

    TDA9975_HDMIPage();

    I2C_Read_TDA9975(0x80, &buffer[0], 1);
    I2C_Read_TDA9975(0x87, &buffer[1], 1);
    if(buffer[0] == 0x82)                       /* Check valid AVI infoframe type */
    {
        avi_vic = buffer[1];
    }
    else
    {
        avi_vic = 0;
    }

    return avi_vic;
}

unsigned char TDA9975_HDMICheckRGBorYCbCr(void)
{
    unsigned char pixel_encoding = 0;
    unsigned char buffer[2];

    TDA9975_HDMIPage();

    I2C_Read_TDA9975(0x80, &buffer[0], 1);
    I2C_Read_TDA9975(0x84, &buffer[1], 1);
    if(buffer[0] == 0x82)                       /* Check valid AVI infoframe type */
    {
        pixel_encoding = ((buffer[1]  & 0x60) >> 5);
    }
    else
    {
        pixel_encoding = 0 ;
    }

    if(pixel_encoding)
    {
        return TDA9975_HDMI_IN_YCbCr;           /* YCbCr pixel encoding */
    }
    else
    {
        return TDA9975_HDMI_IN_RGB;             /* RGB pixel encoding */
    }
}

int TDA9975_HDMICheck444Or422(void)
{
    unsigned char pixel_encoding = 0;
    unsigned char buffer[2];

    TDA9975_HDMIPage();

    I2C_Read_TDA9975(0x80, &buffer[0], 1);
    I2C_Read_TDA9975(0x84, &buffer[1], 1);
    if(buffer[0] == 0x82)                       /* Check valid AVI infoframe type */
    {
        pixel_encoding = ((buffer[1]  & 0x60) >> 5);
    }
    else
    {
        pixel_encoding = 0 ;
    }

    if(pixel_encoding)
    {
        if(pixel_encoding == 0x01)
        {
            return 1;                           /* YCbCr4:2:2 pixel encoding */
        }
        else if(pixel_encoding == 0x02)
        {
            return 0;                           /* YCbCr4:4:4 pixel encoding */
        }
        else
        {
            return 1;
        }
    }
    else
    {
        return 0;                               /* RGB pixel encoding */
    }
}

void TDA9975_AVIInputSelect(int aviin)
{
    unsigned char buffer[2];

    buffer[0]       = 0x01;
    if(aviin == VIDEO_INPUT_AVI1)
    {
        buffer[1]   = 0x00;
    }
    else if(aviin == VIDEO_INPUT_AVI2)
    {
        buffer[1]   = 0x01;
    }
    else if(aviin == VIDEO_INPUT_AVI3)
    {
        buffer[1]   = 0x02;
    }
    else
    {
        return;
    }

    TDA9975_AVIPage();

    I2C_Write_TDA9975(buffer, 2);
}

void TDA9975_HDMIInputSelect(int hdmiin)
{
    unsigned char buffer[2];

    TDA9975_AVIPage();

    //buffer[0] = 0x10; buffer[0] = 0xC0;
    //I2C_Write_TDA9975(buffer, 2);

    buffer[0]       = 0x01;
    if(hdmiin == VIDEO_INPUT_HDMIA)
    {
        buffer[1]   = 0x2F;
    }
    else if(hdmiin == VIDEO_INPUT_HDMIB)
    {
        buffer[1]   = 0x27;
    }
    else
    {
        return;
    }

    I2C_Write_TDA9975(buffer, 2);
}

void TDA9975_ResetHDMI(void)
{
    unsigned char buffer[2];

    TDA9975_HDMIPage();

    buffer[0] = 0xF7;
    buffer[1] = 0x01;

    I2C_Write_TDA9975(buffer, 2);

    buffer[1] = 0x00;

    I2C_Write_TDA9975(buffer, 2);
}


void TDA9975_PixelClockGenerator(int videoin,
                                 E_TDA9975_OUT_FORAMT outformat)
{
    unsigned char buffer[2];

    if(videoin != VIDEO_INPUT_AVI1
    && videoin != VIDEO_INPUT_AVI2
    && videoin != VIDEO_INPUT_AVI3
    && videoin != VIDEO_INPUT_HDMIA
    && videoin != VIDEO_INPUT_HDMIB)
    {
        return;
    }

    if(outformat >= TDA9975_OUT_FORAMT_BUTT)
    {
        return;
    }

    buffer[0] = 0x17;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -