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

📄 comutl.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    uWord.nVal= NULL;

///    uDWord.cS[0]= COMUTL_BCDtoDecimal ( HMSF_HOUR (dwHMSF) );
    uDWord.cS[0]= ( HMSF_HOUR (__dwCOMUTLTemp) );
    uWord.nVal+= 3600* (WORD) uDWord.cS[0];

///    uDWord.cS[0]= COMUTL_BCDtoDecimal ( HMSF_MINUTE (dwHMSF) );
    uDWord.cS[0]= ( HMSF_MINUTE (__dwCOMUTLTemp) );
    uWord.nVal+= 60* (WORD) uDWord.cS[0];

///    uDWord.cS[0]= COMUTL_BCDtoDecimal ( HMSF_SECOND (dwHMSF) );
    uDWord.cS[0]= ( HMSF_SECOND (__dwCOMUTLTemp) );
    uWord.nVal+= (WORD) uDWord.cS[0];

    return  uWord.nVal;
}
// ** TCH0.39; end...

// ** TCH1.02; begin...
//***************************************************************************
//  Function    :   ::COMUTL_SecondtoHMSF
//  Abstract    :
//  Arguments   :   dwSecond    : Unit: Second
//  Return      :   HMSF Format
//  Side Effect :
//  Notes       :
//***************************************************************************
// ** TCH1.72r; DWORD    COMUTL_SecondtoHMSF ( DWORD dwSecond )
DWORD    COMUTL_SecondtoHMSF ( void )

{
    _bCOMUTLTmp1= (BYTE)(__dwCOMUTLTemp % 60);   // second
    __dwCOMUTLTemp= __dwCOMUTLTemp/ 60;    // min.

    return  MAKE_HMSF (__dwCOMUTLTemp/60, __dwCOMUTLTemp%60, _bCOMUTLTmp1, 0 );
}
// ** TCH1.02; end...

// LLY.043 modify ...
//  *************************************************************************
//  Function    :   COMUTL_RGB2YUV
//  Description :   Convert RGB to YUV format which match OSD spec.
//  Arguments   :   dwRGB, specify RGB value
//                  [31:24]: don't care, [23:16]: R value
//                  [15:8]: G value, [7:0]: B value
//  Return      :   YUV value, it has calculated to match OSD spec.
//  Side Effect :
//  *************************************************************************
//Brian2.81
DWORD COMUTL_RGB2YUV(DWORD dwRGB)
{
    // use uDWord.cS[0] ~ [3] to store YUV value
    // use _wCOMUTLTemp to store final value

    // Step 0: split RGB value
    _bCOMUTLTmp1=(RGB_R(dwRGB));
    _bCOMUTLTmp2=(RGB_G(dwRGB));
    _bCOMUTLTmp3=(RGB_B(dwRGB));

// Micky1.20, 4M flash, reduce common bank lib.
// don't use float point.
// can't use DWORD, must use signed operation
#ifdef  NO_FLOAT_POINT
    // Step 1: Calculate YUV value depending on input RGB
    uDWord.cS[0]=(BYTE)(16+(65738L*(long)_bCOMUTLTmp1
                      +129057L*(long)_bCOMUTLTmp2
                      +25064L*(long)_bCOMUTLTmp3)/256000);  // Y value
    uDWord.cS[1]=(BYTE)(128+(-37945L*(long)_bCOMUTLTmp1
                       -74494L*(long)_bCOMUTLTmp2
                       +112439L*(long)_bCOMUTLTmp3)/256000); // U value
    uDWord.cS[2]=(BYTE)(128+(112439L*(long)_bCOMUTLTmp1
                       -94154L*(long)_bCOMUTLTmp2
                       -18285L*(long)_bCOMUTLTmp3)/256000);  // V value
// debug the value between float and long
// float > long by 1.
/*
    uWord.cS[0]=(BYTE)(16+(65738*(float)_bCOMUTLTmp1
                      +129057*(float)_bCOMUTLTmp2
                      +25064*(float)_bCOMUTLTmp3)/256000);  // Y value
    uWord.cS[1]=(BYTE)(128+(-37945*(float)_bCOMUTLTmp1
                       -74494*(float)_bCOMUTLTmp2
                       +112439*(float)_bCOMUTLTmp3)/256000); // U value
    uWord.cS[1]=(BYTE)(128+(112439*(float)_bCOMUTLTmp1
                       -94154*(float)_bCOMUTLTmp2
                       -18285*(float)_bCOMUTLTmp3)/256000);  // V value
    if (uDWord.cS[2] != uWord.cS[1])
        printf("\nError");
*/
#else
    // Step 1: Calculate YUV value depending on input RGB
    uDWord.cS[0]=(BYTE)(16+(65738*(float)_bCOMUTLTmp1
                      +129057*(float)_bCOMUTLTmp2
                      +25064*(float)_bCOMUTLTmp3)/256000);  // Y value
    uDWord.cS[1]=(BYTE)(128+(-37945*(float)_bCOMUTLTmp1
                       -74494*(float)_bCOMUTLTmp2
                       +112439*(float)_bCOMUTLTmp3)/256000); // U value
    uDWord.cS[2]=(BYTE)(128+(112439*(float)_bCOMUTLTmp1
                       -94154*(float)_bCOMUTLTmp2
                       -18285*(float)_bCOMUTLTmp3)/256000);  // V value
#endif

    // Step 2: merge YUV value into WORD unit and match OSD spec.
	//Brian2.81
	__dwCOMUTLTemp=(MAKE_YUV(uDWord.cS[0], uDWord.cS[1], uDWord.cS[2]));
    return  __dwCOMUTLTemp;

}


