Mesa (master): st/vdpau: fix background handling in the mixer

Christian König deathsimple at kemper.freedesktop.org
Wed May 1 11:33:55 UTC 2013


Module: Mesa
Branch: master
Commit: 3aafe2437da09fcc1f40b38bb73ec2759fde87eb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3aafe2437da09fcc1f40b38bb73ec2759fde87eb

Author: Christian König <christian.koenig at amd.com>
Date:   Tue Apr 30 14:55:14 2013 +0200

st/vdpau: fix background handling in the mixer

Signed-off-by: Christian König <christian.koenig at amd.com>

---

 src/gallium/state_trackers/vdpau/mixer.c |   19 ++++++++++---------
 1 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c
index 1d2ae49..26db5c8 100644
--- a/src/gallium/state_trackers/vdpau/mixer.c
+++ b/src/gallium/state_trackers/vdpau/mixer.c
@@ -221,7 +221,7 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer,
 
    vlVdpVideoMixer *vmixer;
    vlVdpSurface *surf;
-   vlVdpOutputSurface *dst;
+   vlVdpOutputSurface *dst, *bg = NULL;
 
    struct vl_compositor *compositor;
 
@@ -250,20 +250,21 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer,
    if (!dst)
       return VDP_STATUS_INVALID_HANDLE;
 
-   pipe_mutex_lock(vmixer->device->mutex);
-   vlVdpResolveDelayedRendering(vmixer->device, NULL, NULL);
    if (background_surface != VDP_INVALID_HANDLE) {
-      vlVdpOutputSurface *bg = vlGetDataHTAB(background_surface);
-      if (!bg) {
-         pipe_mutex_unlock(vmixer->device->mutex);
+      bg = vlGetDataHTAB(background_surface);
+      if (!bg)
          return VDP_STATUS_INVALID_HANDLE;
-      }
-      vl_compositor_set_rgba_layer(&vmixer->cstate, compositor, layer++, bg->sampler_view,
-                                   RectToPipe(background_source_rect, &rect), NULL, NULL);
    }
 
+   pipe_mutex_lock(vmixer->device->mutex);
+   vlVdpResolveDelayedRendering(vmixer->device, NULL, NULL);
+
    vl_compositor_clear_layers(&vmixer->cstate);
 
+   if (bg)
+      vl_compositor_set_rgba_layer(&vmixer->cstate, compositor, layer++, bg->sampler_view,
+                                   RectToPipe(background_source_rect, &rect), NULL, NULL);
+
    switch (current_picture_structure) {
    case VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD:
       deinterlace = VL_COMPOSITOR_BOB_TOP;




More information about the mesa-commit mailing list