Skip to content
Snippets Groups Projects
Commit cb087c63 authored by deuce's avatar deuce
Browse files

We only need to lock the YUV overlay when diddling pixles.

Also, ensure we only free the overlay when it's allocated.
parent 447ecc62
No related branches found
No related tags found
No related merge requests found
...@@ -319,6 +319,7 @@ void yuv_fillrect(SDL_Overlay *overlay, SDL_Rect *r, int dac_entry) ...@@ -319,6 +319,7 @@ void yuv_fillrect(SDL_Overlay *overlay, SDL_Rect *r, int dac_entry)
return; return;
planar: planar:
sdl.LockYUVOverlay(overlay);
{ {
int y; int y;
Uint8 *Y,*U,*V; Uint8 *Y,*U,*V;
...@@ -347,8 +348,10 @@ planar: ...@@ -347,8 +348,10 @@ planar:
odd_line = !odd_line; odd_line = !odd_line;
} }
} }
sdl.UnlockYUVOverlay(overlay);
return; return;
packed: packed:
sdl.LockYUVOverlay(overlay);
{ {
int x,y; int x,y;
Uint32 colour; Uint32 colour;
...@@ -368,6 +371,7 @@ packed: ...@@ -368,6 +371,7 @@ packed:
offset+=overlay->pitches[0]>>2; offset+=overlay->pitches[0]>>2;
} }
} }
sdl.UnlockYUVOverlay(overlay);
return; return;
} }
...@@ -854,7 +858,6 @@ void setup_surfaces(void) ...@@ -854,7 +858,6 @@ void setup_surfaces(void)
} }
if(yuv.enabled) { if(yuv.enabled) {
if(yuv.overlay) { if(yuv.overlay) {
sdl.UnlockYUVOverlay(yuv.overlay);
sdl.mutexV(yuv.mutex); sdl.mutexV(yuv.mutex);
sdl.FreeYUVOverlay(yuv.overlay); sdl.FreeYUVOverlay(yuv.overlay);
} }
...@@ -863,21 +866,25 @@ void setup_surfaces(void) ...@@ -863,21 +866,25 @@ void setup_surfaces(void)
if(yuv.overlay) if(yuv.overlay)
yuv.best_format=yuv.overlay->format; yuv.best_format=yuv.overlay->format;
if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
if (yuv.overlay)
sdl.FreeYUVOverlay(yuv.overlay); sdl.FreeYUVOverlay(yuv.overlay);
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YUY2_OVERLAY, win); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YUY2_OVERLAY, win);
if(yuv.overlay) if(yuv.overlay)
yuv.best_format=yuv.overlay->format; yuv.best_format=yuv.overlay->format;
if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
if (yuv.overlay)
sdl.FreeYUVOverlay(yuv.overlay); sdl.FreeYUVOverlay(yuv.overlay);
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YVYU_OVERLAY, win); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YVYU_OVERLAY, win);
if(yuv.overlay) if(yuv.overlay)
yuv.best_format=yuv.overlay->format; yuv.best_format=yuv.overlay->format;
if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
if (yuv.overlay)
sdl.FreeYUVOverlay(yuv.overlay); sdl.FreeYUVOverlay(yuv.overlay);
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_UYVY_OVERLAY, win); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_UYVY_OVERLAY, win);
if(yuv.overlay) if(yuv.overlay)
yuv.best_format=yuv.overlay->format; yuv.best_format=yuv.overlay->format;
if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) { if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
if (yuv.overlay)
sdl.FreeYUVOverlay(yuv.overlay); sdl.FreeYUVOverlay(yuv.overlay);
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_IYUV_OVERLAY, win); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_IYUV_OVERLAY, win);
if(yuv.overlay) if(yuv.overlay)
...@@ -891,7 +898,6 @@ void setup_surfaces(void) ...@@ -891,7 +898,6 @@ void setup_surfaces(void)
} }
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, yuv.best_format, win); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, yuv.best_format, win);
sdl.mutexP(yuv.mutex); sdl.mutexP(yuv.mutex);
sdl.LockYUVOverlay(yuv.overlay);
sdl_setup_yuv_colours(); sdl_setup_yuv_colours();
} }
sdl_setup_colours(new_rect); sdl_setup_colours(new_rect);
...@@ -1562,11 +1568,9 @@ int sdl_video_event_thread(void *data) ...@@ -1562,11 +1568,9 @@ int sdl_video_event_thread(void *data)
dstrect.h=win->h; dstrect.h=win->h;
dstrect.x=0; dstrect.x=0;
dstrect.y=0; dstrect.y=0;
sdl.UnlockYUVOverlay(yuv.overlay);
sdl.mutexV(yuv.mutex); sdl.mutexV(yuv.mutex);
sdl.DisplayYUVOverlay(yuv.overlay, &dstrect); sdl.DisplayYUVOverlay(yuv.overlay, &dstrect);
sdl.mutexP(yuv.mutex); sdl.mutexP(yuv.mutex);
sdl.LockYUVOverlay(yuv.overlay);
} }
} }
else { else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment