Index: /home/mark/mythtv/trunk/mythtv/libs/libmythtv/util-vdpau.cpp
===================================================================
--- /home/mark/mythtv/trunk/mythtv/libs/libmythtv/util-vdpau.cpp	(revision 22084)
+++ /home/mark/mythtv/trunk/mythtv/libs/libmythtv/util-vdpau.cpp	(working copy)
@@ -70,7 +70,7 @@
 }
 
 VDPAUContext::VDPAUContext()
-  : nextframedelay(0),      lastframetime(0),
+  : display(NULL),          nextframedelay(0), lastframetime(0),
     pix_fmt(-1),            checkVideoSurfaces(8), pause_surface(0),
     outputSurface(0),       checkOutputSurfaces(false),
     outputSize(QSize(0,0)), decoder(0),        maxReferences(2),
@@ -134,6 +134,7 @@
                         bool color_control, int color_key,
                         MythCodecID mcodecid, QString options)
 {
+    display = disp;
     outputSize = screen_size;
     ParseOptions(options);
 
@@ -142,7 +143,7 @@
 
     bool ok;
 
-    ok = InitProcs(disp);
+    ok = InitProcs();
     if (!ok)
         return ok;
 
@@ -185,15 +186,18 @@
     return &dummy[0];
 }
 
-bool VDPAUContext::InitProcs(MythXDisplay *disp)
+bool VDPAUContext::InitProcs(void)
 {
+    if (!display)
+        return false;
+
     VdpStatus vdp_st;
     bool ok = true;
     vdp_get_error_string = &dummy_get_error_string;
 
-    XLOCK(disp, vdp_st = vdp_device_create_x11(
-        disp->GetDisplay(),
-        disp->GetScreen(),
+    XLOCK(display, vdp_st = vdp_device_create_x11(
+        display->GetDisplay(),
+        display->GetScreen(),
         &vdp_device,
         &vdp_get_proc_address
     ));
@@ -540,6 +544,10 @@
     VdpStatus vdp_st;
     bool ok = true;
 
+    if (!display)
+        return false;
+
+    display->Lock();
     vdp_st = vdp_presentation_queue_target_create_x11(
         vdp_device,
         win,
@@ -569,6 +577,7 @@
         CHECK_ST
     }
 
+    display->Unlock();
     return ok;
 }
 
@@ -577,6 +586,9 @@
     VdpStatus vdp_st;
     bool ok = true;
 
+    if (display)
+        display->Lock();
+
     if (vdp_flip_queue)
     {
         vdp_st = vdp_presentation_queue_destroy(
@@ -592,6 +604,10 @@
         vdp_flip_target = 0;
         CHECK_ST
     }
+
+    if (display)
+        display->Unlock();
+
 }
 
 int VDPAUContext::AddBuffer(int width, int height)
Index: /home/mark/mythtv/trunk/mythtv/libs/libmythtv/util-vdpau.h
===================================================================
--- /home/mark/mythtv/trunk/mythtv/libs/libmythtv/util-vdpau.h	(revision 22084)
+++ /home/mark/mythtv/trunk/mythtv/libs/libmythtv/util-vdpau.h	(working copy)
@@ -103,7 +103,7 @@
     void DeinitPIP(NuppelVideoPlayer *pipplayer, bool check_layer = true);
 
   private:
-    bool InitProcs(MythXDisplay *disp);
+    bool InitProcs(void);
     void DeinitProcs(void);
     void ClearScreen(void);
     VdpVideoMixer CreateMasterMixer(int width, int height);
@@ -119,6 +119,7 @@
     bool InitPIP(NuppelVideoPlayer *pipplayer, QSize vid_size);
     void ParseOptions(QString options);
 
+    MythXDisplay *display;
     int nextframedelay;
     VdpTime lastframetime;
 
