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

📄 testvidinfo.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
字号:
/* Simple program -- figure out what kind of video display we have */#include <stdlib.h>#include <stdio.h>#include <stdlib.h>#include "SDL.h"#define NUM_BLITS	10#define NUM_UPDATES	500#define FLAG_MASK	(SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF)void PrintFlags(Uint32 flags){	printf("0x%8.8x", (flags & FLAG_MASK));	if ( flags & SDL_HWSURFACE ) {		printf(" SDL_HWSURFACE");	} else {		printf(" SDL_SWSURFACE");	}	if ( flags & SDL_FULLSCREEN ) {		printf(" | SDL_FULLSCREEN");	}	if ( flags & SDL_DOUBLEBUF ) {		printf(" | SDL_DOUBLEBUF");	}}int RunBlitTests(SDL_Surface *screen, SDL_Surface *bmp, int blitcount){	int i, j;	int maxx;	int maxy;	SDL_Rect dst;	maxx = (int)screen->w - bmp->w + 1;	maxy = (int)screen->h - bmp->h + 1;	for ( i = 0; i < NUM_UPDATES; ++i ) {		for ( j = 0; j < blitcount; ++j ) {			if ( maxx ) {				dst.x = rand() % maxx;			} else {				dst.x = 0;			}			if ( maxy ) {				dst.y = rand() % maxy;			} else {				dst.y = 0;			}			dst.w = bmp->w;			dst.h = bmp->h;			SDL_BlitSurface(bmp, NULL, screen, &dst);		}		SDL_Flip(screen);	}	return i;}int RunModeTests(SDL_Surface *screen){	Uint32 then, now;	Uint32 frames;	float seconds;	int i;	Uint8 r, g, b;	SDL_Surface *bmp, *tmp;	SDL_Event event;	while ( SDL_PollEvent(&event) ) {		if ( event.type == SDL_KEYDOWN )			return 0;	}	/* First test fills and screen update speed */	printf("Running color fill and fullscreen update test\n");	then = SDL_GetTicks();	frames = 0;	for ( i = 0; i < 256; ++i ) {		r = i;		g = 0;		b = 0;		SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));		SDL_Flip(screen);		++frames;	}	for ( i = 0; i < 256; ++i ) {		r = 0;		g = i;		b = 0;		SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));		SDL_Flip(screen);		++frames;	}	for ( i = 0; i < 256; ++i ) {		r = 0;		g = 0;		b = i;		SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));		SDL_Flip(screen);		++frames;	}	now = SDL_GetTicks();	seconds = (float)(now - then) / 1000.0f;	if ( seconds > 0.0f ) {		printf("%d fills and flips in %2.2f seconds, %2.2f FPS\n", frames, seconds, (float)frames / seconds);	} else {		printf("%d fills and flips in zero seconds!n", frames);	}	while ( SDL_PollEvent(&event) ) {		if ( event.type == SDL_KEYDOWN )			return 0;	}	bmp = SDL_LoadBMP("sample.bmp");	if ( ! bmp ) {		printf("Couldn't load sample.bmp: %s\n", SDL_GetError());		return 0;	}	printf("Running freshly loaded blit test: %dx%d at %d bpp, flags: ",		bmp->w, bmp->h, bmp->format->BitsPerPixel);	PrintFlags(bmp->flags);	printf("\n");	then = SDL_GetTicks();	frames = RunBlitTests(screen, bmp, NUM_BLITS);	now = SDL_GetTicks();	seconds = (float)(now - then) / 1000.0f;	if ( seconds > 0.0f ) {		printf("%d blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);	} else {		printf("%d blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);	}	tmp = bmp;	bmp = SDL_DisplayFormat(bmp);	SDL_FreeSurface(tmp);	if ( ! bmp ) {		printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());		return 0;	}	printf("Running display format blit test: %dx%d at %d bpp, flags: ",		bmp->w, bmp->h, bmp->format->BitsPerPixel);	PrintFlags(bmp->flags);	printf("\n");	then = SDL_GetTicks();	frames = RunBlitTests(screen, bmp, NUM_BLITS);	now = SDL_GetTicks();	seconds = (float)(now - then) / 1000.0f;	if ( seconds > 0.0f ) {		printf("%d blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);	} else {		printf("%d blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);	}	SDL_FreeSurface(bmp);	while ( SDL_PollEvent(&event) ) {		if ( event.type == SDL_KEYDOWN )			return 0;	}	return 1;}void RunVideoTests(){	static const struct {		int w, h, bpp;	} mode_list[] = {		{ 640, 480, 8 }, { 640, 480, 16 }, { 640, 480, 32 },		{ 800, 600, 8 }, { 800, 600, 16 }, { 800, 600, 32 },		{ 1024, 768, 8 }, { 1024, 768, 16 }, { 1024, 768, 32 }	};	static const Uint32 flags[] = {		(SDL_SWSURFACE),		(SDL_SWSURFACE | SDL_FULLSCREEN),		(SDL_HWSURFACE | SDL_FULLSCREEN),		(SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF)	};	int i, j;	SDL_Surface *screen;	/* Test out several different video mode combinations */	SDL_WM_SetCaption("SDL Video Benchmark", "vidtest");	SDL_ShowCursor(0);	for ( i = 0; i < SDL_TABLESIZE(mode_list); ++i ) {		for ( j = 0; j < SDL_TABLESIZE(flags); ++j ) {			printf("===================================\n");			printf("Setting video mode: %dx%d at %d bpp, flags: ",			                          mode_list[i].w,			                          mode_list[i].h,			                          mode_list[i].bpp);			PrintFlags(flags[j]);			printf("\n");			screen = SDL_SetVideoMode(mode_list[i].w,			                          mode_list[i].h,			                          mode_list[i].bpp,			                          flags[j]);			if ( ! screen ) {				printf("Setting video mode failed: %s\n", SDL_GetError());				continue;			}			if ( (screen->flags & FLAG_MASK) != flags[j] ) {				printf("Flags didn't match: ");				PrintFlags(screen->flags);				printf("\n");				continue;			}			if ( ! RunModeTests(screen) ) {				return;			}		}	}}int main(int argc, char *argv[]){	const SDL_VideoInfo *info;	int i;	SDL_Rect **modes;	char driver[128];	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {		fprintf(stderr,			"Couldn't initialize SDL: %s\n", SDL_GetError());		exit(1);	}	if ( SDL_VideoDriverName(driver, sizeof(driver)) ) {		printf("Video driver: %s\n", driver);	}	info = SDL_GetVideoInfo();	printf("Current display: %d bits-per-pixel\n",info->vfmt->BitsPerPixel);	if ( info->vfmt->palette == NULL ) {		printf("	Red Mask = 0x%.8x\n", info->vfmt->Rmask);		printf("	Green Mask = 0x%.8x\n", info->vfmt->Gmask);		printf("	Blue Mask = 0x%.8x\n", info->vfmt->Bmask);	}	/* Print available fullscreen video modes */	modes = SDL_ListModes(NULL, SDL_FULLSCREEN);	if ( modes == (SDL_Rect **)0 ) {		printf("No available fullscreen video modes\n");	} else	if ( modes == (SDL_Rect **)-1 ) {		printf("No special fullscreen video modes\n");	} else {		printf("Fullscreen video modes:\n");		for ( i=0; modes[i]; ++i ) {			printf("\t%dx%dx%d\n", modes[i]->w, modes[i]->h, info->vfmt->BitsPerPixel);		}	}	if ( info->wm_available ) {		printf("A window manager is available\n");	}	if ( info->hw_available ) {		printf("Hardware surfaces are available (%dK video memory)\n",			info->video_mem);	}	if ( info->blit_hw ) {		printf("Copy blits between hardware surfaces are accelerated\n");	}	if ( info->blit_hw_CC ) {		printf("Colorkey blits between hardware surfaces are accelerated\n");	}	if ( info->blit_hw_A ) {		printf("Alpha blits between hardware surfaces are accelerated\n");	}	if ( info->blit_sw ) {		printf("Copy blits from software surfaces to hardware surfaces are accelerated\n");	}	if ( info->blit_sw_CC ) {		printf("Colorkey blits from software surfaces to hardware surfaces are accelerated\n");	}	if ( info->blit_sw_A ) {		printf("Alpha blits from software surfaces to hardware surfaces are accelerated\n");	}	if ( info->blit_fill ) {		printf("Color fills on hardware surfaces are accelerated\n");	}	if ( argv[1] && (strcmp(argv[1], "-benchmark") == 0) ) {		RunVideoTests();	}	SDL_Quit();	return(0);}

⌨️ 快捷键说明

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