Commit 4c4f326a authored by Sam Lantinga's avatar Sam Lantinga

Date: Sat, 18 May 2002 17:40:53 +0300

From: Mike Gorchak <mike@malva.ua>
Subject: New QNX patches

- Added more error check to avoid SEGFAULTS;
- Fixed bug in update function for SDL_HWSURFACE. BTW: update is much
faster than before.
- Added checks for SDL_HWSURFACE flag, chosen bpp must be equal to
desktop bpp for SDL_HWSURFACE.
- Fixed overlay bug, no more SEGFAULTS.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40371
parent 725baca3
...@@ -65,9 +65,7 @@ int ph_SetupImage(_THIS, SDL_Surface *screen) ...@@ -65,9 +65,7 @@ int ph_SetupImage(_THIS, SDL_Surface *screen)
} }
break; break;
default:{ default:{
/* should never get here */ fprintf(stderr,"ph_SetupImage(): unsupported bbp = %d\n", screen->format->BitsPerPixel);
fprintf(stderr,"error: unsupported bbp = %d\n",
screen->format->BitsPerPixel);
return -1; return -1;
} }
break; break;
...@@ -106,83 +104,82 @@ int ph_SetupImage(_THIS, SDL_Surface *screen) ...@@ -106,83 +104,82 @@ int ph_SetupImage(_THIS, SDL_Surface *screen)
int ph_SetupOCImage(_THIS, SDL_Surface *screen) int ph_SetupOCImage(_THIS, SDL_Surface *screen)
{ {
int type = 0; int type = 0;
/* Determine image type */ /* Determine image type */
switch(screen->format->BitsPerPixel) switch(screen->format->BitsPerPixel)
{ {
case 8:{ case 8: {
type = Pg_IMAGE_PALETTE_BYTE; type = Pg_IMAGE_PALETTE_BYTE;
} }
break; break;
case 15:{ case 15:{
type = Pg_IMAGE_DIRECT_555; type = Pg_IMAGE_DIRECT_555;
}
break;
case 16:{
type = Pg_IMAGE_DIRECT_565;
} }
break; break;
case 16:{
type = Pg_IMAGE_DIRECT_565;
}
break;
case 24:{
type = Pg_IMAGE_DIRECT_888;
}
break;
case 32:{
type = Pg_IMAGE_DIRECT_8888;
}
break;
default:{
fprintf(stderr,"ph_SetupOCImage(): unsupported bpp = %d\n", screen->format->BitsPerPixel);
return -1;
}
break;
}
case 24:{ OCImage.FrameData0 = (FRAMEDATA *) malloc((size_t)(sizeof(FRAMEDATA)));
type = Pg_IMAGE_DIRECT_888; OCImage.FrameData1 = (FRAMEDATA *) malloc((size_t)(sizeof(FRAMEDATA)));
}
break; if(OCImage.direct_context == NULL)
{
case 32:{ OCImage.direct_context = PdCreateDirectContext();
type = Pg_IMAGE_DIRECT_8888; }
}
break; OCImage.offscreen_context = PdCreateOffscreenContext(0, screen->w, screen->h, Pg_OSC_MEM_PAGE_ALIGN);
default:{
/* should never get here */ if (OCImage.offscreen_context == NULL)
fprintf(stderr,"error: unsupported bbp = %d\n", {
screen->format->BitsPerPixel); fprintf(stderr, "ph_SetupOCImage(): PdCreateOffscreenContext failed !\n");
return -1; return -1;
} }
break;
} OCImage.Stride = OCImage.offscreen_context->pitch;
OCImage.FrameData0 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA))); if (OCImage.flags & SDL_DOUBLEBUF)
OCImage.FrameData1 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA))); {
fprintf(stderr, "ph_SetupOCImage(): Hardware flag for doublebuf offscreen context\n");
if(OCImage.direct_context == NULL) }
OCImage.direct_context = PdCreateDirectContext();
OCImage.dc_ptr.ptr8 = (unsigned char *) PdGetOffscreenContextPtr(OCImage.offscreen_context);
OCImage.offscreen_context = PdCreateOffscreenContext(0,screen->w,screen->h, Pg_OSC_MEM_PAGE_ALIGN);
if (OCImage.dc_ptr.ptr8 == NULL)
if (OCImage.offscreen_context == NULL) {
{ fprintf(stderr, "ph_SetupOCImage(): PdGetOffscreenContextPtr failed !\n");
printf("PdCreateOffscreenContext failed\n"); return -1;
return -1; }
}
OCImage.CurrentFrameData = OCImage.FrameData0;
OCImage.Stride = OCImage.offscreen_context->pitch; OCImage.CurrentFrameData->Y = OCImage.dc_ptr.ptr8;
OCImage.CurrentFrameData->U = NULL;
if (OCImage.flags & SDL_DOUBLEBUF) OCImage.CurrentFrameData->V = NULL;
printf("hardware flag for doublebuf offscreen context\n"); OCImage.current = 0;
PhDCSetCurrent(OCImage.offscreen_context);
OCImage.dc_ptr.ptr8 = (unsigned char *) PdGetOffscreenContextPtr(OCImage.offscreen_context);
screen->pixels = OCImage.CurrentFrameData->Y;
OCImage.CurrentFrameData = OCImage.FrameData0;
OCImage.CurrentFrameData->Y = OCImage.dc_ptr.ptr8; this->UpdateRects = ph_OCUpdate;
OCImage.CurrentFrameData->U = NULL;
OCImage.CurrentFrameData->V = NULL; return 0;
OCImage.current = 0;
if(OCImage.dc_ptr.ptr8 == NULL)
{
printf("PdGetOffscreenContextPtr failed\n");
return -1;
}
PhDCSetCurrent(OCImage.offscreen_context);
screen->pixels = OCImage.CurrentFrameData->Y;
this->UpdateRects = ph_OCUpdate;
return 0;
} }
int ph_SetupOpenGLImage(_THIS, SDL_Surface* screen) int ph_SetupOpenGLImage(_THIS, SDL_Surface* screen)
...@@ -242,7 +239,6 @@ int ph_ResizeImage(_THIS, SDL_Surface *screen, Uint32 flags) ...@@ -242,7 +239,6 @@ int ph_ResizeImage(_THIS, SDL_Surface *screen, Uint32 flags)
return ph_SetupImage(this, screen); return ph_SetupImage(this, screen);
} }
} }
int ph_AllocHWSurface(_THIS, SDL_Surface *surface) int ph_AllocHWSurface(_THIS, SDL_Surface *surface)
{ {
return(-1); return(-1);
...@@ -302,20 +298,21 @@ void ph_NormalUpdate(_THIS, int numrects, SDL_Rect *rects) ...@@ -302,20 +298,21 @@ void ph_NormalUpdate(_THIS, int numrects, SDL_Rect *rects)
if (PgDrawPhImageRectmx(&ph_pos, SDL_Image, &ph_rect, 0) < 0) if (PgDrawPhImageRectmx(&ph_pos, SDL_Image, &ph_rect, 0) < 0)
{ {
fprintf(stderr,"ph_NormalUpdate: PgDrawPhImageRectmx failed.\n"); fprintf(stderr,"ph_NormalUpdate(): PgDrawPhImageRectmx failed.\n");
} }
} }
if (PgFlush() < 0) if (PgFlush() < 0)
{ {
fprintf(stderr,"ph_NormalUpdate: PgFlush failed.\n"); fprintf(stderr,"ph_NormalUpdate(): PgFlush failed.\n");
} }
} }
void ph_OCUpdate(_THIS, int numrects, SDL_Rect *rects) void ph_OCUpdate(_THIS, int numrects, SDL_Rect *rects)
{ {
PhPoint_t zero = {0}; PhPoint_t zero = {0};
PhRect_t src_rect; PhArea_t src_rect;
PhRect_t dest_rect; PhArea_t dest_rect;
if(OCImage.direct_context == NULL) if(OCImage.direct_context == NULL)
{ {
...@@ -323,7 +320,7 @@ void ph_OCUpdate(_THIS, int numrects, SDL_Rect *rects) ...@@ -323,7 +320,7 @@ void ph_OCUpdate(_THIS, int numrects, SDL_Rect *rects)
} }
PgSetRegion(PtWidgetRid(window)); PgSetRegion(PtWidgetRid(window));
PgSetClipping(0,NULL); PgSetClipping(0, NULL);
PgWaitHWIdle(); PgWaitHWIdle();
for (i=0; i<numrects; ++i) for (i=0; i<numrects; ++i)
...@@ -333,24 +330,27 @@ void ph_OCUpdate(_THIS, int numrects, SDL_Rect *rects) ...@@ -333,24 +330,27 @@ void ph_OCUpdate(_THIS, int numrects, SDL_Rect *rects)
continue; continue;
} }
src_rect.ul.x=rects[i].x; src_rect.pos.x=rects[i].x;
src_rect.ul.y=rects[i].y; src_rect.pos.y=rects[i].y;
dest_rect.ul.x=rects[i].x; dest_rect.pos.x=rects[i].x;
dest_rect.ul.y=rects[i].y; dest_rect.pos.y=rects[i].y;
dest_rect.lr.x=src_rect.lr.x= rects[i].x +rects[i].w; src_rect.size.w=rects[i].w;
dest_rect.lr.y=src_rect.lr.y= rects[i].y +rects[i].h; src_rect.size.h=rects[i].h;
dest_rect.size.w=rects[i].w;
dest_rect.size.h=rects[i].h;
zero.x = zero.y = 0; zero.x = 0;
PgSetTranslation (&zero, 0); zero.y = 0;
PgSetTranslation(&zero, 0);
PgSetRegion(PtWidgetRid(window)); PgSetRegion(PtWidgetRid(window));
PgSetClipping(0,NULL); PgSetClipping(0, NULL);
PgContextBlitArea(OCImage.offscreen_context, (PhArea_t *)(&src_rect), NULL, (PhArea_t *)(&dest_rect)); PgContextBlitArea(OCImage.offscreen_context, &src_rect, NULL, &dest_rect);
} }
if (PgFlush() < 0) if (PgFlush() < 0)
{ {
fprintf(stderr,"ph_OCUpdate: PgFlush failed.\n"); fprintf(stderr,"ph_OCUpdate(): PgFlush failed.\n");
} }
/* later used to toggling double buffer */ /* later used to toggling double buffer */
......
...@@ -255,6 +255,16 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -255,6 +255,16 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
if ((flags & SDL_OPENGL)!=SDL_OPENGL) if ((flags & SDL_OPENGL)!=SDL_OPENGL)
{ {
pargc=0; pargc=0;
// prevent using HWSURFACE in window mode if desktop bpp != chosen bpp
if ((flags & SDL_HWSURFACE) && (!(flags & SDL_FULLSCREEN)))
{
if (desktopbpp!=bpp)
{
fprintf(stderr, "ph_SetVideoMode(): SDL_HWSURFACE available only with chosen bpp equal desktop bpp !\n");
return NULL;
}
}
PtSetArg(&arg[pargc++], Pt_ARG_DIM, &dim, 0); PtSetArg(&arg[pargc++], Pt_ARG_DIM, &dim, 0);
PtSetArg(&arg[pargc++], Pt_ARG_RESIZE_FLAGS, Pt_FALSE, Pt_RESIZE_XY_AS_REQUIRED); PtSetArg(&arg[pargc++], Pt_ARG_RESIZE_FLAGS, Pt_FALSE, Pt_RESIZE_XY_AS_REQUIRED);
...@@ -317,7 +327,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -317,7 +327,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
#else #else
if (flags & SDL_OPENGL) /* if no built-in OpenGL support */ if (flags & SDL_OPENGL) /* if no built-in OpenGL support */
{ {
fprintf(stderr, "error: no OpenGL support, try to recompile library.\n"); fprintf(stderr, "ph_SetVideoMode(): no OpenGL support, try to recompile library.\n");
current->flags=(flags & (~SDL_OPENGL)); current->flags=(flags & (~SDL_OPENGL));
return NULL; return NULL;
#endif /* HAVE_OPENGL */ #endif /* HAVE_OPENGL */
...@@ -332,7 +342,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -332,7 +342,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
{ {
if ((mode = get_mode_any_format(width, height, bpp)) == 0) if ((mode = get_mode_any_format(width, height, bpp)) == 0)
{ {
fprintf(stderr,"error: get_mode_any_format failed\n"); fprintf(stderr,"ph_SetVideoMode(): get_mode_any_format failed !\n");
exit(1); exit(1);
} }
} }
...@@ -340,7 +350,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -340,7 +350,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
{ {
if ((mode = get_mode(width, height, bpp)) == 0) if ((mode = get_mode(width, height, bpp)) == 0)
{ {
fprintf(stderr,"error: get_mode failed\n"); fprintf(stderr,"ph_SetVideoMode(): get_mode failed !\n");
exit(1); exit(1);
} }
} }
...@@ -362,7 +372,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -362,7 +372,7 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
if (PgSetVideoMode(&settings) < 0) if (PgSetVideoMode(&settings) < 0)
{ {
fprintf(stderr,"error: PgSetVideoMode failed\n"); fprintf(stderr,"ph_SetVideoMode(): PgSetVideoMode failed !\n");
} }
current->flags = (flags & (~SDL_RESIZABLE)); /* no resize for Direct Context */ current->flags = (flags & (~SDL_RESIZABLE)); /* no resize for Direct Context */
...@@ -424,8 +434,15 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -424,8 +434,15 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
current->format->BitsPerPixel = bpp; current->format->BitsPerPixel = bpp;
current->format->BytesPerPixel = (bpp+7)/8; current->format->BytesPerPixel = (bpp+7)/8;
current->pitch = SDL_CalculatePitch(current); current->pitch = SDL_CalculatePitch(current);
/* Must call at least once it setup image planes */ /* Must call at least once it setup image planes */
ph_ResizeImage(this, current, flags); rtnval = ph_ResizeImage(this, current, flags);
if (rtnval==-1)
{
fprintf(stderr,"ph_SetVideoMode(): ph_ResizeImage failed !\n");
return NULL;
}
/* delayed set caption call */ /* delayed set caption call */
if (captionflag) if (captionflag)
...@@ -512,9 +529,10 @@ static int ph_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) ...@@ -512,9 +529,10 @@ static int ph_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
SDL_Image->palette[i] |= colors[i-firstcolor].g<<8; SDL_Image->palette[i] |= colors[i-firstcolor].g<<8;
SDL_Image->palette[i] |= colors[i-firstcolor].b; SDL_Image->palette[i] |= colors[i-firstcolor].b;
} }
/* image needs to be redrawed, very slow method */
PgDrawPhImage(&point, SDL_Image, 0);
} }
/* image needs to be redrawed, very slow method */
PgDrawPhImage(&point, SDL_Image, 0);
} }
else else
{ {
...@@ -533,7 +551,10 @@ static int ph_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) ...@@ -533,7 +551,10 @@ static int ph_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
/* window mode must use soft palette */ /* window mode must use soft palette */
PgSetPalette((PgColor_t*)&syspalph[firstcolor], 0, firstcolor, ncolors, Pg_PALSET_SOFT, 0); PgSetPalette((PgColor_t*)&syspalph[firstcolor], 0, firstcolor, ncolors, Pg_PALSET_SOFT, 0);
/* image needs to be redrawed, very slow method */ /* image needs to be redrawed, very slow method */
PgDrawPhImage(&point, SDL_Image, 0); if (SDL_Image)
{
PgDrawPhImage(&point, SDL_Image, 0);
}
} }
else else
{ {
...@@ -602,7 +623,7 @@ int ph_SetupOpenGLContext(_THIS, int width, int height, int bpp, Uint32 flags) ...@@ -602,7 +623,7 @@ int ph_SetupOpenGLContext(_THIS, int width, int height, int bpp, Uint32 flags)
if (oglctx==NULL) if (oglctx==NULL)
{ {
fprintf(stderr,"ph_SetupOpenGLContext: cannot create OpenGL context.\n"); fprintf(stderr,"ph_SetupOpenGLContext(): cannot create OpenGL context.\n");
return (-1); return (-1);
} }
......
...@@ -29,7 +29,6 @@ static char rcsid = ...@@ -29,7 +29,6 @@ static char rcsid =
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
//#include <ncurses.h> //only for bool
#ifndef bool #ifndef bool
#define bool char #define bool char
#define TRUE 1 #define TRUE 1
...@@ -104,7 +103,7 @@ struct private_yuvhwdata { ...@@ -104,7 +103,7 @@ struct private_yuvhwdata {
FRAMEDATA *FrameData0; FRAMEDATA *FrameData0;
FRAMEDATA *FrameData1; FRAMEDATA *FrameData1;
PgScalerProps_t props; PgScalerProps_t props;
PgScalerCaps_t caps; PgScalerCaps_t caps;
PgVideoChannel_t *channel; PgVideoChannel_t *channel;
SDL_Rect CurrentWindow; SDL_Rect CurrentWindow;
long format; long format;
...@@ -142,7 +141,7 @@ grab_ptrs2(PgVideoChannel_t *channel, FRAMEDATA *Frame0, FRAMEDATA *Frame1 ) ...@@ -142,7 +141,7 @@ grab_ptrs2(PgVideoChannel_t *channel, FRAMEDATA *Frame0, FRAMEDATA *Frame1 )
} }
SDL_Overlay *ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface *display) SDL_Overlay* ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface *display)
{ {
SDL_Overlay *overlay; SDL_Overlay *overlay;
struct private_yuvhwdata *hwdata; struct private_yuvhwdata *hwdata;
...@@ -162,7 +161,8 @@ SDL_Overlay *ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SD ...@@ -162,7 +161,8 @@ SDL_Overlay *ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SD
PhDCSetCurrent(0); //Need to set draw context to window esp. if we we in Offscreeen mode PhDCSetCurrent(0); //Need to set draw context to window esp. if we we in Offscreeen mode
/* Create the overlay structure */ /* Create the overlay structure */
overlay = (SDL_Overlay *)malloc(sizeof *overlay); overlay = (SDL_Overlay *)malloc(sizeof(SDL_Overlay));
memset(overlay, 0x00, sizeof(SDL_Overlay));
if ( overlay == NULL ) { if ( overlay == NULL ) {
SDL_OutOfMemory(); SDL_OutOfMemory();
return(NULL); return(NULL);
...@@ -178,7 +178,8 @@ SDL_Overlay *ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SD ...@@ -178,7 +178,8 @@ SDL_Overlay *ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SD
overlay->hwfuncs = &ph_yuvfuncs; overlay->hwfuncs = &ph_yuvfuncs;
/* Create the pixel data and lookup tables */ /* Create the pixel data and lookup tables */
hwdata = (struct private_yuvhwdata *)malloc(sizeof *hwdata); hwdata = (struct private_yuvhwdata *)malloc(sizeof(struct private_yuvhwdata));
memset(hwdata, 0x00, sizeof(struct private_yuvhwdata));
overlay->hwdata = hwdata; overlay->hwdata = hwdata;
if ( hwdata == NULL ) { if ( hwdata == NULL ) {
SDL_OutOfMemory(); SDL_OutOfMemory();
...@@ -186,54 +187,41 @@ SDL_Overlay *ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SD ...@@ -186,54 +187,41 @@ SDL_Overlay *ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SD
return(NULL); return(NULL);
} }
if (overlay->hwdata->channel == NULL) if (overlay->hwdata->channel == NULL)
{ {
if ((overlay->hwdata->channel = PgCreateVideoChannel(Pg_VIDEO_CHANNEL_SCALER,0)) == NULL)
{
if ((overlay->hwdata->channel = PgCreateVideoChannel(Pg_VIDEO_CHANNEL_SCALER,0)) == NULL) SDL_SetError("ph_CreateYUVOverlay(): Create channel failed: %s\n", strerror( errno ));
{ free(overlay->hwdata);
SDL_SetError("Create channel failed:%s\n", strerror( errno )); free(overlay);
free(overlay->hwdata); return (NULL);
free(overlay); }
return(NULL); }
}
#if 0 overlay->hwdata->CurrentWindow.x = 0;
overlay->hwdata->caps.size = sizeof (overlay->hwdata->caps); overlay->hwdata->CurrentWindow.y = 0;
PgGetScalerCapabilities(overlay->hwdata->channel, 0, &(overlay->hwdata->caps)); overlay->hwdata->CurrentWindow.w = 320;
if (overlay->hwdata->caps.flags & Pg_SCALER_CAP_DOUBLE_BUFFER) overlay->hwdata->CurrentWindow.h = 240;
overlay->hwdata->props.flags |= Pg_SCALER_PROP_DOUBLE_BUFFER;
#endif overlay->hwdata->State = OVERLAY_STATE_UNINIT;
}
overlay->hwdata->screen_bpp = 2;
overlay->hwdata->CurrentWindow.x = 0; overlay->hwdata->scaler_on = FALSE;
overlay->hwdata->CurrentWindow.y = 0; overlay->hwdata->screen_width = 1024;
overlay->hwdata->CurrentWindow.w = 320; overlay->hwdata->screen_height = 768;
overlay->hwdata->CurrentWindow.h = 240;
overlay->hwdata->FrameData0 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA)));
overlay->hwdata->FrameData1 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA)));
overlay->hwdata->State = OVERLAY_STATE_UNINIT; overlay->hwdata->caps.size = sizeof(overlay->hwdata->caps);
overlay->hwdata->screen_bpp = 2;
overlay->hwdata->scaler_on = FALSE;
overlay->hwdata->screen_width = 1024;
overlay->hwdata->screen_height = 768;
overlay->hwdata->FrameData0 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA)));
overlay->hwdata->FrameData1 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA)));
overlay->hwdata->caps.size = sizeof(overlay->hwdata->caps);
//Note you really don't need to do this for SDL as you are given a format, but this is a good example //Note you really don't need to do this for SDL as you are given a format, but this is a good example
xv_port = -1; xv_port = -1;
i=0; i=0;
while(PgGetScalerCapabilities(overlay->hwdata->channel, i++, &(overlay->hwdata->caps)) == 0) while(PgGetScalerCapabilities(overlay->hwdata->channel, i++, &(overlay->hwdata->caps)) == 0)
{ {
if(overlay->hwdata->caps.format == Pg_VIDEO_FORMAT_YV12) //in SDL if(overlay->hwdata->caps.format == Pg_VIDEO_FORMAT_YV12) //in SDL
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment