示例#1
0
static int Done(settings* p)
{
	if (p->Win.Flags & WIN_PROP_SOFTRESET)
		ShowMessage(LangStr(SETTINGS_ID,NODE_NAME),LangStr(SETTINGS_ID,SETTINGS_SOFTRESET));
	else
	if (p->Win.Flags & WIN_PROP_RESTART)
		ShowMessage(LangStr(SETTINGS_ID,NODE_NAME),LangStr(SETTINGS_ID,SETTINGS_RESTART));

	if (p->Win.Flags & WIN_PROP_RESYNC)
	{
		player* Player = (player*)Context()->Player;
		if (Player)
			Player->Set(Player,PLAYER_RESYNC,NULL,0);
	}

	if (p->Win.Flags & WIN_PROP_CHANGED)
	{
		p->Win.Flags &= ~WIN_PROP_CHANGED;
#ifdef REGISTRY_GLOBAL
		NodeRegSaveGlobal();
#else
		if (p->Current)
			NodeRegSave(p->Current);
#endif
	}

	NodeDelete(p->Current);
	p->Current = NULL;
	return ERR_NONE;
}
示例#2
0
static int Command(benchresult* p,int Cmd)
{
	if (Cmd == BENCHRESULT_SAVE)
	{
		tchar_t URL[MAXPATH];
		tchar_t FileName[32];
		stprintf_s(FileName,TSIZEOF(FileName),T("bench_%06d_%06d"),(int)(p->TimeDate/1000000000),(int)((p->TimeDate/1000)%1000000));
		SaveDocument(FileName,p->Log,URL,TSIZEOF(URL));
		ShowMessage(LangStr(BENCHRESULT_ID,NODE_NAME),LangStr(BENCHRESULT_ID,BENCHRESULT_SAVED),URL);
		return ERR_NONE;
	}
	return ERR_INVALID_PARAM;
}
		i32 CKeyboard::SetLocalization(xst_castring& strLang)
		{
			//Find this locale
			LangMap::iterator Itr = m_mLangs.find( LangStr( strLang ) );
			if( Itr == m_mLangs.end() )
			{
				XST_LOG_ERR( "Could not find language: " << strLang << ". If you want to use this language add it first." );
				return XST_FAIL;
			}

			/*HKL aBuff[10];
			GetKeyboardLayoutList( 10, aBuff );
			for(u32 i = 0; i < 10; ++i)
			{
				XST::CDebug::PrintDebugLN( XST::StringUtil::ToString( aBuff[ i ] ) );
			}*/

			m_WinHKL = LoadKeyboardLayoutA( Itr->second.data(), KLF_ACTIVATE );
			if( m_WinHKL == xst_null )
			{
				XST_LOG_ERR( "Failed to set keybaord localization: " << GetLastError() );
				return XST_FAIL;
			}
			if( ActivateKeyboardLayout( m_WinHKL, KLF_RESET ) == 0 )
			{
				XST_LOG_ERR( "Failed to activate the keyboard localization: " << GetLastError() );
				return XST_FAIL;
			}

			m_strCurrLang = strLang;
			return XST_OK;
		}
