亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? friffchunk.h

?? 虛幻的再開發(fā)程序包源代碼
?? H
字號(hào):
/*=============================================================================
	FRiffChunk.h: Unreal RIFF standard file management.
	Copyright 1997-1999 Epic Games, Inc. All Rights Reserved.

Revision history:
	* Created by Tim Sweeney.
=============================================================================*/

/*-----------------------------------------------------------------------------
	Utilities.
-----------------------------------------------------------------------------*/

// Make a "four character code" DWORD from a four-character string.
inline DWORD appFourCC( const TCHAR* Ch )
{
	if( !Ch )
		return 0;
	INT Len=appStrlen(Ch);
	return
		((DWORD)(BYTE)(Len>0?Ch[0]:32) << 0 )
	|	((DWORD)(BYTE)(Len>1?Ch[1]:32) << 8 )
	|	((DWORD)(BYTE)(Len>2?Ch[2]:32) << 16)
	|	((DWORD)(BYTE)(Len>3?Ch[3]:32) << 24);
}

/*-----------------------------------------------------------------------------
	General purpose RIFF chunk types.
-----------------------------------------------------------------------------*/

// Base class of all RIFF chunks.
struct FRiffChunk
{
	FRiffChunk( DWORD InFourCC )
	: FourCC(InFourCC)
	{}
	virtual ~FRiffChunk()
	{
		guard(FRiffChunk::~FRiffChunk);
		for( INT i=0; i<SubChunks.Num(); i++ )
			delete SubChunks( i );
		unguard;
	}
	virtual void SerializeChunk( FArchive& Ar, INT Size )
	{
		guard(FRiffChunk::SerializeChunk);
		if( Ar.IsLoading() )
			Unknown = TArray<BYTE>( Size );
		Ar.Serialize( &Unknown(0), Size );
		unguard;
	}
	virtual FRiffChunk* CreateSubChunk( DWORD FourCC )
	{
		guard(FRiffChunk::CreateSubChunk);
		return new FRiffChunk( FourCC );
		unguard;
	}
	void Load( FArchive& Ar, INT Size )
	{
		guard(FRiffChunk::Load);
		DWORD Tmp[2]={FourCC,0}; debugf(TEXT("FRiffChunk::Read FourCC <%s> Size %08X"),appFromAnsi((ANSICHAR*)Tmp), Size );
		INT DataPos = Ar.Tell();
		SerializeChunk( Ar, Size );

		TArray<BYTE> SubChunkData;
		SubChunkData = TArray<BYTE>( Size + DataPos - Ar.Tell() );
		Ar.Serialize( &SubChunkData(0), SubChunkData.Num() );
		FBufferReader SubAr( SubChunkData );
		while( !SubAr.AtEnd() )
		{
			DWORD       SubFourCC = Arctor<DWORD> ( SubAr     );
			INT         SubSize   = Arctor<INT>   ( SubAr     );
			INT         SubStart  = SubAr.Tell    (           );
			FRiffChunk* SubCh     = CreateSubChunk( SubFourCC );
			if( SubCh )
			{
				SubChunks.AddItem( SubCh );
				SubCh->Load( SubAr, SubSize );
			}
			SubAr.Seek( SubStart + SubSize );
		}
		unguard;
	}
	void Save( FArchive& Ar )
	{
		guard(FRiffChunk::Save);
		Ar << FourCC;
		INT StartPos = Ar.Tell(), Size=0;
		Ar << Size;
		SerializeChunk( Ar, 0 );
		for( INT i=0; i<SubChunks.Num(); i++ )
			SubChunks(i)->Save( Ar );
		INT EndPos = Ar.Tell();
		Size = EndPos - StartPos - sizeof(INT);
		Ar.Seek( StartPos );
		Ar << Size;
		Ar.Seek( EndPos );
		unguard;
	}
	TArray<BYTE> Unknown;
	DWORD FourCC;
	TArray<FRiffChunk*> SubChunks;
};

// Root RIFF chunk class; file types (i.e. WAVE) are subclasses of this.
struct FRiffChunk_RIFF : public FRiffChunk
{
	FRiffChunk_RIFF( DWORD InFileType)
	: FRiffChunk( appFourCC(TEXT("RIFF")) )
	, FileType( InFileType )
	{}
	void SerializeChunk( FArchive& Ar, INT Size )
	{
		DWORD ExpectedRiffFileType = FileType;
		Ar << FileType;
		check(FileType==ExpectedRiffFileType);
	}
	DWORD FileType;
};

/*-----------------------------------------------------------------------------
	WAVE file RIFF chunk types.
-----------------------------------------------------------------------------*/

