diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-03-07 16:57:40 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-03-07 16:57:40 +0000 |
commit | 83c66ac7053e671e8eb4aecba8d983d6c6b6d1b4 (patch) | |
tree | 2fc1ccbb16993ae7c5a00c262f8d9725c0dd160c /libvo/vo_xv.c | |
parent | d7bb353d156114e8aa57f10860cd476a7c326c94 (diff) | |
download | mpv-83c66ac7053e671e8eb4aecba8d983d6c6b6d1b4.tar.bz2 mpv-83c66ac7053e671e8eb4aecba8d983d6c6b6d1b4.tar.xz |
direct rendering support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4981 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/vo_xv.c')
-rw-r--r-- | libvo/vo_xv.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c index d6c8ff3a38..da242c8b6e 100644 --- a/libvo/vo_xv.c +++ b/libvo/vo_xv.c @@ -39,6 +39,7 @@ LIBVO_EXTERN(xv) #include "aspect.h" #include "../postproc/rgb2rgb.h" +#include "../mp_image.h" static vo_info_t vo_info = { @@ -741,6 +742,28 @@ static uint32_t draw_frame(uint8_t *src[]) return 0; } +static uint32_t get_image(mp_image_t *mpi){ + if(mpi->type==MP_IMGTYPE_STATIC && num_buffers>1) return VO_FALSE; // it is not static +// if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram + if(mpi->width==image_width){ + if(mpi->flags&MP_IMGFLAG_PLANAR){ + mpi->planes[0]=xvimage[current_buf]->data; + mpi->planes[1]=xvimage[current_buf]->data+image_width*image_height; + mpi->planes[2]=xvimage[current_buf]->data+image_width*image_height*5/4; + mpi->stride[0]=image_width; + mpi->stride[1]=mpi->stride[2]=image_width/2; + } else { + mpi->planes[0]=xvimage[current_buf]->data; + mpi->stride[0]=image_width; + } + mpi->flags|=MP_IMGFLAG_DIRECT; +// printf("mga: get_image() SUCCESS -> Direct Rendering ENABLED\n"); + return VO_TRUE; + } + return VO_FALSE; +} + + static uint32_t query_format(uint32_t format) { @@ -799,6 +822,8 @@ static uint32_t control(uint32_t request, void *data, ...) return VO_TRUE; case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data)); + case VOCTRL_GET_IMAGE: + return get_image(data); } return VO_NOTIMPL; } |