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

📄 ccoderregistry.cpp

📁 vc环境下的pgp源码
💻 CPP
字号:
/*____________________________________________________________________________
	Copyright (C) 1996-1999 Network Associates, Inc.
	All rights reserved.

	$Id: CCoderRegistry.cpp,v 1.4.10.1 1999/07/09 00:12:11 heller Exp $
____________________________________________________________________________*/
#ifdef PGP_WIN32
#include "StdAfx.h"
#endif
#include <stdlib.h>

#include "CCoderRegistry.h"
#include "CControlThread.h"
#include "fastpool.h"

#define CODERTESTBUFSIZE	15360L
CoderEntry initCoderList[] = {
			'GS4L',"GSM Lite 4410 hz", 0, 0, 0, 800,
			'GS6L',"GSM Lite 6000 hz", 0, 0, 1, 1100,
			'GS7L',"GSM Lite 7350 hz", 0, 0, 1, 1333,
			'GL80',"GSM Lite 8000 hz", 0, 0, 1, 1450,
			'GS1L',"GSM Lite 11025 hz",0, 0, 2, 2000,
			'GSM4',"GSM 4410 hz", 0, 0, 0, 910,
			'GSM6',"GSM 6000 hz", 0, 0, 1, 1250,
			'GSM7',"GSM 7350 hz", 0, 0, 1, 1516,
			'GS80',"GSM 8000 hz", 0, 0, 2, 1650,
			'GSM1',"GSM 11025 hz", 0, 0, 2, 2274,
			'ADP8',"ADPCM 8000 hz", 0, 0, 3, 4000,
			0,0,0,0,0,0,
			};
			
/*	The purpose of this module is more to determine whether or not certain
	coders are capable of running at all on the system.  It is not so much
	to simply time the coders in relation to one another since that information
	has already been essentially codified into the initialized table above.
*/

CCoderRegistry::CCoderRegistry(CControlThread *controlThread, void **outResult)
#ifdef PGP_WIN32
		: LThread(outResult)
#else
		: LThread(FALSE, thread_DefaultStack, threadOption_UsePool, outResult)
#endif	// PGP_WIN32
{
	for(mNumCoders=0;initCoderList[++mNumCoders].code;);
	mCoders = (CoderEntry *)pgp_malloc(sizeof(CoderEntry) * mNumCoders);
	pgp_memcpy(mCoders, &initCoderList, sizeof(CoderEntry) * mNumCoders);
	mControlThread = controlThread;
	mSampleBuf = (short *)pgp_malloc(CODERTESTBUFSIZE);
	mSampleCompBuf = (uchar *)pgp_malloc(CODERTESTBUFSIZE);
	mControlThread->SetCoderList(mCoders, mNumCoders);
}

CCoderRegistry::~CCoderRegistry()
{
	pgp_free(mSampleBuf);
	pgp_free(mSampleCompBuf);
}

void *
CCoderRegistry::Run(void)
{
	short cdr, inx;
	long blocks;
	short *s;
	uchar *d;
	short *sb, *se;
	ulong start;
	
#ifdef	PGP_WIN32
	SetThreadPriority(mThreadHandle, THREAD_PRIORITY_HIGHEST);
#endif
	sb = (short *)mSampleBuf;
	se = (short *)(((char *)mSampleBuf) + CODERTESTBUFSIZE);
	for(inx=0;sb<se;sb++,inx++)
		*sb = inx;	/* just setting it to non-zero data */
	for(cdr = mNumCoders-1;cdr>=0;cdr--)
	{
		(Yield)();
		switch(mCoders[cdr].code)
		{
			case 'GS7L':	/* for GSM we only test 7350 hz versions and figure out the others from that */
				blocks = 7350 / 160;
				mGSM = gsm_create();
				inx = 1;
				gsm_option(mGSM, GSM_OPT_LTP_CUT, &inx);
				start = pgp_getticks();
				for(inx = 0, s = mSampleBuf, d = mSampleCompBuf; inx<blocks ; inx++)
				{
					gsm_encode(mGSM, s, d);
					s+=160;
					d+=29;
				}
				mCoders[cdr].encTime = pgp_getticks() - start;	/* in milliseconds */
				mCoders[cdr - 2].encTime = mCoders[cdr].encTime / 5 * 3;	/* GS4L */
				mCoders[cdr - 1].encTime = mCoders[cdr].encTime / 5 * 4;	/* GS6L */
				mCoders[cdr + 1].encTime = mCoders[cdr].encTime / 5 * 6;	/* GL80 */
				mCoders[cdr + 2].encTime = mCoders[cdr].encTime / 2 * 3;	/* GS1L */
				(Yield)();
				start = pgp_getticks();
				for(inx = 0, s = mSampleBuf, d = mSampleCompBuf; inx<blocks ; inx++)
				{
					gsm_decode(mGSM, d, s);
					s+=160;
					d+=29;
				}
				mCoders[cdr].decTime = pgp_getticks() - start;	/* in milliseconds */
				mCoders[cdr - 2].decTime = mCoders[cdr].decTime / 5 * 3;	/* GS4L */
				mCoders[cdr - 1].decTime = mCoders[cdr].decTime / 5 * 4;	/* GS6L */
				mCoders[cdr + 1].decTime = mCoders[cdr].decTime / 5 * 6;	/* GL80 */
				mCoders[cdr + 2].decTime = mCoders[cdr].decTime / 2 * 3;	/* GS1L */
				gsm_destroy(mGSM);
				break;
			case 'GSM7':
				blocks = 7350 / 160;
				mGSM = gsm_create();
				start = pgp_getticks();
				for(inx = 0, s = mSampleBuf, d = mSampleCompBuf; inx<blocks ; inx++)
				{
					gsm_encode(mGSM, s, d);
					s+=160;
					d+=33;
				}
				mCoders[cdr].encTime = pgp_getticks() - start;	/* in milliseconds */
				mCoders[cdr - 2].encTime = mCoders[cdr].encTime / 5 * 3;	/* GSM4 */
				mCoders[cdr - 1].encTime = mCoders[cdr].encTime / 5 * 4;	/* GSM6 */
				mCoders[cdr + 1].encTime = mCoders[cdr].encTime / 5 * 6;	/* GS80 */
				mCoders[cdr + 2].encTime = mCoders[cdr].encTime / 2 * 3;	/* GSM1 */
				(Yield)();
				start = pgp_getticks();
				for(inx = 0, s = mSampleBuf, d = mSampleCompBuf; inx<blocks ; inx++)
				{
					gsm_decode(mGSM, d, s);
					s+=160;
					d+=33;
				}
				mCoders[cdr].decTime = pgp_getticks() - start;	/* in milliseconds */
				mCoders[cdr - 2].decTime = mCoders[cdr].decTime / 5 * 3;	/* GSM4 */
				mCoders[cdr - 1].decTime = mCoders[cdr].decTime / 5 * 4;	/* GSM5 */
				mCoders[cdr + 1].decTime = mCoders[cdr].decTime / 5 * 6;	/* GSM5 */
				mCoders[cdr + 2].decTime = mCoders[cdr].decTime / 2 * 3;	/* GSM1 */
				gsm_destroy(mGSM);
				break;
		}
	}
	//sort the list (for now it is already sorted, but we should do this eventually)
	mControlThread->SetCoderList(mCoders, mNumCoders);
	return (void *)1L;
}

⌨️ 快捷键说明

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