CVS: main/libvo vo_sdl.c,1.34,1.35
Update of /cvsroot/mplayer/main/libvo In directory usw-pr-cvs1:/tmp/cvs-serv2521 Modified Files: vo_sdl.c Log Message: Added ability to use direct surface blitting for BGR modes. No depth/colorspace-conversion and no scaling, but 2 times faster. (same speed as -vo x11 then) Change SDL_DIRECT_BLIT from #undef to #define to test it. Index: vo_sdl.c =================================================================== RCS file: /cvsroot/mplayer/main/libvo/vo_sdl.c,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -r1.34 -r1.35 *** vo_sdl.c 2001/05/13 16:38:33 1.34 --- vo_sdl.c 2001/05/17 15:11:58 1.35 *************** *** 95,98 **** --- 95,103 ---- #undef SDL_NOHWSURFACE + /* if defined, don't use depth/colorspace-conversions for rgb/bgr + * also no scaling done then, much faster (~2 times)! + */ + #undef SDL_DIRECT_BLIT + //#define BUGGY_SDL //defined by configure *************** *** 229,234 **** --- 234,257 ---- vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) *(priv->overlay->pixels))+2*(priv->width*y0+x0)+1,2*priv->width); break; + #ifdef SDL_DIRECT_BLIT case IMGFMT_RGB15: case IMGFMT_BGR15: + vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) priv->surface->pixels)+2*(y0*priv->width+x0),2*priv->width); + break; + case IMGFMT_RGB16: + case IMGFMT_BGR16: + vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) priv->surface->pixels)+2*(y0*priv->width+x0),2*priv->width); + break; + case IMGFMT_RGB24: + case IMGFMT_BGR24: + vo_draw_alpha_rgb24(w,h,src,srca,stride,((uint8_t *) priv->surface->pixels)+3*(y0*priv->width+x0),3*priv->width); + break; + case IMGFMT_RGB32: + case IMGFMT_BGR32: + vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) priv->surface->pixels)+4*(y0*priv->width+x0),4*priv->width); + break; + #else + case IMGFMT_RGB15: + case IMGFMT_BGR15: vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) priv->rgbsurface->pixels)+2*(y0*priv->width+x0),2*priv->width); break; *************** *** 245,248 **** --- 268,272 ---- vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) priv->rgbsurface->pixels)+4*(y0*priv->width+x0),4*priv->width); break; + #endif } } *************** *** 779,782 **** --- 803,809 ---- if(priv->mode) { + #ifdef SDL_DIRECT_BLIT + if(verbose) printf("SDL: using direct surface blitting, no depth/colorspace-conversion/scaling possible.\n"); + #endif priv->framePlaneRGB = width * height * priv->rgbsurface->format->BytesPerPixel; priv->stridePlaneRGB = width * priv->rgbsurface->format->BytesPerPixel; *************** *** 846,849 **** --- 873,896 ---- case IMGFMT_RGB32: case IMGFMT_BGR32: + #ifdef SDL_DIRECT_BLIT + /*if(SDL_MUSTLOCK(priv->surface)) { + if (SDL_LockSurface (priv->surface)) { + if(verbose) printf("SDL: Couldn't lock RGB surface\n"); + return -1; + } + }*/ + dst = (uint8_t *) priv->surface->pixels; + if(priv->flip) { + mysrc+=priv->framePlaneRGB; + for(i = 0; i < priv->height; i++) { + mysrc-=priv->stridePlaneRGB; + memcpy (dst, mysrc, priv->stridePlaneRGB); + dst+=priv->stridePlaneRGB; + } + } + else memcpy (dst, src[0], priv->framePlaneRGB); + /*if(SDL_MUSTLOCK(priv->surface)) + SDL_UnlockSurface (priv->surface);*/ + #else /*if(SDL_MUSTLOCK(priv->rgbsurface)) { if (SDL_LockSurface (priv->rgbsurface)) { *************** *** 864,867 **** --- 911,915 ---- /*if(SDL_MUSTLOCK(priv->rgbsurface)) SDL_UnlockSurface (priv->rgbsurface);*/ + #endif break; *************** *** 1088,1091 **** --- 1136,1140 ---- case IMGFMT_RGB32: case IMGFMT_BGR32: + #ifndef SDL_DIRECT_BLIT /* blit to the RGB surface */ blitconv = SDL_DisplayFormat(priv->rgbsurface); *************** *** 1093,1096 **** --- 1142,1146 ---- printf("SDL: Blit failed: %s\n", SDL_GetError()); SDL_FreeSurface(blitconv); + #endif /* update screen */ _______________________________________________ Mplayer-cvslog mailing list Mplayer-cvslog@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog
participants (1)
-
Felix Buenemann