diff options
author | wm4 <wm4@nowhere> | 2017-01-12 09:21:58 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2017-01-12 13:58:28 +0100 |
commit | a51e991b564113254d9262565ddb69e40e2fd726 (patch) | |
tree | 039b47762bab42791e5d7b4c3cce83c22825e8d5 /video | |
parent | fcb970492ccb5f351f4dce7ba52aefd38f544fe9 (diff) | |
download | mpv-a51e991b564113254d9262565ddb69e40e2fd726.tar.bz2 mpv-a51e991b564113254d9262565ddb69e40e2fd726.tar.xz |
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.
Diffstat (limited to 'video')
-rw-r--r-- | video/decode/vaapi.c | 6 | ||||
-rw-r--r-- | video/vaapi.c | 8 |
2 files changed, 7 insertions, 7 deletions
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; |