示例#4
0
文件: mediainfo.c 项目: Erikhht/TCPMP
static void Comment(win* Win,player* Player,winunit* y,int Stream)
{
	tchar_t s[256];
	int i;

	for (i=0;CommentNo[i];++i)
		if (Player->CommentByName(Player,Stream,PlayerComment(CommentNo[i]),s,TSIZEOF(s)))
		{
			if (Stream>=0 && Player->CommentByName(Player,-1,PlayerComment(CommentNo[i]),NULL,0))
				continue;

			WinPropLabel(Win,y,LangStr(PLAYER_ID,CommentNo[i]),s);
		}

	if (Stream>=0)
		for (++i;CommentNo[i];++i)
			if (Player->CommentByName(Player,Stream,PlayerComment(CommentNo[i]),s,TSIZEOF(s)))
				WinPropLabel(Win,y,LangStr(PLAYER_ID,CommentNo[i]),s);
}
示例#5
0
文件: mediainfo.c 项目: Erikhht/TCPMP
static void Info(win* Win,node* Node,winunit* y,int Name)
{
	int No;
	datadef DataDef;

	if (Name)
		WinPropLabel(Win,y,LangStr(MEDIAINFO_ID,Name),LangStr(Node->Class,NODE_NAME));

	for (No=0;NodeEnum(Node,No,&DataDef)==ERR_NONE;++No)
		if (!(DataDef.Flags & (DF_OUTPUT|DF_HIDDEN)))
		{
			tchar_t s[256];
			tick_t Tick;
			int i;
			bool_t Ok = 0;

			switch (DataDef.Type)
			{
			case TYPE_TICK:
				Ok = Node->Get(Node,DataDef.No,&Tick,sizeof(Tick))==ERR_NONE;
				TickToString(s,TSIZEOF(s),Tick,0,1,0);
				break;

			case TYPE_INT:
				Ok = Node->Get(Node,DataDef.No,&i,sizeof(i))==ERR_NONE;
				IntToString(s,TSIZEOF(s),i,(DataDef.Flags & DF_HEX)!=0);
				if (DataDef.Flags & DF_KBYTE)
					tcscat_s(s,TSIZEOF(s),T(" KB"));
				break;

			case TYPE_STRING:
				Ok = Node->Get(Node,DataDef.No,s,sizeof(s))==ERR_NONE;
				break;					
			}

			if (Ok)
				WinPropLabel(Win,y,DataDef.Name,s);
		}
}
示例#6
0
static int Create(rawimage* p)
{
	const tchar_t* Format = LangStr(p->Format.Format.Class,RAWIMAGE_FORMAT);
	if (tcsnicmp(Format,T("vcodec/"),7)==0)
		p->FourCC = StringToFourCC(Format+7,1);
	if (!p->FourCC)
		return ERR_INVALID_PARAM;
	p->Format.Init = (fmtfunc)Init;
	p->Format.Seek = (fmtseek)Seek;
	p->Format.ReadPacket = (fmtreadpacket)Packet;
	p->Format.FillQueue = (fmtfill)FillQueue;
	p->Format.Process = (fmtstreamprocess)ProcessStream;
	p->Format.Sended = (fmtstream)Sended;
	p->Format.Timing = 0;
	return ERR_NONE;
}
示例#7
0
static int Init(settings* p)
{
	array List;
	int* i;

	p->Menu = WinMenuFind(&p->Win,SETTINGS_PAGES-1);
	p->Win.Flags &= ~(WIN_PROP_RESTART|WIN_PROP_SOFTRESET|WIN_PROP_RESYNC|WIN_PROP_CHANGED);

	NodeEnumClass(&List,NODE_CLASS);
	for (i=ARRAYBEGIN(List,int);i!=ARRAYEND(List,int);++i)
		if ((NodeClassDef(*i)->Flags & (CF_GLOBAL|CF_SETTINGS))==(CF_GLOBAL|CF_SETTINGS))
		{
			WinMenuInsert(&p->Win,p->Menu,SETTINGS_PAGES-1,SETTINGS_PAGES+p->Count,LangStr(*i,NODE_NAME));
			p->Node[p->Count++] = *i;
			if (p->Count==MAXPAGE)
				break;
		}

	ArrayClear(&List);

	WinMenuDelete(&p->Win,p->Menu,SETTINGS_PAGES-1);
	UpdatePage(p);
	return ERR_NONE;
}
示例#8
0
static void UpdatePage(settings* p)
{
	datadef DataDef;
	node* Node;
	bool_t Found = 0;
	int Class = Context()->SettingsPage;
	int No,i;
	winunit y;
	bool_t CheckList;
	tchar_t Data[MAXDATA/sizeof(tchar_t)];

#ifndef REGISTRY_GLOBAL
	if (p->Win.Flags & WIN_PROP_CHANGED)
	{
		p->Win.Flags &= ~WIN_PROP_CHANGED;
		if (p->Current)
			NodeRegSave(p->Current);
	}
#endif

	WinBeginUpdate(&p->Win);

	for (No=0;No<p->Count;++No)
	{
		if (p->Node[No]==Class)
			Found = 1;
		WinMenuCheck(&p->Win,p->Menu,SETTINGS_PAGES+No,p->Node[No]==Class);
	}

	if (!Found && p->Count>0)
		Class = p->Node[0];
	
	NodeDelete(p->Current);
	p->Current = Node = NodeCreate(Class);
	
	if (Node)
	{
		WinTitle(&p->Win,LangStr(Class,NODE_NAME));

		p->Win.LabelWidth = 
			(Class == PLATFORM_ID) ? 60:
			(p->Win.ScreenWidth < 130) ? 80:
			(Class == PLAYER_ID || Class == ADVANCED_ID) ? 120:90;

		CheckList = Class == ASSOCIATION_ID;
		y = 2;

		// if the menu is in bottom of screen. print a hint before platform settings (first page shown)
		if (Class == PLATFORM_ID && (p->Win.Flags & WIN_BOTTOMTOOLBAR) && !(p->Win.Flags & WIN_2BUTTON))
		{
			WinLabel(&p->Win,&y,-1,-1,LangStr(SETTINGS_ID,SETTINGS_HINT),PROPSIZE,0,NULL);
			y += 10;
		}

		for (No=0;NodeEnum(Node,No,&DataDef)==ERR_NONE;++No)
			if ((DataDef.Flags & DF_SETUP) && !(DataDef.Flags & DF_HIDDEN))
			{
				if (DataDef.Flags & DF_GAP)
					y += 7;

				if (!(DataDef.Flags & DF_RDONLY))
					WinPropValue(&p->Win,&y,Node,DataDef.No);
				else
				if (Node->Get(Node,DataDef.No,Data,DataDef.Size)==ERR_NONE)
				{
					switch (DataDef.Type)
					{
					case TYPE_LABEL:
						WinLabel(&p->Win,&y,-1,-1,DataDef.Name,PROPSIZE,0,NULL);
						break;

					case TYPE_TICK:
						TickToString(Data,TSIZEOF(Data),*(tick_t*)Data,0,1,0);
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;

					case TYPE_INT:
						i = *(int*)Data;

						if (DataDef.Flags & DF_ENUMCLASS)
							tcscpy_s(Data,TSIZEOF(Data),LangStr(i,NODE_NAME));
						else
						if (DataDef.Flags & DF_ENUMSTRING)
							tcscpy_s(Data,TSIZEOF(Data),LangStr(DataDef.Format1,i));
						else
							Data[0] = 0;

						if (!Data[0])
							IntToString(Data,TSIZEOF(Data),i,(DataDef.Flags & DF_HEX)!=0);
						if (DataDef.Flags & DF_KBYTE)
							tcscat_s(Data,TSIZEOF(Data),T(" KB"));
						if (DataDef.Flags & DF_MHZ)
							tcscat_s(Data,TSIZEOF(Data),T(" Mhz"));
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;

					case TYPE_STRING:
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;
						
					case TYPE_HOTKEY:
						HotKeyToString(Data,TSIZEOF(Data),*(int*)Data);
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;
						
					case TYPE_BOOL:
						WinPropLabel(&p->Win,&y,DataDef.Name,
							LangStr(PLATFORM_ID,*(bool_t*)Data ? PLATFORM_YES:PLATFORM_NO));
						break;

					default:
						WinPropLabel(&p->Win,&y,DataDef.Name,NULL);
						break;
					}
				}
			}
	}

	WinEndUpdate(&p->Win);
}
示例#9
0
static int Init(benchresult* p)
{
	node* Player = Context()->Player;
	node* Platform = Context()->Platform;
	node* Format;
	node* Input;
	node* VOutput;
	node* AOutput;
	winunit y;
	int i;
	int Frames;
	int Samples;
	int Bytes;
	tick_t Tick;
	tick_t OrigTick;
	point SizeSrc;
	point SizeDst;
	packetformat Video;
	packetformat Audio;
	tchar_t Buffer[256];
	fraction f;

	p->TimeDate = GetTimeDate();

	Player->Get(Player,PLAYER_FORMAT,&Format,sizeof(Format));
	Player->Get(Player,PLAYER_INPUT,&Input,sizeof(Input));

	VOutput = NULL;
	AOutput = NULL;
	OrigTick = 0;
	Frames = 0;
	Samples = 0;
	Bytes = 0;
	memset(&Video,0,sizeof(Video));
	memset(&Audio,0,sizeof(Audio));

	stprintf_s(p->Log,TSIZEOF(p->Log),LangStrDef(BENCHRESULT_ID,BENCHRESULT_LOG),Context()->ProgramName,Context()->ProgramVersion);
	tcscat_s(p->Log,TSIZEOF(p->Log),T("\n\n"));

	if (Format)
	{
		int No;
		pin Pin;
		packetformat PacketFormat;

		Format->Get(Format,FORMAT_FILEPOS,&Bytes,sizeof(Bytes));

		for (No=0;Format->Get(Format,FORMAT_STREAM+No,&Pin,sizeof(Pin))==ERR_NONE;++No)
			if (Pin.Node && Format->Get(Format,(FORMAT_STREAM+No)|PIN_FORMAT,&PacketFormat,sizeof(PacketFormat))==ERR_NONE)
			{
				if (PacketFormat.Type == PACKET_VIDEO) 
				{
					Video = PacketFormat;
					Player->Get(Player,PLAYER_VOUTPUT,&VOutput,sizeof(VOutput));
					if (VOutput)
						VOutput->Get(VOutput,OUT_TOTAL,&Frames,sizeof(Frames));
				}
				if (PacketFormat.Type == PACKET_AUDIO) 
				{
					Audio = PacketFormat;
					Player->Get(Player,PLAYER_AOUTPUT,&AOutput,sizeof(AOutput));
					if (AOutput)
					{
						packetformat Format;
						AOutput->Get(AOutput,OUT_TOTAL,&Samples,sizeof(Samples));
						if (AOutput->Get(AOutput,OUT_INPUT|PIN_FORMAT,&Format,sizeof(Format))==ERR_NONE &&
							Format.Type == PACKET_AUDIO)
						{
							if (Format.Format.Audio.Bits>=8)
								Samples /= Format.Format.Audio.Bits/8;
							if (!(Format.Format.Audio.Flags & PCM_PLANES) && Format.Format.Audio.Channels)
								Samples /= Format.Format.Audio.Channels;
						}
					}
				}
			}
	}

	y = 4;

	Player->Get(Player,PLAYER_BENCHMARK,&Tick,sizeof(Tick));

	if (Frames && Video.PacketRate.Num)
		OrigTick = Scale64(Frames,(int64_t)Video.PacketRate.Den*TICKSPERSEC,Video.PacketRate.Num);
	else
	if (Samples && Audio.Format.Audio.SampleRate)
		OrigTick = Scale(Samples,TICKSPERSEC,Audio.Format.Audio.SampleRate);

	if (Tick && OrigTick)
	{
		f.Num = OrigTick;
		f.Den = Tick;

		FractionToString(Buffer,TSIZEOF(Buffer),&f,1,2);
		AddItem(p,&y,BENCHRESULT_SPEED,Buffer);
	}

	if (Frames)
	{
		IntToString(Buffer,TSIZEOF(Buffer),Frames,0);
		AddItem(p,&y,BENCHRESULT_FRAMES,Buffer);
	}

	if (Samples)
	{
		IntToString(Buffer,TSIZEOF(Buffer),Samples,0);
		AddItem(p,&y,BENCHRESULT_SAMPLES,Buffer);
	}

	if (Bytes)
	{
		IntToString(Buffer,TSIZEOF(Buffer),Bytes/1024,0);
		tcscat_s(Buffer,TSIZEOF(Buffer),T(" KB"));
		AddItem(p,&y,BENCHRESULT_BYTES,Buffer);
	}

	y += 6;
	tcscat_s(p->Log,TSIZEOF(p->Log),T("\n"));

	TickToString(Buffer,TSIZEOF(Buffer),Tick,0,1,0);
	AddItem(p,&y,BENCHRESULT_TIME,Buffer);

	if (Frames && Tick)
	{
		f.Num = Frames;
		f.Den = Tick;
		Simplify(&f,MAX_INT/TICKSPERSEC,MAX_INT);
		f.Num *= TICKSPERSEC;
		FractionToString(Buffer,TSIZEOF(Buffer),&f,0,2);
		AddItem(p,&y,BENCHRESULT_FPS,Buffer);
	}

	if (Samples && Tick)
	{
		f.Num = Samples;
		f.Den = Tick;
		Simplify(&f,MAX_INT/TICKSPERSEC,MAX_INT);
		f.Num *= TICKSPERSEC;
		FractionToString(Buffer,TSIZEOF(Buffer),&f,0,0);
		AddItem(p,&y,BENCHRESULT_SRATE,Buffer);
	}

	if (Bytes && Tick)
	{
		f.Num = Scale(Bytes,8,1000);
		f.Den = Tick;
		Simplify(&f,MAX_INT/TICKSPERSEC,MAX_INT);
		f.Num *= TICKSPERSEC;
		if (f.Den && (f.Num/f.Den) > 1000)
		{
			Simplify(&f,MAX_INT,MAX_INT/1024);
			f.Den *= 1000;
			FractionToString(Buffer,TSIZEOF(Buffer),&f,0,1);
			tcscat_s(Buffer,TSIZEOF(Buffer),T(" Mbit/s"));
		}
		else
		{
			FractionToString(Buffer,TSIZEOF(Buffer),&f,0,0);
			tcscat_s(Buffer,TSIZEOF(Buffer),T(" kbit/s"));
		}
		AddItem(p,&y,BENCHRESULT_BANDWIDTH,Buffer);
	}

	y += 6;
	tcscat_s(p->Log,TSIZEOF(p->Log),T("\n"));

	if (OrigTick)
	{
		TickToString(Buffer,TSIZEOF(Buffer),OrigTick,0,1,0);
		AddItem(p,&y,BENCHRESULT_ORIG_TIME,Buffer);
	}

	if (Video.PacketRate.Num)
	{
		FractionToString(Buffer,TSIZEOF(Buffer),&Video.PacketRate,0,2);
		AddItem(p,&y,BENCHRESULT_ORIG_FPS,Buffer);
	}

	if (Audio.Format.Audio.SampleRate)
	{
		IntToString(Buffer,TSIZEOF(Buffer),Audio.Format.Audio.SampleRate,0);
		AddItem(p,&y,BENCHRESULT_ORIG_SRATE,Buffer);
	}

	if (Bytes && OrigTick)
	{
		f.Num = Scale(Bytes,8,1000);
		f.Den = OrigTick;
		Simplify(&f,MAX_INT/TICKSPERSEC,MAX_INT);
		f.Num *= TICKSPERSEC;
		if (f.Den && (f.Num/f.Den) > 1000)
		{
			f.Den *= 1000;
			FractionToString(Buffer,TSIZEOF(Buffer),&f,0,1);
			tcscat_s(Buffer,TSIZEOF(Buffer),T(" Mbit/s"));
		}
		else
		{
			FractionToString(Buffer,TSIZEOF(Buffer),&f,0,0);
			tcscat_s(Buffer,TSIZEOF(Buffer),T(" kbit/s"));
		}
		AddItem(p,&y,BENCHRESULT_ORIG_BANDWIDTH,Buffer);
	}

	if (Frames && Samples)
	{
		y += 9;
		WinLabel(&p->Win,&y,-1,-1,LangStr(BENCHRESULT_ID,BENCHRESULT_MSG),11,0,NULL);
	}

	tcscat_s(p->Log,TSIZEOF(p->Log),T("\n"));

	if (Input && Input->Get(Input,STREAM_URL,Buffer,sizeof(Buffer))==ERR_NONE)
		AddLog(p,BENCHRESULT_ID,BENCHRESULT_URL,Buffer);

	if (Input && Input->Get(Input,STREAM_LENGTH,&i,sizeof(i))==ERR_NONE)
	{
		IntToString(Buffer,TSIZEOF(Buffer),i,0);
		AddLog(p,BENCHRESULT_ID,BENCHRESULT_FILESIZE,Buffer);
	}

	if (Platform)
	{
		if (Platform->Get(Platform,PLATFORM_TYPE,Buffer,sizeof(Buffer))==ERR_NONE)
			AddLog(p,PLATFORM_ID,PLATFORM_TYPE,Buffer);

		if (Platform->Get(Platform,PLATFORM_VERSION,Buffer,sizeof(Buffer))==ERR_NONE)
			AddLog(p,PLATFORM_ID,PLATFORM_VERSION,Buffer);

		if (Platform->Get(Platform,PLATFORM_OEMINFO,Buffer,sizeof(Buffer))==ERR_NONE)
			AddLog(p,PLATFORM_ID,PLATFORM_OEMINFO,Buffer);

		ThreadSleep(GetTimeFreq()/10);

		if (Platform->Get(Platform,PLATFORM_CPUMHZ,&i,sizeof(i))==ERR_NONE)
		{
			IntToString(Buffer,TSIZEOF(Buffer),i,0);
			tcscat_s(Buffer,TSIZEOF(Buffer),T(" Mhz"));
			AddLog(p,PLATFORM_ID,PLATFORM_CPUMHZ,Buffer);
		}
	}

	if (VOutput)
	{
		tcscpy_s(Buffer,TSIZEOF(Buffer),LangStrDef(VOutput->Class,NODE_NAME));
		if (VOutput->Get(VOutput,OUT_OUTPUT|PIN_FORMAT,&Video,sizeof(Video))==ERR_NONE)
		{
			if (Video.Format.Video.Direction & DIR_SWAPXY)
				SwapInt(&Video.Format.Video.Width,&Video.Format.Video.Height);
			stcatprintf_s(Buffer,TSIZEOF(Buffer),T(" %dx%d %dbits"),Video.Format.Video.Width,Video.Format.Video.Height,Video.Format.Video.Pixel.BitCount);
		}

		if (QueryAdvanced(ADVANCED_SLOW_VIDEO))
			tcscat_s(Buffer,TSIZEOF(Buffer),T(" Slow"));
		if (QueryAdvanced(ADVANCED_COLOR_LOOKUP))
			tcscat_s(Buffer,TSIZEOF(Buffer),T(" Lookup"));

		AddLog(p,PLAYER_ID,PLAYER_VOUTPUT,Buffer);
	}

	if (Player->Get(Player,PLAYER_BENCHMARK_SRC,&SizeSrc,sizeof(point))==ERR_NONE &&
		Player->Get(Player,PLAYER_BENCHMARK_DST,&SizeDst,sizeof(point))==ERR_NONE && 
		SizeSrc.x>0 && SizeSrc.y>0)
		{
			stprintf_s(Buffer,TSIZEOF(Buffer),T("%dx%d -> %dx%d"),SizeSrc.x,SizeSrc.y,SizeDst.x,SizeDst.y);
			AddLog(p,BENCHRESULT_ID,BENCHRESULT_ZOOM,Buffer);
		}

	if (AOutput)
	{
		tcscpy_s(Buffer,TSIZEOF(Buffer),LangStrDef(AOutput->Class,NODE_NAME));
		if (AOutput->Get(AOutput,OUT_OUTPUT|PIN_FORMAT,&Audio,sizeof(Audio))==ERR_NONE)
			stcatprintf_s(Buffer,TSIZEOF(Buffer),T(" %dHz %dBits %dCh."),Audio.Format.Audio.SampleRate,Audio.Format.Audio.Bits,Audio.Format.Audio.Channels);
		AddLog(p,PLAYER_ID,PLAYER_AOUTPUT,Buffer);
	}

	return ERR_NONE;
}
示例#10
0
static NOINLINE void AddItem(benchresult* p, winunit* y, int Id, const tchar_t* Buffer)
{
	WinPropLabel(&p->Win,y,LangStr(BENCHRESULT_ID,Id),Buffer);
	AddLog(p,BENCHRESULT_ID,Id,Buffer);
}
		i32	CKeyboard::AddLanguage(xst_castring& strLang, xst_castring& strCode)
		{
			return XST::MapUtils::Insert( m_mLangs, LangStr( strLang ), XST::xst_astr8( strCode ) );
		}
