summaryrefslogtreecommitdiffstats
path: root/video/filter
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-06 15:27:44 +0100
committerwm4 <wm4@nowhere>2013-01-13 17:39:32 +0100
commit2d8fb838d7823137661b420b98e68188532bb36f (patch)
treee9d3742a0428a0dccc2cff894d89c6fad1d11a0c /video/filter
parent0d1aca12896b6459d0a1c41fcac5b67bf5351817 (diff)
downloadmpv-2d8fb838d7823137661b420b98e68188532bb36f.tar.bz2
mpv-2d8fb838d7823137661b420b98e68188532bb36f.tar.xz
video: make vdpau hardware decoding not use DR code path
vdpau hardware decoding used the DR (direct rendering) path to let the decoder query a surface from the VO. Special-case the HW decoding path instead, to make it separate from DR.
Diffstat (limited to 'video/filter')
-rw-r--r--video/filter/vf.h1
-rw-r--r--video/filter/vf_vo.c13
2 files changed, 3 insertions, 11 deletions
diff --git a/video/filter/vf.h b/video/filter/vf.h
index 29727259ba..1a850995f3 100644
--- a/video/filter/vf.h
+++ b/video/filter/vf.h
@@ -98,6 +98,7 @@ struct vf_ctrl_screenshot {
#define VFCTRL_SET_EQUALIZER 6 // set color options (brightness,contrast etc)
#define VFCTRL_GET_EQUALIZER 8 // get color options (brightness,contrast etc)
#define VFCTRL_HWDEC_DECODER_RENDER 9 // vdpau hw decoding
+#define VFCTRL_HWDEC_GET_SURFACE 10 // vdpau hw decoding
#define VFCTRL_SCREENSHOT 14 // Take screenshot, arg is vf_ctrl_screenshot
#define VFCTRL_INIT_OSD 15 // Filter OSD renderer present?
#define VFCTRL_SET_DEINTERLACE 18 // Set deinterlacing status
diff --git a/video/filter/vf_vo.c b/video/filter/vf_vo.c
index b8eb7bb13d..731d1bbcff 100644
--- a/video/filter/vf_vo.c
+++ b/video/filter/vf_vo.c
@@ -105,6 +105,8 @@ static int control(struct vf_instance *vf, int request, void *data)
}
case VFCTRL_HWDEC_DECODER_RENDER:
return vo_control(video_out, VOCTRL_HWDEC_DECODER_RENDER, data);
+ case VFCTRL_HWDEC_GET_SURFACE:
+ return vo_control(video_out, VOCTRL_HWDEC_GET_SURFACE, data);
}
return CONTROL_UNKNOWN;
}
@@ -119,16 +121,6 @@ static int query_format(struct vf_instance *vf, unsigned int fmt)
return flags;
}
-static void get_image(struct vf_instance *vf,
- mp_image_t *mpi)
-{
- if (!video_out->config_ok)
- return;
- // GET_IMAGE is required for hardware-accelerated formats
- if (IMGFMT_IS_HWACCEL(mpi->imgfmt))
- vo_control(video_out, VOCTRL_GET_IMAGE, mpi);
-}
-
static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts)
{
if (!video_out->config_ok)
@@ -151,7 +143,6 @@ static int vf_open(vf_instance_t *vf, char *args)
vf->config = config;
vf->control = control;
vf->query_format = query_format;
- vf->get_image = get_image;
vf->put_image = put_image;
vf->uninit = uninit;
vf->priv = calloc(1, sizeof(struct vf_priv_s));