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

📄 string_generate.c

📁 ZORAN 962/966 SOURCE CODE,DVD chip
💻 C
📖 第 1 页 / 共 4 页
字号:
}

#pragma argsused
UINT8 STR_GenerateLanguage(INT16 sLang, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	UINT8 cIndex = 0;

	ASSERT(NULL != szBuffStr);
	
	if (eClipType_AVI == CoreAPI_GetCurrentClipType())
	{
		while(cIndex < MAX_LANG_CODE)
		{
			if(sLang == aLanguageCodeArray[cIndex].mwCode)
			{
				UINT8 cLangIndex = 0;
				while(aLanguageCodeArray[cIndex].mszLang[cLangIndex])
					szBuffStr[cBuffOffset++] = (UINT16)aLanguageCodeArray[cIndex].mszLang[cLangIndex++];
				break;
			}
			cIndex++;
		}
	}
	else
	{
		while(cIndex < MAX_LANG_CODE)
		{			
			if(sLang == aLanguageCodeArray[cIndex].mwCode)
			{
				szBuffStr[cBuffOffset++] = (UINT16)aLanguageCodeArray[cIndex].mszLang[0];
				szBuffStr[cBuffOffset++] = (UINT16)aLanguageCodeArray[cIndex].mszLang[1];
				szBuffStr[cBuffOffset++] = (UINT16)aLanguageCodeArray[cIndex].mszLang[2];
				break;
			}
			cIndex++;
		}
	}	
	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}


UINT8 STR_GenerateDivXVersion(UINT16 sDivXVer, UINT16 sDivXWidth, UINT16 sDivXHeight, UINT16 sBitRate, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	switch(sDivXVer)
	{
		case DIVX_3_11:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_DIVX3P11, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case DIVX_4_12:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_DIVX4P12, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case DIVX_5_0:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_DIVX5PX, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case XVID:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_XVID, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case _3IVX:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_3IVX, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case MP43:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_MP43, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case MP4S:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_MP4S, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case RMP4:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_RMP4, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case MP4V:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_MP4V, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case DIVX_UNKNOWN:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_UNKNOWN, szBuffStr, cBuffOffset, cBuffSize);
			break;
	}

	szBuffStr[cBuffOffset++]= L',';
	szBuffStr[cBuffOffset++]= L' ';
	cBuffOffset = STR_GenerateNumericValue(sDivXWidth, szBuffStr, cBuffOffset, cBuffSize);
	szBuffStr[cBuffOffset++]= L'x';
	cBuffOffset = STR_GenerateNumericValue(sDivXHeight, szBuffStr, cBuffOffset, cBuffSize);
	szBuffStr[cBuffOffset++]= L',';
	szBuffStr[cBuffOffset++]= L' ';
	cBuffOffset = STR_GenerateNumericValue(sBitRate, szBuffStr, cBuffOffset, cBuffSize);
	cBuffOffset = STR_GenerateOSDMESSAGEString(S_FPS, szBuffStr, cBuffOffset, cBuffSize);

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

#if 0 // not used for now
UINT8 STR_GenerateAudioCodecInfo(INT16 sAudio, INT16 sTotalAudio, INT16 sCodec, INT16 sSampleRate, INT16 sChannels, UINT8* pcLang, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	cBuffOffset = STR_GenerateNumericAndTotalNumeric(sAudio, sTotalAudio, szBuffStr, cBuffOffset, cBuffSize);
	szBuffStr[cBuffOffset++]= L',';
	szBuffStr[cBuffOffset++]= L' ';

	switch(sCodec)
	{
		case MP2:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_MP2, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case MP3:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_MP3, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case PCM:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_PCM, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case ADPCM:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_ADPCM, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case WMA:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_WMA, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AC3:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_AC3, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AAC:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_AAC, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AUDIO_UNKNOWN:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_UNKNOWN, szBuffStr, cBuffOffset, cBuffSize);
			break;
	}
	szBuffStr[cBuffOffset++]= L',';
	szBuffStr[cBuffOffset++]= L' ';
	cBuffOffset = STR_GenerateNumericValue(sSampleRate, szBuffStr, cBuffOffset, cBuffSize);
	cBuffOffset = STR_GenerateOSDMESSAGEString(S_KHZ, szBuffStr, cBuffOffset, cBuffSize);
	szBuffStr[cBuffOffset++]= L',';
	szBuffStr[cBuffOffset++]= L' ';
	cBuffOffset = STR_GenerateNumericValue(sChannels, szBuffStr, cBuffOffset, cBuffSize);
	szBuffStr[cBuffOffset++]= L'C';
	szBuffStr[cBuffOffset++]= L'h';
	cBuffOffset = STR_GenerateStrLanguage(pcLang, szBuffStr, cBuffOffset, cBuffSize);

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
#endif // if 0

UINT8 STR_GenerateStrLanguage(UINT8* pcLang, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	if (pcLang[0] != '\0' && pcLang[1] != '\0')
	{
		if (pcLang[2] != '\0')
		{
			szBuffStr[cBuffOffset++]= pcLang[0];
			szBuffStr[cBuffOffset++]= pcLang[1];
			szBuffStr[cBuffOffset++]= pcLang[2];
		}
		else
		{
			STR_GenerateLanguage(MLC(pcLang[0],pcLang[1]), szBuffStr, cBuffOffset, cBuffSize);
		}
	}
	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

UINT8 STR_GenerateItemColonNumericAndTotalNumeric(OSD_MESSAGES sItem, UINT16 sNum, UINT16 sTotal, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	cBuffOffset = STR_GenerateOSDMESSAGEString(sItem, szBuffStr, cBuffOffset, cBuffSize);

	szBuffStr[cBuffOffset++] = ':';
	szBuffStr[cBuffOffset++] = ' ';

	cBuffOffset = STR_GenerateNumericAndTotalNumeric(sNum, sTotal, szBuffStr, cBuffOffset, cBuffSize);

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}


// OLD FUNCTIONS UPDATED FOR CONSISTENCY
#pragma argsused
UINT8 STR_ValueToStrLength(UINT32 lNumToConvert, UINT16 uiNumDigits, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	UINT32 uMod = 1;
	UINT32 uValue = lNumToConvert;

	ASSERT(NULL != szBuffStr);

	while ( uiNumDigits-- > 1 )
	{
 		uMod *= 10;
	}

	uValue = lNumToConvert % (uMod * 10);

	while ( uMod > 1 )
	{
		szBuffStr[cBuffOffset++] = NUM_TO_CHAR(uValue / uMod);
		uValue %= uMod;
		uMod /= 10;
	}

	szBuffStr[cBuffOffset++] = NUM_TO_CHAR(uValue);

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

UINT8 STR_TextToTimeStr(wchar_t* text, UINT8 iLength, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	const UINT8 iFirstChar[] = {7, 6, 4, 3, 1, 0};
	UINT8 iFirstCharIndex;
	UINT8 iCharIndex;

	ASSERT(NULL != szBuffStr);

	// Fill the time string with a NULL time indicator:
	cBuffOffset = STR_GenerateOSDMESSAGEString(S_EMPTY_TIME, szBuffStr, cBuffOffset, cBuffSize);

	if(0 == iLength)
	{
		return cBuffOffset;
	}

	iFirstCharIndex = iLength - 1; // e.g., 3

	for(iCharIndex = 0; iCharIndex < iLength; iCharIndex++)
	{
		szBuffStr[iFirstChar[iFirstCharIndex--]] = text[iCharIndex];
	}

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

UINT8 STR_GenerateTime(UINT32 lNumToConvert, UINT16 uiNumDigits, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	UINT16 szTemp[10];

	if(INVALID_TIME == lNumToConvert)
		cBuffOffset = STR_GenerateOSDMESSAGEString(S_EMPTY_TIME, szBuffStr, cBuffOffset, cBuffSize);
	else
	{
		STR_ValueToStrLength(lNumToConvert, uiNumDigits, szTemp, 0, sizeof(szTemp));
		cBuffOffset = STR_TextToTimeStr((wchar_t*)szTemp, wcslen((wchar_t*)szTemp), szBuffStr, 0, cBuffSize);
	}

	return cBuffOffset;
}

#pragma argsused
UINT8 STR_GenerateCheckSum(UINT16 wCheckSum, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	szBuffStr[cBuffOffset++] = ((((wCheckSum & 0xf000) >> 12) & 0x0f) > 0x9)? ('A' + ((((wCheckSum & 0xf000) >> 12) & 0x0f) - 10)):('0' + (((wCheckSum & 0xf000) >> 12) & 0x0f));
	szBuffStr[cBuffOffset++] = ((((wCheckSum & 0x0f00) >> 8 ) & 0x0f) > 0x9)? ('A' + ((((wCheckSum & 0x0F00) >> 8 ) & 0x0f) - 10)):('0' + (((wCheckSum & 0x0f00) >> 8 ) & 0x0f));
	szBuffStr[cBuffOffset++] = ((((wCheckSum & 0x00f0) >> 4 ) & 0x0f) > 0x9)? ('A' + ((((wCheckSum & 0x00f0) >> 4 ) & 0x0f) - 10)):('0' + (((wCheckSum & 0x00f0) >> 4 ) & 0x0f));
	szBuffStr[cBuffOffset++] = ((wCheckSum & 0x0f) > 0x9)? ('A' + ((wCheckSum & 0x0f) - 10)):('0' + (wCheckSum & 0x0f));

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

#ifdef D_HDMI_ENABLED
#pragma argsused
UINT8 STR_GenerateHDVideoOutResolution(UINT16 wTVStdAndHDResolution, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	UINT8 cTVStandard = (wTVStdAndHDResolution >> 8);
	UINT8 cHDVideoOutResolution = (UINT8)wTVStdAndHDResolution;

	switch(cTVStandard)
	{
	case DEC_LL_OUT_VIDEO_STANDARD_NTSC:
		{
			switch (cHDVideoOutResolution)
			{
			case HD_NTSC_IN_OUT_480P:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_NTSC_PROGRESSIVE_480, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_NTSC_IN_OUT_720P:		
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_NTSC_PROGRESSIVE_720, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_NTSC_IN_OUT_1080I:		
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_NTSC_INTERLACED_1080, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_NTSC_IN_OUT_1024X768:		
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_NTSC_PROGRESSIVE_1024x768, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_NTSC_IN_OUT_1360X768:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_NTSC_PROGRESSIVE_1360x768, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_NTSC_IN_OUT_AUTO:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_NTSC_AUTO, szBuffStr, cBuffOffset, cBuffSize);
				break;

			default:
				break;
			}
		}
		break;

	case DEC_LL_OUT_VIDEO_STANDARD_PAL:
		{
			switch (cHDVideoOutResolution)
			{
			case HD_PAL_IN_OUT_576P:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL_PROGRESSIVE_576, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_PAL_IN_OUT_720P:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL_PROGRESSIVE_720, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_PAL_IN_OUT_1080I:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL_INTERLACED_1080, szBuffStr, cBuffOffset, cBuffSize);
				break;

			case HD_PAL_IN_OUT_1024X768:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL_PROGRESSIVE_1024x768, szBuffStr, cBuffOffset, cBuffSize);
				break;
				
			case HD_PAL_IN_OUT_1360X768:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL_PROGRESSIVE_1360x768, szBuffStr, cBuffOffset, cBuffSize);
				break;
				
			case HD_PAL_IN_OUT_AUTO:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL_AUTO, szBuffStr, cBuffOffset, cBuffSize);
				break;
				
			default:
				break;
			}
		}
		break;

	default:
		break;
	}	
	return cBuffOffset;
}
#endif //D_HDMI_ENABLED