// WAVE.fmt chunk type.
struct FRiffChunk_fmt : public FRiffChunk
{
	FRiffChunk_fmt()
	: FRiffChunk( appFourCC(TEXT("fmt")) )
	{}
	void SerializeChunk( FArchive& Ar, INT Size )
	{
		Ar << wFormatTag << nChannels << nSamplesPerSec << nAvgBytesPerSec << nBlockAlign << nBitsPerSample;
		debugf(TEXT("wFormatTag: %i"),wFormatTag);
		debugf(TEXT("nChannels: %i"),nChannels);
		debugf(TEXT("nSamplesPerSec: %i"),nSamplesPerSec);
		debugf(TEXT("nAvgBytesPerSec: %i"),nAvgBytesPerSec);
		debugf(TEXT("nBlockAlign: %i"),nBlockAlign);
		debugf(TEXT("nBitsPerSample: %i"),nBitsPerSample);
	}
	_WORD	wFormatTag;
	_WORD	nChannels;
	INT		nSamplesPerSec;
	INT		nAvgBytesPerSec;
	_WORD	nBlockAlign;
	_WORD	nBitsPerSample;
};

// WAVE.data chunk type.
struct FRiffChunk_data : public FRiffChunk
{
	FRiffChunk_data()
	: FRiffChunk( appFourCC(TEXT("data")) )
	{}
	void SerializeChunk( FArchive& Ar, INT Size )
	{
		if( Ar.IsLoading() )
			Bits = TArray<BYTE>( Size );
		Ar.Serialize( &Bits(0), Bits.Num() );
	}
	TArray<BYTE> Bits;
};

// WAVE chunk type.
struct FRiffChunk_WAVE : public FRiffChunk_RIFF
{
	FRiffChunk_WAVE()
	: FRiffChunk_RIFF( appFourCC(TEXT("WAVE")) )
	{}
	void SerializeChunk( FArchive& Ar, INT Size )
	{
		FRiffChunk_RIFF::SerializeChunk( Ar, Size );
	}
	FRiffChunk* CreateSubChunk( DWORD FourCC )
	{
		if( FourCC==appFourCC(TEXT("fmt")) )
			return new FRiffChunk_fmt;
		else if( FourCC==appFourCC(TEXT("data")) )
			return new FRiffChunk_data;
		else
			return new FRiffChunk( FourCC );
	}
};

// Load a RIFF file with a certain root type.
template <class T> T* LoadRiffFile( const TCHAR* Filename, FFileManager* FileManager=GFileManager )
{
	guard(LoadRiffFile);

	// Load file.
	TArray<BYTE> Data;
	verify(appLoadFileToArray( Data, Filename, FileManager ));
	FBufferReader Ar( Data );

	// Import RIFF.
	T* RootChunk = new T;
	DWORD RiffFileFourCC = Arctor<DWORD>( Ar );
	check(RiffFileFourCC==RootChunk->FourCC);
	INT Size = Arctor<INT>( Ar );
	RootChunk->Load( Ar, Size );
	return RootChunk;

	unguard;
}

// Save a RIFF file.
UBOOL SaveRiffFile( FRiffChunk* RootChunk, const TCHAR* Filename, FFileManager* FileManager=GFileManager )
{
	guard(SaveRiffFile);

	// Export RIFF.
	FArchive* Ar = FileManager->CreateFileWriter(Filename);
	if( !Ar )
		return 0;
	RootChunk->Save( *Ar );
	UBOOL Result = Ar->Close();
	delete Ar;
	return Result;

	unguard;
}

