From patchwork Wed Oct 23 12:11:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andriy Gelman X-Patchwork-Id: 15923 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 4248A449ED1 for ; Wed, 23 Oct 2019 19:17:26 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1B0DA68AFC2; Wed, 23 Oct 2019 19:17:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f67.google.com (mail-ot1-f67.google.com [209.85.210.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9EAE468A9CE for ; Wed, 23 Oct 2019 19:17:19 +0300 (EEST) Received: by mail-ot1-f67.google.com with SMTP id n48so2984961ota.11 for ; Wed, 23 Oct 2019 09:17:19 -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=VxcFDzYJlma3BpUCjC85eNcT6JdvsGk89kyq4b5X0xM=; b=JcLZf5kASHA2WkW/RTt1J7F4YtD/CDK5BpJwlVXB/lKrdOkpheQToPiLnm8k4Yf7+h LGAYnSKEZSFN9GBiihtWvG8mlHJhgtU1eUKQf1LSQ+hc55o2kZtjB/GBQFi2TUh9CzRA 5oQ3oDDzYZdrPhbal2Ub5Su18ROlrnElDyLaHXjiTTe2TPxYRd7J7l2LauTBbk8gn/2n fnBFf6hcjR7WrvRAfZ7vGuOM508w+iaCV1Ft7uAckYlhuexLxfMVgVAEvflKgeIbZgP0 lDjvWOuLkU6/lrqgmVcpWdYSrXNTPolZbhDWfcG0H0d0vsH4dXmPaWeuF8E/93oXO1+e 88yA== 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=VxcFDzYJlma3BpUCjC85eNcT6JdvsGk89kyq4b5X0xM=; b=U9ARqc8Shkhk8oVo+bkUVB2EJdVK1GVwj+BxU1mp4l7m+ADAuFDkRUEBWpG+bhq6Eq sxWpfndX6uMEdAS0dvMsCWDVtCeeCQ0xD0odz23pemS8cQ650l5AZq0JbDM7p3al5z1a fiG5XZXW5oUtM33fkAD1FxxeRVaaa9UCJ2c141q0s7GTZ1UhIstBRwgXPkovNYcUwh8i EITnlpcU+r6LaHbBWDJiUzWOcrmFn2RzLcINMOWpqGaKRQxoECmhmoB/ODcoMngIz81c +1PftH3hlewByjJiPWcvuKzvfJPLJ8y3W9zOlPOWyls2XS9L9IdR79lZscLo7X/9Ju9u TN4Q== X-Gm-Message-State: APjAAAUQUVrogOuo6Hqo8JZjh/+5oqTswtTuZ1C77gbfLaor/GkbRLWY CVpKLKDMxl4EPgcuQbj8QxNYSD0Y X-Google-Smtp-Source: APXvYqw2S2o4ooq2tRXqEu+ffH+42ajVfarj3ttFipIYTBnhQ77ogXb1hKka5VuPb+lQ7n2EvuN4Tg== X-Received: by 2002:a9d:6c5a:: with SMTP id g26mr3545428otq.156.1571847027905; Wed, 23 Oct 2019 09:10:27 -0700 (PDT) Received: from manj.guest.slb.com (bjcacd-22-48.ptr.slb.com. [192.23.22.48]) by smtp.gmail.com with ESMTPSA id a21sm5816663oia.27.2019.10.23.09.10.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Oct 2019 09:10:27 -0700 (PDT) From: Andriy Gelman X-Google-Original-From: Andriy Gelman To: ffmpeg-devel@ffmpeg.org Date: Wed, 23 Oct 2019 08:11:41 -0400 Message-Id: <20191023121141.26997-1-andriy.gelman@gmail.com> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] ffmpeg: Properly handle EOF return when flushing encoder 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 When flushing an encoder we send a NULL frame to avcodec_send_frame() and then deque all compressed packets in avcodec_recieve_packet() until AVERROR(EAGAIN) is returned (indicating that all compressed packets have been removed). The second time that avcodec_send_frame() is called with a NULL frame it returns AVERROR_EOF. At the moment, avcoded_send_frame() treats all errors as fatal errors, even when AVERROR_EOF is returned, meaning that an encoder is not properly shutdown. Since all other returns are handled after the while loop, it suffices to break when AVERROR_EOF is encountered to fix this problem. --- fftools/ffmpeg.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 8e408c808a..9e9fc7a714 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1933,12 +1933,8 @@ static void flush_encoders(void) while ((ret = avcodec_receive_packet(enc, &pkt)) == AVERROR(EAGAIN)) { ret = avcodec_send_frame(enc, NULL); - if (ret < 0) { - av_log(NULL, AV_LOG_FATAL, "%s encoding failed: %s\n", - desc, - av_err2str(ret)); - exit_program(1); - } + if (ret == AVERROR_EOF) + break; } update_benchmark("flush_%s %d.%d", desc, ost->file_index, ost->index);