//  *************************************************************************
//  Function    :   COMUTL_YUV2RGB
//  Description :   Convert YUV which match OSD spec. to RGB format
//  Arguments   :   wYUV, specify YUV value (match OSD spec.)
//                  [15:10]: Y[7:2], [9:8]: 0x0
//                  [7:4]: U[7:4], [3:0]: V[7:4]
//  Return      :   RGV value, [31:24] is don't care, other is RGB in BYTE unit
//  Side Effect :
//  *************************************************************************
DWORD COMUTL_YUV2RGB(WORD wYUV)
{
    // use uDWord.cS[0] ~ [3] to store RGB value
    // use __dwCOMUTLTemp to store final value

    // Step 0: split YUV value
    _bCOMUTLTmp1=(YUV_Y(wYUV));
    _bCOMUTLTmp2=(YUV_U(wYUV));
    _bCOMUTLTmp3=(YUV_V(wYUV));

// Micky1.20, 4M flash, reduce common bank lib.
// don't use float point
// can't use DWORD, must use signed operation
#ifdef  NO_FLOAT_POINT
    // Step 1: Calculate RGB value depending on input YUV
    uDWord.cS[0]=(BYTE)((298082L*(long)_bCOMUTLTmp1
                    +408583L*(long)_bCOMUTLTmp3)/256000-16);  // R value
    uDWord.cS[1]=(BYTE)((298082L*(long)_bCOMUTLTmp1
                    -100291L*(long)_bCOMUTLTmp2
                    -208120L*(long)_bCOMUTLTmp3)/256000-128);  // G value
    uDWord.cS[2]=(BYTE)((298082L*(long)_bCOMUTLTmp1
                    +516411L*(long)_bCOMUTLTmp2)/256000-128);  // B value
// debug the value between float and long
/*
    uWord.cS[0]=(BYTE)((298082*(float)_bCOMUTLTmp1
                    +0*(float)_bCOMUTLTmp2
                    +408583*(float)_bCOMUTLTmp3)/256000-16);  // R value
    uWord.cS[1]=(BYTE)((298082*(float)_bCOMUTLTmp1
                    -100291*(float)_bCOMUTLTmp2
                    -208120*(float)_bCOMUTLTmp3)/256000-128);  // G value
    uDWord.cS[1]=(BYTE)((298082*(float)_bCOMUTLTmp1
                    +516411*(float)_bCOMUTLTmp2
                    +0*(float)_bCOMUTLTmp3)/256000-128);  // B value
    if (uDWord.cS[2] != uWord.cS[1])
        printf("\nError");
*/
#else
    // Step 1: Calculate RGB value depending on input YUV
    uDWord.cS[0]=(BYTE)((298082*(float)_bCOMUTLTmp1
                    +0*(float)_bCOMUTLTmp2
                    +408583*(float)_bCOMUTLTmp3)/256000-16);  // R value
    uDWord.cS[1]=(BYTE)((298082*(float)_bCOMUTLTmp1
                    -100291*(float)_bCOMUTLTmp2
                    -208120*(float)_bCOMUTLTmp3)/256000-128);  // G value
    uDWord.cS[2]=(BYTE)((298082*(float)_bCOMUTLTmp1
                    +516411*(float)_bCOMUTLTmp2
                    +0*(float)_bCOMUTLTmp3)/256000-128);  // B value
#endif

    // Step 2: merge RGB value into WORD unit and match OSD spec.
    __dwCOMUTLTemp=(MAKE_RGB(uDWord.cS[0], uDWord.cS[1], uDWord.cS[2]));

    return __dwCOMUTLTemp;
}
// LLY.043 end ...

