>From 28fa59b0b10d3b82aedd0ba7138e93f21883c774 Mon Sep 17 00:00:00 2001
From: somuvineela <[email protected]>
Date: Tue, 22 Jul 2025 19:18:03 +0530
Subject: [PATCH] Enforce framethreads to 1 for zerolatency tune

FFmpeg overrides frameNumThreads based on avctx->thread_count, so 
frameNumThreads is forced to one in encoder_open() when zerolatency tune is set.
---
 source/common/param.cpp    | 2 ++
 source/encoder/encoder.cpp | 6 ++++++
 source/x265.h              | 3 +++
 3 files changed, 11 insertions(+)

diff --git a/source/common/param.cpp b/source/common/param.cpp
index a35b06339..598ae21b6 100755
--- a/source/common/param.cpp
+++ b/source/common/param.cpp
@@ -641,6 +641,7 @@ int x265_param_default_preset(x265_param* param, const 
char* preset, const char*
     }
     if (tune)
     {
+        param->tune = tune;
         if (!strcmp(tune, "psnr"))
         {
             param->rc.aqStrength = 0.0;
@@ -2702,6 +2703,7 @@ void x265_copy_params(x265_param* dst, x265_param* src)
     if (strlen(src->numaPools)) snprintf(dst->numaPools, X265_MAX_STRING_SIZE, 
"%s", src->numaPools);
     else dst->numaPools[0] = 0;

+    dst->tune = src->tune;
     dst->bEnableWavefront = src->bEnableWavefront;
     dst->bDistributeModeAnalysis = src->bDistributeModeAnalysis;
     dst->bDistributeMotionEstimation = src->bDistributeMotionEstimation;
diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp
index 2e65cb1a9..5b1efdcbf 100644
--- a/source/encoder/encoder.cpp
+++ b/source/encoder/encoder.cpp
@@ -254,6 +254,12 @@ void Encoder::create()
         p->bEnableWavefront = 0;
     }

+    // For zero-latency tune, frameNumThreads must be set to 1
+    if (p->tune && (!strcmp(p->tune, "zerolatency") || !strcmp(p->tune, 
"zero-latency")))
+    {
+        p->frameNumThreads = 1;
+    }
+
     bool allowPools = !strlen(p->numaPools) || strcmp(p->numaPools, "none");

     // Trim the thread pool if --wpp, --pme, and --pmode are disabled
diff --git a/source/x265.h b/source/x265.h
index 7241beda2..fcc8337df 100644
--- a/source/x265.h
+++ b/source/x265.h
@@ -2344,6 +2344,9 @@ typedef struct x265_param
     /*Frame level RateControl Configuration*/
     int     bConfigRCFrame;
     int    isAbrLadderEnable;
+
+    /*tune*/
+    const char* tune;
 } x265_param;

 /* x265_param_alloc:
--
2.43.0.windows.1


Attachment: enforce_frame_threads_for_zerolatency_tune.diff
Description: enforce_frame_threads_for_zerolatency_tune.diff

_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel

Reply via email to