summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-11-03 15:14:36 +0000
committerpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-11-03 15:14:36 +0000
commita007cfa1134c9b69f3a19b11baec6d9b95d34b2e (patch)
tree58dc0e53f7512d50ec75c6207afe09de02e92720 /libvo
parent8c126714c54141fd172ae565ec2a082f48b8f8d2 (diff)
downloadmpv-a007cfa1134c9b69f3a19b11baec6d9b95d34b2e.tar.bz2
mpv-a007cfa1134c9b69f3a19b11baec6d9b95d34b2e.tar.xz
arpi add direct render support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8085 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_dga.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/libvo/vo_dga.c b/libvo/vo_dga.c
index 0d6b3066cc..9abb50fbc3 100644
--- a/libvo/vo_dga.c
+++ b/libvo/vo_dga.c
@@ -1042,9 +1042,37 @@ static uint32_t preinit(const char *arg)
return 0;
}
+static uint32_t get_image(mp_image_t *mpi)
+{
+ if (
+ !IMGFMT_IS_BGR(mpi->imgfmt) ||
+ (IMGFMT_BGR_DEPTH(mpi->imgfmt) != vo_dga_modes[vo_dga_hw_mode].vdm_mplayer_depth) ||
+ (mpi->type==MP_IMGTYPE_STATIC && vo_dga_nr_video_buffers>1) ||
+ (mpi->type==MP_IMGTYPE_IP && vo_dga_nr_video_buffers<2) ||
+ (mpi->type==MP_IMGTYPE_IPB)
+ )
+ return(VO_FALSE);
+
+ if( (mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) ||
+ (mpi->flags&MP_IMGFLAG_ACCEPT_WIDTH &&
+ ((vo_dga_bytes_per_line+vo_dga_vp_skip)%(mpi->bpp/8))==0 ) ||
+ (mpi->width*(mpi->bpp/8)==(vo_dga_bytes_per_line+vo_dga_vp_skip)) ){
+
+ mpi->planes[0] = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset;
+ mpi->stride[0] = vo_dga_bytes_per_line + vo_dga_vp_skip;
+ mpi->width=(vo_dga_bytes_per_line+vo_dga_vp_skip)/(mpi->bpp/8);
+ mpi->flags |= MP_IMGFLAG_DIRECT;
+ return(VO_TRUE);
+ }
+
+ return(VO_FALSE);
+}
+
static uint32_t control(uint32_t request, void *data, ...)
{
switch (request) {
+ case VOCTRL_GET_IMAGE:
+ return get_image(data);
case VOCTRL_QUERY_FORMAT:
return query_format(*((uint32_t*)data));
}