summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/state_trackers/vdpau/presentation.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/vdpau/presentation.c b/src/gallium/state_trackers/vdpau/presentation.c
index fdd0144fe22..063c63fb4ee 100644
--- a/src/gallium/state_trackers/vdpau/presentation.c
+++ b/src/gallium/state_trackers/vdpau/presentation.c
@@ -25,6 +25,8 @@
*
**************************************************************************/
+#include <stdio.h>
+
#include "vdpau_private.h"
#include <vdpau/vdpau.h>
#include <util/u_debug.h>
@@ -131,6 +133,8 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
uint32_t clip_height,
VdpTime earliest_presentation_time)
{
+ static int dump_window = -1;
+
vlVdpPresentationQueue *pq;
vlVdpOutputSurface *surf;
struct pipe_surface *drawable_surface;
@@ -160,6 +164,19 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue,
vl_contextprivate_get(pq->device->context, drawable_surface)
);
+ if(dump_window == -1) {
+ dump_window = debug_get_num_option("VDPAU_DUMP", 0);
+ }
+
+ if(dump_window) {
+ static unsigned int framenum = 0;
+ char cmd[256];
+
+ sprintf(cmd, "xwd -id %d -out vdpau_frame_%08d.xwd", (int)pq->drawable, ++framenum);
+ if (system(cmd) != 0)
+ _debug_printf("[XvMC] Dumping surface %d failed.\n", surface);
+ }
+
return VDP_STATUS_OK;
}