summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-04-29 15:12:38 +0200
committerwm4 <wm4@nowhere>2014-05-02 01:08:04 +0200
commitfd63f2f0377f30fb66ee8e78d36dffeb9c4a549a (patch)
tree8fe83003395b0f231be608f3950b4ebbb2d01209 /video
parentec28a281b9612978a3cc3c8dd6c91dbb9b61823f (diff)
downloadmpv-fd63f2f0377f30fb66ee8e78d36dffeb9c4a549a.tar.bz2
mpv-fd63f2f0377f30fb66ee8e78d36dffeb9c4a549a.tar.xz
vdpau_mixer: allow overriding frame opts
So a caller can override the filter options dictated by vf_vdpaupp.
Diffstat (limited to 'video')
-rw-r--r--video/out/gl_hwdec_vdpau.c2
-rw-r--r--video/out/vo_vdpau.c2
-rw-r--r--video/vdpau_mixer.c9
-rw-r--r--video/vdpau_mixer.h1
4 files changed, 10 insertions, 4 deletions
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);