<div dir="ltr">From 049f6d903d1f7cf400d75c48bdcf0462002f499f Mon Sep 17 00:00:00 2001<br>From: Karam Singh <<a href="mailto:karam.singh@multicorewareinc.com">karam.singh@multicorewareinc.com</a>><br>Date: Thu, 27 Apr 2023 18:15:28 +0530<br>Subject: [PATCH] Fix Extra IDR issue in zonefile feature when total number of<br> frames unknown (live)<br><br>---<br> source/common/param.cpp      | 1 +<br> source/encoder/slicetype.cpp | 2 ++<br> source/x265.h                | 1 +<br> source/x265cli.cpp           | 3 +++<br> 4 files changed, 7 insertions(+)<br><br>diff --git a/source/common/param.cpp b/source/common/param.cpp<br>index e9ca077d7..58ba49793 100644<br>--- a/source/common/param.cpp<br>+++ b/source/common/param.cpp<br>@@ -2594,6 +2594,7 @@ void x265_copy_params(x265_param* dst, x265_param* src)<br>         for (int i = 0; i < src->rc.zonefileCount; i++)<br>         {<br>             dst->rc.zones[i].startFrame = src->rc.zones[i].startFrame;<br>+            dst->rc.zones[0].keyframeMax = src->rc.zones[0].keyframeMax;<br>             memcpy(dst->rc.zones[i].zoneParam, src->rc.zones[i].zoneParam, sizeof(x265_param));<br>         }<br>     }<br>diff --git a/source/encoder/slicetype.cpp b/source/encoder/slicetype.cpp<br>index 550cc1872..2cfb39620 100644<br>--- a/source/encoder/slicetype.cpp<br>+++ b/source/encoder/slicetype.cpp<br>@@ -1958,6 +1958,8 @@ void Lookahead::slicetypeAnalyse(Lowres **frames, bool bKeyframe)<br>             nextZoneStart += (i + 1 < m_param->rc.zonefileCount) ? m_param->rc.zones[i + 1].startFrame + m_param->rc.zones[i + 1].zoneParam->radl : m_param->totalFrames;<br>             if (curZoneStart <= frames[0]->frameNum && nextZoneStart > frames[0]->frameNum)<br>                 m_param->keyframeMax = nextZoneStart - curZoneStart;<br>+            if ((i + 1 == m_param->rc.zonefileCount) && nextZoneStart == 0)<br>+                m_param->keyframeMax = m_param->rc.zones[0].keyframeMax;<br>         }<br>     }<br>     int keylimit = m_param->keyframeMax;<br>diff --git a/source/x265.h b/source/x265.h<br>index d621e4394..06f61aa5d 100644<br>--- a/source/x265.h<br>+++ b/source/x265.h<br>@@ -711,6 +711,7 @@ struct x265_param;<br> typedef struct x265_zone<br> {<br>     int   startFrame, endFrame; /* range of frame numbers */<br>+    int   keyframeMax;          /* it store the default/user defined keyframeMax value*/<br>     int   bForceQp;             /* whether to use qp vs bitrate factor */<br>     int   qp;<br>     float bitrateFactor;<br>diff --git a/source/x265cli.cpp b/source/x265cli.cpp<br>index 120a6706d..8c550550f 100755<br>--- a/source/x265cli.cpp<br>+++ b/source/x265cli.cpp<br>@@ -490,6 +490,9 @@ namespace X265_NS {<br> <br>         memcpy(globalParam->rc.zones[zonefileCount].zoneParam, globalParam, sizeof(x265_param));<br> <br>+        if (zonefileCount == 0)<br>+            globalParam->rc.zones[zonefileCount].keyframeMax = globalParam->keyframeMax;<br>+<br>         for (optind = 0;;)<br>         {<br>             int long_options_index = -1;<br>-- <br>2.36.0.windows.1<br><br><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><br></div><div><br></div><div>Karam Singh</div>Senior Video Codec Engineer<div>MulticoreWare, India</div></div></div></div></div>