From patchwork Tue May 8 18:24:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Rusak X-Patchwork-Id: 8876 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp4329611jad; Tue, 8 May 2018 11:30:40 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoyrLiGxLNxfqUYpE7+DOaYPdVcZKHq8OdwAsLh5724/AVCb2Hp8MuEP+tcZUMQpBzVQsUW X-Received: by 10.28.138.69 with SMTP id m66mr4236813wmd.125.1525804240181; Tue, 08 May 2018 11:30:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525804240; cv=none; d=google.com; s=arc-20160816; b=HU8QeJli+hQgW70iLY+pIcq/g6CZNxnvZJD1JTDNhhyAlqJy2TWkKTdWtbTbjQjcLq 4+EwMix7cM6BnhvkHVmndsRj+LL8p/MmKsWdWbsyO3kRC+ofPl42C9kI/uwmmj5JTT69 E7Z1XSmv+1k44z1UMo+qo+oZmDx4rZ/jKH+r3hzfvHhZyXtFSmmH/tPYF6ySL5nxYUup Zbqu7q/DqNY1kcErXXGVc+7WkW4AMq+3Hbsv1nCookcnVQQESK4Woz6NEYVqErsniJGi TMGYuVfvrAv7S21Q1Sm04aK/5Hh3nqi/8jfeIDGI5BqGLNEa2BWCCRGdZWUILtKoqO+9 2QvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=Cb0YBL1xzK1l+B0A2tuIG5OjhblqinGn8RBbsKERLKo=; b=amFSG2XWHf6B8dEcN2MV28OFlQCKhHp0K5Xw7bQ5lUopSibEoTUlesM4JBllVW2Krc aqLRqa/05uP8ebBIYA0+7bmQ3siueLFETMMXD8a1oxGzYUBPTRafsZ6v/4he2Psulb7f 3S7W5r33mgP+RHlHBMti5bYeJLDhzY8KJqAZoHyx4bKrNYI8amWI7Koqu6QOOb3ze9ib Mt0V7mhIp4OxfPrnITuj6deunIRH4ZPVJCAHpxkYRKV6J3b0ramVx0RV3n9+8jgFVn/L lyjrzqdEFMDiWuDRnJ6Bcpwy+yezEd/UhrozLApXiiOgbMJVu+tY7NtIItGrZBL04dL9 e8SA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=SwFBteUC; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k75si3820682wmi.30.2018.05.08.11.30.39; Tue, 08 May 2018 11:30:40 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=SwFBteUC; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1540768A72F; Tue, 8 May 2018 21:30:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl0-f67.google.com (mail-pl0-f67.google.com [209.85.160.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AAE8068A71A for ; Tue, 8 May 2018 21:29:56 +0300 (EEST) Received: by mail-pl0-f67.google.com with SMTP id v24-v6so2724069plo.3 for ; Tue, 08 May 2018 11:30:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1QPqr73KyCSOhWDlESDCv0FhuAFfM5PD+k1hbjp5WfA=; b=SwFBteUCpI7L4/FZNGczFh1+3zCJ7Mn6yY8fFrDWO3IuntPYylMkhmGxqAV+zlnUn6 scqRsGpnK3O8vUOvCPJWrbLr4XGdcnqy23kpZqsIYi8uHk0jKA77RO5tN2sUFriB+LEp 6k0okE2ua/o6fYZiUcPxxdekYDu02kSwP8TRRS5GVJB2lItuAbv+h5g/q8/q5WRfIl2q 91Tup+WasOnXpgWR4trmnh/WRUNSy9ZU+g3imw3HG2l9qnWOTLIe5BT1OJWsXrjc534+ xq/7TU0J2Z4CCzsCrCdILINhnXzt96Dy9lXFfgCwo5+lVWObTiUMtTjSBU0MLmP+rXij 8ecA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1QPqr73KyCSOhWDlESDCv0FhuAFfM5PD+k1hbjp5WfA=; b=kypqGqZ4sSXhbI29Vju+3AFPTLCBa1cyqTIOrpTFY1bRxMV5CL8deKlXdrSNguy4K6 Ce1rple0Q5Kg2ftEFAJA6uCnLm6rOUJxeXqnUIR4NP6C9PUMnD2DNox4oeyir+GFHggD LVW6LsqwbCvubEZNjpRMvJ4M2gAAA06cKcPri6sP+IsG5hwU3OaknekKPMriZzl1qKp2 c8e8jHwtHLQsErDuYDwKEZIRzGY/BTGSt1OLwVx2il5jEpqnRKAOUA/3U83CZ4/xFg1Q UJ8dLzBLt9uf/uQexgUbwliks57JkVqRgtbkfQgDhhSh3Uv1FAFTjW7TU9dU+ZDEgzjX 65Og== X-Gm-Message-State: ALQs6tCA+OFGXYwc0T1A2Y8BhPWrT+CSQtxq9YSktYWib6f38KPCAlQU VCprn0+gptwo4gbfRyxS3oKvp0qd X-Received: by 2002:a17:902:7c18:: with SMTP id x24-v6mr27840367pll.173.1525803850402; Tue, 08 May 2018 11:24:10 -0700 (PDT) Received: from localhost.localdomain (d154-20-200-72.bchsia.telus.net. [154.20.200.72]) by smtp.gmail.com with ESMTPSA id w184-v6sm38311189pgb.20.2018.05.08.11.24.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:24:09 -0700 (PDT) From: Lukas Rusak To: ffmpeg-devel@ffmpeg.org Date: Tue, 8 May 2018 11:24:06 -0700 Message-Id: <20180508182406.8846-3-lorusak@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508182406.8846-1-lorusak@gmail.com> References: <20180508182406.8846-1-lorusak@gmail.com> Subject: [FFmpeg-devel] [PATCH 3/3] libavcodec: v4l2m2m: fix error handling during buffer init X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Jorge Ramirez-Ortiz Signed-off-by: Jorge Ramirez-Ortiz --- libavcodec/v4l2_context.c | 19 ++++++++++++++++--- libavcodec/v4l2_m2m_dec.c | 11 ++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index 9457fadb1e..fd3161ce2f 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -263,6 +263,12 @@ static V4L2Buffer* v4l2_dequeue_v4l2buf(V4L2Context *ctx, int timeout) /* if we are draining and there are no more capture buffers queued in the driver we are done */ if (!V4L2_TYPE_IS_OUTPUT(ctx->type) && ctx_to_m2mctx(ctx)->draining) { for (i = 0; i < ctx->num_buffers; i++) { + /* catpture buffer initialization happens during decode hence + * detection happens at runtime + */ + if (!ctx->buffers) + break; + if (ctx->buffers[i].status == V4L2BUF_IN_DRIVER) goto start; } @@ -724,9 +730,8 @@ int ff_v4l2_context_init(V4L2Context* ctx) ctx->buffers[i].context = ctx; ret = ff_v4l2_buffer_initialize(&ctx->buffers[i], i); if (ret < 0) { - av_log(logger(ctx), AV_LOG_ERROR, "%s buffer initialization (%s)\n", ctx->name, av_err2str(ret)); - av_free(ctx->buffers); - return ret; + av_log(logger(ctx), AV_LOG_ERROR, "%s buffer[%d] initialization (%s)\n", ctx->name, i, av_err2str(ret)); + goto error; } } @@ -739,4 +744,12 @@ int ff_v4l2_context_init(V4L2Context* ctx) V4L2_TYPE_IS_MULTIPLANAR(ctx->type) ? ctx->format.fmt.pix_mp.plane_fmt[0].bytesperline : ctx->format.fmt.pix.bytesperline); return 0; + +error: + v4l2_release_buffers(ctx); + + av_free(ctx->buffers); + ctx->buffers = NULL; + + return ret; } diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c index 2b33badb08..1bfd11e216 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -92,8 +92,8 @@ static int v4l2_try_start(AVCodecContext *avctx) if (!capture->buffers) { ret = ff_v4l2_context_init(capture); if (ret) { - av_log(avctx, AV_LOG_DEBUG, "can't request output buffers\n"); - return ret; + av_log(avctx, AV_LOG_ERROR, "can't request capture buffers\n"); + return AVERROR(ENOMEM); } } @@ -155,8 +155,13 @@ static int v4l2_receive_frame(AVCodecContext *avctx, AVFrame *frame) if (avpkt.size) { ret = v4l2_try_start(avctx); - if (ret) + if (ret) { + /* cant recover */ + if (ret == AVERROR(ENOMEM)) + return ret; + return 0; + } } dequeue: