📄 memory.c
字号:
/********************************************************************************/
/* 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 + -