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

More packed format fixes.

Remember the "best" YUV mode and re-use it.
parent 462a8bde
Branches
Tags
No related merge requests found
...@@ -80,12 +80,13 @@ struct yuv_settings { ...@@ -80,12 +80,13 @@ struct yuv_settings {
int win_width; int win_width;
int win_height; int win_height;
int changed; int changed;
int best_format;
SDL_Overlay *overlay; SDL_Overlay *overlay;
SDL_mutex *mutex; SDL_mutex *mutex;
Uint8 colours[sizeof(dac_default)/sizeof(struct dac_colors)][3]; Uint8 colours[sizeof(dac_default)/sizeof(struct dac_colors)][3];
}; };
static struct yuv_settings yuv={0,640,400,0,NULL,NULL}; static struct yuv_settings yuv={0,640,400,0,0,NULL,NULL};
struct sdl_keyvals { struct sdl_keyvals {
int keysym int keysym
...@@ -352,7 +353,7 @@ packed: ...@@ -352,7 +353,7 @@ packed:
{ {
for(x=0; x<r->w; x+=2) for(x=0; x<r->w; x+=2)
offset[x>>1]=colour; offset[x>>1]=colour;
offset+=overlay->pitches[0]; offset+=overlay->pitches[0]>>2;
} }
} }
return; return;
...@@ -1250,23 +1251,38 @@ void setup_surfaces(void) ...@@ -1250,23 +1251,38 @@ void setup_surfaces(void)
sdl.mutexV(yuv.mutex); sdl.mutexV(yuv.mutex);
sdl.FreeYUVOverlay(yuv.overlay); sdl.FreeYUVOverlay(yuv.overlay);
} }
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YUY2_OVERLAY, win); if(yuv.best_format==0) {
if(!yuv.overlay->hw_overlay) { yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YUY2_OVERLAY, win);
sdl.FreeYUVOverlay(yuv.overlay); if(yuv.overlay)
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_UYVY_OVERLAY, win); yuv.best_format=yuv.overlay->format;
if(!yuv.overlay->hw_overlay) { if(yuv.overlay==NULL || !yuv.overlay->hw_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_UYVY_OVERLAY, win);
if(!yuv.overlay->hw_overlay) { if(yuv.overlay)
yuv.best_format=yuv.overlay->format;
if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
sdl.FreeYUVOverlay(yuv.overlay); sdl.FreeYUVOverlay(yuv.overlay);
yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YV12_OVERLAY, win); yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YVYU_OVERLAY, win);
if(!yuv.overlay->hw_overlay) { if(yuv.overlay)
yuv.best_format=yuv.overlay->format;
if(yuv.overlay==NULL || !yuv.overlay->hw_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_YV12_OVERLAY, win);
if(yuv.overlay)
yuv.best_format=yuv.overlay->format;
if(yuv.overlay==NULL || !yuv.overlay->hw_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;
}
} }
} }
} }
if(yuv.overlay)
sdl.FreeYUVOverlay(yuv.overlay);
} }
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.LockYUVOverlay(yuv.overlay);
sdl_setup_yuv_colours(); sdl_setup_yuv_colours();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment