From patchwork Sun Oct 27 04:19:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andriy Gelman X-Patchwork-Id: 15984 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 8A582449F90 for ; Sun, 27 Oct 2019 06:27:14 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3E9AC68AEC1; Sun, 27 Oct 2019 06:27:14 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f196.google.com (mail-qt1-f196.google.com [209.85.160.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9C89468AC27 for ; Sun, 27 Oct 2019 06:27:07 +0200 (EET) Received: by mail-qt1-f196.google.com with SMTP id g50so9628857qtb.4 for ; Sat, 26 Oct 2019 21:27:07 -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:mime-version :content-transfer-encoding; bh=toKIzn5OkeISgWxMJutxBi6eMnN/fP2P8YLVdVULGwk=; b=SNCAJzXlxRDHtjZpET8oFliX/q8UU6xD0BMFv2E1EQjc3x+EByNBJnrfrSslayopke UILpYU0OApQUprh1tK4Fd3eJoEYmOaJ89W5C6PPf7lHnhoImQ88JPnGga8nWlE4mtKOz g397W7Gvtvrrbim9y+yXyfleNhGO1ktywAJap30DttxHa3CH5edbr0/+sGxhaj2TU3dK 2adr0OFj9jh3sGjoS8GIdB4XAc23Ai9FUjoo/uhYMrgOjtdVvzszLSeknCUNuiRr37k/ Y98gxlFguj0DSi4SaNKoiw5Dl+rRZzNoKtEw0KYlzNhIa9hSd+yBiXobka7x4G7o/WA6 BZAg== 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:mime-version :content-transfer-encoding; bh=toKIzn5OkeISgWxMJutxBi6eMnN/fP2P8YLVdVULGwk=; b=qX3/1i9cVG8Sv6pprOM7dO9kxzeWyvIZ1w8J/W8LwKjAQjA0Y9tSX2DU5rZEKvDL/X hslUKVnwnV0eCycXTg+IagsPVAIVqfwkfnIeetUz7e9lG9xnoxRkDy9FbYYsQAChTTF5 V45yCkzEyh64ckwex7D7CDU19V3CvXwdYgxemSc6KhJb4/oQlmYh8+lZ7kklOzl1GbTI xWIncOpdzvD7YCAqEFYhAk9JC0SS0vtH1Z9NzWEl/XP2ehtvOKDXdFgMPNYUZtw9/2Hd XYOWE7ez0oRKvahqdwYJXYHC0E95hZ2qmtit6P/WU0UEs5SPDq3j3Q948UzX2rGUTBSI 6vxg== X-Gm-Message-State: APjAAAX3x1Lqs27A2NYIMZz4p0gILjMadf8xciK1tAFTIn2WHr+h+Fl/ NsE9MBS2ILkvx7EpKNMtPXv/XZiy X-Google-Smtp-Source: APXvYqyJ0wqOonQtP8DYrkGrmmkhWzJFnSze7F2GB9GJFMyUXDUrlbNpFp4M7y6rKzHvEhBs1H4/dw== X-Received: by 2002:a37:47c2:: with SMTP id u185mr3065456qka.246.1572149994465; Sat, 26 Oct 2019 21:19:54 -0700 (PDT) Received: from localhost.localdomain (c-71-232-27-28.hsd1.ma.comcast.net. [71.232.27.28]) by smtp.gmail.com with ESMTPSA id h23sm4072348qkk.128.2019.10.26.21.19.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 26 Oct 2019 21:19:53 -0700 (PDT) From: Andriy Gelman X-Google-Original-From: Andriy Gelman To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Oct 2019 00:19:46 -0400 Message-Id: <20191027041947.24126-1-andriy.gelman@gmail.com> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/v4l2_buffers: Fix infinite loop 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 Cc: Andriy Gelman Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Andriy Gelman This part of the code counts the number of planes returned by the v4l2 device for each queried capture/output buffer. When testing the GPU h264 encoder on Nvidia's Jetson Nano, this caused an infinite loop because avbuf->buf.length included some empty buffers (i.e. where avbuf->buf.m.planes[i].length = 0), meaning that the counter was never incremented and break was never reached. This is fixed in the commit by using a well defined iteration range. --- libavcodec/v4l2_buffers.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c index e301dcd6bd..dc1b9eaf24 100644 --- a/libavcodec/v4l2_buffers.c +++ b/libavcodec/v4l2_buffers.c @@ -511,11 +511,9 @@ int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) if (V4L2_TYPE_IS_MULTIPLANAR(ctx->type)) { avbuf->num_planes = 0; - for (;;) { - /* in MP, the V4L2 API states that buf.length means num_planes */ - if (avbuf->num_planes >= avbuf->buf.length) - break; - if (avbuf->buf.m.planes[avbuf->num_planes].length) + /* in MP, the V4L2 API states that buf.length means num_planes */ + for (i = 0; i < avbuf->buf.length; i++) { + if (avbuf->buf.m.planes[i].length) avbuf->num_planes++; } } else