st/vdpau: Respect source_rect in VideoMixerRender
authorChristian König <deathsimple@vodafone.de>
Sun, 28 Aug 2011 11:52:44 +0000 (13:52 +0200)
committerChristian König <deathsimple@vodafone.de>
Mon, 29 Aug 2011 08:16:56 +0000 (10:16 +0200)
Fixing a bug reported by Andy Furniss.

src/gallium/state_trackers/vdpau/mixer.c

index fbd24a29414e17bf03783bcfc128f005af55b7fd..5c3c6c69548978330eab09e3d4b1001ff0ee77ad 100644 (file)
@@ -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;