From a51e991b564113254d9262565ddb69e40e2fd726 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 12 Jan 2017 09:21:58 +0100 Subject: 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. --- video/decode/vaapi.c | 6 +++--- video/vaapi.c | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'video') diff --git a/video/decode/vaapi.c b/video/decode/vaapi.c index d1099dabf5..8d7af19bfa 100644 --- a/video/decode/vaapi.c +++ b/video/decode/vaapi.c @@ -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; diff --git a/video/vaapi.c b/video/vaapi.c index 85350743d1..b239925c37 100644 --- a/video/vaapi.c +++ b/video/vaapi.c @@ -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; -- cgit v1.2.3