diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c index 66dbb3d5ef289d6f24b1e43dbeda833459ba8052..b9da996efe76fc78d821c2e69105774fda7bef2b 100644 --- a/src/conio/sdl_con.c +++ b/src/conio/sdl_con.c @@ -319,6 +319,7 @@ void yuv_fillrect(SDL_Overlay *overlay, SDL_Rect *r, int dac_entry) return; planar: + sdl.LockYUVOverlay(overlay); { int y; Uint8 *Y,*U,*V; @@ -347,8 +348,10 @@ planar: odd_line = !odd_line; } } + sdl.UnlockYUVOverlay(overlay); return; packed: + sdl.LockYUVOverlay(overlay); { int x,y; Uint32 colour; @@ -368,6 +371,7 @@ packed: offset+=overlay->pitches[0]>>2; } } + sdl.UnlockYUVOverlay(overlay); return; } @@ -854,7 +858,6 @@ void setup_surfaces(void) } if(yuv.enabled) { if(yuv.overlay) { - sdl.UnlockYUVOverlay(yuv.overlay); sdl.mutexV(yuv.mutex); sdl.FreeYUVOverlay(yuv.overlay); } @@ -863,22 +866,26 @@ void setup_surfaces(void) if(yuv.overlay) yuv.best_format=yuv.overlay->format; if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { - sdl.FreeYUVOverlay(yuv.overlay); + if (yuv.overlay) + sdl.FreeYUVOverlay(yuv.overlay); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YUY2_OVERLAY, win); if(yuv.overlay) yuv.best_format=yuv.overlay->format; if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { - sdl.FreeYUVOverlay(yuv.overlay); + if (yuv.overlay) + sdl.FreeYUVOverlay(yuv.overlay); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YVYU_OVERLAY, win); if(yuv.overlay) yuv.best_format=yuv.overlay->format; if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { - sdl.FreeYUVOverlay(yuv.overlay); + if (yuv.overlay) + sdl.FreeYUVOverlay(yuv.overlay); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_UYVY_OVERLAY, win); if(yuv.overlay) yuv.best_format=yuv.overlay->format; if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { - sdl.FreeYUVOverlay(yuv.overlay); + if (yuv.overlay) + sdl.FreeYUVOverlay(yuv.overlay); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_IYUV_OVERLAY, win); if(yuv.overlay) yuv.best_format=yuv.overlay->format; @@ -891,7 +898,6 @@ void setup_surfaces(void) } yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, yuv.best_format, win); sdl.mutexP(yuv.mutex); - sdl.LockYUVOverlay(yuv.overlay); sdl_setup_yuv_colours(); } sdl_setup_colours(new_rect); @@ -1562,11 +1568,9 @@ int sdl_video_event_thread(void *data) dstrect.h=win->h; dstrect.x=0; dstrect.y=0; - sdl.UnlockYUVOverlay(yuv.overlay); sdl.mutexV(yuv.mutex); sdl.DisplayYUVOverlay(yuv.overlay, &dstrect); sdl.mutexP(yuv.mutex); - sdl.LockYUVOverlay(yuv.overlay); } } else {