/**************************************************************************
*	Function	: STR_GeneratePartialCached
*
*	In		:
*
*	Out		:
*
*	Return	:
*
*	Desc 	:
 ***************************************************************************/
UINT8 STR_GeneratePartialCached(UINT16 uiNumCachedFiles, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
     cBuffOffset = STR_GenerateOSDMESSAGEString(S_DISC_PARTIALLY_CACHED, szBuffStr, cBuffOffset, cBuffSize);
     szBuffStr[cBuffOffset++] = ' ';     
     cBuffOffset = STR_GenerateNumericValue( uiNumCachedFiles , szBuffStr, cBuffOffset, cBuffSize);     
     TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

/**************************************************************************
*	Function	: STR_GenerateDiscName
*
*	In		:
*
*	Out		:
*
*	Return	:
*
*	Desc 	:
 ***************************************************************************/
UINT8 STR_GenerateDiscName(LPWSTR pwszSrcBuffer, UINT8 cSrcBufferOffset, UINT8 cSrcBufferSize)
{
	CoreAPI_GetDiscName((LPWSTR)&pwszSrcBuffer[cSrcBufferOffset], cSrcBufferSize);
	return wcslen(pwszSrcBuffer);
}

/***************************************************************************************
*	Function 	: 	STR_AppendPaddingSpace
*
*	In		:	1. pwszBuffer 			= Pointer to a buffer.
*
*				2. cBufferLen 			= Buffer size.
*
*				3. cStrMaxLen 		= Maximum string length.
*
*				4. cNumPaddingSpaces 	= Number of spaces to pad to the end of the string.
*
*	Out		:	None.
*
*	Desc 	:	Remove all the spaces from the end of the supplied string, and appends 
*				cNumPaddingSpaces number of spaces.
****************************************************************************************/
void STR_AppendPaddingSpace(LPWSTR pwszBuffer, UINT8 cBufferLen, UINT8 cStrMaxLen, UINT8 cNumPaddingSpaces)
{
	UINT16 wCount;

	MS_ASSERT(cBufferLen <= cStrMaxLen);

	// Remove spaces until the end of the string is found.
	for(wCount = cBufferLen; (wCount > 0) && (L' ' == pwszBuffer[wCount-1]); wCount--);

	// Add the padding spaces back on
	for(cBufferLen = wCount, wCount = 0; (cBufferLen < cStrMaxLen) && (wCount < cNumPaddingSpaces); wCount++)
	{
		pwszBuffer[cBufferLen + wCount] = L' ';
	}
	pwszBuffer[cBufferLen + wCount] = 0;
}

⌨️ 快捷键说明

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