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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? swconvrt.cpp

?? 可用于嵌入式編程學習
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*

Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.

*/
#include "precomp.h"

#define NUMINTENSITYGROUPS	(31 + 15 + 7 + 1)	// (=54) Green,  Red,  Blue,  black
#define NUMRECENTENTRIES	16

class LRU
{
	unsigned long		*m_aiUniq;
	short				*m_aiNewer;
	short				*m_aiOlder;
	short				m_nLRU;
	short				m_nMRU;
	short				m_nListSize;
public:
						LRU();
						Init( short listSize );
	short				Find( unsigned long iUniq );	// -1 == not found
	short				Add( unsigned long iUniq );		// returns index chosen
	void				Fill( unsigned long value );
	void				Free();
//						~LRU();
};

class MaskInfo
{
public:
	unsigned long		m_aMask[3];			// entry #0:r, #1:g, #2:b
	unsigned char		m_anShift[3];		// To align top bit with bit#31
	unsigned short		m_iType;
	void				InitMaskInfo(
							XLATEOBJ *pxo,
							unsigned long ColorSource,	// XO_DESTPALETTE etc
							unsigned short ColorType );
};

// static unsigned long    (ColorConverter::*m_afpConvertFunction[])(unsigned long);

class MaskColorConverter : public ColorConverter
{
protected:
	MaskInfo			m_Src;			// Source bitmasks
	MaskInfo			m_Dst;			// Dest bitmasks
public:
	unsigned long		RGBToFromBGR( unsigned long rgbSrc );
	unsigned long		MaskedSrcToRGB( unsigned long maskedSrc );
	unsigned long		MaskedSrcToBGR( unsigned long maskedSrc );
	unsigned long		RGBSrcToMaskedDst( unsigned long rgbSrc );
	unsigned long		BGRSrcToMaskedDst( unsigned long bgrSrc );
	unsigned long		MaskedSrcToMaskedDst( unsigned long maskedSrc );
	void				Init( XLATEOBJ *pxo );
};

class GroupColorConverter : public ColorConverter
{
	unsigned long		m_aRecentResult[NUMRECENTENTRIES];
	LRU					m_LRURecent;
	short				m_piDstNext[256];	// Chain of entries of similar intensity
	short				m_aiIntensityHead[NUMINTENSITYGROUPS+1];	// last == -1
	unsigned short		m_nLowestGroup;	// Index of first valid entry in m_aiIntensityHead[]
	unsigned short		m_nHighestGroup;// Index of first -1 in m_aiIntensityHead[]
	unsigned long		m_pPalette[256];// Destination palette	 
	unsigned short		m_nPaletteSize;	// Destination palette size ( <= 256 )
	MaskInfo			m_Src;			// Source bitmasks
public:
	unsigned long		RGBToFromBGR( unsigned long rgbSrc );
	unsigned long		MaskedSrcToRGB( unsigned long maskedSrc );
	unsigned long		MaskedSrcToPaletteDst( unsigned long maskedSrc );
	int					InitLRU();
	void				FreeLRU();
	void				Init( XLATEOBJ *pxo );
};

class MonoColorConverter : public ColorConverter
{
	unsigned long		m_BackgroundColor;
public:
	unsigned long		AnyToMono( unsigned long srcValue );
	void				Init( unsigned long color )
						{
							m_BackgroundColor = color;
						}
};

class LookupColorConverter : public ColorConverter
{
	MaskInfo			m_Dst;			// Dest bitmasks
	unsigned long		m_aLookup[256];
public:
	unsigned long		RGBSrcToMaskedDst( unsigned long rgbSrc );
	void				Init( XLATEOBJ *pxo );
	unsigned long *		LookupTable() { return m_aLookup; }
};

#define MASK_LRU_SIZE 10
#define GROUP_LRU_SIZE 2
#define MONO_LRU_SIZE 10
#define LOOKUP_LRU_SIZE 4


LRU gMaskedLRU;
LRU gGroupLRU;
LRU gMonoLRU;
LRU gLookupLRU;

