Mercurial > sdl-ios-xcode
diff src/video/SDL_yuv.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | 51038e80ae59 |
children | 4da1ee79c9af |
line wrap: on
line diff
--- a/src/video/SDL_yuv.c Sun May 21 17:27:13 2006 +0000 +++ b/src/video/SDL_yuv.c Sun May 28 13:04:16 2006 +0000 @@ -29,109 +29,119 @@ #include "SDL_yuv_sw_c.h" -SDL_Overlay *SDL_CreateYUVOverlay(int w, int h, Uint32 format, - SDL_Surface *display) +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; + SDL_VideoDevice *_this = SDL_GetVideoDevice (); + SDL_Window *window; + 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; - } + window = SDL_GetWindowFromSurface (display); + if (window && (window->flags & SDL_WINDOW_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; + /* Display directly on video surface, if possible */ + if (SDL_getenv ("SDL_VIDEO_YUV_DIRECT")) { + if (window && + ((window->surface->format->BytesPerPixel == 2) || + (window->surface->format->BytesPerPixel == 4))) { + display = window->surface; + } + } + overlay = NULL; + yuv_hwaccel = SDL_getenv ("SDL_VIDEO_YUV_HWACCEL"); + if (((display->flags & SDL_SCREEN_SURFACE) && _this->CreateYUVOverlay) && + (!yuv_hwaccel || (SDL_atoi (yuv_hwaccel) > 0))) { + overlay = _this->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; } -int SDL_LockYUVOverlay(SDL_Overlay *overlay) +int +SDL_LockYUVOverlay (SDL_Overlay * overlay) { - return overlay->hwfuncs->Lock(current_video, overlay); + SDL_VideoDevice *_this = SDL_GetVideoDevice (); + return overlay->hwfuncs->Lock (_this, overlay); } -void SDL_UnlockYUVOverlay(SDL_Overlay *overlay) +void +SDL_UnlockYUVOverlay (SDL_Overlay * overlay) { - overlay->hwfuncs->Unlock(current_video, overlay); + SDL_VideoDevice *_this = SDL_GetVideoDevice (); + overlay->hwfuncs->Unlock (_this, overlay); } -int SDL_DisplayYUVOverlay(SDL_Overlay *overlay, SDL_Rect *dstrect) +int +SDL_DisplayYUVOverlay (SDL_Overlay * overlay, SDL_Rect * dstrect) { - SDL_Rect src, dst; - int srcx, srcy, srcw, srch; - int dstx, dsty, dstw, dsth; + SDL_VideoDevice *_this = SDL_GetVideoDevice (); + SDL_Rect src, dst; + int srcx, srcy, srcw, srch; + int dstx, dsty, dstw, dsth; - /* Clip the rectangle to the screen area */ - srcx = 0; - srcy = 0; - srcw = overlay->w; - srch = overlay->h; - dstx = dstrect->x; - dsty = dstrect->y; - dstw = dstrect->w; - dsth = dstrect->h; - if ( dstx < 0 ) { - srcw += (dstx * overlay->w) / dstrect->w; - dstw += dstx; - srcx -= (dstx * overlay->w) / dstrect->w; - dstx = 0; - } - if ( (dstx+dstw) > current_video->screen->w ) { - int extra = (dstx+dstw - current_video->screen->w); - srcw -= (extra * overlay->w) / dstrect->w; - dstw -= extra; - } - if ( dsty < 0 ) { - srch += (dsty * overlay->h) / dstrect->h; - dsth += dsty; - srcy -= (dsty * overlay->h) / dstrect->h; - dsty = 0; - } - if ( (dsty+dsth) > current_video->screen->h ) { - int extra = (dsty+dsth - current_video->screen->h); - srch -= (extra * overlay->h) / dstrect->h; - dsth -= extra; - } - if ( srcw <= 0 || srch <= 0 || - srch <= 0 || dsth <= 0 ) { - return 0; - } - /* Ugh, I can't wait for SDL_Rect to be int values */ - src.x = srcx; - src.y = srcy; - src.w = srcw; - src.h = srch; - dst.x = dstx; - dst.y = dsty; - dst.w = dstw; - dst.h = dsth; - return overlay->hwfuncs->Display(current_video, overlay, &src, &dst); + /* Clip the rectangle to the screen area */ + srcx = 0; + srcy = 0; + srcw = overlay->w; + srch = overlay->h; + dstx = dstrect->x; + dsty = dstrect->y; + dstw = dstrect->w; + dsth = dstrect->h; + if (dstx < 0) { + srcw += (dstx * overlay->w) / dstrect->w; + dstw += dstx; + srcx -= (dstx * overlay->w) / dstrect->w; + dstx = 0; + } + if ((dstx + dstw) > SDL_VideoSurface->w) { + int extra = (dstx + dstw - SDL_VideoSurface->w); + srcw -= (extra * overlay->w) / dstrect->w; + dstw -= extra; + } + if (dsty < 0) { + srch += (dsty * overlay->h) / dstrect->h; + dsth += dsty; + srcy -= (dsty * overlay->h) / dstrect->h; + dsty = 0; + } + if ((dsty + dsth) > SDL_VideoSurface->h) { + int extra = (dsty + dsth - SDL_VideoSurface->h); + srch -= (extra * overlay->h) / dstrect->h; + dsth -= extra; + } + if (srcw <= 0 || srch <= 0 || srch <= 0 || dsth <= 0) { + return 0; + } + /* Ugh, I can't wait for SDL_Rect to be int values */ + src.x = srcx; + src.y = srcy; + src.w = srcw; + src.h = srch; + dst.x = dstx; + dst.y = dsty; + dst.w = dstw; + dst.h = dsth; + return overlay->hwfuncs->Display (_this, overlay, &src, &dst); } -void SDL_FreeYUVOverlay(SDL_Overlay *overlay) +void +SDL_FreeYUVOverlay (SDL_Overlay * overlay) { - if ( overlay ) { - if ( overlay->hwfuncs ) { - overlay->hwfuncs->FreeHW(current_video, overlay); - } - SDL_free(overlay); - } + SDL_VideoDevice *_this = SDL_GetVideoDevice (); + if (overlay) { + if (overlay->hwfuncs) { + overlay->hwfuncs->FreeHW (_this, overlay); + } + SDL_free (overlay); + } } + +/* vi: set ts=4 sw=4 expandtab: */