From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 016EC4C5AE for ; Tue, 9 Sep 2025 05:09:45 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'K3/BYKyTZBeSk5FSLYkNN1gdfYntAJywVUKON3pDBUc=', expected b'9R/RVk1IlKm6qTuQGHxa8Vix+CjNfFk8sJZJxMayFko=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1757394574; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=K3/BYKyTZBeSk5FSLYkNN1gdfYntAJywVUKON3pDBUc=; b=g/BAps9DfVr8gYGWUHskk9d609V3z1a9XzLXYENFCIaybfTiSiR1UZx/LIrm8lTq3Loqz rTuDg/CXI2Bv9e3yGBas5PPOw7gdRowGOWu53Q1PDJY+a29D9uj8g+mSjZY56mcYJZoSbD5 YT0O+vio1bHs6sDFAVxXs1/V3bHY3130cIZgTAuihc6LcddVyG4Wuc8KbVjTTwkiZMsAEzD mDhz3ofcW17yltsr9STLUzLVuoYX/jAlhS4+XyZoKCPQyi3eWONL/3F+JxsjoCej1oBlOwd wqVHINdfVxGt26f2hFT+Yjbj85HZd3e5u6YvfJUyTTfPt7iQtEmZuB6Y7B2A== Received: from [172.19.0.4] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id EB85D68E75D; Tue, 9 Sep 2025 08:09:34 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1757394573; b=qwvnDcNYfIX3l8MQM+cbnYzMZlTMJXYHJJlP+wMYtMoKJ4xRulRfFjHWbD6EhGsm17N9N TAJmwLyvaHm/cg9YdDcktl6oSSG0drSdDM/diSVtUvUOnAYNHcioSM0FstfUUPW6t0M/GtI xrRVfrhKpuplU+Egm2fqutegZdHcJ11lyO/BLpdl7yiWxPc6AaM9aXFX+m629FURSzVp4bR 3ZwIfVdC8o1VmleXTfwDuOY+0aLs5VO9cvseeczhbmOV/0QuvSbbZT7CBAf1MNyGqYGMSjv xWaUcqWR57LRobeGodlZXH6qV9GaC2PPkIZLmaCzKar9JMjVXYy5gRmen8qQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1757394573; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=zFuaz87uzUmTp9bmgdhW/LINnK4taSs/6YddERqF/2o=; b=SW6xlpAXVtUBHbUkS8l1+4KLUHmn3XNP6tbvBzxcPgVEBD4t/EUpMVmB7stalP01GQ9/q kkIH2pUrYjbJ2eqcKI6P6K3Y3joV8JpkXzwB3WX0E3MdafMN9FnRDSPww317SdlNVl4gC9M QvxwPQXwsb5b4Cf1CrDWPJf1uC8XsDSJNBmxVA1XxNaYWZ+SXQhl+82Uv7Su8stXRXWk2Jr uwYr0yLxPQQ5mtUQdMJisqNA0Mtp34aux2s7kfs/z4NYk/j20mRGsEjXsUqTKkP3WDQYJw9 GCrVph+YwuZ0MobESqYdf1sW3d4VGuDUZJd3FO5g9mszH3uA+cIYKFOwilQw== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=none Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1757394559; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=9R/RVk1IlKm6qTuQGHxa8Vix+CjNfFk8sJZJxMayFko=; b=AEJovPtq1dR/jlcof/N9gTs2teIyeZahDftKUjEY3bouBTKWS1LwyjIwHawXhvbnbNlpP egt1pZ8is3FTEjGPaPGPht5h7U/8dGej+hNOcHgazNBGPwWI97zyNExScqTra1A9f09gJTo bPY7JUFm3vg94t1bEowgm776MfIA3DDwyNFlW7l4V6xqjPZlshhPj9YE43j8Ib6NwUGF9Fx JUHG4BGhK1/51vfTVYWpr8OXD5cY+1RTHR6J273dbaYOa6nwjekv0D8TZI/Vw95UzgIbtw2 ISQZX/HavwFMGlM00MVEGyOoU+Q0347JyUFzxqEvj+qkf/iT0JaXjRLqXj9w== Received: from 3f9d35a0eedc (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id DAAB768C5D9 for ; Tue, 9 Sep 2025 08:09:19 +0300 (EEST) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Tue, 09 Sep 2025 05:09:19 -0000 Message-ID: <175739456014.25.2012851308462728431@463a07221176> Message-ID-Hash: AWUCNELLL2OBF6EEKKMBCDV2HM3UR2VX X-Message-ID-Hash: AWUCNELLL2OBF6EEKKMBCDV2HM3UR2VX X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avcodec/amfenc: avoid unnecessary output delay in low delay mode (PR #20473) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: cgutman via ffmpeg-devel Cc: cgutman Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #20473 opened by cgutman URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20473 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20473.patch 88a8ba5c991a0ffd00c8ce34d127b1b201b1ee19 introduced an output latency regression making it impossible to acheive lower than 1 frame of latency from AMF. I assume the new behavior was intentional to improve throughput, so I only avoid it if the user explicitly asks for low delay. >>From f3083931ad8b432ecd87dee4bef6895e9e20f9d9 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 8 Sep 2025 23:41:43 -0500 Subject: [PATCH] avcodec/amfenc: avoid unnecessary output delay in low delay mode The code optimizes throughput by letting the encoder work on frame N until frame N+1 is ready for submission, but this hurts low-delay uses by delaying output by one frame. Don't delay output beyond what is necessary when AV_CODEC_FLAG_LOW_DELAY is used. Signed-off-by: Cameron Gutman --- libavcodec/amfenc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c index b16b642e4c..f363192000 100644 --- a/libavcodec/amfenc.c +++ b/libavcodec/amfenc.c @@ -497,7 +497,7 @@ static int amf_submit_frame(AVCodecContext *avctx, AVFrame *frame, AMFSurface AMF_RESULT res; int ret; int hw_surface = 0; - int max_b_frames = ctx->max_b_frames < 0 ? 0 : ctx->max_b_frames; + int output_delay = FFMAX(ctx->max_b_frames, 0) + ((avctx->flags & AV_CODEC_FLAG_LOW_DELAY) ? 0 : 1); // prepare surface from frame switch (frame->format) { @@ -634,8 +634,8 @@ static int amf_submit_frame(AVCodecContext *avctx, AVFrame *frame, AMFSurface ret = av_fifo_write(ctx->timestamp_list, &frame->pts, 1); if (ret < 0) return ret; - if(ctx->submitted_frame <= ctx->encoded_frame + max_b_frames + 1) - return AVERROR(EAGAIN); // if frame just submiited - don't poll or wait + if(ctx->submitted_frame <= ctx->encoded_frame + output_delay) + return AVERROR(EAGAIN); // too soon to poll or wait } return 0; } @@ -681,7 +681,7 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) AVFrame *frame = av_frame_alloc(); int block_and_wait; int64_t pts = 0; - int max_b_frames = ctx->max_b_frames < 0 ? 0 : ctx->max_b_frames; + int output_delay = FFMAX(ctx->max_b_frames, 0) + ((avctx->flags & AV_CODEC_FLAG_LOW_DELAY) ? 0 : 1); if (!ctx->encoder){ av_frame_free(&frame); @@ -700,7 +700,7 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) if(ret != AVERROR_EOF){ av_frame_free(&frame); if(ret == AVERROR(EAGAIN)){ - if(ctx->submitted_frame <= ctx->encoded_frame + max_b_frames + 1) // too soon to poll + if(ctx->submitted_frame <= ctx->encoded_frame + output_delay) // too soon to poll return ret; } } -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org