//  *************************************************************************
//  Function    :   COMUTL_rand
//  Description :   generate a random value from
//  Arguments   :   NONE
//  Return      :   Range from 0~32767
//  Side Effect :
//  *************************************************************************
// ** TCH1.03-1; begin... 
long  _lHoldrand;//Micky2.80, review global variables init.=1L; 

WORD COMUTL_rand ()
{
// Micky1.20, 4M flash, reduce common bank lib.
// It will invoke C51 lib (?C?SLSHR), 20 bytes
#ifdef  NO_SHIFT
  return (WORD)(((_lHoldrand = _lHoldrand * 214013L + 2531011L) / 65536L) & 0x7fff);
#else
  return (WORD)(((_lHoldrand = _lHoldrand * 214013L + 2531011L) >> 16) & 0x7fff);
#endif
}
// ** TCH1.03-1; end... 

//  *************************************************************************
//  Function    :   COMUTL_BYTE2HexStr
//  Description :   generate a hexial string from BYTE value
//  Arguments   :   pStr    : String pointer
//                  bVal    : Value (BYTE)
//  Return      :   void
//  Side Effect :
//  ************************************************************************
// ** TCH1.72; begin... 
BYTE    code    MAP_Hex2ASCII[]= {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; 
void COMUTL_BYTE2HexStr ( BYTE * pStr, BYTE bVal )
{
    for ( _bCOMUTLTmp1=0 ; _bCOMUTLTmp1< 2; _bCOMUTLTmp1++ )
    {
        if ( ! _bCOMUTLTmp1 )
            _bCOMUTLTmp2= bVal >> 4;
        else
            _bCOMUTLTmp2= bVal;
        _bCOMUTLTmp2&= 0x0F;
        pStr [_bCOMUTLTmp1]= MAP_Hex2ASCII [_bCOMUTLTmp2];
    }
}
// ** TCH1.72; end...


// LLY.275b-2 create
//  *************************************************************************
//  Function    :   COMUTL_DWORD2HexStr
//  Description :   generate a hexial string from DWORD value
//  Arguments   :   pStr    : String pointer
//                  dwVal    : Value (DWORD unit)
//  Return      :   void
//  Side Effect :
//  ************************************************************************
#ifdef  _DEBUG_INFO
void COMUTL_DWORD2HexStr(BYTE * pStr, DWORD dwVal)
{
    for(_bCOMUTLTmp1=0; _bCOMUTLTmp1<8; _bCOMUTLTmp1++)
    {
        // Abstract the highest 4 bit by "right-shift" operation
        _bCOMUTLTmp2=(BYTE)(dwVal>>((7-_bCOMUTLTmp1)*4));

        // Only abstract the [3:0] bits from the BYTE unit
        _bCOMUTLTmp2 &= 0x0F;

        pStr[_bCOMUTLTmp1]=MAP_Hex2ASCII[_bCOMUTLTmp2];
    }
}
#endif  // #ifdef _DEBUG_INFO


⌨️ 快捷键说明

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