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

📄 xvid_bench.c

📁 TMS320C6713Xvid视频压缩算法源代码.rar
💻 C
📖 第 1 页 / 共 4 页
字号:
 End:	if (rgb_out!=0) free(rgb_out);	if (buf!=0) free(buf);	if (dechandle!=0) {		xerr= xvid_decore(dechandle, XVID_DEC_DESTROY, NULL, NULL);		if (xerr==XVID_ERR_FAIL)			printf("destroy-decoder failed (err=%d)!\n", xerr);	}	if (f!=0) fclose(f);}/********************************************************************* * non-regression tests *********************************************************************/void test_bugs1(){	CPU *cpu;	uint16_t mpeg_quant_matrices[64*8];	printf( "\n =====  (de)quant4_intra saturation bug? =====\n" );	for(cpu = cpu_list; cpu->name!=0; ++cpu)	{		int i;		int16_t  Src[8*8], Dst[8*8];		if (!init_cpu(cpu))			continue;		for(i=0; i<64; ++i) Src[i] = i-32;		set_intra_matrix( mpeg_quant_matrices, get_default_intra_matrix() );		dequant_mpeg_intra(Dst, Src, 31, 5, mpeg_quant_matrices);		printf( "dequant_mpeg_intra with CPU=%s:  ", cpu->name);		printf( "  Out[]= " );		for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);		printf( "\n" );	}	printf( "\n =====  (de)quant4_inter saturation bug? =====\n" );	for(cpu = cpu_list; cpu->name!=0; ++cpu)	{		int i;		int16_t  Src[8*8], Dst[8*8];		if (!init_cpu(cpu))			continue;		for(i=0; i<64; ++i) Src[i] = i-32;		set_inter_matrix( mpeg_quant_matrices, get_default_inter_matrix() );		dequant_mpeg_inter(Dst, Src, 31, mpeg_quant_matrices);		printf( "dequant_mpeg_inter with CPU=%s:  ", cpu->name);		printf( "  Out[]= " );		for(i=0; i<64; ++i) printf( "[%d]", Dst[i]);		printf( "\n" ); 	}}void test_dct_precision_diffs(){	CPU *cpu;	DECLARE_ALIGNED_MATRIX(Blk, 8, 8, int16_t, 16);	DECLARE_ALIGNED_MATRIX(Blk0, 8, 8, int16_t, 16);	printf( "\n =====  fdct/idct precision diffs =====\n" );	for(cpu = cpu_list; cpu->name!=0; ++cpu)	{		int i;		if (!init_cpu(cpu))			continue;		for(i=0; i<8*8; ++i) {			Blk0[i] = (i*7-i*i) & 0x7f;			Blk[i] = Blk0[i];		}		fdct(Blk);		idct(Blk);		printf( " fdct+idct diffs with CPU=%s: \n", cpu->name );		for(i=0; i<8; ++i) {			int j;			for(j=0; j<8; ++j) printf( " %d ", Blk[i*8+j]-Blk0[i*8+j]); 			printf("\n"); 		}		printf("\n"); 	}}void test_quant_bug(){	const int max_Q = 31;	int i, n, qm, q;	CPU *cpu;	DECLARE_ALIGNED_MATRIX(Src, 8, 8, int16_t, 16);	DECLARE_ALIGNED_MATRIX(Dst, 8, 8, int16_t, 16);	uint8_t Quant[8*8];	CPU cpu_bug_list[] = { { "PLAINC", 0 }, { "MMX   ", XVID_CPU_MMX }, {0,0} };	uint16_t Crcs_Inter[2][32];	uint16_t Crcs_Intra[2][32];	DECLARE_ALIGNED_MATRIX(mpeg_quant_matrices, 8, 64, uint16_t, 16);	printf( "\n =====  test MPEG4-quantize bug =====\n" );	for(i=0; i<64; ++i) Src[i] = 2048*(i-32)/32;#if 1	for(qm=1; qm<=255; ++qm)	{		for(i=0; i<8*8; ++i) Quant[i] = qm;		set_inter_matrix( mpeg_quant_matrices, Quant );		for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)		{			uint16_t s;			if (!init_cpu(cpu))				continue;			for(q=1; q<=max_Q; ++q) {				emms();				quant_mpeg_inter( Dst, Src, q, mpeg_quant_matrices );				emms();				for(s=0, i=0; i<64; ++i) s+=((uint16_t)Dst[i])^i;				Crcs_Inter[n][q] = s;			}		}		for(q=1; q<=max_Q; ++q)			for(i=0; i<n-1; ++i)				if (Crcs_Inter[i][q]!=Crcs_Inter[i+1][q])					printf( "Discrepancy Inter: qm=%d, q=%d  -> %d/%d !\n",							qm, q, Crcs_Inter[i][q], Crcs_Inter[i+1][q]);	}#endif#if 1	for(qm=1; qm<=255; ++qm)	{		for(i=0; i<8*8; ++i) Quant[i] = qm;		set_intra_matrix( mpeg_quant_matrices, Quant );		for(n=0, cpu = cpu_bug_list; cpu->name!=0; ++cpu, ++n)		{			uint16_t s;			if (!init_cpu(cpu))				continue;			for(q=1; q<=max_Q; ++q) {				emms();				quant_mpeg_intra( Dst, Src, q, q, mpeg_quant_matrices);				emms();				for(s=0, i=0; i<64; ++i) s+=((uint16_t)Dst[i])^i;				Crcs_Intra[n][q] = s;			}		}		for(q=1; q<=max_Q; ++q)			for(i=0; i<n-1; ++i)				if (Crcs_Intra[i][q]!=Crcs_Intra[i+1][q])					printf( "Discrepancy Intra: qm=%d, q=%d  -> %d/%d!\n",							qm, q, Crcs_Inter[i][q], Crcs_Inter[i+1][q]);	}#endif}/********************************************************************* * main *********************************************************************/int main(int argc, char *argv[]){	int what = 0;	if (argc>1) what = atoi(argv[1]);	if (what==0 || what==1) test_dct();	if (what==0 || what==2) test_mb();	if (what==0 || what==3) test_sad();	if (what==0 || what==4) test_transfer();	if (what==0 || what==5) test_quant();	if (what==0 || what==6) test_cbp();	if (what==7) {		test_IEEE1180_compliance(-256, 255, 1);		test_IEEE1180_compliance(-256, 255,-1);		test_IEEE1180_compliance(  -5,   5, 1);		test_IEEE1180_compliance(  -5,   5,-1);		test_IEEE1180_compliance(-300, 300, 1);		test_IEEE1180_compliance(-300, 300,-1);	}	if (what==8) test_dct_saturation(-256, 255);	if (what==9) {		int width, height;		if (argc<5) {			printf("usage: %s %d [bitstream] [width] [height]\n", argv[0], what);			return 1;		}		width = atoi(argv[3]);		height = atoi(argv[4]);		test_dec(argv[2], width, height, (argc>5));	}	if (what==-1) {		test_dct_precision_diffs();		test_bugs1();	}	if (what==-2)		test_quant_bug();	if (what >= 0 && what <= 6) {		printf("\n\n"			   "NB: If a function isn't optimised for a specific set of intructions,\n"			   "    a C function is used instead. So don't panic if some functions\n"			   "    may appear to be slow.\n");	}#ifdef ARCH_IS_IA32	if (what == 0 || what == 5) {		printf("\n"			   "NB: MMX mpeg4 quantization is known to have very small errors (+/-1 magnitude)\n"			   "    for 1 or 2 coefficients a block. This is mainly caused by the fact the unit\n"			   "    test goes far behind the usual limits of real encoding. Please do not report\n"			   "    this error to the developers.\n");	}#endif	return 0;}/********************************************************************* * 'Reference' output (except for timing) on an Athlon XP 2200+ *********************************************************************//* as of 2002-01-07, there's a problem with MMX mpeg4-quantization *//* as of 2003-11-30, the problem is still here *//********************************************************************* ===== test fdct/idct =====PLAINC -  2.867 usec       PSNR=13.291  MSE=3.000 MMX    -  -0.211 usec       PSNR=9.611  MSE=7.000 MMXEXT -  -0.256 usec       PSNR=9.611  MSE=7.000 3DNOW  -  2.855 usec       PSNR=13.291  MSE=3.000 3DNOWE -  1.429 usec       PSNR=13.291  MSE=3.000  ===  test block motion ===PLAINC - interp- h-round0 0.538 usec       crc32=0x115381ba PLAINC -           round1 0.527 usec       crc32=0x2b1f528f PLAINC - interp- v-round0 0.554 usec       crc32=0x423cdcc7 PLAINC -           round1 0.551 usec       crc32=0x42202efe PLAINC - interp-hv-round0 1.041 usec       crc32=0xd198d387 PLAINC -           round1 1.038 usec       crc32=0x9ecfd921  --- MMX    - interp- h-round0 0.051 usec       crc32=0x115381ba MMX    -           round1 0.053 usec       crc32=0x2b1f528f MMX    - interp- v-round0 0.048 usec       crc32=0x423cdcc7 MMX    -           round1 0.048 usec       crc32=0x42202efe MMX    - interp-hv-round0 0.074 usec       crc32=0xd198d387 MMX    -           round1 0.073 usec       crc32=0x9ecfd921  --- MMXEXT - interp- h-round0 0.020 usec       crc32=0x115381ba MMXEXT -           round1 0.025 usec       crc32=0x2b1f528f MMXEXT - interp- v-round0 0.016 usec       crc32=0x423cdcc7 MMXEXT -           round1 0.024 usec       crc32=0x42202efe MMXEXT - interp-hv-round0 0.037 usec       crc32=0xd198d387 MMXEXT -           round1 0.037 usec       crc32=0x9ecfd921  --- 3DNOW  - interp- h-round0 0.020 usec       crc32=0x115381ba 3DNOW  -           round1 0.029 usec       crc32=0x2b1f528f 3DNOW  - interp- v-round0 0.016 usec       crc32=0x423cdcc7 3DNOW  -           round1 0.024 usec       crc32=0x42202efe 3DNOW  - interp-hv-round0 0.038 usec       crc32=0xd198d387 3DNOW  -           round1 0.039 usec       crc32=0x9ecfd921  --- 3DNOWE - interp- h-round0 0.020 usec       crc32=0x115381ba 3DNOWE -           round1 0.024 usec       crc32=0x2b1f528f 3DNOWE - interp- v-round0 0.016 usec       crc32=0x423cdcc7 3DNOWE -           round1 0.021 usec       crc32=0x42202efe 3DNOWE - interp-hv-round0 0.037 usec       crc32=0xd198d387 3DNOWE -           round1 0.036 usec       crc32=0x9ecfd921  ---  ======  test SAD ======PLAINC - sad8    0.505 usec       sad=3776 PLAINC - sad16   1.941 usec       sad=27214 PLAINC - sad16bi 4.925 usec       sad=26274 PLAINC - dev16   4.254 usec       sad=3344  --- MMX    - sad8    0.036 usec       sad=3776 MMX    - sad16   0.107 usec       sad=27214 MMX    - sad16bi 0.259 usec       sad=26274 MMX    - dev16   0.187 usec       sad=3344  --- MMXEXT - sad8    0.016 usec       sad=3776 MMXEXT - sad16   0.050 usec       sad=27214 MMXEXT - sad16bi 0.060 usec       sad=26274 MMXEXT - dev16   0.086 usec       sad=3344  --- 3DNOW  - sad8    0.506 usec       sad=3776 3DNOW  - sad16   1.954 usec       sad=27214 3DNOW  - sad16bi 0.119 usec       sad=26274 3DNOW  - dev16   4.252 usec       sad=3344  --- 3DNOWE - sad8    0.017 usec       sad=3776 3DNOWE - sad16   0.038 usec       sad=27214 3DNOWE - sad16bi 0.052 usec       sad=26274 3DNOWE - dev16   0.067 usec       sad=3344  ---  ===  test transfer ===PLAINC - 8to16     0.603 usec       crc32=0x115814bb PLAINC - 16to8     1.077 usec       crc32=0xee7ccbb4 PLAINC - 8to8      0.679 usec       crc32=0xd37b3295 PLAINC - 16to8add  1.341 usec       crc32=0xdd817bf4 PLAINC - 8to16sub  1.566 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23  PLAINC - 8to16sub2 2.206 usec       crc32=0x99b6c4c7  --- MMX    - 8to16     -0.025 usec       crc32=0x115814bb MMX    - 16to8     -0.049 usec       crc32=0xee7ccbb4 MMX    - 8to8      0.014 usec       crc32=0xd37b3295 MMX    - 16to8add  0.011 usec       crc32=0xdd817bf4 MMX    - 8to16sub  0.108 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23  MMX    - 8to16sub2 0.164 usec       crc32=0x99b6c4c7  --- MMXEXT - 8to16     -0.054 usec       crc32=0x115814bb MMXEXT - 16to8     0.010 usec       crc32=0xee7ccbb4 MMXEXT - 8to8      0.015 usec       crc32=0xd37b3295 MMXEXT - 16to8add  0.008 usec       crc32=0xdd817bf4 MMXEXT - 8to16sub  0.263 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23  MMXEXT - 8to16sub2 0.178 usec       crc32=0x99b6c4c7  --- 3DNOW  - 8to16     0.666 usec       crc32=0x115814bb 3DNOW  - 16to8     1.078 usec       crc32=0xee7ccbb4 3DNOW  - 8to8      0.665 usec       crc32=0xd37b3295 3DNOW  - 16to8add  1.365 usec       crc32=0xdd817bf4 3DNOW  - 8to16sub  1.356 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23  3DNOW  - 8to16sub2 2.098 usec       crc32=0x99b6c4c7  --- 3DNOWE - 8to16     -0.024 usec       crc32=0x115814bb 3DNOWE - 16to8     0.010 usec       crc32=0xee7ccbb4 3DNOWE - 8to8      0.014 usec       crc32=0xd37b3295 3DNOWE - 16to8add  0.016 usec       crc32=0xdd817bf4 3DNOWE - 8to16sub  -0.000 usec       crc32(1)=0xa1e07163 crc32(2)=0xd86c5d23  3DNOWE - 8to16sub2 -0.031 usec       crc32=0x99b6c4c7  ---  =====  test quant =====PLAINC -   quant_mpeg_intra 98.631 usec       crc32=0xfd6a21a4 PLAINC -   quant_mpeg_inter 104.876 usec       crc32=0xf6de7757 PLAINC - dequant_mpeg_intra 50.285 usec       crc32=0x2def7bc7 PLAINC - dequant_mpeg_inter 58.316 usec       crc32=0xd878c722 PLAINC -   quant_h263_intra 33.803 usec       crc32=0x2eba9d43 PLAINC -   quant_h263_inter 45.411 usec       crc32=0xbd315a7e PLAINC - dequant_h263_intra 39.302 usec       crc32=0x9841212a PLAINC - dequant_h263_inter 44.124 usec       crc32=0xe7df8fba  --- MMX    -   quant_mpeg_intra 4.273 usec       crc32=0xdacabdb6 | ERRORMMX    -   quant_mpeg_inter 3.576 usec       crc32=0x72883ab6 | ERRORMMX    - dequant_mpeg_intra 3.793 usec       crc32=0x2def7bc7 MMX    - dequant_mpeg_inter 4.808 usec       crc32=0xd878c722 MMX    -   quant_h263_intra 2.881 usec       crc32=0x2eba9d43 MMX    -   quant_h263_inter 2.550 usec       crc32=0xbd315a7e MMX    - dequant_h263_intra 2.974 usec       crc32=0x9841212a MMX    - dequant_h263_inter 2.906 usec       crc32=0xe7df8fba  --- MMXEXT -   quant_mpeg_intra 4.221 usec       crc32=0xfd6a21a4 MMXEXT -   quant_mpeg_inter 4.339 usec       crc32=0xf6de7757 MMXEXT - dequant_mpeg_intra 3.802 usec       crc32=0x2def7bc7 MMXEXT - dequant_mpeg_inter 4.821 usec       crc32=0xd878c722 MMXEXT -   quant_h263_intra 2.884 usec       crc32=0x2eba9d43 MMXEXT -   quant_h263_inter 2.554 usec       crc32=0xbd315a7e MMXEXT - dequant_h263_intra 2.728 usec       crc32=0x9841212a MMXEXT - dequant_h263_inter 2.611 usec       crc32=0xe7df8fba  --- 3DNOW  -   quant_mpeg_intra 98.512 usec       crc32=0xfd6a21a4 3DNOW  -   quant_mpeg_inter 104.873 usec       crc32=0xf6de7757 3DNOW  - dequant_mpeg_intra 50.219 usec       crc32=0x2def7bc7 3DNOW  - dequant_mpeg_inter 58.254 usec       crc32=0xd878c722 3DNOW  -   quant_h263_intra 33.778 usec       crc32=0x2eba9d43 3DNOW  -   quant_h263_inter 41.998 usec       crc32=0xbd315a7e 3DNOW  - dequant_h263_intra 39.344 usec       crc32=0x9841212a 3DNOW  - dequant_h263_inter 43.607 usec       crc32=0xe7df8fba  --- 3DNOWE -   quant_mpeg_intra 98.490 usec       crc32=0xfd6a21a4 3DNOWE -   quant_mpeg_inter 104.889 usec       crc32=0xf6de7757 3DNOWE - dequant_mpeg_intra 3.277 usec       crc32=0x2def7bc7 3DNOWE - dequant_mpeg_inter 4.485 usec       crc32=0xd878c722 3DNOWE -   quant_h263_intra 1.882 usec       crc32=0x2eba9d43 3DNOWE -   quant_h263_inter 2.246 usec       crc32=0xbd315a7e 3DNOWE - dequant_h263_intra 3.457 usec       crc32=0x9841212a 3DNOWE - dequant_h263_inter 3.275 usec       crc32=0xe7df8fba  ---  =====  test cbp =====PLAINC -   calc_cbp#1 0.168 usec       cbp=0x15PLAINC -   calc_cbp#2 0.168 usec       cbp=0x38PLAINC -   calc_cbp#3 0.157 usec       cbp=0x0fPLAINC -   calc_cbp#4 0.235 usec       cbp=0x05 --- MMX    -   calc_cbp#1 0.070 usec       cbp=0x15MMX    -   calc_cbp#2 0.062 usec       cbp=0x38MMX    -   calc_cbp#3 0.062 usec       cbp=0x0fMMX    -   calc_cbp#4 0.061 usec       cbp=0x05 --- MMXEXT -   calc_cbp#1 0.062 usec       cbp=0x15MMXEXT -   calc_cbp#2 0.061 usec       cbp=0x38MMXEXT -   calc_cbp#3 0.061 usec       cbp=0x0fMMXEXT -   calc_cbp#4 0.061 usec       cbp=0x05 --- 3DNOW  -   calc_cbp#1 0.168 usec       cbp=0x153DNOW  -   calc_cbp#2 0.168 usec       cbp=0x383DNOW  -   calc_cbp#3 0.157 usec       cbp=0x0f3DNOW  -   calc_cbp#4 0.238 usec       cbp=0x05 --- 3DNOWE -   calc_cbp#1 0.049 usec       cbp=0x153DNOWE -   calc_cbp#2 0.049 usec       cbp=0x383DNOWE -   calc_cbp#3 0.049 usec       cbp=0x0f3DNOWE -   calc_cbp#4 0.049 usec       cbp=0x05 --- NB: If a function isn't optimised for a specific set of intructions,    a C function is used instead. So don't panic if some functions    may appear to be slow.NB: MMX mpeg4 quantization is known to have very small errors (+/-1 magnitude)    for 1 or 2 coefficients a block. This is mainly caused by the fact the unit    test goes far behind the usual limits of real encoding. Please do not report    this error to the developers*********************************************************************/

⌨️ 快捷键说明

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