1
mirror of https://github.com/mpv-player/mpv synced 2024-08-28 05:46:13 +02:00

vaapi: set our own context in AVHWFramesContext not AVHWDeviceContext

AVHWDeviceContext.user_opaque is reserved to libavutil under certain
circumstances, while AVHWFramesContext.user_opaque is truly free for use
by us. It's slightly simpler too.
This commit is contained in:
wm4 2017-01-12 09:21:58 +01:00
parent fcb970492c
commit a51e991b56
2 changed files with 7 additions and 7 deletions

View File

@ -80,6 +80,9 @@ static int init_decoder(struct lavc_ctx *ctx, int w, int h)
fctx->initial_pool_size = hwdec_get_max_refs(ctx) + ADDITIONAL_SURFACES;
// Some mpv downstream code uses this.
fctx->user_opaque = p->ctx;
va_lock(p->ctx);
int res = av_hwframe_ctx_init(p->frames_ref);
va_unlock(p->ctx);
@ -151,9 +154,6 @@ static int init(struct lavc_ctx *ctx, bool direct)
vactx->display = p->ctx->display;
// Some mpv downstream code uses this.
hwctx->user_opaque = p->ctx;
if (av_hwdevice_ctx_init(p->device_ref) < 0)
return -1;

View File

@ -521,15 +521,15 @@ struct mp_image *va_surface_download(struct mp_image *src,
if (!src->hwctx)
return NULL;
AVHWFramesContext *fctx = (void *)src->hwctx->data;
AVHWDeviceContext *dctx = fctx->device_ctx;
AVVAAPIDeviceContext *vactx = dctx->hwctx;
// as set by video/decode/vaapi.c
struct mp_vaapi_ctx *ctx = fctx->user_opaque;
tmp_p = (struct va_surface){
.ctx = dctx->user_opaque, // as set by video/decode/vaapi.c
.ctx = ctx,
.id = va_surface_id(src),
.rt_format = VA_RT_FORMAT_YUV420,
.w = fctx->width,
.h = fctx->height,
.display = vactx->display,
.display = ctx->display,
.image = { .image_id = VA_INVALID_ID, .buf = VA_INVALID_ID },
};
p = &tmp_p;