st/vdpau: fix unwanted output scaling
authorChristian König <deathsimple@vodafone.de>
Mon, 12 Dec 2011 15:51:12 +0000 (16:51 +0100)
committerChristian König <deathsimple@vodafone.de>
Wed, 14 Dec 2011 13:22:37 +0000 (14:22 +0100)
vlVdpPresentationQueueDisplay shouldn't scale, so
use size of destination surface as source rectangle.

Based on work of Maarten Lankhorst <m.b.lankhorst@gmail.com>

Signed-off-by: Christian König <deathsimple@vodafone.de>
src/gallium/state_trackers/vdpau/presentation.c

index df38f637de9bd6148c0555db64bdd50a9bbeac54..0e086fc18b42ae89517b39e86f8d19253e4a8a3a 100644 (file)
@@ -213,7 +213,7 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
 
    struct pipe_context *pipe;
    struct pipe_surface *drawable_surface;
-   struct pipe_video_rect vo_rect;
+   struct pipe_video_rect src_rect, dst_clip;
 
    pq = vlGetDataHTAB(presentation_queue);
    if (!pq)
@@ -229,14 +229,19 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
 
    surf->timestamp = (vlVdpTime)earliest_presentation_time;
 
-   vo_rect.x = 0;
-   vo_rect.y = 0;
-   vo_rect.w = clip_width;
-   vo_rect.h = clip_height;
+   src_rect.x = 0;
+   src_rect.y = 0;
+   src_rect.w = drawable_surface->width;
+   src_rect.h = drawable_surface->height;
+
+   dst_clip.x = 0;
+   dst_clip.y = 0;
+   dst_clip.w = clip_width;
+   dst_clip.h = clip_height;
 
    vl_compositor_clear_layers(&pq->compositor);
-   vl_compositor_set_rgba_layer(&pq->compositor, 0, surf->sampler_view, NULL, NULL);
-   vl_compositor_render(&pq->compositor, drawable_surface, NULL, &vo_rect, &pq->dirty_area);
+   vl_compositor_set_rgba_layer(&pq->compositor, 0, surf->sampler_view, &src_rect, NULL);
+   vl_compositor_render(&pq->compositor, drawable_surface, NULL, &dst_clip, &pq->dirty_area);
 
    pipe = pq->device->context->pipe;