[FFmpeg-devel] [PATCH] avcodec/v4l2_context: always log POLLERR when buffers are uninitialized
The error handler for POLLERRs assumes that the timeout is only zero when v4l2_dequeue_v4l2buf is called by v4l2_getfree_v4l2buf. This assumption is incorrect, as ff_v4l2_context_dequeue_frame also calls this function with a timeout of zero. Do not check for unavailable buffers if the buffers are uninitialized. See https://trac.ffmpeg.org/ticket/9957 for the original bug report. Signed-off-by: Richard Acayan --- libavcodec/v4l2_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index a40be94690..69ddf80723 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -327,7 +327,7 @@ start: 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 (timeout == 0) { +if (timeout == 0 && ctx->buffers) { 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); -- 2.41.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [RESEND PATCH] avcodec/v4l2_context: always log POLLERR when buffers are uninitialized
The error handler for POLLERRs assumes that the timeout is only zero when v4l2_dequeue_v4l2buf is called by v4l2_getfree_v4l2buf. This assumption is incorrect, as ff_v4l2_context_dequeue_frame also calls this function with a timeout of zero. Do not check for unavailable buffers if the buffers are uninitialized. See https://trac.ffmpeg.org/ticket/9957 for the original bug report. Signed-off-by: Richard Acayan --- libavcodec/v4l2_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index a40be94690..69ddf80723 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -327,7 +327,7 @@ start: 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 (timeout == 0) { +if (timeout == 0 && ctx->buffers) { 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); -- 2.41.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
Re: [FFmpeg-devel] [RESEND PATCH] avcodec/v4l2_context: always log POLLERR when buffers are uninitialized
Will this patch be applied or receive any comments? I have been waiting more than 2 weeks since the original submission (https://ffmpeg.org/pipermail/ffmpeg-devel/2023-July/311580.html) and have not received a response since. I am trying to get mpv to work again with the v4l2_m2m codec, as it started emitting segmentation faults. This is partly due to some incorrect usage of libavcodec in mpv, and partly due to the error/warning handling in libavcodec. An mpv maintainer dismissed this as a bug in ffmpeg, and this change is simpler than what mpv would need for a fix, so I am hoping that this patch goes in. I don't have write access so I can't apply it myself, even if there are no objections. On Tue, Jul 18, 2023 at 06:00:17PM -0400, Richard Acayan wrote: > The error handler for POLLERRs assumes that the timeout is only zero > when v4l2_dequeue_v4l2buf is called by v4l2_getfree_v4l2buf. This > assumption is incorrect, as ff_v4l2_context_dequeue_frame also calls > this function with a timeout of zero. Do not check for unavailable > buffers if the buffers are uninitialized. > > See https://trac.ffmpeg.org/ticket/9957 for the original bug report. > > Signed-off-by: Richard Acayan > --- > libavcodec/v4l2_context.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c > index a40be94690..69ddf80723 100644 > --- a/libavcodec/v4l2_context.c > +++ b/libavcodec/v4l2_context.c > @@ -327,7 +327,7 @@ start: > 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 (timeout == 0) { > +if (timeout == 0 && ctx->buffers) { > 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); > -- > 2.41.0 > ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
Re: [FFmpeg-devel] [RESEND PATCH] avcodec/v4l2_context: always log POLLERR when buffers are uninitialized
On Sun, Jul 23, 2023 at 10:15:50AM +0200, Marton Balint wrote: > > > On Fri, 21 Jul 2023, Richard Acayan wrote: > >> Will this patch be applied or receive any comments? I have been waiting >> more than 2 weeks since the original submission >> (https://ffmpeg.org/pipermail/ffmpeg-devel/2023-July/311580.html) and >> have not received a response since. >> >> I am trying to get mpv to work again with the v4l2_m2m codec, as it >> started emitting segmentation faults. This is partly due to some >> incorrect usage of libavcodec in mpv, and partly due to the >> error/warning handling in libavcodec. An mpv maintainer dismissed this >> as a bug in ffmpeg, and this change is simpler than what mpv would need >> for a fix, so I am hoping that this patch goes in. >> >> I don't have write access so I can't apply it myself, even if there are >> no objections. >> >> On Tue, Jul 18, 2023 at 06:00:17PM -0400, Richard Acayan wrote: >>> The error handler for POLLERRs assumes that the timeout is only zero >>> when v4l2_dequeue_v4l2buf is called by v4l2_getfree_v4l2buf. This >>> assumption is incorrect, as ff_v4l2_context_dequeue_frame also calls >>> this function with a timeout of zero. Do not check for unavailable >>> buffers if the buffers are uninitialized. >>> >>> See https://trac.ffmpeg.org/ticket/9957 for the original bug report. >>> >>> Signed-off-by: Richard Acayan >>> --- >>> libavcodec/v4l2_context.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c >>> index a40be94690..69ddf80723 100644 >>> --- a/libavcodec/v4l2_context.c >>> +++ b/libavcodec/v4l2_context.c >>> @@ -327,7 +327,7 @@ start: >>> 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 (timeout == 0) { >>> +if (timeout == 0 && ctx->buffers) { > > This would warn if no buffers are allocated yet, but this is not a warning > condition as far as I understand the issue, simply a different API usage > pattern. I assumed that the usage was "incorrect" because the V4L2 API didn't like it. > So maybe it is better to simply do a > > if (!ctx->buffers) >return NULL; > > in the beginning of the if (timeout == 0) block. The sequence in mpv seems to be supported by libavcodec though, so I will do this in v2. > > Thanks, > Marton > >>> 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); >>> -- >>> 2.41.0 >>> ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [PATCH v2] avcodec/v4l2_context: suppress POLLERR 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. See https://trac.ffmpeg.org/ticket/9957 for the original bug report. Signed-off-by: Richard Acayan --- Changes since v1 (20230718220017.3336-1-mailingrad...@gmail.com): - stopped emitting POLLERR logs for this case (thanks to feedback from Marton Balint) libavcodec/v4l2_context.c | 8 ++-- 1 file 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); -- 2.41.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".