<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Oct 21, 2016 at 3:45 PM,  <span dir="ltr"><<a href="mailto:gopi.satykrishna@multicorewareinc.com" target="_blank">gopi.satykrishna@multicorewareinc.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Gopi Satykrishna Akisetty <<a href="mailto:gopi.satykrishna@multicorewareinc.com">gopi.satykrishna@<wbr>multicorewareinc.com</a>><br>
# Date 1477033375 -19800<br>
#      Fri Oct 21 12:32:55 2016 +0530<br>
# Node ID 51a81cb49d988b890040a4e8254b31<wbr>59258ae89e<br>
# Parent  0e9e5264054606a38a3fe6c87272a1<wbr>737b340b1a<br>
slicetype: Add bias used in scenecut detection as param option.<br>
<br>
diff -r 0e9e52640546 -r 51a81cb49d98 doc/reST/cli.rst<br>
--- a/doc/reST/cli.rst  Wed Oct 12 17:58:49 2016 +0530<br>
+++ b/doc/reST/cli.rst  Fri Oct 21 12:32:55 2016 +0530<br>
@@ -1163,6 +1163,13 @@<br>
        :option:`--scenecut` 0 or :option:`--no-scenecut` disables adaptive<br>
        I frame placement. Default 40<br>
<br>
+.. option:: --bias-for-scenecut <5..10.0><br>
+<br>
+       This value represents the percentage difference between the inter cost and<br>
+       intra cost of a frame used in scenecut detection. For example, a value of 5 indicates,<br>
+       if the inter cost of a frame is greater than or equal to 95 percent of the intra cost of the frame,<br>
+       then detect this frame as scenecut. Default 5.<br>
+<br></blockquote><div><br></div><div>Why not expose the range as 0..100 so that the user has the option of being more aggressive wrt scenecut decisions?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 .. option:: --intra-refresh<br>
<br>
        Enables Periodic Intra Refresh(PIR) instead of keyframe insertion.<br>
diff -r 0e9e52640546 -r 51a81cb49d98 source/CMakeLists.txt<br>
--- a/source/CMakeLists.txt     Wed Oct 12 17:58:49 2016 +0530<br>
+++ b/source/CMakeLists.txt     Fri Oct 21 12:32:55 2016 +0530<br>
@@ -30,7 +30,7 @@<br>
 mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)<br>
<br>
 # X265_BUILD must be incremented each time the public API is changed<br>
-set(X265_BUILD 98)<br>
+set(X265_BUILD 99)<br>
 configure_file("${PROJECT_<wbr>SOURCE_DIR}/<a href="http://x265.def.in" rel="noreferrer" target="_blank">x265.def.in</a>"<br>
                "${PROJECT_BINARY_DIR}/x265.<wbr>def")<br>
 configure_file("${PROJECT_<wbr>SOURCE_DIR}/<a href="http://x265_config.h.in" rel="noreferrer" target="_blank">x265_config.h.in</a>"<br>
diff -r 0e9e52640546 -r 51a81cb49d98 source/common/param.cpp<br>
--- a/source/common/param.cpp   Wed Oct 12 17:58:49 2016 +0530<br>
+++ b/source/common/param.cpp   Fri Oct 21 12:32:55 2016 +0530<br>
@@ -149,6 +149,7 @@<br>
     param->bBPyramid = 1;<br>
     param->scenecutThreshold = 40; /* Magic number pulled in from x264 */<br>
     param->lookaheadSlices = 8;<br>
+    param->bBiasForScenecut = 5.0;<br>
<br>
     /* Intra Coding Tools */<br>
     param->bEnableConstrainedIntra = 0;<br>
@@ -915,6 +916,7 @@<br>
         OPT("limit-tu") p->limitTU = atoi(value);<br>
         OPT("opt-qp-pps") p->bOptQpPPS = atobool(value);<br>
         OPT("opt-ref-list-length-pps") p->bOptRefListLengthPPS = atobool(value);<br>
+        OPT("bias-for-scenecut") p->bBiasForScenecut = atof(value);<br>
         else<br>
             return X265_PARAM_BAD_NAME;<br>
     }<br>
@@ -1217,6 +1219,8 @@<br>
           "Valid Logging level -1:none 0:error 1:warning 2:info 3:debug 4:full");<br>
     CHECK(param->scenecutThreshold < 0,<br>
           "scenecutThreshold must be greater than 0");<br>
+    CHECK(param->bBiasForScenecut < 5 || 10 < param->bBiasForScenecut,<br>
+           "bias-for-scenecut must be between 5 and 10");<br></blockquote><div><br></div><div>Check will have to change based on proposed new range.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     CHECK(param->rdPenalty < 0 || param->rdPenalty > 2,<br>
           "Valid penalty for 32x32 intra TU in non-I slices. 0:disabled 1:RD-penalty 2:maximum");<br>
     CHECK(param->keyframeMax < -1,<br>
@@ -1467,6 +1471,7 @@<br>
     s += sprintf(s, " keyint=%d", p->keyframeMax);<br>
     s += sprintf(s, " min-keyint=%d", p->keyframeMin);<br>
     s += sprintf(s, " scenecut=%d", p->scenecutThreshold);<br>
+    s += sprintf(s, " bias-for-scenecut=%.2f", p->bBiasForScenecut);<br>
     s += sprintf(s, " rc-lookahead=%d", p->lookaheadDepth);<br>
     s += sprintf(s, " lookahead-slices=%d", p->lookaheadSlices);<br>
     s += sprintf(s, " bframes=%d", p->bframes);<br>
diff -r 0e9e52640546 -r 51a81cb49d98 source/encoder/encoder.cpp<br>
--- a/source/encoder/encoder.cpp        Wed Oct 12 17:58:49 2016 +0530<br>
+++ b/source/encoder/encoder.cpp        Fri Oct 21 12:32:55 2016 +0530<br>
@@ -1921,6 +1921,7 @@<br>
     m_bframeDelay = p->bframes ? (p->bBPyramid ? 2 : 1) : 0;<br>
<br>
     p->bFrameBias = X265_MIN(X265_MAX(-90, p->bFrameBias), 100);<br>
+    p->bBiasForScenecut = (double)(p->bBiasForScenecut / 100);<br>
<br>
     if (p->logLevel < X265_LOG_INFO)<br>
     {<br>
diff -r 0e9e52640546 -r 51a81cb49d98 source/encoder/slicetype.cpp<br>
--- a/source/encoder/slicetype.cpp      Wed Oct 12 17:58:49 2016 +0530<br>
+++ b/source/encoder/slicetype.cpp      Fri Oct 21 12:32:55 2016 +0530<br>
@@ -1617,7 +1617,7 @@<br>
<br>
     /* magic numbers pulled out of thin air */<br>
     float threshMin = (float)(threshMax * 0.25);<br>
-    double bias = 0.05;<br>
+    double bias = m_param->bBiasForScenecut;<br>
     if (bRealScenecut)<br>
     {<br>
         if (m_param->keyframeMin == m_param->keyframeMax)<br>
diff -r 0e9e52640546 -r 51a81cb49d98 source/x265.h<br>
--- a/source/x265.h     Wed Oct 12 17:58:49 2016 +0530<br>
+++ b/source/x265.h     Fri Oct 21 12:32:55 2016 +0530<br>
@@ -775,6 +775,10 @@<br>
      * should detect scene cuts. The default (40) is recommended. */<br>
     int       scenecutThreshold;<br>
<br>
+    /* This value represents the percentage difference between the inter cost and<br>
+     * intra cost of a frame used in scenecut detection. Default 5. */<br>
+    double     bBiasForScenecut;<br>
+<br></blockquote><div><br></div><div>Please add all new params only to the end of the x265_param_t structure to allow for backwards compatibility with existing applications that just want to use the new .dll as a drop-in replacement without recompiling the entire application.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     /* Replace keyframes by using a column of intra blocks that move across the video<br>
      * from one side to the other, thereby "refreshing" the image. In effect, instead of a<br>
      * big keyframe, the keyframe is "spread" over many frames. */<br>
diff -r 0e9e52640546 -r 51a81cb49d98 source/x265cli.h<br>
--- a/source/x265cli.h  Wed Oct 12 17:58:49 2016 +0530<br>
+++ b/source/x265cli.h  Fri Oct 21 12:32:55 2016 +0530<br>
@@ -121,6 +121,7 @@<br>
     { "min-keyint",     required_argument, NULL, 'i' },<br>
     { "scenecut",       required_argument, NULL, 0 },<br>
     { "no-scenecut",          no_argument, NULL, 0 },<br>
+    { "bias-for-scenecut", required_argument, NULL, 0 },<br>
     { "intra-refresh",        no_argument, NULL, 0 },<br>
     { "rc-lookahead",   required_argument, NULL, 0 },<br>
     { "lookahead-slices", required_argument, NULL, 0 },<br>
@@ -365,6 +366,7 @@<br>
     H0("-i/--min-keyint <integer>        Scenecuts closer together than this are coded as I, not IDR. Default: auto\n");<br>
     H0("   --no-scenecut                 Disable adaptive I-frame decision\n");<br>
     H0("   --scenecut <integer>          How aggressively to insert extra I-frames. Default %d\n", param->scenecutThreshold);<br>
+    H1("   --bias-for-scenecut<5..10.0>  Bias for scenecut detection. Default %.2f\n", param->bBiasForScenecut);<br>
     H0("   --intra-refresh               Use Periodic Intra Refresh instead of IDR frames\n");<br>
     H0("   --rc-lookahead <integer>      Number of frames for frame-type lookahead (determines encoder latency) Default %d\n", param->lookaheadDepth);<br>
     H1("   --lookahead-slices <0..16>    Number of slices to use per lookahead cost estimate. Default %d\n", param->lookaheadSlices);<br>
______________________________<wbr>_________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/<wbr>listinfo/x265-devel</a><br>
</blockquote></div><br></div></div>