--- a/libsdl1.2-1.2.14/src/video/x11/SDL_x11yuv.c 2009-10-13 01:07:15.000000000 +0200 +++ a/libsdl1.2-1.2.14/src/video/x11/SDL_x11yuv.c 2011-12-29 20:02:29.705555433 +0100 @@ -33,6 +33,7 @@ #endif #include "../Xext/extensions/Xvlib.h" +#include #include "SDL_x11yuv_c.h" #include "../SDL_yuvfuncs.h" @@ -220,7 +221,26 @@ if ( (Uint32)formats[j].id == format ) { for ( k=0; k < ainfo[i].num_ports; ++k ) { if ( Success == SDL_NAME(XvGrabPort)(GFX_Display, ainfo[i].base_id+k, CurrentTime) ) { + int n; + unsigned int nencode, nadaptors; + SDL_NAME(XvEncodingInfo) *encodings; + xv_port = ainfo[i].base_id+k; + + SDL_NAME(XvQueryEncodings)(GFX_Display, xv_port, &nencode, &encodings); + for(n = 0; n < nencode; n++) { + if(!strncmp(encodings[n].name, "XV_IMAG", sizeof("XV_IMAG"))) { + if(width > encodings[n].width || height > encodings[n].height) + XFree(formats); + SDL_NAME(XvFreeAdaptorInfo)(ainfo); + SDL_NAME(XvFreeEncodingInfo)(encodings); + SDL_NAME(XvUngrabPort)(GFX_Display, xv_port, CurrentTime); + return(NULL); + else + break; + } + } + break; } }