summaryrefslogtreecommitdiffstats
path: root/libvo/mga_common.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-03-07 02:44:16 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-03-07 02:44:16 +0000
commitcba305ead5aaebcc858978ba4614c1f89d4474d1 (patch)
tree8f402c3552f58457d3555215dda97fb105028957 /libvo/mga_common.c
parent09549536819f6835fb293bea24b585ceea04b072 (diff)
downloadmpv-cba305ead5aaebcc858978ba4614c1f89d4474d1.tar.bz2
mpv-cba305ead5aaebcc858978ba4614c1f89d4474d1.tar.xz
direct rendering support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4972 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/mga_common.c')
-rw-r--r--libvo/mga_common.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/libvo/mga_common.c b/libvo/mga_common.c
index 9772b78bd5..f0fcfe7523 100644
--- a/libvo/mga_common.c
+++ b/libvo/mga_common.c
@@ -1,6 +1,7 @@
#include "fastmemcpy.h"
#include "../mmx_defs.h"
+#include "../mp_image.h"
// mga_vid drawing functions
@@ -172,7 +173,6 @@ write_frame_yuy2(uint8_t *y)
mem2agpcpy_pic(vid_data, y, len, mga_vid_config.src_height, 2*bespitch, len);
}
-
static uint32_t
draw_frame(uint8_t *src[])
{
@@ -185,6 +185,36 @@ draw_frame(uint8_t *src[])
}
static uint32_t
+get_image(mp_image_t *mpi){
+ uint32_t bespitch = (mga_vid_config.src_width + 31) & ~31;
+ uint32_t bespitch2 = bespitch/2;
+// printf("mga: get_image() called\n");
+ if(mpi->type==MP_IMGTYPE_STATIC) return VO_FALSE; // it is not static
+ if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram
+// printf("width=%d vs. bespitch=%d, flags=0x%X \n",mpi->width,bespitch,mpi->flags);
+ if((mpi->width==bespitch) ||
+ (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH))){
+ // we're lucky or codec accepts stride => ok, let's go!
+ if(mpi->flags&MP_IMGFLAG_PLANAR){
+ mpi->planes[0]=vid_data;
+ mpi->planes[1]=vid_data + bespitch*mga_vid_config.src_height;
+ mpi->planes[2]=vid_data + bespitch*mga_vid_config.src_height
+ + bespitch*mga_vid_config.src_height / 4;
+ mpi->width=mpi->stride[0]=bespitch;
+ mpi->stride[1]=mpi->stride[2]=bespitch2;
+ } else {
+ mpi->planes[0]=vid_data;
+ mpi->width=bespitch;
+ mpi->stride[0]=mpi->width*(mpi->bpp/8);
+ }
+ 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)
{
switch(format){
@@ -205,6 +235,8 @@ static uint32_t control(uint32_t request, void *data, ...)
switch (request) {
case VOCTRL_QUERY_FORMAT:
return query_format(*((uint32_t*)data));
+ case VOCTRL_GET_IMAGE:
+ return get_image(data);
}
return VO_NOTIMPL;
}