<div dir="ltr">Pushed to the master branch</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 13, 2023 at 3:02 PM Kirithika Kalirathnam <<a href="mailto:kirithika@multicorewareinc.com">kirithika@multicorewareinc.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">From e3402211edcd19acf172d2597ff65890d7fc227e Mon Sep 17 00:00:00 2001<br>From: Kirithika <<a href="mailto:kirithika@multicorewareinc.com" target="_blank">kirithika@multicorewareinc.com</a>><br>Date: Thu, 12 Jan 2023 15:50:58 +0530<br>Subject: [PATCH] Add command line support for scene cut aware qp feature<br><br>This commit enables the scene cut aware qp feature through the command line parameters<br>--scenecut-aware-qp and --masking-strength.It doesn't disable the scenecut aware qp configuration via config file.<br>User can choose between either of these two ways to configure scenecut-aware-qp.<br>---<br> doc/reST/cli.rst | 3 +-<br> source/CMakeLists.txt | 2 +-<br> source/common/param.cpp | 290 ++++++++++++++++++++--------------------<br> source/common/param.h | 1 +<br> 4 files changed, 151 insertions(+), 145 deletions(-)<br><br>diff --git a/doc/reST/cli.rst b/doc/reST/cli.rst<br>index f1d9fa36c..a98c860d0 100755<br>--- a/doc/reST/cli.rst<br>+++ b/doc/reST/cli.rst<br>@@ -1987,7 +1987,6 @@ Quality, rate control and rate distortion options<br> It reduces the bits spent on the inter-frames within the scenecut window<br> before and after a scenecut by increasing their QP in ratecontrol pass2 algorithm<br> without any deterioration in visual quality.<br>- It is mentioned inside :option:`--scenecut-qp-config` file.<br> :option:`--scenecut-aware-qp` works only with --pass 2. Default 0.<br> <br> +-------+---------------------------------------------------------------+<br>@@ -2010,7 +2009,7 @@ Quality, rate control and rate distortion options<br> <br> Comma separated list of values which specifies the duration and offset<br> for the QP increment for inter-frames when :option:`--scenecut-aware-qp`<br>- is enabled. It is mentioned inside :option:`--scenecut-qp-config` file.<br>+ is enabled.<br> <br> When :option:`--scenecut-aware-qp` is:<br> <br>diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt<br>index 04ceea0ec..4c3274f63 100755<br>--- a/source/CMakeLists.txt<br>+++ b/source/CMakeLists.txt<br>@@ -29,7 +29,7 @@ option(NATIVE_BUILD "Target the build CPU" OFF)<br> option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF)<br> mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)<br> # X265_BUILD must be incremented each time the public API is changed<br>-set(X265_BUILD 206)<br>+set(X265_BUILD 207)<br> configure_file("${PROJECT_SOURCE_DIR}/<a href="http://x265.def.in" target="_blank">x265.def.in</a>"<br> "${PROJECT_BINARY_DIR}/x265.def")<br> configure_file("${PROJECT_SOURCE_DIR}/<a href="http://x265_config.h.in" target="_blank">x265_config.h.in</a>"<br>diff --git a/source/common/param.cpp b/source/common/param.cpp<br>index fe85d8726..8c32fafa2 100755<br>--- a/source/common/param.cpp<br>+++ b/source/common/param.cpp<br>@@ -711,148 +711,7 @@ int x265_scenecut_aware_qp_param_parse(x265_param* p, const char* name, const ch<br> #define OPT(STR) else if (!strcmp(name, STR))<br> if (0);<br> OPT("scenecut-aware-qp") p->bEnableSceneCutAwareQp = x265_atoi(value, bError);<br>- OPT("masking-strength")<br>- {<br>- int window1[6];<br>- double refQpDelta1[6], nonRefQpDelta1[6];<br>- if (p->bEnableSceneCutAwareQp == FORWARD)<br>- {<br>- if (3 == sscanf(value, "%d,%lf,%lf", &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0]))<br>- {<br>- if (window1[0] > 0)<br>- p->fwdMaxScenecutWindow = window1[0];<br>- if (refQpDelta1[0] > 0)<br>- p->fwdRefQpDelta[0] = refQpDelta1[0];<br>- if (nonRefQpDelta1[0] > 0)<br>- p->fwdNonRefQpDelta[0] = nonRefQpDelta1[0];<br>-<br>- p->fwdScenecutWindow[0] = p->fwdMaxScenecutWindow / 6;<br>- for (int i = 1; i < 6; i++)<br>- {<br>- p->fwdScenecutWindow[i] = p->fwdMaxScenecutWindow / 6;<br>- p->fwdRefQpDelta[i] = p->fwdRefQpDelta[i - 1] - (0.15 * p->fwdRefQpDelta[i - 1]);<br>- p->fwdNonRefQpDelta[i] = p->fwdNonRefQpDelta[i - 1] - (0.15 * p->fwdNonRefQpDelta[i - 1]);<br>- }<br>- }<br>- else if (18 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf"<br>- , &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window1[1], &refQpDelta1[1], &nonRefQpDelta1[1]<br>- , &window1[2], &refQpDelta1[2], &nonRefQpDelta1[2], &window1[3], &refQpDelta1[3], &nonRefQpDelta1[3]<br>- , &window1[4], &refQpDelta1[4], &nonRefQpDelta1[4], &window1[5], &refQpDelta1[5], &nonRefQpDelta1[5]))<br>- {<br>- p->fwdMaxScenecutWindow = 0;<br>- for (int i = 0; i < 6; i++)<br>- {<br>- p->fwdScenecutWindow[i] = window1[i];<br>- p->fwdRefQpDelta[i] = refQpDelta1[i];<br>- p->fwdNonRefQpDelta[i] = nonRefQpDelta1[i];<br>- p->fwdMaxScenecutWindow += p->fwdScenecutWindow[i];<br>- }<br>- }<br>- else<br>- {<br>- x265_log(NULL, X265_LOG_ERROR, "Specify all the necessary offsets for masking-strength \n");<br>- bError = true;<br>- }<br>- }<br>- else if (p->bEnableSceneCutAwareQp == BACKWARD)<br>- {<br>- if (3 == sscanf(value, "%d,%lf,%lf", &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0]))<br>- {<br>- if (window1[0] > 0)<br>- p->bwdMaxScenecutWindow = window1[0];<br>- if (refQpDelta1[0] > 0)<br>- p->bwdRefQpDelta[0] = refQpDelta1[0];<br>- if (nonRefQpDelta1[0] > 0)<br>- p->bwdNonRefQpDelta[0] = nonRefQpDelta1[0];<br>-<br>- p->bwdScenecutWindow[0] = p->bwdMaxScenecutWindow / 6;<br>- for (int i = 1; i < 6; i++)<br>- {<br>- p->bwdScenecutWindow[i] = p->bwdMaxScenecutWindow / 6;<br>- p->bwdRefQpDelta[i] = p->bwdRefQpDelta[i - 1] - (0.15 * p->bwdRefQpDelta[i - 1]);<br>- p->bwdNonRefQpDelta[i] = p->bwdNonRefQpDelta[i - 1] - (0.15 * p->bwdNonRefQpDelta[i - 1]);<br>- }<br>- }<br>- else if (18 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf"<br>- , &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window1[1], &refQpDelta1[1], &nonRefQpDelta1[1]<br>- , &window1[2], &refQpDelta1[2], &nonRefQpDelta1[2], &window1[3], &refQpDelta1[3], &nonRefQpDelta1[3]<br>- , &window1[4], &refQpDelta1[4], &nonRefQpDelta1[4], &window1[5], &refQpDelta1[5], &nonRefQpDelta1[5]))<br>- {<br>- p->bwdMaxScenecutWindow = 0;<br>- for (int i = 0; i < 6; i++)<br>- {<br>- p->bwdScenecutWindow[i] = window1[i];<br>- p->bwdRefQpDelta[i] = refQpDelta1[i];<br>- p->bwdNonRefQpDelta[i] = nonRefQpDelta1[i];<br>- p->bwdMaxScenecutWindow += p->bwdScenecutWindow[i];<br>- }<br>- }<br>- else<br>- {<br>- x265_log(NULL, X265_LOG_ERROR, "Specify all the necessary offsets for masking-strength \n");<br>- bError = true;<br>- }<br>- }<br>- else if (p->bEnableSceneCutAwareQp == BI_DIRECTIONAL)<br>- {<br>- int window2[6];<br>- double refQpDelta2[6], nonRefQpDelta2[6];<br>- if (6 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf", &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window2[0], &refQpDelta2[0], &nonRefQpDelta2[0]))<br>- {<br>- if (window1[0] > 0)<br>- p->fwdMaxScenecutWindow = window1[0];<br>- if (refQpDelta1[0] > 0)<br>- p->fwdRefQpDelta[0] = refQpDelta1[0];<br>- if (nonRefQpDelta1[0] > 0)<br>- p->fwdNonRefQpDelta[0] = nonRefQpDelta1[0];<br>- if (window2[0] > 0)<br>- p->bwdMaxScenecutWindow = window2[0];<br>- if (refQpDelta2[0] > 0)<br>- p->bwdRefQpDelta[0] = refQpDelta2[0];<br>- if (nonRefQpDelta2[0] > 0)<br>- p->bwdNonRefQpDelta[0] = nonRefQpDelta2[0];<br>-<br>- p->fwdScenecutWindow[0] = p->fwdMaxScenecutWindow / 6;<br>- p->bwdScenecutWindow[0] = p->bwdMaxScenecutWindow / 6;<br>- for (int i = 1; i < 6; i++)<br>- {<br>- p->fwdScenecutWindow[i] = p->fwdMaxScenecutWindow / 6;<br>- p->bwdScenecutWindow[i] = p->bwdMaxScenecutWindow / 6;<br>- p->fwdRefQpDelta[i] = p->fwdRefQpDelta[i - 1] - (0.15 * p->fwdRefQpDelta[i - 1]);<br>- p->fwdNonRefQpDelta[i] = p->fwdNonRefQpDelta[i - 1] - (0.15 * p->fwdNonRefQpDelta[i - 1]);<br>- p->bwdRefQpDelta[i] = p->bwdRefQpDelta[i - 1] - (0.15 * p->bwdRefQpDelta[i - 1]);<br>- p->bwdNonRefQpDelta[i] = p->bwdNonRefQpDelta[i - 1] - (0.15 * p->bwdNonRefQpDelta[i - 1]);<br>- }<br>- }<br>- else if (36 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf"<br>- , &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window1[1], &refQpDelta1[1], &nonRefQpDelta1[1]<br>- , &window1[2], &refQpDelta1[2], &nonRefQpDelta1[2], &window1[3], &refQpDelta1[3], &nonRefQpDelta1[3]<br>- , &window1[4], &refQpDelta1[4], &nonRefQpDelta1[4], &window1[5], &refQpDelta1[5], &nonRefQpDelta1[5]<br>- , &window2[0], &refQpDelta2[0], &nonRefQpDelta2[0], &window2[1], &refQpDelta2[1], &nonRefQpDelta2[1]<br>- , &window2[2], &refQpDelta2[2], &nonRefQpDelta2[2], &window2[3], &refQpDelta2[3], &nonRefQpDelta2[3]<br>- , &window2[4], &refQpDelta2[4], &nonRefQpDelta2[4], &window2[5], &refQpDelta2[5], &nonRefQpDelta2[5]))<br>- {<br>- p->fwdMaxScenecutWindow = 0;<br>- p->bwdMaxScenecutWindow = 0;<br>- for (int i = 0; i < 6; i++)<br>- {<br>- p->fwdScenecutWindow[i] = window1[i];<br>- p->fwdRefQpDelta[i] = refQpDelta1[i];<br>- p->fwdNonRefQpDelta[i] = nonRefQpDelta1[i];<br>- p->bwdScenecutWindow[i] = window2[i];<br>- p->bwdRefQpDelta[i] = refQpDelta2[i];<br>- p->bwdNonRefQpDelta[i] = nonRefQpDelta2[i];<br>- p->fwdMaxScenecutWindow += p->fwdScenecutWindow[i];<br>- p->bwdMaxScenecutWindow += p->bwdScenecutWindow[i];<br>- }<br>- }<br>- else<br>- {<br>- x265_log(NULL, X265_LOG_ERROR, "Specify all the necessary offsets for masking-strength \n");<br>- bError = true;<br>- }<br>- }<br>- }<br>+ OPT("masking-strength") bError = parseMaskingStrength(p, value);<br> else<br> return X265_PARAM_BAD_NAME;<br> #undef OPT<br>@@ -1534,6 +1393,8 @@ int x265_param_parse(x265_param* p, const char* name, const char* value)<br> p->selectiveSAO = atoi(value);<br> }<br> OPT("fades") p->bEnableFades = atobool(value);<br>+ OPT("scenecut-aware-qp") p->bEnableSceneCutAwareQp = atoi(value);<br>+ OPT("masking-strength") bError |= parseMaskingStrength(p, value);<br> OPT("field") p->bField = atobool( value );<br> OPT("cll") p->bEmitCLL = atobool(value);<br> OPT("frame-dup") p->bEnableFrameDuplication = atobool(value);<br>@@ -2548,6 +2409,151 @@ bool parseLambdaFile(x265_param* param)<br> return false;<br> }<br> <br>+bool parseMaskingStrength(x265_param* p, const char* value)<br>+{<br>+ bool bError = false;<br>+ int window1[6];<br>+ double refQpDelta1[6], nonRefQpDelta1[6];<br>+ if (p->bEnableSceneCutAwareQp == FORWARD)<br>+ {<br>+ if (3 == sscanf(value, "%d,%lf,%lf", &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0]))<br>+ {<br>+ if (window1[0] > 0)<br>+ p->fwdMaxScenecutWindow = window1[0];<br>+ if (refQpDelta1[0] > 0)<br>+ p->fwdRefQpDelta[0] = refQpDelta1[0];<br>+ if (nonRefQpDelta1[0] > 0)<br>+ p->fwdNonRefQpDelta[0] = nonRefQpDelta1[0];<br>+<br>+ p->fwdScenecutWindow[0] = p->fwdMaxScenecutWindow / 6;<br>+ for (int i = 1; i < 6; i++)<br>+ {<br>+ p->fwdScenecutWindow[i] = p->fwdMaxScenecutWindow / 6;<br>+ p->fwdRefQpDelta[i] = p->fwdRefQpDelta[i - 1] - (0.15 * p->fwdRefQpDelta[i - 1]);<br>+ p->fwdNonRefQpDelta[i] = p->fwdNonRefQpDelta[i - 1] - (0.15 * p->fwdNonRefQpDelta[i - 1]);<br>+ }<br>+ }<br>+ else if (18 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf"<br>+ , &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window1[1], &refQpDelta1[1], &nonRefQpDelta1[1]<br>+ , &window1[2], &refQpDelta1[2], &nonRefQpDelta1[2], &window1[3], &refQpDelta1[3], &nonRefQpDelta1[3]<br>+ , &window1[4], &refQpDelta1[4], &nonRefQpDelta1[4], &window1[5], &refQpDelta1[5], &nonRefQpDelta1[5]))<br>+ {<br>+ p->fwdMaxScenecutWindow = 0;<br>+ for (int i = 0; i < 6; i++)<br>+ {<br>+ p->fwdScenecutWindow[i] = window1[i];<br>+ p->fwdRefQpDelta[i] = refQpDelta1[i];<br>+ p->fwdNonRefQpDelta[i] = nonRefQpDelta1[i];<br>+ p->fwdMaxScenecutWindow += p->fwdScenecutWindow[i];<br>+ }<br>+ }<br>+ else<br>+ {<br>+ x265_log(NULL, X265_LOG_ERROR, "Specify all the necessary offsets for masking-strength \n");<br>+ bError = true;<br>+ }<br>+ }<br>+ else if (p->bEnableSceneCutAwareQp == BACKWARD)<br>+ {<br>+ if (3 == sscanf(value, "%d,%lf,%lf", &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0]))<br>+ {<br>+ if (window1[0] > 0)<br>+ p->bwdMaxScenecutWindow = window1[0];<br>+ if (refQpDelta1[0] > 0)<br>+ p->bwdRefQpDelta[0] = refQpDelta1[0];<br>+ if (nonRefQpDelta1[0] > 0)<br>+ p->bwdNonRefQpDelta[0] = nonRefQpDelta1[0];<br>+<br>+ p->bwdScenecutWindow[0] = p->bwdMaxScenecutWindow / 6;<br>+ for (int i = 1; i < 6; i++)<br>+ {<br>+ p->bwdScenecutWindow[i] = p->bwdMaxScenecutWindow / 6;<br>+ p->bwdRefQpDelta[i] = p->bwdRefQpDelta[i - 1] - (0.15 * p->bwdRefQpDelta[i - 1]);<br>+ p->bwdNonRefQpDelta[i] = p->bwdNonRefQpDelta[i - 1] - (0.15 * p->bwdNonRefQpDelta[i - 1]);<br>+ }<br>+ }<br>+ else if (18 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf"<br>+ , &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window1[1], &refQpDelta1[1], &nonRefQpDelta1[1]<br>+ , &window1[2], &refQpDelta1[2], &nonRefQpDelta1[2], &window1[3], &refQpDelta1[3], &nonRefQpDelta1[3]<br>+ , &window1[4], &refQpDelta1[4], &nonRefQpDelta1[4], &window1[5], &refQpDelta1[5], &nonRefQpDelta1[5]))<br>+ {<br>+ p->bwdMaxScenecutWindow = 0;<br>+ for (int i = 0; i < 6; i++)<br>+ {<br>+ p->bwdScenecutWindow[i] = window1[i];<br>+ p->bwdRefQpDelta[i] = refQpDelta1[i];<br>+ p->bwdNonRefQpDelta[i] = nonRefQpDelta1[i];<br>+ p->bwdMaxScenecutWindow += p->bwdScenecutWindow[i];<br>+ }<br>+ }<br>+ else<br>+ {<br>+ x265_log(NULL, X265_LOG_ERROR, "Specify all the necessary offsets for masking-strength \n");<br>+ bError = true;<br>+ }<br>+ }<br>+ else if (p->bEnableSceneCutAwareQp == BI_DIRECTIONAL)<br>+ {<br>+ int window2[6];<br>+ double refQpDelta2[6], nonRefQpDelta2[6];<br>+ if (6 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf", &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window2[0], &refQpDelta2[0], &nonRefQpDelta2[0]))<br>+ {<br>+ if (window1[0] > 0)<br>+ p->fwdMaxScenecutWindow = window1[0];<br>+ if (refQpDelta1[0] > 0)<br>+ p->fwdRefQpDelta[0] = refQpDelta1[0];<br>+ if (nonRefQpDelta1[0] > 0)<br>+ p->fwdNonRefQpDelta[0] = nonRefQpDelta1[0];<br>+ if (window2[0] > 0)<br>+ p->bwdMaxScenecutWindow = window2[0];<br>+ if (refQpDelta2[0] > 0)<br>+ p->bwdRefQpDelta[0] = refQpDelta2[0];<br>+ if (nonRefQpDelta2[0] > 0)<br>+ p->bwdNonRefQpDelta[0] = nonRefQpDelta2[0];<br>+<br>+ p->fwdScenecutWindow[0] = p->fwdMaxScenecutWindow / 6;<br>+ p->bwdScenecutWindow[0] = p->bwdMaxScenecutWindow / 6;<br>+ for (int i = 1; i < 6; i++)<br>+ {<br>+ p->fwdScenecutWindow[i] = p->fwdMaxScenecutWindow / 6;<br>+ p->bwdScenecutWindow[i] = p->bwdMaxScenecutWindow / 6;<br>+ p->fwdRefQpDelta[i] = p->fwdRefQpDelta[i - 1] - (0.15 * p->fwdRefQpDelta[i - 1]);<br>+ p->fwdNonRefQpDelta[i] = p->fwdNonRefQpDelta[i - 1] - (0.15 * p->fwdNonRefQpDelta[i - 1]);<br>+ p->bwdRefQpDelta[i] = p->bwdRefQpDelta[i - 1] - (0.15 * p->bwdRefQpDelta[i - 1]);<br>+ p->bwdNonRefQpDelta[i] = p->bwdNonRefQpDelta[i - 1] - (0.15 * p->bwdNonRefQpDelta[i - 1]);<br>+ }<br>+ }<br>+ else if (36 == sscanf(value, "%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf,%d,%lf,%lf"<br>+ , &window1[0], &refQpDelta1[0], &nonRefQpDelta1[0], &window1[1], &refQpDelta1[1], &nonRefQpDelta1[1]<br>+ , &window1[2], &refQpDelta1[2], &nonRefQpDelta1[2], &window1[3], &refQpDelta1[3], &nonRefQpDelta1[3]<br>+ , &window1[4], &refQpDelta1[4], &nonRefQpDelta1[4], &window1[5], &refQpDelta1[5], &nonRefQpDelta1[5]<br>+ , &window2[0], &refQpDelta2[0], &nonRefQpDelta2[0], &window2[1], &refQpDelta2[1], &nonRefQpDelta2[1]<br>+ , &window2[2], &refQpDelta2[2], &nonRefQpDelta2[2], &window2[3], &refQpDelta2[3], &nonRefQpDelta2[3]<br>+ , &window2[4], &refQpDelta2[4], &nonRefQpDelta2[4], &window2[5], &refQpDelta2[5], &nonRefQpDelta2[5]))<br>+ {<br>+ p->fwdMaxScenecutWindow = 0;<br>+ p->bwdMaxScenecutWindow = 0;<br>+ for (int i = 0; i < 6; i++)<br>+ {<br>+ p->fwdScenecutWindow[i] = window1[i];<br>+ p->fwdRefQpDelta[i] = refQpDelta1[i];<br>+ p->fwdNonRefQpDelta[i] = nonRefQpDelta1[i];<br>+ p->bwdScenecutWindow[i] = window2[i];<br>+ p->bwdRefQpDelta[i] = refQpDelta2[i];<br>+ p->bwdNonRefQpDelta[i] = nonRefQpDelta2[i];<br>+ p->fwdMaxScenecutWindow += p->fwdScenecutWindow[i];<br>+ p->bwdMaxScenecutWindow += p->bwdScenecutWindow[i];<br>+ }<br>+ }<br>+ else<br>+ {<br>+ x265_log(NULL, X265_LOG_ERROR, "Specify all the necessary offsets for masking-strength \n");<br>+ bError = true;<br>+ }<br>+ }<br>+ return bError;<br>+}<br>+<br> void x265_copy_params(x265_param* dst, x265_param* src)<br> {<br> dst->cpuid = src->cpuid;<br>diff --git a/source/common/param.h b/source/common/param.h<br>index 7808947f6..f504ec9e4 100644<br>--- a/source/common/param.h<br>+++ b/source/common/param.h<br>@@ -38,6 +38,7 @@ void setParamAspectRatio(x265_param *p, int width, int height);<br> void getParamAspectRatio(x265_param *p, int& width, int& height);<br> bool parseLambdaFile(x265_param *param);<br> void x265_copy_params(x265_param* dst, x265_param* src);<br>+bool parseMaskingStrength(x265_param* p, const char* value);<br> <br> /* this table is kept internal to avoid confusion, since log level indices start at -1 */<br> static const char * const logLevelNames[] = { "none", "error", "warning", "info", "debug", "full", 0 };<br>-- <br>2.28.0.windows.1<br><br><div><div dir="ltr"><div dir="ltr"><i>Thanks,</i><div><i>Kirithika</i></div></div></div></div></div>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org" target="_blank">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div>