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 749764C6F5 for ; Thu, 11 Sep 2025 19:09:22 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'tEZTHmrITx4OtQ/Sjd8M1Zw9yk+724cL27gUwRTezZs=', expected b'sr0V6lj9CRnr3gtkiJEmICHI0sJAxAZyDHhA/n1LpBg=')) 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=1757617749; 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=tEZTHmrITx4OtQ/Sjd8M1Zw9yk+724cL27gUwRTezZs=; b=koFdq7VN0r3Sv51Y5npK6GX9wcBmINN8BlOp5gPARSYXZkFON8djKL0KjJ/K/7Tg2z1y8 zFRJGbtMtLZjLy1Xyg3W2bpntXLJi68QPE7hi4wt8weJecpgQtCI+5WmGu7gfOmF1AChm1a +mSG0QOXocADCcVOpP64u821bhOb5OCOO1QpdagubJw+z6/2jqujFb1A0ZmBNpT6HpRQrVB 0ysi14T8hV9APfYiT/XKv/XnsZHfcWbdsZVgKeIEoVVkNgAFsmqn4zw2Kk6d7FXL33cs//P nIQZpa/Z8VJKmRcY3wELt/bMZ2LDbAOvc8bf3MbiMNclnDOcR9HQFGUAaO7w== Received: from [172.19.0.4] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id DD37868E7E1; Thu, 11 Sep 2025 22:09:09 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1757617747; b=nME11AnmhOh0kvPW4njwpmtcZc3LuTMeUwGKhbszVe3+r1Mb6Qy31IOAKDvmwN90AFlNM foDQ4yda+wlBZ3Fs8ldOIptxbAD09O1E9QF6Dl019QwENYktb7BrLpPSstqDVZPav2caBf7 iyTWrFT8bquQtXKbBWxu8YwJ5hDjeuTWMCN+jilldMWSgiZ+9U/X5ig0nOY3HrlN7HGsdgY p0ISPANUwWdzEzXDVTE1runzzvSfp7z2iTHBfvvf9KRO4tUwtTuIAlUDGPRFnfFT5Wc7XuM 8hB6gmfj8atcXJH9q0RH/4lsM/sadkNVj6WwC/znq6qfTU9lRu9KEpARh9sg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1757617747; 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=Z5WW/OBaxTAlrakfGJ75aZqLawq7e3a01PLPw+cJDLg=; b=MKPD2ruaBtX2BmUEYY2OqBsxCekEAF70B+vq7qTcT3x24iHypC3UpL9QoT3UaMhkSUjA9 CjVtzmQ72UTUsIig1aP1WqnAM3Sg1GUwWoUjX96rq/c2dKaLfNV7JllT6GF84mW9SNfRstW 8E2A3y324UjELcGqYffRXSMR8mAg9CNJSWE+oX6rym//MxC5+IGfOewcGVBom5O7V4T0umQ DRMfvoQJd6StXJov4FnH0dgbP1DsOp4c6mbf/JpuE2Qoa+rO57SKizHVuisAk90W+khZFHl ZRZ65lA6uqlfuknN90hNxOTPGdyWJLSzYnbvonnU7F19wT6ag2yNUlt96qZw== 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=1757617736; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=sr0V6lj9CRnr3gtkiJEmICHI0sJAxAZyDHhA/n1LpBg=; b=Z2BBk9miPTifKJRyABTdtzMQ8ga0ejJLUZblxPm9I8hUedSdGeYjZfB7A4+zw1XPMfz7a DnEH7jgR8EZMX9ATznqeKxxIFCILnlaNRpHwpCUQRN5nPFyZTo0E8lRxfzaPNOtutaHUxMG 9574Cz5Ot1v7W4JmLA0k64lY2hIEDf1cyh5nh4zPcjXmZPucaOdoP7y/8R/zX9p7vJAA1rO zZKdQdfSXy5Kl2tqOT0iRgOXI8tzr8LNYaa9Ou7hbngBq2qsJ7Ybm1HkQrDGFGv7wacg3RB LGwH64flt73BqGXyxTAoFulpgUD8baZPNrY+lcnDZ+RyBUVh/snBHrSPyNpg== Received: from 3f9d35a0eedc (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 5BE9768E7D7 for ; Thu, 11 Sep 2025 22:08:56 +0300 (EEST) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Thu, 11 Sep 2025 19:08:54 -0000 Message-ID: <175761773655.25.5813634984543676425@463a07221176> Message-ID-Hash: SIDQXRE4ZOG26NCNGOY72XMUXYL24R7B X-Message-ID-Hash: SIDQXRE4ZOG26NCNGOY72XMUXYL24R7B 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] [8.0] Backport Videotoolbox improvements (PR #20496) 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: Marvin Scholz via ffmpeg-devel Cc: Marvin Scholz Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #20496 opened by Marvin Scholz (ePirat) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20496 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20496.patch >>From 8fbd564bed9ee358b7d376e80197253283c55679 Mon Sep 17 00:00:00 2001 From: Zhao Zhili Date: Mon, 1 Sep 2025 01:17:08 +0800 Subject: [PATCH 1/4] avcodec/videotoolboxenc: fix the loss of precision when calculating quality (cherry picked from commit 73750489a67dcf99a6142009edfe45f504d55e8e) Signed-off-by: Marvin Scholz --- libavcodec/videotoolboxenc.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index b748ecda61..c3704810d2 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -1185,9 +1185,7 @@ static int vtenc_create_encoder(AVCodecContext *avctx, VTEncContext *vtctx = avctx->priv_data; SInt32 bit_rate = avctx->bit_rate; SInt32 max_rate = avctx->rc_max_rate; - Float32 quality = avctx->global_quality / FF_QP2LAMBDA; CFNumberRef bit_rate_num; - CFNumberRef quality_num; CFNumberRef bytes_per_second; CFNumberRef one_second; CFArrayRef data_rate_limits; @@ -1248,10 +1246,10 @@ static int vtenc_create_encoder(AVCodecContext *avctx, } if (avctx->flags & AV_CODEC_FLAG_QSCALE) { - quality = quality >= 100 ? 1.0 : quality / 100; - quality_num = CFNumberCreate(kCFAllocatorDefault, - kCFNumberFloat32Type, - &quality); + Float32 quality = fminf(avctx->global_quality / 100.0f / FF_QP2LAMBDA, 1.0f); + CFNumberRef quality_num = CFNumberCreate(kCFAllocatorDefault, + kCFNumberFloat32Type, + &quality); if (!quality_num) return AVERROR(ENOMEM); status = VTSessionSetProperty(vtctx->session, -- 2.49.1 >>From d2eddd662f69e566e09de8ae02f3237cc32c4fd0 Mon Sep 17 00:00:00 2001 From: Zhao Zhili Date: Mon, 1 Sep 2025 01:36:25 +0800 Subject: [PATCH 2/4] avcodec/videotoolboxenc: support global_quality without qscale (cherry picked from commit fc45127bcc79731a2e3ec5858a00c35c6cfbc1c0) Signed-off-by: Marvin Scholz --- libavcodec/videotoolboxenc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index c3704810d2..e423da6933 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -1245,8 +1245,10 @@ static int vtenc_create_encoder(AVCodecContext *avctx, return AVERROR_EXTERNAL; } - if (avctx->flags & AV_CODEC_FLAG_QSCALE) { - Float32 quality = fminf(avctx->global_quality / 100.0f / FF_QP2LAMBDA, 1.0f); + if (avctx->flags & AV_CODEC_FLAG_QSCALE || avctx->global_quality > 0) { + float factor = (avctx->flags & AV_CODEC_FLAG_QSCALE) ? + FF_QP2LAMBDA * 100.0f : 100.0f; + Float32 quality = fminf(avctx->global_quality / factor, 1.0f); CFNumberRef quality_num = CFNumberCreate(kCFAllocatorDefault, kCFNumberFloat32Type, &quality); -- 2.49.1 >>From 9da749b361a09cbbd9769a4586a10a70f1fff4ac Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 5 Sep 2025 23:42:52 -0500 Subject: [PATCH 3/4] avcodec/videotoolboxenc: allow low latency RC with HEVC It is supported only for H.264 on Intel Macs, but it can be used with both H.264 and HEVC on Apple Silicon. Signed-off-by: Cameron Gutman (cherry picked from commit d87210745e09f6d55a7e43f70bf9d8f81b5f739a) Signed-off-by: Marvin Scholz --- libavcodec/videotoolboxenc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index e423da6933..f0d3a15897 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -1709,7 +1709,8 @@ static int vtenc_configure_encoder(AVCodecContext *avctx) #endif // low-latency mode: eliminate frame reordering, follow a one-in-one-out encoding mode - if ((avctx->flags & AV_CODEC_FLAG_LOW_DELAY) && avctx->codec_id == AV_CODEC_ID_H264) { + if ((avctx->flags & AV_CODEC_FLAG_LOW_DELAY) && + ((avctx->codec_id == AV_CODEC_ID_H264) || (TARGET_CPU_ARM64 && avctx->codec_id == AV_CODEC_ID_HEVC))) { CFDictionarySetValue(enc_info, compat_keys.kVTVideoEncoderSpecification_EnableLowLatencyRateControl, kCFBooleanTrue); -- 2.49.1 >>From 7dd897dc6d34de9e19713f97854e74de80ffd3c9 Mon Sep 17 00:00:00 2001 From: Zhao Zhili Date: Wed, 10 Sep 2025 20:29:47 +0800 Subject: [PATCH 4/4] avcodec/videotoolboxenc: ensure bitrate is set in low_delay mode VideoToolbox doesn't support automatic bitrate in low delay mode. Check bitrate and show error message so user knows what's going wrong. (cherry picked from commit c1dc2e2b7cc8df8a40b616793d1204be0e71103c) Signed-off-by: Marvin Scholz --- libavcodec/videotoolboxenc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index f0d3a15897..729072c0b9 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -1711,6 +1711,12 @@ static int vtenc_configure_encoder(AVCodecContext *avctx) // low-latency mode: eliminate frame reordering, follow a one-in-one-out encoding mode if ((avctx->flags & AV_CODEC_FLAG_LOW_DELAY) && ((avctx->codec_id == AV_CODEC_ID_H264) || (TARGET_CPU_ARM64 && avctx->codec_id == AV_CODEC_ID_HEVC))) { + if (!avctx->bit_rate) { + av_log(avctx, AV_LOG_ERROR, "Doesn't support automatic bitrate in low_delay mode, " + "please specify bitrate explicitly\n"); + status = AVERROR(EINVAL); + goto init_cleanup; + } CFDictionarySetValue(enc_info, compat_keys.kVTVideoEncoderSpecification_EnableLowLatencyRateControl, kCFBooleanTrue); -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org