From patchwork Tue Apr 13 19:16:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 26901 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 1F45D44A55C for ; Tue, 13 Apr 2021 22:17:30 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F371168A472; Tue, 13 Apr 2021 22:17:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f179.google.com (mail-qk1-f179.google.com [209.85.222.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 335ED68A407 for ; Tue, 13 Apr 2021 22:17:23 +0300 (EEST) Received: by mail-qk1-f179.google.com with SMTP id 18so2175142qkl.3 for ; Tue, 13 Apr 2021 12:17:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=yPw6x0y4lFmf/y05lyn/VQKw6p8uzHESruhnRsUdB0o=; b=P8HvWKh/YaznTkqQdp01LqlCMgm1CyL9fn2KZhLvWbkuX1t98nAGBlhB9ZNG8bYf3p TkHCd/ywfZrLD/9YXAG0tT6nIjJvKoUr9wWQE51uQMHlVbhWOBCw+/c6TgTuVzZ2TkF7 8NqTh5pFCXajqo/yKl+8TbJB2XraLyuqcASE75Ay+cwRXRFihZ5QIdt4O+eCJaYi2Afo 9zPKHk0HKRCYZ6JQOjvPDS9lbp1R6Tfvv/3BnvnkEQf/VjLu3fWZzhaXMgxd8vI52enm h5HG3McIkMd7jo5XekGNcXoLX5uY8UtPUKXNYvvGXLdOQYvmGqz2LZnneh9Nf+TCp63G kDXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=yPw6x0y4lFmf/y05lyn/VQKw6p8uzHESruhnRsUdB0o=; b=k9LQphuB1AZDW3jHGPgdl4REuJZ3hn07BxOtxFNMsmzfzlSqV4qjY7SbwwvP1IoqsO nOP2aheHIdLATQcQhSmLh64wZa46TKRw6I6/fJMh4cv0P+ZBAwA2kHPuWWf/NJOeJgOP 3+3w0Kcp5tXr++9Yv/ZCcGgo+XTPbirH9a4pabsjHXzP09JeI7/2g0y63V5xQWt7gzK2 TgMbIOc9P8O9idWUNcA1WcZgdksM78fkQfA+/t30xaLFYTMqdVqAUj8Vzs7xvD7kXUiW u8RLSkDx1xKDUVxJS7vRL2ot1VBJK2VBLocqo8ayOWijX85jIfP09Tefz55MYdydw/zG bPXw== X-Gm-Message-State: AOAM531F7omMd3Ndcje2d3VfHqryUGvxxIbGVqODOBC9QPZ4y0Jp+mlG 4GCYKs98ix1kSBxGkDvMB5blOccperE= X-Google-Smtp-Source: ABdhPJwNXOkDXkNXWLHo0lM+A+jg4qYKPtohSAeeA6/5+fklfZFNp6v7LAgbhAvkEx5wf5vXVO9pqw== X-Received: by 2002:a05:620a:205e:: with SMTP id d30mr32550964qka.380.1618341441674; Tue, 13 Apr 2021 12:17:21 -0700 (PDT) Received: from localhost.localdomain ([191.84.237.33]) by smtp.gmail.com with ESMTPSA id h14sm10092952qtx.64.2021.04.13.12.17.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Apr 2021 12:17:21 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 13 Apr 2021 16:16:46 -0300 Message-Id: <20210413191646.2165-1-jamrial@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/encode: ensure encoders don't return empty packets 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The current checks ensured that if they contained data, it was refcounted, but then wrongly assumed that side data was present if there was no data, instead of checking for it. Signed-off-by: James Almer --- libavcodec/encode.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 9a4140f91a..aac32cd0f4 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -259,11 +259,6 @@ end: av_frame_unref(frame); } - if (got_packet) - // Encoders must always return ref-counted buffers. - // Side-data only packets have no data and can be not ref-counted. - av_assert0(!avpkt->data || avpkt->buf); - return ret; } @@ -301,14 +296,15 @@ static int encode_receive_packet_internal(AVCodecContext *avctx, AVPacket *avpkt ret = avctx->codec->receive_packet(avctx, avpkt); if (ret < 0) av_packet_unref(avpkt); - else - // Encoders must always return ref-counted buffers. - // Side-data only packets have no data and can be not ref-counted. - av_assert0(!avpkt->data || avpkt->buf); } else ret = encode_simple_receive_packet(avctx, avpkt); - if (ret == AVERROR_EOF) + if (!ret) { + // Encoders must always return ref-counted buffers. + av_assert0(!avpkt->data || avpkt->buf); + // Side-data only packets have no data and can be not ref-counted. + av_assert0(avpkt->data || avpkt->side_data); + } else if (ret == AVERROR_EOF) avci->draining_done = 1; return ret;