1
0
mirror of https://github.com/libretro/Lakka-LibreELEC.git synced 2024-11-24 09:06:18 +00:00
Lakka-LibreELEC/packages/multimedia/ffmpeg/patches/L4T/0012-codecs-nvv4l2-fix-hanging-on-event-wait-if-no-full-f.patch
GavinDarkglider 66e50e96b9
Lakka v5.x switch 6 (#1926)
* L4T: Fix/Enable NVV4l2 decoder in libreelec builds.

* L4T: LibreELEC: Allow Kodi to run as root

* L4T: Small Tree Cleanup

* Bluez: Switch: LibreELEC: Fix fast connect on all switch builds, not just lakka.

* L4T: Finish ffmpeg 6.0 patchset

* L4T: Fix building newer libcec for switch

* L4T: switch-bsp: Update dock hotplug to check distro stuff, before integrating CEC and bump version.
2024-01-29 20:49:02 +02:00

42 lines
1.5 KiB
Diff

From d78e4bc70ec1d97e22c5f0365c027574e740923f Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:50:20 +0000
Subject: [PATCH 12/39] codecs: nvv4l2: fix hanging on event wait if no full
frame info
Sometimes the decoder can be opened with no packet sent or not many for a frame to be decoded.
In such cases the thread will get stuck for 50s waiting for a resolution event to happen.
Use the streamon and eos checks properly to get out of such a loop.
---
libavcodec/nvv4l2_dec.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index 0779f3a4bf..e242857b2e 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -417,7 +417,8 @@ static void *dec_capture_thread(void *arg)
break;
}
}
- while ((event.type != V4L2_EVENT_RESOLUTION_CHANGE) && !ctx->in_error);
+ while ((event.type != V4L2_EVENT_RESOLUTION_CHANGE) &&
+ !ctx->in_error && !ctx->eos);
/* Received first resolution change event
** Format and buffers are now set on capture.
@@ -816,6 +817,8 @@ int nvv4l2_decoder_close(AVCodecContext *avctx, nvv4l2_ctx_t *ctx)
/* Stop streaming on both planes. */
ret = v4l2_ioctl(ctx->fd, VIDIOC_STREAMOFF, &ctx->op_buf_type);
ret = v4l2_ioctl(ctx->fd, VIDIOC_STREAMOFF, &ctx->cp_buf_type);
+ ctx->op_streamon = false;
+ ctx->cp_streamon = false;
/* Wait for capture thread to exit. */
if (ctx->capture_thread) {
--
2.25.1