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

📄 memory.c

📁 realtek LCD monitor, TV开发源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/********************************************************************************/
/*   The  Software  is  proprietary,  confidential,  and  valuable to Realtek   */
/*   Semiconductor  Corporation  ("Realtek").  All  rights, including but not   */
/*   limited  to  copyrights,  patents,  trademarks, trade secrets, mask work   */
/*   rights, and other similar rights and interests, are reserved to Realtek.   */
/*   Without  prior  written  consent  from  Realtek,  copying, reproduction,   */
/*   modification,  distribution,  or  otherwise  is strictly prohibited. The   */
/*   Software  shall  be  kept  strictly  in  confidence,  and  shall  not be   */
/*   disclosed to or otherwise accessed by any third party.                     */
/*   c<2003> - <2008>                                                           */
/*   The Software is provided "AS IS" without any warranty of any kind,         */
/*   express, implied, statutory or otherwise.                                  */
/********************************************************************************/

//----------------------------------------------------------------------------------------------------
// ID Code      : Memory.c No.0000
// Update Note  :
//
//----------------------------------------------------------------------------------------------------

#define __MEMORY__

#include "Common\Header\Include.h"

#if(_SCALER_SERIES_TYPE == _RTD2472D_SERIES)
//--------------------------------------------------
// Description  : To Confirm SDRAM Size/Speed
// Input Value  : bControl --> OD/FRC Confrim Select
// Output Value : _TRUE/_FALSE for FRC, (Resolution * PixelChannel) for OD
//--------------------------------------------------
#if((_OD_SUPPORT == _ON) || (_FRC_SUPPORT == _ON))
//Anderson 080812 for OD & FRC ON Start
BYTE CMemorySDRAMConfirm(bit bControl)
{

#if(_FRC_SUPPORT == _ON)
    WORD usHWidth = 0; // Horizontal Width
    WORD usVHeight = 0; // Vertical Height
#endif

#if(_OD_SUPPORT == _ON)
    BYTE Resolution = 0; // OD Pixel Resolution
    BYTE ResolutionAfterSize = 0; // OD Pixel Resoultion After SDRAM Size Has Been Confirmed
    BYTE PixelChannel = 0; // OD Pixel Channel
    BYTE PixelChannelAfterSize = 0; // OD Pixel Channel After SDRAM Size Has Been Confirmed
    WORD usFrequency = 0; // OD Frequency Requirement
    DWORD ulODStartAddress = 0; // OD Memory Start Address
#endif

#if(_DEBUG_MESSAGE_SUPPORT == _ON)

    if(bControl == _OD_CONFIRM)
    {
        CMiscDebugMessage("OD", _OD_CONFIRM);
    }
    else
    {
        CMiscDebugMessage("FRC", _FRC_CONFIRM);
    }

#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

    if(bControl == _OD_CONFIRM)
    {
        CScalerPageSelect(_PAGE5);

        if(CScalerGetBit(_P5_SDRF_MN_DISP_CTRL_CF,(_BIT2 | _BIT1)) == 0x00)
        {
            SET_FRCENABLE();
        }
        else
        {
            CLR_FRCENABLE();
        }

    }

//--------------------FRC Memory Confirm-------------------//
#if(_FRC_SUPPORT == _ON)

    if(stModeInfo.IHWidth < stDisplayInfo.DHWidth)
    {
        usHWidth = stModeInfo.IHWidth;
    }
    else
    {
        usHWidth = stDisplayInfo.DHWidth;
    }

    if(stModeInfo.IVHeight < stDisplayInfo.DVHeight)
    {
        usVHeight = stModeInfo.IVHeight;
    }
    else
    {
        usVHeight = stDisplayInfo.DVHeight;
    }

    CLR_FRCDOUBLEFRAME();//Anderson V008_20080730

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
    CMiscDebugMessage("HWidth", usHWidth);
    CMiscDebugMessage("VHeight", usVHeight);
    CMiscDebugMessage("IVFreq", (DWORD)stModeInfo.IVFreq);
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

#if(_FRC_YUV_MODE_SUPPORT == _ON)

    if(GET_FRC16BITSIN())
    {
        ((DWORD *)pData)[0] = (DWORD)usHWidth * usVHeight * 2 * 8 * 2 / 1048576;

        if(_MEMORY_SIZE < ((DWORD *)pData)[0])
        {
            CLR_FRC422STATUS();
            CLR_FRC16BITSIN();

            if(!GET_FRCENABLE() && bControl == _FRC_CONFIRM)
            {
                return _FALSE;
            }

        }

        ((DWORD *)pData)[1] = (DWORD)(usHWidth) * (DWORD)(usVHeight) * ((DWORD)stModeInfo.IVFreq + _PANEL_MAX_FRAME_RATE) / 10 / 85 * 100 / _MEMORY_BUS_WIDTH * 16;

        if(((DWORD *)pData)[1] > (DWORD)_MEMORY_SPEED * 1000000)
        {
            CLR_FRC422STATUS();
            CLR_FRC16BITSIN();

            if(!GET_FRCENABLE() && bControl == _FRC_CONFIRM)
            {
                return _FALSE;
            }

        }

        SET_FRC422STATUS();
        CScalerSetByte(_I_YUV444to422_26, 0x00); //Disable 444->422
    }
    else //444 In
    {
        ((DWORD *)pData)[0] = (DWORD)usHWidth * usVHeight * 3 * 8 * 2 / 1048576;

        if(_MEMORY_SIZE < ((DWORD *)pData)[0])
        {
            ((DWORD *)pData)[0] = (DWORD)usHWidth * usVHeight * 2 * 8 * 2 / 1048576;

            if(_MEMORY_SIZE < ((DWORD *)pData)[0])
            {
                CLR_FRC422STATUS();

                if(!GET_FRCENABLE() && bControl == _FRC_CONFIRM)
                {
                    return _FALSE;
                }

            }

            SET_FRC422STATUS();
        }

        ((DWORD *)pData)[1] = (DWORD)(usHWidth) * (DWORD)(usVHeight) * ((DWORD)stModeInfo.IVFreq * 2) / 10 / 85 * 100 / _MEMORY_BUS_WIDTH * 24;

        if(((DWORD *)pData)[1] > (DWORD)_MEMORY_SPEED * 1000000)
        {
            ((DWORD *)pData)[1] = (DWORD)(usHWidth) * (DWORD)(usVHeight) * ((DWORD)stModeInfo.IVFreq * 2) / 10 / 85 * 100 / _MEMORY_BUS_WIDTH * 16;

            if(((DWORD *)pData)[1] > (DWORD)_MEMORY_SPEED * 1000000)
            {
                CLR_FRC422STATUS();

                if(!GET_FRCENABLE() && bControl == _FRC_CONFIRM)
                {
                    return _FALSE;
                }

            }

            SET_FRC422STATUS();
        }

        if(GET_FRC422STATUS())
        {

            if(GET_FRCRGBIN())
            {
                CScalerCodeW(tFRC_TABLE_RGB2YUV); //I Domain RGB->YUV
                CScalerCodeW(tFRC_TABLE_YUV2RGB); //D Domain YUV->RGB
            }

            //CScalerSetByte(_I_YUV444to422_26, 0xCB); //Enable VSD Output as 444->422 Input, 444->422 Oute as FIFO Input, Mode 1
            CScalerSetByte(_I_YUV444to422_26, 0x0B); //Enable VSD Output as 444->422 Input, 444->422 Oute as FIFO Input, Mode 1
            SET_FRC16BITSIN();
        }
        else
        {
            CScalerSetByte(_I_YUV444to422_26, 0x00); //Disable 444->422
            CLR_FRC16BITSIN();
        }
    } // End of if(GET_FRC16BITSIN())

#else // #if(_FRC_YUV_MODE_SUPPORT != _ON)
//Anderson V008_20080730 for Frame Rate Conversion Start
    ((DWORD *)pData)[0] = (DWORD)usHWidth * usVHeight * 3 * 8 * 2 / 1048576; // Double Frame

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
    CMiscDebugMessage("Double Frame Size", ((DWORD *)pData)[0]);
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

    if(_MEMORY_SIZE < ((DWORD *)pData)[0])
    {
        CLR_FRCDOUBLEFRAME();
        ((DWORD *)pData)[0] = (DWORD)usHWidth * usVHeight * 3 * 8 * 1 / 1048576; //Single Frame

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
         CMiscDebugMessage("Single Frame Size", ((DWORD *)pData)[0]);
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

        if(_MEMORY_SIZE < ((DWORD *)pData)[0])
        {

            if(!GET_FRCENABLE() && bControl == _FRC_CONFIRM)
            {
                return _FALSE;
            }

        }
        else //1:1 mode ok
        {
            ((DWORD *)pData)[1] = (DWORD)(usHWidth) * (DWORD)(usVHeight) * ((DWORD)stModeInfo.IVFreq * 2) / 10 / 81 * 100 / _MEMORY_BUS_WIDTH * 24;

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
            CMiscDebugMessage("Single Frame Speed", ((DWORD *)pData)[1]);
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

        }
    }
    else //Frame Rate Conversion ok
    {
        SET_FRCDOUBLEFRAME();
        ((DWORD *)pData)[1] = (DWORD)(usHWidth) * (DWORD)(usVHeight) * ((DWORD)stModeInfo.IVFreq + _PANEL_MAX_FRAME_RATE) / 10 / 81 * 100 / _MEMORY_BUS_WIDTH * 24;

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
        CMiscDebugMessage("Double Frame Speed", ((DWORD *)pData)[1]);
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

    } // End of if(_MEMORY_SIZE < ((DWORD *)pData)[0])

//Anderson V008_20080730 for Frame Rate Conversion End
    if(((DWORD *)pData)[1] > (DWORD)_MEMORY_SPEED * 1000000)
    {

        if(bControl == _FRC_CONFIRM)
        {
            return _FALSE;
        }

    }

#endif // End of #if(_FRC_YUV_MODE_SUPPORT == _ON)

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
    CMiscDebugMessage("FRC OK", 0x00);
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

    if(bControl == _FRC_CONFIRM)
    {
        return _TRUE;
    }
#endif // End of #if(_FRC_SUPPORT == _ON)

//---------------------OD Memory Confirm-------------------//
#if(_OD_SUPPORT == _ON)
    for(PixelChannel=3; PixelChannel>1; PixelChannel--)
    {
        for(Resolution=6; Resolution>3; Resolution--)
        {
            if(!GET_FRCENABLE())
            {
                ((DWORD *)pData)[2]= ((DWORD)_PANEL_DH_WIDTH * _PANEL_DV_HEIGHT) * PixelChannel * Resolution / 1048576;

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
                CMiscDebugMessage("OD Size(OD ON)", ((DWORD *)pData)[2]);
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

                if((((DWORD *)pData)[2] < _MEMORY_SIZE) && (Resolution > 3))
                {
                    break;
                }
            }
#if(_FRC_SUPPORT == _ON)
            else //FRC ON
            {
//Anderson 20080710 Start
#if(_OD_HW_MODE_SUPPORT == _ON)
                ((DWORD *)pData)[2]= ((DWORD)usHWidth * usVHeight) * PixelChannel * Resolution / 1048576;
#else
                ((DWORD *)pData)[2]= ((DWORD)_PANEL_DH_WIDTH * _PANEL_DV_HEIGHT) * PixelChannel * Resolution / 1048576;
#endif // End of #if(_OD_HW_MODE_SUPPORT == _ON)
//Anderson 20080710 End

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
                CMiscDebugMessage("OD Size(FRC ON)", ((DWORD *)pData)[2]);
                CMiscDebugMessage("Remain Size", (_MEMORY_SIZE - ((DWORD *)pData)[0]));
#endif // End of #if(_DEBUG_MESSAGE_SUPPORT == _ON)

                if((((DWORD *)pData)[2] < (_MEMORY_SIZE - ((DWORD *)pData)[0])) && (Resolution > 3))
                {
                    break;
                }
            }

#endif // End of #if(_FRC_SUPPORT == _ON)
        } // End of for(Resolution=6; Resolution>3; Resolution--)

        if(!GET_FRCENABLE())
        {

            if((((DWORD *)pData)[2] < _MEMORY_SIZE) && (Resolution > 3))
            {
                break;
            }

        }
        else
        {

            if((((DWORD *)pData)[2] < (_MEMORY_SIZE - ((DWORD *)pData)[0]))  && (Resolution > 3))
            {
                break;
            }

        }
    } // End of for(PixelChannel=3; PixelChannel>1; PixelChannel--)

    if((Resolution < 4) && (PixelChannel <= 2))
    {
        return _FALSE;
    }

    ResolutionAfterSize = Resolution; //Record for OD Use
    PixelChannelAfterSize = PixelChannel; //Record for OD Use

#if(_DEBUG_MESSAGE_SUPPORT == _ON)
    CMiscDebugMessage("ResolutionAfterSize", ResolutionAfterSize * PixelChannel);
#endif

//Anderson V008_20080730 for OD Highlight Window Start

#if(_OD_HW_MODE_SUPPORT == _ON)
    // Calculate and set display clock frequency
    //((DWORD *)pData)[3] = (DWORD)(stDisplayInfo.DHTotal) * (DWORD)stModeInfo.IHFreq * (DWORD)(stDisplayInfo.DVHeight) / stModeInfo.IVHeight / 10;
    ((DWORD *)pData)[3] = (DWORD)(stDisplayInfo.DHTotal) * (DWORD)stModeInfo.IHFreq * (DWORD)(_PANEL_DV_HEIGHT) / stModeInfo.IVHeight / 10; //Anderson V008_20080730 to Solve the Efficiency Issue
#else
    ((DWORD *)pData)[3] = (DWORD)(stDisplayInfo.DHTotal) * (DWORD)stModeInfo.IHFreq * (DWORD)(_PANEL_DV_HEIGHT) / stModeInfo.IVHeight / 10;
#endif // End of #if(_OD_HW_MODE_SUPPORT == _ON)

//Anderson V008_20080730 for OD Highlight Window End

⌨️ 快捷键说明

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