MaskColorConverter gMaskedConverter[MASK_LRU_SIZE];
GroupColorConverter gGroupConverter[GROUP_LRU_SIZE];
MonoColorConverter gMonoConverter[MONO_LRU_SIZE];
LookupColorConverter gLookupConverter[LOOKUP_LRU_SIZE];

// If AllocConverters fails, this returns 0. No free's are done as the driver is going
// to exit anyway.
int AllocConverters()
{
	int i;

	if( !gMaskedLRU.Init(MASK_LRU_SIZE) ||
		!gGroupLRU.Init(GROUP_LRU_SIZE) ||
		!gMonoLRU.Init(MONO_LRU_SIZE) ||
		!gLookupLRU.Init(LOOKUP_LRU_SIZE) )
		return 0;
	
	for( i=0; i<GROUP_LRU_SIZE; i++ )
		if( !gGroupConverter[i].InitLRU() )
			return 0;

	return 1;
}

void FreeConverters()
{
	int i;

	gMaskedLRU.Free();
	gGroupLRU.Free();
	gMonoLRU.Free();
	gLookupLRU.Free();
	for( i=0; i<GROUP_LRU_SIZE; i++ )
		gGroupConverter[i].FreeLRU();
}

int GroupColorConverter::InitLRU()
{
	return m_LRURecent.Init(NUMRECENTENTRIES);
}

void GroupColorConverter::FreeLRU()
{
	m_LRURecent.Free();
}

LRU::LRU()
{
	m_aiUniq = (unsigned long *)NULL;
	m_aiNewer = (short *)NULL;
	m_aiOlder = (short *)NULL;
}

int LRU::Init( short listSize )
{
	int i;

	DEBUGMSG(GPE_ZONE_BLT_LO,(TEXT("LRU::LRU( list size = %d )\r\n"),listSize ));

	m_aiUniq = (unsigned long *)malloc( listSize * sizeof(unsigned long) );
	m_aiNewer = (short *)malloc( listSize * sizeof(unsigned short) );
	m_aiOlder = (short *)malloc( listSize * sizeof(unsigned short) );
	if( !m_aiUniq || !m_aiNewer || !m_aiOlder )
		return 0;	// see AllocConverters
	m_nListSize = listSize;
	for( i=0; i<m_nListSize; i++ )
	{
		m_aiUniq[i] = 0;
		m_aiNewer[i] = i-1;		// Note that m_aiNewer[m_nMRU] is "undefined"
		m_aiOlder[i] = i+1;		// Note that m_aiOlder[m_nLRU] is "undefined"
	}
	m_nMRU = 0;
	m_nLRU = m_nListSize-1;
	return 1;
}

short LRU::Find( unsigned long iUniq )	// -1 == not found
{
	int i;
	for( i=0; i<m_nListSize; i++ )
	{
		if( m_aiUniq[i] == iUniq )
		{
			DEBUGMSG(GPE_ZONE_BLT_LO,(TEXT("LRU 0x%08x Find 0x%08x: found at location %d\r\n"),
				this, iUniq, i ));
			// Now we pop this to the most recently used:
			if( i == m_nLRU )
			{
				m_nLRU = m_aiNewer[i];
				m_aiNewer[m_nMRU] = i;
				m_aiOlder[i] = m_nMRU;
				m_nMRU = i;
			}
			else if ( i != m_nMRU )
			{
				m_aiNewer[m_aiOlder[i]] = m_aiNewer[i];
				m_aiOlder[m_aiNewer[i]] = m_aiOlder[i];
				m_aiNewer[m_nMRU] = i;
				m_aiOlder[i] = m_nMRU;
				m_nMRU = i;
			}
			return i;
		}
	}
	DEBUGMSG(GPE_ZONE_BLT_LO,(TEXT("LRU 0x%08x Find 0x%08x: Not found!\r\n"),
		this, iUniq ));
	return -1;
}

short LRU::Add( unsigned long iUniq )		// returns index chosen
{
	m_aiNewer[m_nMRU] = m_nLRU;
	m_aiOlder[m_nLRU] = m_nMRU;
	m_nMRU = m_nLRU;
	m_nLRU = m_aiNewer[m_nLRU];
	m_aiUniq[m_nMRU] = iUniq;
	return m_nMRU;	
}

