From fd63f2f0377f30fb66ee8e78d36dffeb9c4a549a Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 29 Apr 2014 15:12:38 +0200 Subject: vdpau_mixer: allow overriding frame opts So a caller can override the filter options dictated by vf_vdpaupp. --- video/out/gl_hwdec_vdpau.c | 2 +- video/out/vo_vdpau.c | 2 +- video/vdpau_mixer.c | 9 +++++++-- video/vdpau_mixer.h | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) (limited to 'video') diff --git a/video/out/gl_hwdec_vdpau.c b/video/out/gl_hwdec_vdpau.c index 7a33e05051..e8f041615a 100644 --- a/video/out/gl_hwdec_vdpau.c +++ b/video/out/gl_hwdec_vdpau.c @@ -191,7 +191,7 @@ static int map_image(struct gl_hwdec *hw, struct mp_image *hw_image, if (!p->vdpgl_surface) return -1; - mp_vdpau_mixer_render(p->mixer, p->vdp_surface, NULL, hw_image, NULL); + mp_vdpau_mixer_render(p->mixer, NULL, p->vdp_surface, NULL, hw_image, NULL); gl->VDPAUMapSurfacesNV(1, &p->vdpgl_surface); out_textures[0] = p->gl_texture; diff --git a/video/out/vo_vdpau.c b/video/out/vo_vdpau.c index 463739a998..4904d78dd1 100644 --- a/video/out/vo_vdpau.c +++ b/video/out/vo_vdpau.c @@ -204,7 +204,7 @@ static int render_video_to_output_surface(struct vo *vo, return 0; } - mp_vdpau_mixer_render(vc->video_mixer, output_surface, output_rect, + mp_vdpau_mixer_render(vc->video_mixer, NULL, output_surface, output_rect, bv[dp].mpi, video_rect); return 0; } diff --git a/video/vdpau_mixer.c b/video/vdpau_mixer.c index f5743c5db3..1a53374622 100644 --- a/video/vdpau_mixer.c +++ b/video/vdpau_mixer.c @@ -204,7 +204,9 @@ static int create_vdp_mixer(struct mp_vdpau_mixer *mixer) return 0; } +// If opts is NULL, use the opts as implied by the video image. int mp_vdpau_mixer_render(struct mp_vdpau_mixer *mixer, + struct mp_vdpau_mixer_opts *opts, VdpOutputSurface output, VdpRect *output_rect, struct mp_image *video, VdpRect *video_rect) { @@ -223,13 +225,16 @@ int mp_vdpau_mixer_render(struct mp_vdpau_mixer *mixer, frame->field = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME; } + if (!opts) + opts = &frame->opts; + if (mixer->video_mixer == VDP_INVALID_HANDLE) mixer->initialized = false; - if (!mixer->initialized || !opts_equal(&frame->opts, &mixer->opts) || + if (!mixer->initialized || !opts_equal(opts, &mixer->opts) || !mp_image_params_equals(&video->params, &mixer->image_params)) { - mixer->opts = frame->opts; + mixer->opts = *opts; mixer->image_params = video->params; if (mixer->video_mixer != VDP_INVALID_HANDLE) { vdp_st = vdp->video_mixer_destroy(mixer->video_mixer); diff --git a/video/vdpau_mixer.h b/video/vdpau_mixer.h index 80ba978373..f9a795375e 100644 --- a/video/vdpau_mixer.h +++ b/video/vdpau_mixer.h @@ -51,6 +51,7 @@ struct mp_vdpau_mixer *mp_vdpau_mixer_create(struct mp_vdpau_ctx *vdp_ctx, void mp_vdpau_mixer_destroy(struct mp_vdpau_mixer *mixer); int mp_vdpau_mixer_render(struct mp_vdpau_mixer *mixer, + struct mp_vdpau_mixer_opts *opts, VdpOutputSurface output, VdpRect *output_rect, struct mp_image *video, VdpRect *video_rect); -- cgit v1.2.3