[FFmpeg-devel,v1,3/3] avcodec: v4l2_m2m: context: fix raising warning on POLLERR

Submitted by Jorge Ramirez-Ortiz on Jan. 9, 2018, 10:56 p.m.

Details

Message ID 1515538603-13208-3-git-send-email-jorge.ramirez.ortiz@gmail.com
State Accepted
Commit 0b9b7f0b46a80b848b19ebbb624cc7dc06bd33b7
Headers show

Commit Message

Jorge Ramirez-Ortiz Jan. 9, 2018, 10:56 p.m.
From: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>

During the initialization stage, the codec attempts to get free
buffers from the driver before any have been queued (this is to keep
the code simple and generic)

When the kernel driver detects this situation, it returns POLLERR in
revents and ffmpeg therefore raises a warning.

This commit disables the warning since no buffers were queued to the
driver yet.

Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
---
 libavcodec/v4l2_context.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c
index dde97d0..e0431b1 100644
--- a/libavcodec/v4l2_context.c
+++ b/libavcodec/v4l2_context.c
@@ -290,7 +290,17 @@  start:
 
     /* 0. handle errors */
     if (pfd.revents & POLLERR) {
-        av_log(logger(ctx), AV_LOG_WARNING, "%s POLLERR\n", ctx->name);
+        /* if we are trying to get free buffers but none have been queued yet
+           no need to raise a warning */
+        if (timeout == 0) {
+            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);
+            }
+        }
+        else
+            av_log(logger(ctx), AV_LOG_WARNING, "%s POLLERR\n", ctx->name);
+
         return NULL;
     }