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

📄 string_generate.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
📖 第 1 页 / 共 4 页
字号:
					//Calulate SubitleCode number
					wLangCode = CoreAPI_GetAVISubtitleFeatureCode( wSubtitleNum);
					if(ERROR_SUBTITLE_FEATURE_CODE != wLangCode)
					{
						if(SUB_TYPE_CODE_TABLE_SIZE > wLangCode)
						{
							while(aDivX6SubtitleCode[wLangCode].aSubtitleFeature[cSubtitleFeatureIndx] && (UNISTR_LENGTH_MAX > cBuffOffset))
							szBuffStr[cBuffOffset++] = (UINT16)aDivX6SubtitleCode[wLangCode].aSubtitleFeature[cSubtitleFeatureIndx++];
						}
					}
				}
				else//MP4 three characher languages
				{
					szBuffStr[cBuffOffset++]  =  szLang[0];
					szBuffStr[cBuffOffset++]  =  szLang[1];
					szBuffStr[cBuffOffset++]  =  szLang[2];
				}
			}
		}
	}
	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

#ifdef DVD_AUDIO_SUPPORT
UINT8 STR_GenerateDVDAInfo(UINT16 wAudioNum, UINT16 wAudioGroup, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	UINT16 wChAssignment = CoreAPI_GetAudioChannelAssigment(wAudioNum);
	G_AUDIO_SAMPLING oFrequency = CoreAPI_GetAudioFS(wAudioGroup);
	UINT8 cBits = CoreAPI_GetQuantization(wAudioGroup);
	BOOL bResult = FALSE;
		
	ASSERT(NULL != szBuffStr);
	if(wAudioNum)
	{
	switch(wAudioGroup)
	{
		case 1:
		{
			if(wChAssignment==0)
			{
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_MONO, szBuffStr, cBuffOffset, cBuffSize);
			}
			else if(wChAssignment==1)
			{
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_LR, szBuffStr, cBuffOffset, cBuffSize);
			}
			else if(wChAssignment<=12)
			{
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_LR, szBuffStr, cBuffOffset, cBuffSize);
			}
			else if(wChAssignment<=17)
			{
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_LRC, szBuffStr, cBuffOffset, cBuffSize);
			}
			else if(wChAssignment<=20)
			{
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_LRLSRS, szBuffStr, cBuffOffset, cBuffSize);
			}
			break;
		}
		
		case 2:
		{
			switch(wChAssignment)
			{
				case 0:
				case 1:
					szBuffStr[cBuffOffset++] = ' ';
					break;
				case 2:
				case 13:
					szBuffStr[cBuffOffset++] = 'S';
					break;
				case 3:
				case 14:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_LSRS, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 4:
				case 15:
				case 18:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_LFE, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 5:
				case 16:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_LFES, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 6:
				case 17:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_LFELSRS, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 7:
				case 19:
					szBuffStr[cBuffOffset++] = 'C';
					break;
				case 8:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_CS, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 9:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_CLSRS, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 10:
				case 20:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_CLFE, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 11:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_CLFES, szBuffStr, cBuffOffset, cBuffSize);
					break;
				case 12:
					cBuffOffset = STR_GenerateOSDMESSAGEString(S_CLFELSRS, szBuffStr, cBuffOffset, cBuffSize);
					break;
			}
			break;
		}
	}
	szBuffStr[cBuffOffset++] = ' ';

	switch(oFrequency)
	{
		case AUDIO_fs_48khz:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_48KHZ, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AUDIO_fs_96khz:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_96KHZ, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AUDIO_fs_192khz:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_192KHZ, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AUDIO_fs_441khz:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_44P1KHZ, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AUDIO_fs_882khz:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_88P2KHZ, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case AUDIO_fs_1764khz:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_176P4KHZ, szBuffStr, cBuffOffset, cBuffSize);
			break;
		default:
			cBuffOffset = STR_GenerateRepeatChars(' ', 3, szBuffStr, cBuffOffset, cBuffSize);
			bResult = TRUE;
			break;
	}

	if(bResult == FALSE)
	{
	szBuffStr[cBuffOffset++] = '/';
	}
	else
	{
		szBuffStr[cBuffOffset++] = ' ';
	}

	switch(cBits)
	{
		case 0:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_16BIT, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case 1:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_20BIT, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case 2:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_24BIT, szBuffStr, cBuffOffset, cBuffSize);
			break;
		default:
			cBuffOffset = STR_GenerateRepeatChars(' ', 3, szBuffStr, cBuffOffset, cBuffSize);
			break;
	}
	}

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

