aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Acayan <mailingradian@gmail.com>2023-07-25 17:38:39 -0400
committerMarton Balint <cus@passwd.hu>2023-07-27 21:23:39 +0200
commit4fa1d3e7910c3fbe3aacbe5ae5233d0067569c02 (patch)
tree22e0a4fec5a8d5c2db81cd31a2aff17196447c13
parent91e1d11d1405f325f6f52e2c8dd5bbbf2462e190 (diff)
downloadffmpeg-4fa1d3e7910c3fbe3aacbe5ae5233d0067569c02.tar.gz
avcodec/v4l2_context: suppress POLLERR and fix crash when buffers are uninitialized
A POLLERR occurs when libavcodec attempts to dequeue output buffers before enqueuing capture buffers. This could happen to an application deciding to send the first coded packet. Suppress these POLLERRs when the buffers are uninitialized and avoid crashing because of enumerating uninitialized buffers. See https://trac.ffmpeg.org/ticket/9957 for the original bug report. Signed-off-by: Richard Acayan <mailingradian@gmail.com> Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r--libavcodec/v4l2_context.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c
index a40be94690..f20f713e1d 100644
--- a/libavcodec/v4l2_context.c
+++ b/libavcodec/v4l2_context.c
@@ -325,9 +325,13 @@ start:
/* 0. handle errors */
if (pfd.revents & POLLERR) {
- /* if we are trying to get free buffers but none have been queued yet
- no need to raise a warning */
+ /* if we are trying to get free buffers but none have been queued yet,
+ * or if no buffers have been allocated yet, no need to raise a warning
+ */
if (timeout == 0) {
+ if (!ctx->buffers)
+ return NULL;
+
for (i = 0; i < ctx->num_buffers; i++) {
if (ctx->buffers[i].status != V4L2BUF_AVAILABLE)
av_log(logger(ctx), AV_LOG_WARNING, "%s POLLERR\n", ctx->name);