示例#12
0
文件: mediainfo.c 项目: Erikhht/TCPMP
static int Init(win* p)
{
	tchar_t s[256];
	packetformat Format;
	int No;
	node* VOutput = NULL;
	node* Reader = NULL;
	node* Input = NULL;
	node* Player = Context()->Player;
	winunit y;

	Player->Get(Player,PLAYER_FORMAT,&Reader,sizeof(Reader));
	Player->Get(Player,PLAYER_INPUT,&Input,sizeof(Input));
	Player->Get(Player,PLAYER_VOUTPUT,&VOutput,sizeof(VOutput));

	y = 4;

	if (Input)
		Info(p,Input,&y,0);

	if (Reader)
	{
		pin Pin;

		Info(p,Reader,&y,MEDIAINFO_FORMAT);
		Comment(p,(player*)Player,&y,-1);

		for (No=0;Reader->Get(Reader,FORMAT_STREAM+No,&Pin,sizeof(Pin))==ERR_NONE;++No)
			if (PlayerGetStream((player*)Player,No,&Format,NULL,0,NULL))
			{
				y += 6;

				if (Format.Type != PACKET_NONE)
				{
					if (!PacketFormatName(&Format,s,TSIZEOF(s))) s[0] =0;
					WinPropLabel(p,&y,LangStr(PLAYER_ID,STREAM_NAME+Format.Type),s);
				}

				switch (Format.Type)
				{
				case PACKET_NONE:
					break;

				case PACKET_VIDEO:
					if (Pin.Node && Compressed(&Format.Format.Video.Pixel))
						Info(p,Pin.Node,&y,MEDIAINFO_CODEC);

					if (Format.Format.Video.Width && Format.Format.Video.Height)
					{
						stprintf_s(s,TSIZEOF(s),T("%d x %d"),Format.Format.Video.Width,Format.Format.Video.Height);
						WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_SIZE),s);
					}
					if (Format.PacketRate.Num)
					{
						FractionToString(s,TSIZEOF(s),&Format.PacketRate,0,3);
						WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_FPS),s);
					}
					if (Format.ByteRate)
					{
						IntToString(s,TSIZEOF(s),(Format.ByteRate+62)/125,0);
						tcscat_s(s,TSIZEOF(s),T(" kbit/s")); // 1000byte/sec
						WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_BITRATE),s);
					}

					break;

				case PACKET_AUDIO:

					if (Pin.Node && Format.Format.Audio.Format != AUDIOFMT_PCM)
						Info(p,Pin.Node,&y,MEDIAINFO_CODEC);

					s[0] = 0;
					if (Format.Format.Audio.SampleRate)
					{
						IntToString(s+tcslen(s),TSIZEOF(s)-tcslen(s),Format.Format.Audio.SampleRate,0);
						tcscat_s(s,TSIZEOF(s),T(" Hz "));
					}
					switch (Format.Format.Audio.Channels)
					{
					case 0: break;
					case 1: tcscat_s(s,TSIZEOF(s),LangStr(MEDIAINFO_ID,MEDIAINFO_AUDIO_MONO)); break;
					case 2: tcscat_s(s,TSIZEOF(s),LangStr(MEDIAINFO_ID,MEDIAINFO_AUDIO_STEREO)); break;
					default: stcatprintf_s(s,TSIZEOF(s),T("%d Ch"),Format.Format.Audio.Channels); break;
					}
					if (s[0])
						WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_FORMAT),s);

					if (Format.ByteRate)
					{
						IntToString(s,TSIZEOF(s),(Format.ByteRate+62)/125,0);
						tcscat_s(s,TSIZEOF(s),T(" kbit/s")); // 1000bit/sec
						WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_BITRATE),s);
					}

					break;

				case PACKET_SUBTITLE:
					if (Pin.Node)
						Info(p,Pin.Node,&y,MEDIAINFO_CODEC);
					break;
				}

				Comment(p,(player*)Player,&y,No);
			}

		if (VOutput)
		{
			int Total = 0;
			int Dropped = 0;

			VOutput->Get(VOutput,OUT_TOTAL,&Total,sizeof(int));
			VOutput->Get(VOutput,OUT_DROPPED,&Dropped,sizeof(int));

			Total += Dropped;
			if (Total)
			{
				y += 6;

				IntToString(s,TSIZEOF(s),Total,0);
				WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_VIDEO_TOTAL),s);

				IntToString(s,TSIZEOF(s),Dropped,0);
				WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_VIDEO_DROPPED),s);

				Player->Get(Player,PLAYER_VSTREAM,&No,sizeof(No));
				if (No>=0 && Reader->Get(Reader,(FORMAT_STREAM+No)|PIN_FORMAT,&Format,sizeof(Format))==ERR_NONE &&
					Format.Type == PACKET_VIDEO && Format.PacketRate.Num)
				{
					Simplify(&Format.PacketRate,(1<<30)/Total,(1<<30)/Total);
					Format.PacketRate.Num *= Total - Dropped;
					Format.PacketRate.Den *= Total;
					FractionToString(s,TSIZEOF(s),&Format.PacketRate,0,3);
					WinPropLabel(p,&y,LangStr(MEDIAINFO_ID,MEDIAINFO_AVG_FPS),s);
				}
			}
		}
	}

	return ERR_NONE;
}
示例#13
0
static void UpdateList(openfile* p, bool_t Silent, int ListMode)
{
	streamdir DirItem;
	stream* Stream;
	int Result;
	openitem New;
	LVITEM Item;
	int No=0;
	int Pos=0;
	int State = LVIS_FOCUSED;
	int Len;
	const tchar_t* s;
	bool_t HasHost;

	if (!p->Multiple || (p->Flags & OPENFLAG_SINGLE))
		State |= LVIS_SELECTED; 

	Len = tcslen(p->Path);
	if (Len && (p->Path[Len-1] == '\\' || p->Path[Len-1] == '/'))
		p->Path[--Len] = 0;

	tcscpy_s(p->Base,TSIZEOF(p->Base),p->Path);
	s = p->Path[0] ? p->Path : T("\\");
	AddHistory(p,s);

	if (!ListMode)
		return;

	++p->InUpdate;
	WaitBegin();

	ShowWindow(p->WndList,SW_HIDE);
	ClearList(p);

	Item.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
	Item.pszText=T("");
	Item.cchTextMax=1;
	Item.iSubItem=0;

	Stream = GetStream(p->Path,Silent);

	if (Stream)
	{
		s = GetMime(p->Path,NULL,0,&HasHost);
		if (*s)
		{
			Item.iImage=IMG_DIRUP;
			Item.iItem = No;
			Item.lParam = 0;

			ListView_InsertItem(p->WndList,&Item);
			ListView_SetItemText(p->WndList,No,0,T(".."));
			ListView_SetItemText(p->WndList,No,1,(tchar_t*)LangStr(OPENFILE_ID,OPENFILE_UP));
			++No;
		}

		Result = Stream->EnumDir(Stream,p->Path,p->Exts,*p->CurrentFileType!=-1,&DirItem);

		if (ListMode==2 && Result == ERR_FILE_NOT_FOUND && UpperPath(p->Path,p->Last,TSIZEOF(p->Last)))
		{
			WaitEnd();
			--p->InUpdate;

			p->LastClick = -1;
			UpdateList(p,Silent,ListMode);
			return;
		}

		if (Result == ERR_NOT_DIRECTORY && !Silent)
		{
			New.FileName[0] = 0;
			New.Ext[0] = 0;
			New.Image = IMG_FILE;
			New.Size = 0;

			Item.lParam = (DWORD)malloc(sizeof(openitem));
			if (Item.lParam)
			{
				p->Last[0] = 0;
				Pos = No;
				State = LVIS_SELECTED;
				PostMessage(p->Win.Wnd,WM_COMMAND,PLATFORM_OK,0);

				*(openitem*)Item.lParam = New;
				Item.iItem = No;
				Item.iImage = New.Image;
				ListView_InsertItem(p->WndList,&Item);
				++No;
			}
		}

		if (Result == ERR_NONE)
			Stream->Get(Stream,STREAM_BASE,p->Base,sizeof(p->Base));

		while (Result == ERR_NONE)
		{
			tchar_t Size[32];
			tchar_t Date[32];

			int i;
			for (i=0;i<No;++i)
			{
				LVITEM Item;
				Item.iItem=i;
				Item.iSubItem = 0;
				Item.mask=LVIF_PARAM;
				ListView_GetItem(p->WndList,&Item);

				if (Item.lParam && tcscmp(((openitem*)Item.lParam)->FileName,DirItem.FileName)==0)
					break;
			}

			if (i==No)
			{
				tchar_t DisplayName[MAXPATH];
				tcscpy_s(New.FileName,TSIZEOF(New.FileName),DirItem.FileName);
				New.DisplayName = DirItem.DisplayName[0] != 0;
				tcscpy_s(DisplayName,TSIZEOF(DisplayName),New.DisplayName?DirItem.DisplayName:DirItem.FileName);
				Size[0] = 0;
				Date[0] = 0;

				if (DirItem.Size < 0)
				{
					New.Image = IMG_DIR;
					New.Size = 0;
					New.Date = 0;
					tcscpy_s(New.Ext,TSIZEOF(New.Ext),LangStr(OPENFILE_ID,OPENFILE_DIR));
					tcscpy_s(New.Name,TSIZEOF(New.Name),DisplayName); //keep extension
				}
				else
				{
					switch (DirItem.Type)
					{
					case FTYPE_AUDIO: New.Image = IMG_AUDIO; break;
					case FTYPE_PLAYLIST: New.Image = IMG_PLAYLIST; break;
					case FTYPE_VIDEO: New.Image = IMG_VIDEO; break;
					default: New.Image = IMG_FILE; break;
					}
					New.Size = DirItem.Size;
					New.Date = DirItem.Date;

					SplitURL(DisplayName,NULL,0,NULL,0,New.Name,TSIZEOF(New.Name),New.Ext,TSIZEOF(New.Ext));
					tcsupr(New.Ext);
					if (New.Size >= 0)
					{
						if (New.Size < 10000*1024)
							stprintf_s(Size,TSIZEOF(Size),T("%d KB"),New.Size/1024);
						else
							stprintf_s(Size,TSIZEOF(Size),T("%d MB"),New.Size/(1024*1024));
					}
					if (New.Date >= 0)
					{
						FILETIME Time;
						SYSTEMTIME SysTime;
						Time.dwHighDateTime = (DWORD)(New.Date >> 32);
						Time.dwLowDateTime = (DWORD)(New.Date);
						if (FileTimeToSystemTime(&Time,&SysTime))
							GetDateFormat(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&SysTime,NULL,Date,TSIZEOF(Date));
					}
				}
		
				Item.lParam = (DWORD)malloc(sizeof(openitem));
				if (Item.lParam)
				{
					*(openitem*)Item.lParam = New;
					Item.iItem = No;
					Item.iImage = New.Image;
					ListView_InsertItem(p->WndList,&Item);
					ListView_SetItemText(p->WndList,No,0,New.Name);
					ListView_SetItemText(p->WndList,No,1,New.Ext);
					ListView_SetItemText(p->WndList,No,2,Size);
					ListView_SetItemText(p->WndList,No,3,Date);
					++No;
				}
			}

			Result = Stream->EnumDir(Stream,NULL,NULL,0,&DirItem);
		}