UINT8 STR_GenerateAudioInfo(UINT16 wAudioNum, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	BYTE cChannels;

	ASSERT(NULL != szBuffStr);

	if(0==CoreAPI_GetTotalAudioNum())
	{
		cBuffOffset = STR_GenerateOSDMESSAGEString(S_OFF, szBuffStr, cBuffOffset, cBuffSize);
	}
	else
	{
		cBuffOffset = STR_GenerateNumericAndTotalNumeric(wAudioNum, CoreAPI_GetTotalAudioNum(), szBuffStr, cBuffOffset, cBuffSize);

		cBuffOffset = STR_GenerateRepeatChars(' ', 1, szBuffStr, cBuffOffset, cBuffSize);
		switch(CoreAPI_GetAudioCodingMode(wAudioNum))
		{
			case AUDIO_STREAM_AC3:
				cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_DOLBY, szBuffStr, cBuffOffset, cBuffSize);
				break;
			case AUDIO_STREAM_DTS:
				cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_DTS, szBuffStr, cBuffOffset, cBuffSize);
				break;
			case AUDIO_STREAM_MPEG:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_MPEG, szBuffStr, cBuffOffset, cBuffSize);
				break;
			case AUDIO_STREAM_LPCM:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_LPCM, szBuffStr, cBuffOffset, cBuffSize);
				break;
			case AUDIO_STREAM_MP3:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_MP3, szBuffStr, cBuffOffset, cBuffSize);
				break;
			case AUDIO_STREAM_PCM:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_PCM, szBuffStr, cBuffOffset, cBuffSize);
				break;
			case AUDIO_STREAM_WMA:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_WMA, szBuffStr, cBuffOffset, cBuffSize);
				break;
#ifdef D_ENABLE_ADPCM_SUPPORT
			case AUDIO_STREAM_ADPCM:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_ADPCM, szBuffStr, cBuffOffset, cBuffSize);
				break;
#endif//D_ENABLE_ADPCM_SUPPORT
#ifdef D_ENABLE_AAC_SUPPORT
			case AUDIO_STREAM_AAC:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_AAC, szBuffStr, cBuffOffset, cBuffSize);
				break;
#endif//D_ENABLE_AAC_SUPPORT
#ifdef DVD_AUDIO_SUPPORT
			case AUDIO_STREAM_MLP:
				cBuffOffset = STR_GenerateOSDMESSAGEString(S_MLP, szBuffStr, cBuffOffset, cBuffSize);
				break;
#endif //DVD_AUDIO_SUPPORT
				
			default:
			//no private symbol or media type name to display ,to avoid display two ' ' ,we do this
			cBuffOffset--;
            	break;
		}
		
		szBuffStr[cBuffOffset++] = ' ';

       	 cChannels = CoreAPI_GetAudioChannelNum(wAudioNum);
        	if(cChannels != ERROR_AUDIO_CHANNEL_NUM)
      		{
			szBuffStr[cBuffOffset++] = NUM_TO_CHAR(cChannels);

			szBuffStr[cBuffOffset++] = ' ';
			szBuffStr[cBuffOffset++] = 'C';
			szBuffStr[cBuffOffset++] = 'h';
			szBuffStr[cBuffOffset++] = UNICODE_SPACE;

			{
				
				UINT8 szLang[MAX_LANGUAGE_NAME_ABBR];
				UINT8 szLanguageNameFirstTwoChar[2];
				UINT16 wLangCode ;
				UINT8  cAudioFeatureIndx = 0;
				if(CoreAPI_GetAudioLanguage(wAudioNum, szLang,MAX_LANGUAGE_NAME_ABBR))
				{
					if (_IsCapitialLetter(szLang[0]))
						 szLanguageNameFirstTwoChar[0] =_LetterCapitalToLower(szLang[0]);
					else szLanguageNameFirstTwoChar[0] = szLang[0] ;
					if (_IsCapitialLetter(szLang[1]))
						 szLanguageNameFirstTwoChar[1] = _LetterCapitalToLower(szLang[1]) ;
					else szLanguageNameFirstTwoChar[1] = szLang[1] ;
				
					wLangCode = MLC(szLanguageNameFirstTwoChar[0],szLanguageNameFirstTwoChar[1]);
					if (eClipType_None == CoreAPI_GetCurrentClipType() )//DVD
					{
						cBuffOffset = STR_GenerateLanguage(MLC(szLanguageNameFirstTwoChar[1],szLanguageNameFirstTwoChar[0]),  szBuffStr, cBuffOffset,  cBuffSize);
					}
					else if (eClipType_AVI == CoreAPI_GetCurrentClipType())//AVI
					{
						if(EXTENTED_LANGUAGE_CODE != wLangCode)
						{
							if(!(szLang[2]) )//
							{
								cBuffOffset = STR_GenerateLanguage(wLangCode,  szBuffStr, cBuffOffset,  cBuffSize);
								szBuffStr[cBuffOffset++] = UNICODE_SPACE;
							}
						}
						else// extent language code
						{
							cBuffOffset += CoreAPI_GetAVIAudioLanguageExt(wAudioNum, szBuffStr + cBuffOffset,UNISTR_LENGTH_MAX-cBuffOffset);
							szBuffStr[cBuffOffset++] = UNICODE_SPACE;
						}
						
						wLangCode = ERROR_AUDIO_FEATURE_CODE;
						//Calulate AudioCode number
						wLangCode = CoreAPI_GetAVIAudioFeatureCode( wAudioNum);
						if(ERROR_AUDIO_FEATURE_CODE != wLangCode)
						{
							if(AUDIO_TYPE_CODE_TABLE_SIZE > wLangCode)
							{
								while(aDivX6AudioCode[wLangCode].aAudioFeature[cAudioFeatureIndx] && (UNISTR_LENGTH_MAX > cBuffOffset))
								szBuffStr[cBuffOffset++] = (UINT16)aDivX6AudioCode[wLangCode].aAudioFeature[cAudioFeatureIndx++];
							}
						}
					
					}
					else//MP4 three characher languages code
					{
						szBuffStr[cBuffOffset++]  =  szLang[0];
						szBuffStr[cBuffOffset++]  =  szLang[1];
						szBuffStr[cBuffOffset++]  =  szLang[2];
					}
				}
			}
		}
	}
	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

