From df40d36d84fbdd3aae827b36d1a15739efb9225b Mon Sep 17 00:00:00 2001
From: Niklas Haas <git@haasn.xyz>
Date: Wed, 20 May 2020 07:01:47 +0200
Subject: [PATCH] dav1dplay: don't freeze on render errors

Returning out of this function when pl_render_image() fails is the wrong
thing to do, since that leaves the swapchain frame acquired but never
submitted. Instead, just clear the target FBO to blank red (to make it
clear that something went wrong) and continue on with presentation.
---
 examples/dp_renderer_placebo.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/examples/dp_renderer_placebo.c b/examples/dp_renderer_placebo.c
index 00afcdbc1..7e7771cb3 100644
--- a/examples/dp_renderer_placebo.c
+++ b/examples/dp_renderer_placebo.c
@@ -328,8 +328,7 @@ static void placebo_render(void *cookie, const Dav1dPlaySettings *settings)
 
     if (!pl_render_image(rd_priv_ctx->renderer, &rd_priv_ctx->image, &target, &render_params)) {
         fprintf(stderr, "Failed rendering frame!\n");
-        SDL_UnlockMutex(rd_priv_ctx->lock);
-        return;
+        pl_tex_clear(rd_priv_ctx->gpu, target.fbo, (float[4]){ 1.0 });
     }
 
     ok = pl_swapchain_submit_frame(rd_priv_ctx->swapchain);
-- 
GitLab