void LRU::Fill( unsigned long value )
{
	int i;
	for( i=0; i<m_nListSize; i++ )
		m_aiUniq[i] = value;
}

// Not needed so long as DrvDisablePDEV gets called when this driver gets unloaded.
//LRU::~LRU()
//{
//	Free();
//}

void LRU::Free()
{
	if( m_aiUniq )
	{
		free( (void *)m_aiUniq );
		m_aiUniq = (unsigned long *)NULL;
	}
	if( m_aiNewer )
	{
		free( (void *)m_aiNewer );
		m_aiNewer = (short *)NULL;
	}
	if( m_aiOlder )
	{
		free( (void *)m_aiOlder );
		m_aiOlder = (short *)NULL;
	}
}


//typedef struct _XLATEOBJ {
//    ULONG  iUniq;
//    FLONG  flXlate;
//    USHORT iSrcType;
//    USHORT iDstType;
//    ULONG  cEntries;
//    ULONG  *pulXlate;
//} XLATEOBJ;


unsigned long SwapRedBlue( unsigned long srcValue )
{
	unsigned long dstValue = srcValue;
	((unsigned char *)(&dstValue))[0] = ((unsigned char *)(&srcValue))[2];
	((unsigned char *)(&dstValue))[2] = ((unsigned char *)(&srcValue))[0];
	return dstValue;
}



//#define XO_TRIVIAL 1
//#define XO_TABLE 2
//#define XO_TO_MONO 4
//
//#define PAL_INDEXED 1
//#define PAL_BITFIELDS 2
//#define PAL_RGB 4
//#define PAL_BGR 8
//
//#define XO_SRCPALETTE    1
//#define XO_DESTPALETTE   2
//#define XO_DESTDCPALETTE 3

	

void MaskInfo::InitMaskInfo(
	XLATEOBJ *pxo,
	unsigned long colorSource,	// XO_DESTPALETTE etc
	unsigned short colorType )	// PAL_INDEXED etc
{
	unsigned long mask;
	int topBit;

	m_iType = colorType;

	if( m_iType == PAL_BITFIELDS )
	{
		unsigned char component;
		XLATEOBJ_cGetPalette( pxo, colorSource, 3, m_aMask );
		for( component=0; component<3; component++ )
		{
			mask = m_aMask[component];
			for( topBit=0; mask; topBit++ )
				mask>>=1;
			m_anShift[component] = 32-topBit;
		}
	}
}

#define FNTYPE (unsigned long (ColorConverter::*)(unsigned long)) 

unsigned long (ColorConverter::* const m_afpConvertFunction[])(unsigned long) =
// unsigned long (ColorConverter::*ColorConverter::m_afpConvertFunction[])(unsigned long) =
{
//	(unsigned long (ColorConverter::*)(unsigned long)) NULL,	// Indexed -> indexed
//	(unsigned long (ColorConverter::*)(unsigned long)) NULL,	// Indexed -> bitfield
//	(unsigned long (ColorConverter::*)(unsigned long)) NULL,	// Indexed -> rgb
//	(unsigned long (ColorConverter::*)(unsigned long)) NULL,	// Indexed -> bgr

	FNTYPE GroupColorConverter::MaskedSrcToPaletteDst,			// bitfield -> indexed
	FNTYPE MaskColorConverter::MaskedSrcToMaskedDst,			// bitfield -> bitfield
	FNTYPE MaskColorConverter::MaskedSrcToRGB,					// bitfield -> rgb
	FNTYPE MaskColorConverter::MaskedSrcToBGR,					// bitfield -> bgr

	FNTYPE GroupColorConverter::MaskedSrcToPaletteDst,			// rgb -> indexed
	FNTYPE MaskColorConverter::RGBSrcToMaskedDst,				// rgb -> bitfield
	FNTYPE NULL,												// rgb -> rgb
	FNTYPE MaskColorConverter::RGBToFromBGR,					// rgb -> bgr

	FNTYPE GroupColorConverter::MaskedSrcToPaletteDst,			// bgr -> indexed
	FNTYPE MaskColorConverter::BGRSrcToMaskedDst,				// bgr -> bitfield
	FNTYPE MaskColorConverter::RGBToFromBGR,					// bgr -> rgb
	FNTYPE NULL													// bgr -> bgr
};


