From 60fa5a134d34c694158c94513dce85f855984b0e Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 18 Feb 2009 12:30:15 +0000 Subject: Add VOCAP_NOSLICES and use it to allow vo_vdpau to not support slices for YV12 - since VDPAU only has functions to upload the full frame at once there is no sense in supporting draw_slice for that. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28646 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/vf_vo.c | 2 ++ libmpcodecs/vfcap.h | 2 ++ libvo/vo_vdpau.c | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libmpcodecs/vf_vo.c b/libmpcodecs/vf_vo.c index 4e0f1374c1..affffa6bde 100644 --- a/libmpcodecs/vf_vo.c +++ b/libmpcodecs/vf_vo.c @@ -32,6 +32,7 @@ struct vf_priv_s { #define video_out (vf->priv->vo) static int query_format(struct vf_instance_s* vf, unsigned int fmt); /* forward declaration */ +static void draw_slice(struct vf_instance_s* vf, unsigned char** src, int* stride, int w,int h, int x, int y); static int config(struct vf_instance_s* vf, int width, int height, int d_width, int d_height, @@ -61,6 +62,7 @@ static int config(struct vf_instance_s* vf, // save vo's stride capability for the wanted colorspace: vf->default_caps=query_format(vf,outfmt); + vf->draw_slice = (vf->default_caps & VOCAP_NOSLICES) ? NULL : draw_slice; if(config_video_out(video_out,width,height,d_width,d_height,flags,"MPlayer",outfmt)) return 0; diff --git a/libmpcodecs/vfcap.h b/libmpcodecs/vfcap.h index 9745a5c9bd..158928d924 100644 --- a/libmpcodecs/vfcap.h +++ b/libmpcodecs/vfcap.h @@ -33,5 +33,7 @@ #define VFCAP_EOSD 0x2000 // filter will draw EOSD at screen resolution (without scaling) #define VFCAP_EOSD_UNSCALED 0x4000 +// used by libvo and vf_vo, indicates the VO does not support draw_slice for this format +#define VOCAP_NOSLICES 0x8000 #endif /* MPLAYER_VFCAP_H */ diff --git a/libvo/vo_vdpau.c b/libvo/vo_vdpau.c index 368f889c6b..be738d2036 100644 --- a/libvo/vo_vdpau.c +++ b/libvo/vo_vdpau.c @@ -654,14 +654,16 @@ static uint32_t get_image(mp_image_t *mpi) static int query_format(uint32_t format) { + int default_flags = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_OSD; switch (format) { case IMGFMT_YV12: + return default_flags | VOCAP_NOSLICES; case IMGFMT_VDPAU_MPEG1: case IMGFMT_VDPAU_MPEG2: case IMGFMT_VDPAU_H264: case IMGFMT_VDPAU_WMV3: case IMGFMT_VDPAU_VC1: - return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_OSD; + return default_flags; } return 0; } -- cgit v1.2.3