From ddd25cfbb05582963fc15a7ade1a9c5cd4a3ed27 Mon Sep 17 00:00:00 2001 From: Christian König Date: Sun, 28 Aug 2011 13:52:44 +0200 Subject: st/vdpau: Respect source_rect in VideoMixerRender Fixing a bug reported by Andy Furniss. --- src/gallium/state_trackers/vdpau/mixer.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/gallium/state_trackers/vdpau/mixer.c') diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c index fbd24a29414..5c3c6c69548 100644 --- a/src/gallium/state_trackers/vdpau/mixer.c +++ b/src/gallium/state_trackers/vdpau/mixer.c @@ -139,6 +139,8 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, uint32_t layer_count, VdpLayer const *layers) { + struct pipe_video_rect src_rect, *p_src_rect = NULL; + vlVdpVideoMixer *vmixer; vlVdpSurface *surf; vlVdpOutputSurface *dst; @@ -155,8 +157,16 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, if (!dst) return VDP_STATUS_INVALID_HANDLE; + if (video_source_rect) { + src_rect.x = MIN2(video_source_rect->x1, video_source_rect->x0); + src_rect.y = MIN2(video_source_rect->y1, video_source_rect->y0); + src_rect.w = abs(video_source_rect->x1 - video_source_rect->x0); + src_rect.h = abs(video_source_rect->y1 - video_source_rect->y0); + p_src_rect = &src_rect; + } + vl_compositor_clear_layers(&vmixer->compositor); - vl_compositor_set_buffer_layer(&vmixer->compositor, 0, surf->video_buffer, NULL, NULL); + vl_compositor_set_buffer_layer(&vmixer->compositor, 0, surf->video_buffer, p_src_rect, NULL); vl_compositor_render(&vmixer->compositor, dst->surface, NULL, NULL); return VDP_STATUS_OK; -- cgit v1.2.3