summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-07-15 12:37:28 +0200
committerwm4 <wm4@nowhere>2015-07-15 12:37:28 +0200
commitd1c37c0e29f0b1dcced460b547f5777d73d8f6eb (patch)
treee0b81b345f6f7a99753023c8048ebbb0e62080da
parent423a1a0f6c83419cb34f08a59ed46169e10c20da (diff)
downloadmpv-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.c5
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;
}