diff options
Diffstat (limited to 'video/vdpau.h')
-rw-r--r-- | video/vdpau.h | 27 |
1 files changed, 23 insertions, 4 deletions
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, |