UINT8 STR_GenerateAngle(INT16 sAngle, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	szBuffStr[cBuffOffset++] = ' ';

	cBuffOffset = STR_GenerateNumericAndTotalNumeric(sAngle, CoreAPI_GetTotalAngleNum(), szBuffStr, cBuffOffset, cBuffSize);

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

UINT8 STR_Generate3D(INT16 s3D, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

    cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_3D, szBuffStr, cBuffOffset, cBuffSize);
	szBuffStr[cBuffOffset++] = ' ';

	switch (s3D) {
		case FALSE:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_OFF, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case TRUE:
			cBuffOffset = STR_GenerateOSDMESSAGEString(S_ON, szBuffStr, cBuffOffset, cBuffSize);
			break;
	}

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

UINT8 STR_GenerateShuffle(INT16 sShuffle, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	switch (sShuffle) {
		case FALSE:
			cBuffOffset = STR_GenerateItemSpaceValue(S_SHUFFLE, S_OFF, szBuffStr, cBuffOffset, cBuffSize);
			break;
		case TRUE:
			cBuffOffset = STR_GenerateItemSpaceValue(S_SHUFFLE, S_ON, szBuffStr, cBuffOffset, cBuffSize);
			break;
	}

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

UINT8 STR_GeneratateBitrate(INT16 sBitRate, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	if ( sBitRate >= 10000 )
	{
		szBuffStr[cBuffOffset++] = NUM_TO_CHAR(sBitRate/10000);
		sBitRate = sBitRate%10000;
	}
	if ( sBitRate >= 1000 )
	{
		szBuffStr[cBuffOffset++] = NUM_TO_CHAR(sBitRate/1000);
		sBitRate = sBitRate%1000;
	}
	else
		szBuffStr[cBuffOffset++] = '0';

	if ( 0 == cBuffOffset )
		szBuffStr[cBuffOffset++] = '0';

	szBuffStr[cBuffOffset++] = '.';

	if ( sBitRate >= 100 )
	{
		szBuffStr[cBuffOffset++] = NUM_TO_CHAR(sBitRate/100);
		sBitRate = sBitRate%100;
	}
	else
		szBuffStr[cBuffOffset++] = '0';

	if ( sBitRate >= 10 )
	{
		szBuffStr[cBuffOffset++] = NUM_TO_CHAR(sBitRate/10);
		sBitRate = sBitRate%10;
	}
	else
		szBuffStr[cBuffOffset++] = '0';

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

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

	TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}

#pragma argsused
UINT8 STR_GenerateRepeatChars(INT16 sChar, INT16 sRepeat, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
	ASSERT(NULL != szBuffStr);

	while(sRepeat-- > 0)
	{
		szBuffStr[cBuffOffset++] = sChar;
	}

	szBuffStr[cBuffOffset]= L'\0';
	ASSERT(cBuffOffset <= cBuffSize);

	return cBuffOffset;

⌨️ 快捷键说明

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