Pushed into Release_3.1, Release_3.2 and default. On Wed, Jan 8, 2020 at 4:36 PM Snehaa Giridharan < sne...@multicorewareinc.com> wrote:
> # HG changeset patch > # User sne...@multicorewareinc.com > # Date 1576060884 -19800 > # Wed Dec 11 16:11:24 2019 +0530 > # Node ID e65e139861f7d379cc270591709ef602ec1ab42e > # Parent 2e84224f404a55b13866997597beff924f4ce808 > Fix x265 SVT integration > > This patch does the following. > - Fix error for newly added param variables and other default variables > - Remove EbTime.h file as its no longer present in include directory of SVT > - Set SVT-HEVC lib version required to 1.4.1 > - Modify doc page > > diff -r 2e84224f404a -r e65e139861f7 doc/reST/cli.rst > --- a/doc/reST/cli.rst Mon Jan 06 09:38:05 2020 +0530 > +++ b/doc/reST/cli.rst Wed Dec 11 16:11:24 2019 +0530 > @@ -2541,12 +2541,12 @@ > > .. option:: --svt-preset-tuner <integer> > > - SVT-HEVC exposes 13 presets. Presets [3-12] of SVT-HEVC is mapped to > x265's > - presets [placebo-ultrafast]. Ultrafast is mapped to preset(12) of > SVT-HEVC, > - superfast to preset(11), placebo to preset(3) and so on. > svt-preset-tuner works > - only on top of placebo preset and maps to presets (0-2) of SVT-HEVC. > - > - Values: [0-2] > + SVT-HEVC exposes 12 presets. Presets [2-11] of SVT-HEVC is mapped to > x265's > + presets [placebo-ultrafast]. Ultrafast is mapped to preset(11) of > SVT-HEVC, > + superfast to preset(10), placebo to preset(2) and so on. > svt-preset-tuner works > + only on top of placebo preset and maps to presets (0-1) of SVT-HEVC. > + > + Values: [0-1] > > **CLI_ONLY** > > diff -r 2e84224f404a -r e65e139861f7 doc/reST/svthevc.rst > --- a/doc/reST/svthevc.rst Mon Jan 06 09:38:05 2020 +0530 > +++ b/doc/reST/svthevc.rst Wed Dec 11 16:11:24 2019 +0530 > @@ -12,6 +12,10 @@ > wont't be mapped to SVT-HEVC. This document describes the steps needed to > compile x265 > with SVT-HEVC and CLI options mapping between x265 and SVT-HEVC. > > +Supported Version > +================= > +Version - 1.4.1 > + > Build Steps > =========== > This section describes the build steps to be followed to link SVT-HEVC > with x265. > @@ -109,7 +113,15 @@ > > > +-------------------------------------------+------------------------------+------------------------------+ > | :option:`--nalu-file` | NaluFile > | Any String | > > > +-------------------------------------------+------------------------------+------------------------------+ > -| :option:`--tune` zerolatency | LatencyMode > | | > +| :option:`--hrd` | hrdFlag > | [0, 1] | > > ++-------------------------------------------+------------------------------+------------------------------+ > +| :option:`--vbv-maxrate` | vbvMaxrate > | Any Positive Integer | > > ++-------------------------------------------+------------------------------+------------------------------+ > +| :option:`--vbv-bufsize` | vbvBufsize > | Any Positive Integer | > > ++-------------------------------------------+------------------------------+------------------------------+ > +| :option:`--vbv-init` | VbvBufInit > | [0 - 100] | > > ++-------------------------------------------+------------------------------+------------------------------+ > +| :option:`--frame-threads` | ThreadCount > | Any Number | > > > +-------------------------------------------+------------------------------+------------------------------+ > | :option:`--svt-search-width` | SearchAreaWidth > | [1 - 256] | > > > +-------------------------------------------+------------------------------+------------------------------+ > @@ -139,64 +151,37 @@ > fecilitate access to the features of SVT-HEVC which couldn't be mapped to > the existing x265 CLI's. > So these options will have effect only if SVT-HEVC is enabled and would > be ignored with default x265 encode. > > -Preset & Tune Options Mapping > +Preset Option Mapping > ============================= > -x265 has 10 presets from ultrafast to placebo whereas SVT-HEVC has 13 > presets. Use :option:`--svt-preset-tuner` > -with Placebo preset to access the additional 3 presets of SVT-HEVC. Note > that :option:`--svt-preset-tuner` should be > +x265 has 10 presets from ultrafast to placebo whereas SVT-HEVC has 12 > presets. Use :option:`--svt-preset-tuner` > +with Placebo preset to access the additional 2 presets of SVT-HEVC. Note > that :option:`--svt-preset-tuner` should be > used only if SVT-HEVC is enabled and only with Placebo preset, would be > ignored otherwise. > Below table shows the actual mapping of presets, > > +----------------------------------------+------------------------------+ > | x265 Preset | SVT-HEVC Preset | > +========================================+==============================+ > -| Ultrafast | 12 | > +| Ultrafast | 11 | > +----------------------------------------+------------------------------+ > -| Superfast | 11 | > +| Superfast | 10 | > +----------------------------------------+------------------------------+ > -| Veryfast | 10 | > +| Veryfast | 9 | > +----------------------------------------+------------------------------+ > -| Faster | 9 | > +| Faster | 8 | > +----------------------------------------+------------------------------+ > -| Fast | 8 | > +| Fast | 7 | > +----------------------------------------+------------------------------+ > -| Medium | 7 | > +| Medium | 6 | > +----------------------------------------+------------------------------+ > -| Slow | 6 | > +| Slow | 5 | > +----------------------------------------+------------------------------+ > -| Slower | 5 | > +| Slower | 4 | > +----------------------------------------+------------------------------+ > -| Veryslow | 4 | > +| Veryslow | 3 | > +----------------------------------------+------------------------------+ > -| Placebo | 3 | > +| Placebo | 2 | > +----------------------------------------+------------------------------+ > | Placebo :option:`--svt-preset-tuner` 0 | 0 | > +----------------------------------------+------------------------------+ > | Placebo :option:`--svt-preset-tuner` 1 | 1 | > +----------------------------------------+------------------------------+ > -| Placebo :option:`--svt-preset-tuner` 2 | 2 | > -+----------------------------------------+------------------------------+ > - > -x265 has 5 tune modes (psnr, ssim, grain, zero-latency, animation) > whereas SVT-HEVC > -has only 3 tune modes (0 - visual quality, 1 - PSNR / SSIM and 2 - VMAF). > Below > -table shows the mapping of tune modes, > - > -+-----------------------+---------------------------+ > -| x265 Tune Modes | SVT-HEVC Tune Modes | > -+=======================+===========================+ > -| vmaf | 2 | > -+-----------------------+---------------------------+ > -| psnr | 1 | > -+-----------------------+---------------------------+ > -| ssim | 1 | > -+-----------------------+---------------------------+ > -| grain | 0 | > -+-----------------------+---------------------------+ > -| fastdecode | 0 | > -+-----------------------+---------------------------+ > -| zerolatency | 0 | > -+-----------------------+---------------------------+ > -| animation | 0 | > -+-----------------------+---------------------------+ > - > -Note that : 1.option:`--tune` animation is also mapped to "LatencyMode" > of SVT-HEVC. > - 2.option: '--tune' vmaf is not supported in x265, its under > development. > diff -r 2e84224f404a -r e65e139861f7 source/CMakeLists.txt > --- a/source/CMakeLists.txt Mon Jan 06 09:38:05 2020 +0530 > +++ b/source/CMakeLists.txt Wed Dec 11 16:11:24 2019 +0530 > @@ -573,7 +573,6 @@ > if(SVTHEVC_FOUND) > install(FILES "${SVT_HEVC_INCLUDE_DIR}/EbApi.h" DESTINATION include) > install(FILES "${SVT_HEVC_INCLUDE_DIR}/EbErrorCodes.h" DESTINATION > include) > - install(FILES "${SVT_HEVC_INCLUDE_DIR}/EbTime.h" DESTINATION include) > install(FILES "${SVT_HEVC_LIBRARY}" DESTINATION ${BIN_INSTALL_DIR}) > endif() > > diff -r 2e84224f404a -r e65e139861f7 source/cmake/Findsvthevc.cmake > --- a/source/cmake/Findsvthevc.cmake Mon Jan 06 09:38:05 2020 +0530 > +++ b/source/cmake/Findsvthevc.cmake Wed Dec 11 16:11:24 2019 +0530 > @@ -15,34 +15,37 @@ > SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib") > endif() > > -set(SVT_VERSION_MAJOR_REQUIRED 1) > -set(SVT_VERSION_MINOR_REQUIRED 3) > -set(SVT_VERSION_PATCHLEVEL_REQUIRED 0) > +set(SVT_VERSION_MAJOR_REQUIRED 1) > +set(SVT_VERSION_MINOR_REQUIRED 4) > +set(SVT_VERSION_PATCHLEVEL_REQUIRED 1) > > find_path(SVT_HEVC_INCLUDE_DIR > - NAMES EbApi.h EbErrorCodes.h EbTime.h > + NAMES EbApiVersion.h EbErrorCodes.h > HINTS $ENV{SVT_HEVC_INCLUDE_DIR} > PATHS ENV > DOC "SVT-HEVC include directory") > > if(SVT_HEVC_INCLUDE_DIR) > -file(READ "${SVT_HEVC_INCLUDE_DIR}/EbApi.h" version) > + if(EXISTS "${SVT_HEVC_INCLUDE_DIR}/EbApiVersion.h") > + file(READ "${SVT_HEVC_INCLUDE_DIR}/EbApiVersion.h" version) > > -string(REGEX MATCH "SVT_VERSION_MAJOR ([0-9]*)" _ ${version}) > -set(SVT_VERSION_MAJOR ${CMAKE_MATCH_1}) > + string(REGEX MATCH "SVT_VERSION_MAJOR \\(([0-9]*)\\)" _ > ${version}) > + set(SVT_VERSION_MAJOR ${CMAKE_MATCH_1}) > > -string(REGEX MATCH "SVT_VERSION_MINOR ([0-9]*)" _ ${version}) > -set(SVT_VERSION_MINOR ${CMAKE_MATCH_1}) > + string(REGEX MATCH "SVT_VERSION_MINOR \\(([0-9]*)\\)" _ > ${version}) > + set(SVT_VERSION_MINOR ${CMAKE_MATCH_1}) > > -string(REGEX MATCH "SVT_VERSION_PATCHLEVEL ([0-9]*)" _ ${version}) > -set(SVT_VERSION_PATCHLEVEL ${CMAKE_MATCH_1}) > + string(REGEX MATCH "SVT_VERSION_PATCHLEVEL \\(([0-9]*)\\)" _ > ${version}) > + set(SVT_VERSION_PATCHLEVEL ${CMAKE_MATCH_1}) > > -if(NOT ${SVT_VERSION_MAJOR} EQUAL "1" OR NOT ${SVT_VERSION_MINOR} EQUAL > "3" OR NOT ${SVT_VERSION_PATCHLEVEL} EQUAL "0") > - message (SEND_ERROR "-- Found SVT-HEVC Lib Version: > ${SVT_VERSION_MAJOR}.${SVT_VERSION_MINOR}.${SVT_VERSION_PATCHLEVEL} which > doesn't match the required version: > ${SVT_VERSION_MAJOR_REQUIRED}.${SVT_VERSION_MINOR_REQUIRED}.${SVT_VERSION_PATCHLEVEL_REQUIRED}; > Aborting configure ") > -else() > - message(STATUS "-- Found SVT-HEVC Lib Version: > ${SVT_VERSION_MAJOR}.${SVT_VERSION_MINOR}.${SVT_VERSION_PATCHLEVEL}") > -endif() > - > + if(NOT ${SVT_VERSION_MAJOR} EQUAL "1" OR NOT ${SVT_VERSION_MINOR} > EQUAL "4" OR NOT ${SVT_VERSION_PATCHLEVEL} EQUAL "1") > + message (SEND_ERROR "-- Found SVT-HEVC Lib Version: > ${SVT_VERSION_MAJOR}.${SVT_VERSION_MINOR}.${SVT_VERSION_PATCHLEVEL} which > doesn't match the required version: > ${SVT_VERSION_MAJOR_REQUIRED}.${SVT_VERSION_MINOR_REQUIRED}.${SVT_VERSION_PATCHLEVEL_REQUIRED}; > Aborting configure ") > + else() > + message(STATUS "-- Found SVT-HEVC Lib Version: > ${SVT_VERSION_MAJOR}.${SVT_VERSION_MINOR}.${SVT_VERSION_PATCHLEVEL}") > + endif() > + else() > + message (SEND_ERROR "-- Required version of SVT-HEVC Lib: > ${SVT_VERSION_MAJOR_REQUIRED}.${SVT_VERSION_MINOR_REQUIRED}.${SVT_VERSION_PATCHLEVEL_REQUIRED}; > Aborting configure ") > + endif() > endif() > > find_library(SVT_HEVC_LIBRARY > diff -r 2e84224f404a -r e65e139861f7 source/common/param.cpp > --- a/source/common/param.cpp Mon Jan 06 09:38:05 2020 +0530 > +++ b/source/common/param.cpp Wed Dec 11 16:11:24 2019 +0530 > @@ -613,7 +613,7 @@ > } > > #ifdef SVT_HEVC > - if (svt_set_preset_tune(param, preset, tune)) > + if (svt_set_preset(param, preset)) > return -1; > #endif > > @@ -2553,8 +2553,8 @@ > svtHevcParam->latencyMode = 0; > > //Preset & Tune > - svtHevcParam->encMode = 9; > - svtHevcParam->tune = 0; > + svtHevcParam->encMode = 7; > + svtHevcParam->tune = 1; > > // Interlaced Video > svtHevcParam->interlacedVideo = 0; > @@ -2594,10 +2594,10 @@ > svtHevcParam->targetBitRate = 7000000; > svtHevcParam->maxQpAllowed = 48; > svtHevcParam->minQpAllowed = 10; > - svtHevcParam->bitRateReduction = 1; > + svtHevcParam->bitRateReduction = 0; > > // Thresholds > - svtHevcParam->improveSharpness = 1; > + svtHevcParam->improveSharpness = 0; > svtHevcParam->videoUsabilityInfo = 0; > svtHevcParam->highDynamicRangeInput = 0; > svtHevcParam->accessUnitDelimiter = 0; > @@ -2607,7 +2607,7 @@ > svtHevcParam->unregisteredUserDataSeiFlag = 0; > svtHevcParam->recoveryPointSeiFlag = 0; > svtHevcParam->enableTemporalId = 1; > - svtHevcParam->profile = 2; > + svtHevcParam->profile = 1; > svtHevcParam->tier = 0; > svtHevcParam->level = 0; > > @@ -2638,34 +2638,31 @@ > svtHevcParam->tileRowCount = 1; > svtHevcParam->tileSliceMode = 0; > svtHevcParam->unrestrictedMotionVector = 1; > + svtHevcParam->threadCount = 0; > + > + // vbv > + svtHevcParam->hrdFlag = 0; > + svtHevcParam->vbvMaxrate = 0; > + svtHevcParam->vbvBufsize = 0; > + svtHevcParam->vbvBufInit = 90; > } > > -int svt_set_preset_tune(x265_param* param, const char* preset, const > char* tune) > +int svt_set_preset(x265_param* param, const char* preset) > { > EB_H265_ENC_CONFIGURATION* svtHevcParam = > (EB_H265_ENC_CONFIGURATION*)param->svtHevcParam; > > if (preset) > { > - if (!strcmp(preset, "ultrafast")) svtHevcParam->encMode = 12; > - else if (!strcmp(preset, "superfast")) svtHevcParam->encMode = 11; > - else if (!strcmp(preset, "veryfast")) svtHevcParam->encMode = 10; > - else if (!strcmp(preset, "faster")) svtHevcParam->encMode = 9; > - else if (!strcmp(preset, "fast")) svtHevcParam->encMode = 8; > - else if (!strcmp(preset, "medium")) svtHevcParam->encMode = 7; > - else if (!strcmp(preset, "slow")) svtHevcParam->encMode = 6; > - else if (!strcmp(preset, "slower")) svtHevcParam->encMode = 5; > - else if (!strcmp(preset, "veryslow")) svtHevcParam->encMode = 4; > - else if (!strcmp(preset, "placebo")) svtHevcParam->encMode = 3; > - else return -1; > - } > - if (tune) > - { > - if (!strcmp(tune, "psnr")) svtHevcParam->tune = 1; > - else if (!strcmp(tune, "ssim")) svtHevcParam->tune = 1; > - else if (!strcmp(tune, "grain")) svtHevcParam->tune = 0; > - else if (!strcmp(tune, "animation")) svtHevcParam->tune = 0; > - else if (!strcmp(tune, "vmaf")) svtHevcParam->tune = 2; > - else if (!strcmp(tune, "zero-latency") || !strcmp(tune, > "zerolatency")) svtHevcParam->latencyMode = 1; > + if (!strcmp(preset, "ultrafast")) svtHevcParam->encMode = 11; > + else if (!strcmp(preset, "superfast")) svtHevcParam->encMode = 10; > + else if (!strcmp(preset, "veryfast")) svtHevcParam->encMode = 9; > + else if (!strcmp(preset, "faster")) svtHevcParam->encMode = 8; > + else if (!strcmp(preset, "fast")) svtHevcParam->encMode = 7; > + else if (!strcmp(preset, "medium")) svtHevcParam->encMode = 6; > + else if (!strcmp(preset, "slow")) svtHevcParam->encMode = 5; > + else if (!strcmp(preset, "slower")) svtHevcParam->encMode =4; > + else if (!strcmp(preset, "veryslow")) svtHevcParam->encMode = 3; > + else if (!strcmp(preset, "placebo")) svtHevcParam->encMode = 2; > else return -1; > } > return 0; > @@ -2820,11 +2817,10 @@ > OPT("svt-speed-control") svtHevcParam->speedControlFlag = > x265_atobool(value, bError); > OPT("svt-preset-tuner") > { > - if (svtHevcParam->encMode == 3) > + if (svtHevcParam->encMode == 2) > { > if (!strcmp(value, "0")) svtHevcParam->encMode = 0; > else if (!strcmp(value, "1")) svtHevcParam->encMode = 1; > - else if (!strcmp(value, "2")) svtHevcParam->encMode = 2; > else > { > x265_log(param, X265_LOG_ERROR, " Unsupported value=%s > for svt-preset-tuner \n", value); > @@ -2850,6 +2846,16 @@ > else > bError = true; > } > + OPT("hrd") > + svtHevcParam->hrdFlag = (uint32_t)x265_atobool(value, bError); > + OPT("vbv-maxrate") > + svtHevcParam->vbvMaxrate = (uint32_t)x265_atoi(value, bError); > + OPT("vbv-bufsize") > + svtHevcParam->vbvBufsize = (uint32_t)x265_atoi(value, bError); > + OPT("vbv-init") > + svtHevcParam->vbvBufInit = (uint64_t)x265_atof(value, bError); > + OPT("frame-threads") > + svtHevcParam->threadCount = (uint32_t)x265_atoi(value, bError); > else > x265_log(param, X265_LOG_INFO, "SVT doesn't support %s param; > Disabling it \n", name); > > diff -r 2e84224f404a -r e65e139861f7 source/encoder/svt.h > --- a/source/encoder/svt.h Mon Jan 06 09:38:05 2020 +0530 > +++ b/source/encoder/svt.h Wed Dec 11 16:11:24 2019 +0530 > @@ -29,7 +29,6 @@ > > #include "EbApi.h" > #include "EbErrorCodes.h" > -#include "EbTime.h" > > namespace X265_NS { > > @@ -41,7 +40,7 @@ > #define EB_OUTPUTSTREAMBUFFERSIZE_MACRO(ResolutionSize) > ((ResolutionSize) < (INPUT_SIZE_1080i_TH) ? 0x1E8480 : (ResolutionSize) < > (INPUT_SIZE_1080p_TH) ? 0x2DC6C0 : (ResolutionSize) < (INPUT_SIZE_4K_TH) ? > 0x2DC6C0 : 0x2DC6C0) > > void svt_param_default(x265_param* param); > -int svt_set_preset_tune(x265_param* param, const char* preset, const > char* tune); > +int svt_set_preset(x265_param* param, const char* preset); > int svt_param_parse(x265_param* param, const char* name, const char* > value); > void svt_initialise_app_context(x265_encoder *enc); > int svt_initialise_input_buffer(x265_encoder *enc); > @@ -49,4 +48,4 @@ > > #endif // ifdef SVT_HEVC > > -#endif // ifndef SVT_H > \ No newline at end of file > +#endif // ifndef SVT_H > > -- > *Thanks and Regards,* > *Snehaa.G* > _______________________________________________ > x265-devel mailing list > x265-devel@videolan.org > https://mailman.videolan.org/listinfo/x265-devel > -- Regards, *Aruna Matheswaran,* Video Codec Engineer, Media & AI analytics BU,
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel