From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B75884BD2D for ; Tue, 16 Jul 2024 17:18:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BD31368DB01; Tue, 16 Jul 2024 20:16:50 +0300 (EEST) Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A4D668DA96 for ; Tue, 16 Jul 2024 20:16:37 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=LcnVBgQ8; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 05B164DF2 for ; Tue, 16 Jul 2024 19:16:34 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 7hnKQqxbjb0G for ; Tue, 16 Jul 2024 19:16:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1721150188; bh=u2WMofUF/vO7G9Q+2OQ1yIgBP+zIljGfDuyS4joWr9c=; h=From:To:Subject:Date:In-Reply-To:References:From; b=LcnVBgQ8PNS9NMKFYvTiS2GGWok9tjQYpCtcF9hS4nGdy0lJT78p+34gx5cJVqgT+ 0UsmabhWypI1CsGiiHK9yRCi9n02Ue2etJEa7A9kn9rDbIj3DGuEuAMLDKAYr/Ev0s c1YLsth+rpdKHHhOUpQ5l6xfuPsLR3mBDiNKgpC+363QZpqXqgXk0YN68MGK6gPQGY KyngQTgW5PBBsysyi3jF318s4nRYBzlKwQjKsVctA1NhPJFH7jcVsn8OHsGyG6u6LV 7boa4rcUFutDJFT4wo54GrbAhfNqoKcW485UuKNzrNzf6cHMRRVTFgbhpJDGcDm1jN cy8UeLWNyC7Ew== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id 6B8FA4E04 for ; Tue, 16 Jul 2024 19:16:28 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 9C06D3A2F2B for ; Tue, 16 Jul 2024 19:16:21 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 16 Jul 2024 19:11:46 +0200 Message-ID: <20240716171155.31838-31-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240716171155.31838-1-anton@khirnov.net> References: <20240716171155.31838-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 31/39] lavc/decode: wrap AV_FRAME_FLAG_DISCARD handling in a loop X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Makes sure discarded frames do not cause EAGAIN to be returned during flushing, which is forbidden. --- libavcodec/decode.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 6ad74bd94b..b17cfba26f 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -613,17 +613,22 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) av_assert0(!frame->buf[0]); if (codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME) { + while (1) { frame->pict_type = dc->initial_pict_type; frame->flags |= dc->intra_only_flag; ret = codec->cb.receive_frame(avctx, frame); emms_c(); if (!ret) { - if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) - ret = (frame->flags & AV_FRAME_FLAG_DISCARD) ? AVERROR(EAGAIN) : 0; - else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { + if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { int64_t discarded_samples = 0; ret = discard_samples(avctx, frame, &discarded_samples); } + if (ret == AVERROR(EAGAIN) || (frame->flags & AV_FRAME_FLAG_DISCARD)) { + av_frame_unref(frame); + continue; + } + } + break; } } else ret = decode_simple_receive_frame(avctx, frame); -- 2.43.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-request@ffmpeg.org with subject "unsubscribe".