From 5cca9143abdbf413641dc8a657ca869a9425b5a9 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 5 Nov 2013 22:06:32 +0100 Subject: vdpau: move device and video surface management from vo_vdpau.c to vdpau.c The goal is being able to use vdpau decoding independently from vo_vdpau.c. --- video/vdpau.h | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'video/vdpau.h') diff --git a/video/vdpau.h b/video/vdpau.h index 79fc842971..9b67025347 100644 --- a/video/vdpau.h +++ b/video/vdpau.h @@ -31,19 +31,38 @@ struct vdp_functions { #undef VDP_FUNCTION }; + +#define MAX_VIDEO_SURFACES 50 + // Shared state. Objects created from different VdpDevices are often (always?) // incompatible to each other, so all code must use a shared VdpDevice. struct mp_vdpau_ctx { struct vdp_functions *vdp; + VdpGetProcAddress *get_proc_address; VdpDevice vdp_device; bool is_preempted; // set to true during unavailability uint64_t preemption_counter; // incremented after _restoring_ - bool (*status_ok)(struct mp_vdpau_ctx *ctx); - struct mp_image *(*get_video_surface)(struct mp_vdpau_ctx *ctx, int fmt, - VdpChromaType chroma, int w, int h); - void *priv; // for VO + + bool preemption_user_notified; + double last_preemption_retry_fail; + + struct vo_x11_state *x11; + + // Surface pool + struct surface_entry { + VdpVideoSurface surface; + int fmt, w, h; + VdpChromaType chroma; + bool in_use; + } video_surfaces[MAX_VIDEO_SURFACES]; + + struct mp_log *log; }; +struct mp_vdpau_ctx *mp_vdpau_create_device_x11(struct mp_log *log, + struct vo_x11_state *x11); +void mp_vdpau_destroy(struct mp_vdpau_ctx *ctx); + bool mp_vdpau_status_ok(struct mp_vdpau_ctx *ctx); struct mp_image *mp_vdpau_get_video_surface(struct mp_vdpau_ctx *ctx, int fmt, -- cgit v1.2.3