|
|
|
@ -127,13 +127,6 @@ static int vdpau_init_pixmfts(AVHWDeviceContext *ctx) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int vdpau_device_init(AVHWDeviceContext *ctx) |
|
|
|
|
{ |
|
|
|
|
AVVDPAUDeviceContext *hwctx = ctx->hwctx; |
|
|
|
|
VDPAUDeviceContext *priv = ctx->internal->priv; |
|
|
|
|
VdpStatus err; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
#define GET_CALLBACK(id, result) \ |
|
|
|
|
do { \
|
|
|
|
|
void *tmp; \
|
|
|
|
@ -142,15 +135,22 @@ do { |
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Error getting the " #id " callback.\n"); \
|
|
|
|
|
return AVERROR_UNKNOWN; \
|
|
|
|
|
} \
|
|
|
|
|
priv->result = tmp; \
|
|
|
|
|
result = tmp; \
|
|
|
|
|
} while (0) |
|
|
|
|
|
|
|
|
|
static int vdpau_device_init(AVHWDeviceContext *ctx) |
|
|
|
|
{ |
|
|
|
|
AVVDPAUDeviceContext *hwctx = ctx->hwctx; |
|
|
|
|
VDPAUDeviceContext *priv = ctx->internal->priv; |
|
|
|
|
VdpStatus err; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_QUERY_GET_PUT_BITS_Y_CB_CR_CAPABILITIES, |
|
|
|
|
get_transfer_caps); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_GET_BITS_Y_CB_CR, get_data); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR, put_data); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_CREATE, surf_create); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_DESTROY, surf_destroy); |
|
|
|
|
priv->get_transfer_caps); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_GET_BITS_Y_CB_CR, priv->get_data); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR, priv->put_data); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_CREATE, priv->surf_create); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_VIDEO_SURFACE_DESTROY, priv->surf_destroy); |
|
|
|
|
|
|
|
|
|
ret = vdpau_init_pixmfts(ctx); |
|
|
|
|
if (ret < 0) { |
|
|
|
@ -444,17 +444,6 @@ static int vdpau_device_create(AVHWDeviceContext *ctx, const char *device, |
|
|
|
|
return AVERROR_UNKNOWN; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define GET_CALLBACK(id, result) \ |
|
|
|
|
do { \
|
|
|
|
|
void *tmp; \
|
|
|
|
|
err = hwctx->get_proc_address(hwctx->device, id, &tmp); \
|
|
|
|
|
if (err != VDP_STATUS_OK) { \
|
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Error getting the " #id " callback.\n"); \
|
|
|
|
|
return AVERROR_UNKNOWN; \
|
|
|
|
|
} \
|
|
|
|
|
result = tmp; \
|
|
|
|
|
} while (0) |
|
|
|
|
|
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_GET_INFORMATION_STRING, get_information_string); |
|
|
|
|
GET_CALLBACK(VDP_FUNC_ID_DEVICE_DESTROY, priv->device_destroy); |
|
|
|
|
|
|
|
|
|