diff options
author | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-11-03 15:14:36 +0000 |
---|---|---|
committer | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-11-03 15:14:36 +0000 |
commit | a007cfa1134c9b69f3a19b11baec6d9b95d34b2e (patch) | |
tree | 58dc0e53f7512d50ec75c6207afe09de02e92720 /libvo/vo_dga.c | |
parent | 8c126714c54141fd172ae565ec2a082f48b8f8d2 (diff) | |
download | mpv-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/vo_dga.c')
-rw-r--r-- | libvo/vo_dga.c | 28 |
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)); } |