diff options
author | wm4 <wm4@nowhere> | 2015-07-15 12:37:28 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-07-15 12:37:28 +0200 |
commit | d1c37c0e29f0b1dcced460b547f5777d73d8f6eb (patch) | |
tree | e0b81b345f6f7a99753023c8048ebbb0e62080da | |
parent | 423a1a0f6c83419cb34f08a59ed46169e10c20da (diff) | |
download | mpv-d1c37c0e29f0b1dcced460b547f5777d73d8f6eb.tar.bz2 mpv-d1c37c0e29f0b1dcced460b547f5777d73d8f6eb.tar.xz |
vaapi: allow allocating additional surfaces during decoding
Fixes problems with --vo=opengl:interpolation. The issue here is that
vo_opengl retains more surfaces than what was preallocated for the
decoder. Until now, we just explicitly failed to decode frames for which
no additional surfaces are available. Since modern drivers usually are
fine with not "registering" surfaces before the decoder is created, just
allow allocating additional surfaces if needed.
(We also could probably recreate the HW decoder, since the HW decoder
should be stateless. But let's try to avoid raising the overall
complexity of the code.)
-rw-r--r-- | video/decode/vaapi.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/video/decode/vaapi.c b/video/decode/vaapi.c index b947b0c7de..cace8e733e 100644 --- a/video/decode/vaapi.c +++ b/video/decode/vaapi.c @@ -275,10 +275,9 @@ static struct mp_image *allocate_image(struct lavc_ctx *ctx, int format, { struct priv *p = ctx->hwdec_priv; - struct mp_image *img = - mp_image_pool_get_no_alloc(p->pool, IMGFMT_VAAPI, w, h); + struct mp_image *img = mp_image_pool_get(p->pool, IMGFMT_VAAPI, w, h); if (!img) - MP_ERR(p, "Insufficient number of surfaces.\n"); + MP_ERR(p, "Failed to allocate additional VAAPI surface.\n"); return img; } |