From 4135dda11fc319b084a0b3e245e962ff853cd323 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 8 Aug 2003 21:31:18 +0000 Subject: [PATCH] Date: Mon, 28 Jul 2003 18:30:50 +0300 From: "Mike Gorchak" Subject: New test for overlays While writting QNX Photon Overlay code I've found that the existent overlay test application is not enough, it performs too artificial tests - it always moves/resizes the overlay's viewport, but in the real life that happens very rare. So I decided to write new test (commonly base on testoverlay.c code) and called it testoverlay2 :) moose.dat - raw 8 bit paletted data of the small movie. (It was a moose.gif, also included in the attachment as reference, but not needed for this test, it is just for information). I cannot find, who created this .gif, so no credits this time :) But over inet I saw this gif zillion times, so I think we do not infringing somebody rights :) --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40673 --- test/Makefile.am | 2 +- test/moose.dat | Bin 0 -> 56320 bytes test/testoverlay2.c | 572 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 573 insertions(+), 1 deletion(-) create mode 100644 test/moose.dat create mode 100644 test/testoverlay2.c diff --git a/test/Makefile.am b/test/Makefile.am index 9412bb560..619abbe32 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -4,7 +4,7 @@ noinst_PROGRAMS = \ testver testtypes testhread testlock testerror testsem testtimer \ loopwave testcdrom testkeys testvidinfo checkkeys testwin graywin \ testsprite testbitmap testalpha testgamma testpalette testwm \ - threadwin testoverlay testgl testjoystick + threadwin testoverlay testoverlay2 testgl testjoystick testalpha_SOURCES = testalpha.c testalpha_LDADD = @MATHLIB@ diff --git a/test/moose.dat b/test/moose.dat new file mode 100644 index 0000000000000000000000000000000000000000..10530046fd7cc7545e5a0c94924ae158e1842a34 GIT binary patch literal 56320 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 literal 0 HcmV?d00001 diff --git a/test/testoverlay2.c b/test/testoverlay2.c new file mode 100644 index 000000000..3a5d91f67 --- /dev/null +++ b/test/testoverlay2.c @@ -0,0 +1,572 @@ +/******************************************************************************** + * * + * Test of the overlay used for moved pictures, test more closed to real life. * + * Running trojan moose :) Coded by Mike Gorchak. * + * * + ********************************************************************************/ + +#include "SDL.h" + +#define MOOSEPIC_W 64 +#define MOOSEPIC_H 88 + +#define MOOSEFRAME_SIZE (MOOSEPIC_W * MOOSEPIC_H) +#define MOOSEFRAMES_COUNT 10 + +SDL_Color MooseColors[84]={ + { 49, 49, 49}, { 66, 24, 0}, { 66, 33, 0}, { 66, 66, 66}, + { 66, 115, 49}, { 74, 33, 0}, { 74, 41, 16}, { 82, 33, 8}, + { 82, 41, 8}, { 82, 49, 16}, { 82, 82, 82}, { 90, 41, 8}, + { 90, 41, 16}, { 90, 57, 24}, { 99, 49, 16}, { 99, 66, 24}, + { 99, 66, 33}, { 99, 74, 33}, {107, 57, 24}, {107, 82, 41}, + {115, 57, 33}, {115, 66, 33}, {115, 66, 41}, {115, 74, 0}, + {115, 90, 49}, {115, 115, 115}, {123, 82, 0}, {123, 99, 57}, + {132, 66, 41}, {132, 74, 41}, {132, 90, 8}, {132, 99, 33}, + {132, 99, 66}, {132, 107, 66}, {140, 74, 49}, {140, 99, 16}, + {140, 107, 74}, {140, 115, 74}, {148, 107, 24}, {148, 115, 82}, + {148, 123, 74}, {148, 123, 90}, {156, 115, 33}, {156, 115, 90}, + {156, 123, 82}, {156, 132, 82}, {156, 132, 99}, {156, 156, 156}, + {165, 123, 49}, {165, 123, 90}, {165, 132, 82}, {165, 132, 90}, + {165, 132, 99}, {165, 140, 90}, {173, 132, 57}, {173, 132, 99}, + {173, 140, 107}, {173, 140, 115}, {173, 148, 99}, {173, 173, 173}, + {181, 140, 74}, {181, 148, 115}, {181, 148, 123}, {181, 156, 107}, + {189, 148, 123}, {189, 156, 82}, {189, 156, 123}, {189, 156, 132}, + {189, 189, 189}, {198, 156, 123}, {198, 165, 132}, {206, 165, 99}, + {206, 165, 132}, {206, 173, 140}, {206, 206, 206}, {214, 173, 115}, + {214, 173, 140}, {222, 181, 148}, {222, 189, 132}, {222, 189, 156}, + {222, 222, 222}, {231, 198, 165}, {231, 231, 231}, {239, 206, 173} +}; + +/* All RGB2YUV conversion code and some other parts of code has been taken from testoverlay.c */ + +/* NOTE: These RGB conversion functions are not intended for speed, + only as examples. +*/ + +void RGBtoYUV(Uint8 *rgb, int *yuv, int monochrome, int luminance) +{ + int i; + + if (monochrome) + { +#if 1 /* these are the two formulas that I found on the FourCC site... */ + yuv[0] = 0.299*rgb[0] + 0.587*rgb[1] + 0.114*rgb[2]; + yuv[1] = 128; + yuv[2] = 128; +#else + yuv[0] = (0.257 * rgb[0]) + (0.504 * rgb[1]) + (0.098 * rgb[2]) + 16; + yuv[1] = 128; + yuv[2] = 128; +#endif + } + else + { +#if 1 /* these are the two formulas that I found on the FourCC site... */ + yuv[0] = 0.299*rgb[0] + 0.587*rgb[1] + 0.114*rgb[2]; + yuv[1] = (rgb[2]-yuv[0])*0.565 + 128; + yuv[2] = (rgb[0]-yuv[0])*0.713 + 128; +#else + yuv[0] = (0.257 * rgb[0]) + (0.504 * rgb[1]) + (0.098 * rgb[2]) + 16; + yuv[1] = 128 - (0.148 * rgb[0]) - (0.291 * rgb[1]) + (0.439 * rgb[2]); + yuv[2] = 128 + (0.439 * rgb[0]) - (0.368 * rgb[1]) - (0.071 * rgb[2]); +#endif + } + + if (luminance!=100) + { + yuv[0]=yuv[0]*luminance/100; + if (yuv[0]>255) + yuv[0]=255; + } +} + +ConvertRGBtoYV12(SDL_Surface *s, SDL_Overlay *o, int monochrome, int luminance) +{ + int x,y; + int yuv[3]; + Uint8 *p,*op[3]; + + SDL_LockSurface(s); + SDL_LockYUVOverlay(o); + + /* Convert */ + for(y=0; yh && yh; y++) + { + p=((Uint8 *) s->pixels)+s->pitch*y; + op[0]=o->pixels[0]+o->pitches[0]*y; + op[1]=o->pixels[1]+o->pitches[1]*(y/2); + op[2]=o->pixels[2]+o->pitches[2]*(y/2); + for(x=0; xw && xw; x++) + { + RGBtoYUV(p, yuv, monochrome, luminance); + *(op[0]++)=yuv[0]; + if(x%2==0 && y%2==0) + { + *(op[1]++)=yuv[2]; + *(op[2]++)=yuv[1]; + } + p+=s->format->BytesPerPixel; + } + } + + SDL_UnlockYUVOverlay(o); + SDL_UnlockSurface(s); +} + +ConvertRGBtoIYUV(SDL_Surface *s, SDL_Overlay *o, int monochrome, int luminance) +{ + int x,y; + int yuv[3]; + Uint8 *p,*op[3]; + + SDL_LockSurface(s); + SDL_LockYUVOverlay(o); + + /* Convert */ + for(y=0; yh && yh; y++) + { + p=((Uint8 *) s->pixels)+s->pitch*y; + op[0]=o->pixels[0]+o->pitches[0]*y; + op[1]=o->pixels[1]+o->pitches[1]*(y/2); + op[2]=o->pixels[2]+o->pitches[2]*(y/2); + for(x=0; xw && xw; x++) + { + RGBtoYUV(p,yuv, monochrome, luminance); + *(op[0]++)=yuv[0]; + if(x%2==0 && y%2==0) + { + *(op[1]++)=yuv[1]; + *(op[2]++)=yuv[2]; + } + p+=s->format->BytesPerPixel; + } + } + + SDL_UnlockYUVOverlay(o); + SDL_UnlockSurface(s); +} + +ConvertRGBtoUYVY(SDL_Surface *s, SDL_Overlay *o, int monochrome, int luminance) +{ + int x,y; + int yuv[3]; + Uint8 *p,*op; + + SDL_LockSurface(s); + SDL_LockYUVOverlay(o); + + for(y=0; yh && yh; y++) + { + p=((Uint8 *) s->pixels)+s->pitch*y; + op=o->pixels[0]+o->pitches[0]*y; + for(x=0; xw && xw; x++) + { + RGBtoYUV(p, yuv, monochrome, luminance); + if(x%2==0) + { + *(op++)=yuv[1]; + *(op++)=yuv[0]; + *(op++)=yuv[2]; + } + else + *(op++)=yuv[0]; + + p+=s->format->BytesPerPixel; + } + } + + SDL_UnlockYUVOverlay(o); + SDL_UnlockSurface(s); +} + +ConvertRGBtoYVYU(SDL_Surface *s, SDL_Overlay *o, int monochrome, int luminance) +{ + int x,y; + int yuv[3]; + Uint8 *p,*op; + + SDL_LockSurface(s); + SDL_LockYUVOverlay(o); + + for(y=0; yh && yh; y++) + { + p=((Uint8 *) s->pixels)+s->pitch*y; + op=o->pixels[0]+o->pitches[0]*y; + for(x=0; xw && xw; x++) + { + RGBtoYUV(p,yuv, monochrome, luminance); + if(x%2==0) + { + *(op++)=yuv[0]; + *(op++)=yuv[2]; + op[1]=yuv[1]; + } + else + { + *op=yuv[0]; + op+=2; + } + + p+=s->format->BytesPerPixel; + } + } + + SDL_UnlockYUVOverlay(o); + SDL_UnlockSurface(s); +} + +ConvertRGBtoYUY2(SDL_Surface *s, SDL_Overlay *o, int monochrome, int luminance) +{ + int x,y; + int yuv[3]; + Uint8 *p,*op; + + SDL_LockSurface(s); + SDL_LockYUVOverlay(o); + + for(y=0; yh && yh; y++) + { + p=((Uint8 *) s->pixels)+s->pitch*y; + op=o->pixels[0]+o->pitches[0]*y; + for(x=0; xw && xw; x++) + { + RGBtoYUV(p,yuv, monochrome, luminance); + if(x%2==0) + { + *(op++)=yuv[0]; + *(op++)=yuv[1]; + op[1]=yuv[2]; + } + else + { + *op=yuv[0]; + op+=2; + } + + p+=s->format->BytesPerPixel; + } + } + + SDL_UnlockYUVOverlay(o); + SDL_UnlockSurface(s); +} + +void Draw() +{ +} + +static void PrintUsage(char *argv0) +{ + fprintf(stderr, "Usage: %s [arg] [arg] [arg] ...\n", argv0); + fprintf(stderr, "Where 'arg' is one of:\n"); + fprintf(stderr, " -fps \n"); + fprintf(stderr, " -format (one of the: YV12, IYUV, YUY2, UYVY, YVYU)\n"); + fprintf(stderr, " -scale (initial scale of the overlay)\n"); + fprintf(stderr, " -help (shows this help)\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " Press ESC to exit, or SPACE to freeze the movie while application running.\n"); + fprintf(stderr, "\n"); +} + +int main(int argc, char **argv) +{ + Uint8* RawMooseData; + SDL_RWops* handle; + SDL_Surface* screen; + SDL_Surface* MooseFrame[MOOSEFRAMES_COUNT]; + SDL_Overlay* overlay; + SDL_Rect overlayrect; + SDL_Event event; + Uint32 lastftick; + int paused=0; + int i; + int fps=12; + int fpsdelay; + int overlay_format=SDL_YUY2_OVERLAY; + int scale=5; + + while ( argc > 1 ) + { + if (strcmp(argv[1], "-fps")== 0) + { + if (argv[2]) + { + fps = atoi(argv[2]); + if (fps==0) + { + fprintf(stderr, "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + return -1; + } + if ((fps<0) || (fps>1000)) + { + fprintf(stderr, "The -fps option must be in range from 1 to 1000, default is 12.\n"); + return -1; + } + argv += 2; + argc -= 2; + } + else + { + fprintf(stderr, "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + return -1; + } + } else + if (strcmp(argv[1], "-format") == 0) + { + if (argv[2]) + { + if (!strcmp(argv[2],"YV12")) + overlay_format = SDL_YV12_OVERLAY; + else if(!strcmp(argv[2],"IYUV")) + overlay_format = SDL_IYUV_OVERLAY; + else if(!strcmp(argv[2],"YUY2")) + overlay_format = SDL_YUY2_OVERLAY; + else if(!strcmp(argv[2],"UYVY")) + overlay_format = SDL_UYVY_OVERLAY; + else if(!strcmp(argv[2],"YVYU")) + overlay_format = SDL_YVYU_OVERLAY; + else + { + fprintf(stderr, "The -format option %s is not recognized, see help for info.\n", argv[2]); + return -1; + } + argv += 2; + argc -= 2; + } + else + { + fprintf(stderr, "The -format option requires an argument, default is YUY2.\n"); + return -1; + } + } else + if (strcmp(argv[1], "-scale") == 0) + { + if (argv[2]) + { + scale = atoi(argv[2]); + if (scale==0) + { + fprintf(stderr, "The -scale option requires an argument [from 1 to 50], default is 5.\n"); + return -1; + } + if ((scale<0) || (scale>50)) + { + fprintf(stderr, "The -scale option must be in range from 1 to 50, default is 5.\n"); + return -1; + } + argv += 2; + argc -= 2; + } + else + { + fprintf(stderr, "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + return -1; + } + } else + if ((strcmp(argv[1], "-help") == 0 ) || (strcmp(argv[1], "-h") == 0)) + { + PrintUsage(argv[0]); + return 0; + } else + { + fprintf(stderr, "Unrecognized option: %s.\n", argv[1]); + return -1; + } + break; + } + + RawMooseData=(Uint8*)malloc(MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT); + if (RawMooseData==NULL) + { + fprintf(stderr, "Can't allocate memory for movie !\n"); + free(RawMooseData); + return 1; + } + + /* load the trojan moose images */ + handle=SDL_RWFromFile("moose.dat", "r"); + if (handle==NULL) + { + fprintf(stderr, "Can't find the file moose.dat !\n"); + free(RawMooseData); + return 2; + } + + SDL_RWread(handle, RawMooseData, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT); + + SDL_RWclose(handle); + + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0) + { + fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); + free(RawMooseData); + return 3; + } + atexit(SDL_Quit); + + /* Set 640x480 video mode */ + if ( (screen=SDL_SetVideoMode(MOOSEPIC_W*scale, MOOSEPIC_H*scale, 0, SDL_RESIZABLE | SDL_SWSURFACE)) == NULL ) + { + fprintf(stderr, "Couldn't set video mode: %s\n", 0, SDL_GetError()); + free(RawMooseData); + return 4; + } + + /* Set the window manager title bar */ + SDL_WM_SetCaption("SDL test overlay: running moose", "testoverlay2"); + + for (i=0; iw,overlay->h,overlay->planes, + overlay->hw_overlay?"hardware":"software", + overlay->format==SDL_YV12_OVERLAY?"YV12": + overlay->format==SDL_IYUV_OVERLAY?"IYUV": + overlay->format==SDL_YUY2_OVERLAY?"YUY2": + overlay->format==SDL_UYVY_OVERLAY?"UYVY": + overlay->format==SDL_YVYU_OVERLAY?"YVYU": + "Unknown"); + + for(i=0; iplanes; i++) + { + printf(" plane %d: pitch=%d\n", i, overlay->pitches[i]); + } + + overlayrect.x=0; + overlayrect.y=0; + overlayrect.w=MOOSEPIC_W*scale; + overlayrect.h=MOOSEPIC_H*scale; + + /* set the start frame */ + i=0; + fpsdelay=1000/fps; + + /* Ignore key up events, they don't even get filtered */ + SDL_EventState(SDL_KEYUP, SDL_IGNORE); + + lastftick=SDL_GetTicks(); + + /* Loop, waiting for QUIT or RESIZE */ + while (1) + { + if (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_VIDEORESIZE: + screen=SDL_SetVideoMode(event.resize.w, event.resize.h, 0, SDL_RESIZABLE | SDL_SWSURFACE); + overlayrect.w=event.resize.w; + overlayrect.h=event.resize.h; + break; + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_SPACE) + { + paused=!paused; + break; + } + if (event.key.keysym.sym != SDLK_ESCAPE) + { + break; + } + case SDL_QUIT: + SDL_FreeYUVOverlay(overlay); + for (i=0; ifpsdelay) + { + lastftick=SDL_GetTicks(); + + switch (overlay_format) + { + case SDL_YUY2_OVERLAY: + ConvertRGBtoYUY2(MooseFrame[i], overlay, 0, 100); + break; + case SDL_YV12_OVERLAY: + ConvertRGBtoYV12(MooseFrame[i], overlay, 0, 100); + break; + case SDL_UYVY_OVERLAY: + ConvertRGBtoUYVY(MooseFrame[i], overlay, 0, 100); + break; + case SDL_YVYU_OVERLAY: + ConvertRGBtoYVYU(MooseFrame[i], overlay, 0, 100); + break; + case SDL_IYUV_OVERLAY: + ConvertRGBtoIYUV(MooseFrame[i], overlay, 0, 100); + break; + } + + SDL_DisplayYUVOverlay(overlay, &overlayrect); + i++; + if (i==10) + { + i=0; + } + } + } + /* kind of timeslice to OS */ + SDL_Delay(1); + } + + return 0; +} +