Mercurial > mplayer.hg
diff libvo/vesa_lvo.c @ 3019:64ce4a515a78
Bad attempt of YV12 direct support
author | nick |
---|---|
date | Tue, 20 Nov 2001 10:00:58 +0000 |
parents | fb792e58aac5 |
children | e5ebde3ebdd6 |
line wrap: on
line diff
--- a/libvo/vesa_lvo.c Tue Nov 20 09:26:44 2001 +0000 +++ b/libvo/vesa_lvo.c Tue Nov 20 10:00:58 2001 +0000 @@ -144,6 +144,49 @@ if(lvo_handler != -1) close(lvo_handler); } +static void +CopyData420( + unsigned char *src1, + unsigned char *src2, + unsigned char *src3, + unsigned char *dst1, + unsigned char *dst2, + unsigned char *dst3, + int srcPitch, + int srcPitch2, + int dstPitch, + int h, + int w +){ + int count; + + count = h; + while(count--) { + memcpy(dst1, src1, w); + src1 += srcPitch; + dst1 += dstPitch; + } + + w >>= 1; + h >>= 1; + dstPitch >>= 1; + + count = h; + while(count--) { + memcpy(dst2, src2, w); + src2 += srcPitch2; + dst2 += dstPitch; + } + + count = h; + while(count--) { + memcpy(dst3, src3, w); + src3 += srcPitch2; + dst3 += dstPitch; + } +} + + uint32_t vlvo_draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) { #if 0 @@ -195,6 +238,25 @@ ,w,h,stride[0],stride[1],w*2); } else +#else + if(src_format == IMGFMT_YV12) + { + uint32_t dstPitch,d1line,d2line,d3line,d1offset,d2offset,d3offset; + dstPitch = (mga_vid_config.src_width + 15) & ~15; /* of luma */ + d1line = y * dstPitch; + d2line = (mga_vid_config.src_height * dstPitch) + ((y >> 1) * (dstPitch >> 1)); + d3line = d2line + ((mga_vid_config.src_height >> 1) * (dstPitch >> 1)); + + y &= ~1; + + d1offset = (y * dstPitch) + x; + d2offset = d2line + (x >> 1); + d3offset = d3line + (x >> 1); + CopyData420(image[0],image[1],image[2], + dst+d1offset,dst+d2offset,dst+d3offset, + stride[0],stride[1],dstPitch,h,w); + } + else #endif memcpy(dst,image[0],mga_vid_config.frame_size); #endif