static unsigned char log2nOver2[] = { 0, 1, 2, 2, 3 };

unsigned long RGBError(
	unsigned long v1,
	unsigned long v2 )
{
	unsigned char *p1 = (unsigned char *)&v1;
	unsigned char *p2 = (unsigned char *)&v2;
	long accum = *p1++ - *p2++;
	accum *= accum;
	long diff = *p1++ - *p2++;
	accum += diff * diff;
	diff = *p1++ - *p2++;
	return accum + diff * diff;
}

short RGBToGroup( unsigned long rgbValue )
{
	// From 0x00bbggrr format
	return (short)(
		((rgbValue>>(24-3))&7)+		// 3 bits blue
		((rgbValue>>(16-5))&31)+	// 5 bits green
		((rgbValue>>(8-4))&15));		// 4 bits red
}



void ColorConverter::InitConverter(
	XLATEOBJ *pxo,
	ColorConverter **ppConvertObj,
	unsigned long (ColorConverter::**ppConvertFn)(unsigned long),
	unsigned long **ppLookup )
{
//	m_iUniq = pxo->iUniq;

	*ppConvertObj = (ColorConverter *)NULL;
	*ppLookup = (unsigned long *)NULL;
	*ppConvertFn = NULL;
	short converterIndex;

	if( pxo->flXlate == XO_TRIVIAL )
	{
		DEBUGMSG(GPE_ZONE_BLT_LO,(TEXT("XO_TRIVIAL\r\n")));
		;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久久久久| 欧美亚洲另类激情小说| 久久国产精品色| 日韩在线播放一区二区| 日韩电影在线一区| 美女看a上一区| 蜜桃视频一区二区| 精品综合免费视频观看| 久久丁香综合五月国产三级网站| 日韩高清不卡一区二区三区| 石原莉奈一区二区三区在线观看| 天天操天天综合网| 看电影不卡的网站| 激情综合五月婷婷| 风间由美一区二区三区在线观看 | 国产一区三区三区| 国产真实乱对白精彩久久| 国产在线观看一区二区 | 精品国产乱码久久久久久浪潮| 日韩久久精品一区| 精品国产免费人成在线观看| 欧美成人免费网站| 国产精品久久久久久久久免费相片| 国产精品青草综合久久久久99| 亚洲欧美韩国综合色| 亚洲成人三级小说| 精东粉嫩av免费一区二区三区| 国产毛片精品一区| 91首页免费视频| 777精品伊人久久久久大香线蕉| 精品国产一区a| 国产精品视频免费看| 一区二区三区国产精华| 石原莉奈在线亚洲三区| 国产成人av一区二区三区在线| 91在线播放网址| 在线不卡一区二区| 国产欧美1区2区3区| 粉嫩欧美一区二区三区高清影视 | 日韩视频一区二区三区 | 天天综合色天天综合色h| 久久不见久久见免费视频7| 成人激情校园春色| 欧美日本高清视频在线观看| wwwwww.欧美系列| 亚洲精品自拍动漫在线| 奇米一区二区三区| fc2成人免费人成在线观看播放 | 久久五月婷婷丁香社区| 亚洲视频香蕉人妖| 免费看日韩a级影片| av成人免费在线| 日韩精品一区在线观看| 中文字幕制服丝袜成人av| 视频一区视频二区中文| 99久久99久久精品国产片果冻 | 国产清纯白嫩初高生在线观看91 | 亚洲精品视频免费观看| 蜜芽一区二区三区| 色综合激情五月| 精品国产91乱码一区二区三区| 亚洲欧美另类小说视频| 国产一区二区女| 欧美日本韩国一区二区三区视频| 久久精品无码一区二区三区| 色94色欧美sute亚洲13| 精品国产一区二区精华| 亚洲福中文字幕伊人影院| 春色校园综合激情亚洲| 日韩亚洲欧美一区二区三区| 亚洲欧美另类久久久精品| 国产精品综合网| 欧美一级高清大全免费观看| 亚洲一区二区中文在线| 99久久夜色精品国产网站| 日韩欧美电影一区| 午夜国产精品一区| 色哟哟一区二区在线观看| 欧美极品美女视频| 极品少妇一区二区三区精品视频 | 中文字幕视频一区| 国产麻豆精品视频| 日韩欧美一级二级| 奇米色777欧美一区二区| 欧美日韩综合在线| 亚洲青青青在线视频| 成人黄色小视频在线观看| 欧美精品一区二区三区久久久| 日日夜夜精品视频免费 | 亚洲九九爱视频| 成人99免费视频| 中文字幕第一页久久| 国产乱子轮精品视频| 日韩欧美高清dvd碟片| 免费精品视频在线| 6080yy午夜一二三区久久| 亚洲福利一区二区三区| 欧美日韩专区在线| 香蕉影视欧美成人| 精品视频1区2区| 香港成人在线视频| 欧美久久一二区| 亚洲国产视频一区二区| 欧美亚洲愉拍一区二区| 亚洲一区二区三区四区在线| 亚洲另类春色校园小说| 在线精品亚洲一区二区不卡| 亚洲乱码国产乱码精品精98午夜| 色综合久久综合网| 亚洲一区av在线| 欧美精品高清视频| 蜜臀久久久久久久| 久久久亚洲精品一区二区三区 | 99久久国产综合色|国产精品| 亚洲国产精品精华液2区45| 高清久久久久久| 中文字幕在线观看不卡视频| av电影在线观看一区| 一区二区三区精品视频| 777亚洲妇女| 国产在线播放一区三区四| 久久久精品免费免费| 成年人网站91| 亚洲一区二区三区自拍| 日韩精品在线网站| 成人激情动漫在线观看| 亚洲在线观看免费视频| 91精品在线免费| 国产九九视频一区二区三区| 综合婷婷亚洲小说| 91精品国产色综合久久不卡蜜臀| 麻豆精品一区二区综合av| 国产日韩成人精品| 欧美在线一区二区| 精品在线亚洲视频| 国产精品久久看| 欧美高清视频一二三区| 国产在线视频不卡二| 日韩一区在线看| 91精品国产综合久久久久久| 欧美福利电影网| 国产高清久久久久| 亚洲在线观看免费| 精品国产乱码久久久久久牛牛| 丰满白嫩尤物一区二区| 五月综合激情婷婷六月色窝| 26uuu另类欧美亚洲曰本| 91女神在线视频| 看片网站欧美日韩| 亚洲欧洲制服丝袜| 日韩免费福利电影在线观看| 91视视频在线直接观看在线看网页在线看| 亚洲福利一二三区| 国产精品福利影院| 91精品视频网| 成人少妇影院yyyy| 男男gaygay亚洲| 伊人性伊人情综合网| 精品成人一区二区三区| 欧美在线视频全部完| 丁香激情综合国产| 蜜臀91精品一区二区三区| 日韩美女视频一区二区| 欧美不卡一区二区三区四区| 91视频在线观看免费| 国产精品一区专区| 日韩国产精品91| 亚洲视频一二区| 国产欧美视频一区二区三区| 欧美日韩aaa| 色婷婷综合久久| 国产aⅴ综合色| 免费在线看成人av| 亚洲va欧美va人人爽午夜| 国产欧美日本一区视频| 欧美一区二区三区白人| 在线免费观看视频一区| 不卡av在线网| 国产乱子轮精品视频| 另类综合日韩欧美亚洲| 亚洲成av人片www| 樱花草国产18久久久久| 中文字幕日韩精品一区| 国产亚洲精品久| 欧美本精品男人aⅴ天堂| 宅男噜噜噜66一区二区66| 在线中文字幕不卡| 色综合天天综合给合国产| 国产大陆精品国产| 国产最新精品免费| 蜜桃av一区二区在线观看| 亚洲bdsm女犯bdsm网站| 亚洲影院在线观看| 一区二区三区四区乱视频| 国产精品麻豆网站| 国产精品国产三级国产aⅴ中文 | 日韩欧美国产电影| 777奇米成人网| 欧美一级日韩一级| 欧美日韩日本视频|