mirror of
https://github.com/mpv-player/mpv.git
synced 2024-09-20 12:02:23 +02:00
fece4e3053
Instead of generating vdpau_template.c with a Perl script, just include the generated file in git. This is ok because it changes very rarely, and the script is larger than the output it generates. It also simplify the Makefile, and fixes the build. The problem was that transitive dependencies do not work with generated files: there is no dependency information yet when building it the first time. I overlooked this because I didn't delete the .d files for testing (which contained the correct dependencies, but only _after_ a first successful build).
56 lines
1.7 KiB
C
56 lines
1.7 KiB
C
#ifndef MPV_VDPAU_H
|
|
#define MPV_VDPAU_H
|
|
|
|
#include <stdbool.h>
|
|
#include <inttypes.h>
|
|
|
|
#include <vdpau/vdpau.h>
|
|
#include <vdpau/vdpau_x11.h>
|
|
|
|
#include "core/mp_msg.h"
|
|
|
|
#define CHECK_ST_ERROR(message) \
|
|
do { \
|
|
if (vdp_st != VDP_STATUS_OK) { \
|
|
mp_msg(MSGT_VO, MSGL_ERR, "[vdpau] %s: %s\n", \
|
|
message, vdp->get_error_string(vdp_st)); \
|
|
return -1; \
|
|
} \
|
|
} while (0)
|
|
|
|
#define CHECK_ST_WARNING(message) \
|
|
do { \
|
|
if (vdp_st != VDP_STATUS_OK) \
|
|
mp_msg(MSGT_VO, MSGL_WARN, "[vdpau] %s: %s\n", \
|
|
message, vdp->get_error_string(vdp_st)); \
|
|
} while (0)
|
|
|
|
struct vdp_functions {
|
|
#define VDP_FUNCTION(vdp_type, _, mp_name) vdp_type *mp_name;
|
|
#include "video/vdpau_functions.inc"
|
|
#undef VDP_FUNCTION
|
|
};
|
|
|
|
// 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;
|
|
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 mp_vdpau_status_ok(struct mp_vdpau_ctx *ctx);
|
|
|
|
struct mp_image *mp_vdpau_get_video_surface(struct mp_vdpau_ctx *ctx, int fmt,
|
|
VdpChromaType chroma, int w, int h);
|
|
|
|
bool mp_vdpau_get_format(int imgfmt, VdpChromaType *out_chroma_type,
|
|
VdpYCbCrFormat *out_pixel_format);
|
|
|
|
#endif
|