/*-----------------------------------------------------------------------------
	The End.
-----------------------------------------------------------------------------*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美乱熟臀69xxxxxx| 国模冰冰炮一区二区| 99精品视频一区二区三区| 久久精品一区二区三区不卡 | 一区在线中文字幕| 99综合影院在线| 亚洲另类色综合网站| 欧美私人免费视频| 视频一区中文字幕国产| 日韩免费性生活视频播放| 黑人巨大精品欧美一区| 国产精品欧美极品| 欧洲激情一区二区| 日本欧美一区二区在线观看| 欧美精品一区在线观看| jizzjizzjizz欧美| 亚洲成人在线免费| 久久这里只有精品视频网| 成人av在线资源网站| 一区二区三区电影在线播| 3d动漫精品啪啪1区2区免费| 久久99这里只有精品| 日本一区二区电影| 欧美日韩国产成人在线91| 国产在线播精品第三| 亚洲欧美日韩一区二区 | 国产精品乱码妇女bbbb| 欧美亚洲另类激情小说| 韩国女主播成人在线观看| 中文字幕一区二区三区不卡在线| 欧美日韩精品系列| 丁香啪啪综合成人亚洲小说 | 精品国产青草久久久久福利| 成+人+亚洲+综合天堂| 无吗不卡中文字幕| 国产精品女人毛片| 日韩一区二区电影网| jizzjizzjizz欧美| 精品一区二区免费看| 一区二区三区国产豹纹内裤在线| 久久免费精品国产久精品久久久久 | 制服丝袜国产精品| 风间由美一区二区av101| 亚洲成人一区二区| 国产亚洲精品福利| 正在播放亚洲一区| 欧洲国产伦久久久久久久| 国产美女一区二区| 日本中文一区二区三区| 亚洲青青青在线视频| 久久久亚洲综合| 日韩一级免费观看| 欧美日韩一区二区不卡| 不卡的电影网站| 黄色日韩网站视频| 麻豆精品视频在线观看视频| 一区二区在线看| 国产精品日韩成人| 精品国精品国产| 欧美一区二区三区系列电影| 色噜噜狠狠成人网p站| 不卡的av电影在线观看| 国内精品国产成人国产三级粉色 | 毛片一区二区三区| 午夜精品一区二区三区三上悠亚| 自拍视频在线观看一区二区| 欧美激情综合五月色丁香| 精品福利一区二区三区免费视频| 在线不卡a资源高清| 欧美日韩一区视频| 欧美中文字幕一二三区视频| 91网上在线视频| 91玉足脚交白嫩脚丫在线播放| 国产麻豆视频一区二区| 狠狠色丁香久久婷婷综| 久久国产三级精品| 老司机精品视频线观看86| 日韩av高清在线观看| 日韩av一级片| 精品一区二区三区免费观看| 国内精品第一页| 国产sm精品调教视频网站| 成人午夜精品在线| a级精品国产片在线观看| 成人晚上爱看视频| 99国产一区二区三精品乱码| 99久久综合国产精品| 91久久香蕉国产日韩欧美9色| 一本久道久久综合中文字幕 | 日韩一区二区免费在线电影| 欧美一区二区视频在线观看 | 中文字幕一区不卡| 亚洲一区二区精品3399| 五月婷婷另类国产| 久久草av在线| 国产成人免费视频精品含羞草妖精 | 蜜乳av一区二区| 国产一区二区三区四区五区入口 | 国产精品护士白丝一区av| 亚洲人123区| 日韩电影免费在线看| 精品在线你懂的| 成人午夜av影视| 欧美亚洲一区二区三区四区| 日韩精品中文字幕在线不卡尤物| 久久亚洲一级片| 亚洲免费观看视频| 日韩精品福利网| 国产精品18久久久久| 色综合天天做天天爱| 91精品国产麻豆国产自产在线| 26uuu亚洲| 国产精品美日韩| 丝瓜av网站精品一区二区| 国产一区二区三区免费观看| 色综合久久久久久久久| 91精品国产综合久久精品性色| 国产欧美日韩卡一| 亚洲一二三区视频在线观看| 黄色资源网久久资源365| 色老头久久综合| 国产女人水真多18毛片18精品视频| 日韩理论片在线| 国产一区二区女| 欧美日韩亚州综合| 中文字幕一区二区三区四区不卡| 免费成人在线网站| 91浏览器入口在线观看| 久久天天做天天爱综合色| 亚洲成人免费看| 不卡av在线网| 久久久久久97三级| 婷婷综合久久一区二区三区| 99久久免费国产| 久久精品人人做人人爽97| 爽好久久久欧美精品| 在线免费观看成人短视频| 国产片一区二区| 久久精品国产精品亚洲红杏| 欧美午夜免费电影| 1000部国产精品成人观看| 国产美女在线精品| 日韩一区二区三区免费看| 亚洲chinese男男1069| 色美美综合视频| 国产精品午夜在线观看| 国内成人精品2018免费看| 日韩限制级电影在线观看| 亚洲精品免费一二三区| 丁香激情综合国产| 国产视频一区在线播放| 免费高清视频精品| 欧美精品成人一区二区三区四区| 专区另类欧美日韩| 成人动漫精品一区二区| 日本一区二区三区四区在线视频| 卡一卡二国产精品 | 国产欧美综合色| 韩国三级中文字幕hd久久精品| 日韩亚洲国产中文字幕欧美| 五月天久久比比资源色| 911国产精品| 日韩电影在线免费观看| 欧美精品高清视频| 日本aⅴ亚洲精品中文乱码| 欧美日韩精品免费观看视频| 亚洲成人福利片| 欧美一区二区视频网站| 精品一区二区三区久久| 久久影院午夜片一区| 国产精品系列在线播放| 欧美激情综合在线| av福利精品导航| 亚洲欧美日韩一区二区| 欧洲另类一二三四区| 日日摸夜夜添夜夜添精品视频| 欧美精品在线一区二区| 免费久久99精品国产| 亚洲精品一区二区三区蜜桃下载| 国内精品伊人久久久久av影院| 国产视频一区在线观看 | 午夜精品福利一区二区蜜股av| 欧美日韩午夜精品| 蜜桃视频一区二区三区| www一区二区| 成人动漫一区二区三区| 亚洲黄色录像片| 欧美一区二区三区视频在线观看| 久久精品久久久精品美女| 久久综合久久鬼色中文字| 成人精品在线视频观看| 亚洲欧美日韩一区二区| 91精品国产一区二区| 国产乱子伦视频一区二区三区| 自拍av一区二区三区| 制服.丝袜.亚洲.另类.中文| 国产精品一区二区91| 亚洲精品成人悠悠色影视| 91精品国产色综合久久不卡电影 | 日本久久电影网|