diff options
author | atmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-01-08 20:58:53 +0000 |
---|---|---|
committer | atmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-01-08 20:58:53 +0000 |
commit | 9756472bdd8aee88475f52639ee4471ab10dccd1 (patch) | |
tree | d862f3c1032d2d863cf4d7ec02d077d76594f372 /libvo/vo_png.c | |
parent | 27468795552d24c1fdde056755640bcad74f06e4 (diff) | |
download | mpv-9756472bdd8aee88475f52639ee4471ab10dccd1.tar.bz2 mpv-9756472bdd8aee88475f52639ee4471ab10dccd1.tar.xz |
SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4061 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/vo_png.c')
-rw-r--r-- | libvo/vo_png.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/libvo/vo_png.c b/libvo/vo_png.c index fb01c7ffe8..321475885e 100644 --- a/libvo/vo_png.c +++ b/libvo/vo_png.c @@ -22,6 +22,7 @@ #include "video_out.h" #include "video_out_internal.h" +#include "../postproc/swscale.h" #include "../postproc/rgb2rgb.h" LIBVO_EXTERN (png) @@ -44,6 +45,7 @@ static int image_height; static int image_format; static uint8_t *image_data=NULL; //static char *image_data; +static unsigned int scale_srcW = 0, scale_srcH = 0; static int bpp = 24; static int cspace = RGB; @@ -63,10 +65,19 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) { - image_height = height; - image_width = width; + if (fullscreen&0x04 && (width != d_width || height != d_height) && format==IMGFMT_YV12) { + /* software scaling */ + image_width = (d_width + 7) & ~7; + image_height = d_height; + scale_srcW = width; + scale_srcH = height; + SwScale_Init(); + } + else { + image_height = height; + image_width = width; + } image_format = format; - //printf("Verbose level is %i\n", verbose); switch(format) { @@ -262,11 +273,17 @@ static void flip_page (void) static uint32_t draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y ) { + if (scale_srcW) { + uint8_t *dst[3] = {image_data, NULL, NULL}; + SwScale_YV12slice(src,stride,y,h, + dst, image_width*((bpp+7)/8), bpp, + scale_srcW, scale_srcH, image_width, image_height); + } + else { uint8_t *dst; - dst = image_data + (image_width * y + x) * (bpp/8); yuv2rgb(dst,src[0],src[1],src[2],w,h,image_width*(bpp/8),stride[0],stride[1]); - + } return 0; } |