SDL_Overlay *SDL_CreateYUVOverlay(int w, int h, Uint32 format, SDL_Surface *display) { SDL_VideoDevice *video = current_video; SDL_VideoDevice *this = current_video; const char *yuv_hwaccel; SDL_Overlay *overlay; overlay = NULL; /* Display directly on video surface, if possible */ #if 0 if ( (display == SDL_PublicSurface) && ((SDL_VideoSurface->format->BytesPerPixel == 2) || (SDL_VideoSurface->format->BytesPerPixel == 4)) ) { display = SDL_VideoSurface; } #endif yuv_hwaccel = getenv("SDL_VIDEO_YUV_HWACCEL"); if ( ((display == SDL_VideoSurface) && video->CreateYUVOverlay) && (!yuv_hwaccel || (atoi(yuv_hwaccel) > 0)) ) { overlay = video->CreateYUVOverlay(this, w, h, format, display); } /* If hardware YUV overlay failed ... */ if ( overlay == NULL ) { overlay = SDL_CreateYUV_SW(this, w, h, format, display); } return overlay; }
SDL_Overlay *SDL_CreateYUVOverlay(int w, int h, Uint32 format, SDL_Surface *display) { SDL_VideoDevice *video = current_video; SDL_VideoDevice *this = current_video; const char *yuv_hwaccel; SDL_Overlay *overlay; if ( (display->flags & SDL_OPENGL) == SDL_OPENGL ) { SDL_SetError("YUV overlays are not supported in OpenGL mode"); return NULL; } /* Display directly on video surface, if possible */ if ( SDL_getenv("SDL_VIDEO_YUV_DIRECT") ) { if ( (display == SDL_PublicSurface) && ((SDL_VideoSurface->format->BytesPerPixel == 2) || (SDL_VideoSurface->format->BytesPerPixel == 4)) ) { display = SDL_VideoSurface; } } overlay = NULL; yuv_hwaccel = SDL_getenv("SDL_VIDEO_YUV_HWACCEL"); if ( ((display == SDL_VideoSurface) && video->CreateYUVOverlay) && (!yuv_hwaccel || (SDL_atoi(yuv_hwaccel) > 0)) ) { overlay = video->CreateYUVOverlay(this, w, h, format, display); } /* If hardware YUV overlay failed ... */ if ( overlay == NULL ) { overlay = SDL_CreateYUV_SW(this, w, h, format, display); } return overlay; }