From ed956793f615d09faf69f6811b50e09e0e77a0e4 Mon Sep 17 00:00:00 2001 From: rigaya Date: Sat, 8 Jun 2024 21:23:20 +0900 Subject: [PATCH] =?UTF-8?q?NVEnc.auo=E3=81=ABfft3d=E3=81=AE=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E7=94=BB=E9=9D=A2=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NVEnc/NVEnc.en.lng | 12 ++ NVEnc/NVEnc.ja.lng | 12 ++ NVEnc/NVEnc.zh.lng | 38 ++++-- NVEnc/NVEnc_readme.txt | 3 + NVEnc/frm/auo_mes.cpp | 12 ++ NVEnc/frm/auo_mes.h | 12 ++ NVEnc/frm/frmConfig.cpp | 32 +++++ NVEnc/frm/frmConfig.h | 247 ++++++++++++++++++++++++++++++----- NVEnc/frm/frmConfig_helper.h | 6 + NVEncC_Options.en.md | 34 +++++ NVEncC_Options.ja.md | 34 +++++ NVEncCore/rgy_prm.h | 1 + NVEncCore/rgy_version.h | 6 +- 13 files changed, 398 insertions(+), 51 deletions(-) diff --git a/NVEnc/NVEnc.en.lng b/NVEnc/NVEnc.en.lng index 11dcd71e..51bd0feb 100644 --- a/NVEnc/NVEnc.en.lng +++ b/NVEnc/NVEnc.en.lng @@ -537,6 +537,12 @@ AuofcgLBVppDenoiseSmoothQuality=Quality AuofcgLBVppDenoiseDctStep=step AuofcgLBVppDenoiseDctSigma=sigma AuofcgLBVppDenoiseDctBlockSize=block size +AuofcgLBVppDenoiseFFT3DSigma=sigma +AuofcgLBVppDenoiseFFT3DAmount=amount +AuofcgLBVppDenoiseFFT3DBlockSize=block size +AuofcgLBVppDenoiseFFT3DOverlap=overlap +AuofcgLBVppDenoiseFFT3DTemporal=temporal +AuofcgLBVppDenoiseFFT3DPrecision=precision AuofcgLBVppDenoiseKnnThreshold=Threshold AuofcgLBVppDenoiseKnnStrength=Strength AuofcgLBVppDenoiseKnnRadius=Radius @@ -801,6 +807,12 @@ AuofrmTTfcgNUVppDenoiseSmoothQP=Strength of the filter.\nLarger value will resul AuofrmTTfcgCXVppDenoiseDctStep=Quality of the filter.\nSmaller value should result in higher quality but with lower speed. AuofrmTTfcgNUVppDenoiseDctSigma=Strength of the filter.\nLarger value will result stronger denoise but with blurring. AuofrmTTfcgCXVppDenoiseDctBlockSize=Block size. +AuofrmTTfcgNUVppDenoiseFFT3DSigma=Strength of filter. +AuofrmTTfcgNUVppDenoiseFFT3DAmount=Amount of denoising. +AuofrmTTfcgCXVppDenoiseFFT3DBlockSize=Block size of FFT calculation. +AuofrmTTfcgNUVppDenoiseFFT3DOverlap=Overlap size of FFT calculation.\nValue 0.5 or larger recommended to avoid artifacts. +AuofrmTTfcgCXVppDenoiseFFT3DTemporal=Select temporal filtering. +AuofrmTTfcgCXVppDenoiseFFT3DPrecision=Select precision.\n\n- auto\nUse fp16 whenever it is available and will be faster, otherwise use fp32.\n\n- fp16\nForce to use fp16.\n\n- fp32\nForce to use fp32. AuofrmTTfcgNUVppDenoiseKnnRadius=Radius of filter.\nValue bigger will result stronger effect, AuofrmTTfcgNUVppDenoiseKnnStrength=Strength of the filter. AuofrmTTfcgNUVppDenoiseKnnThreshold=Threshold of edge detection. diff --git a/NVEnc/NVEnc.ja.lng b/NVEnc/NVEnc.ja.lng index 8118a7ac..9e51188c 100644 --- a/NVEnc/NVEnc.ja.lng +++ b/NVEnc/NVEnc.ja.lng @@ -535,6 +535,12 @@ AuofcgLBVppDenoiseSmoothQuality=品質 AuofcgLBVppDenoiseDctStep=ステップ AuofcgLBVppDenoiseDctSigma=sigma AuofcgLBVppDenoiseDctBlockSize=ブロックサイズ +AuofcgLBVppDenoiseFFT3DSigma=強度 +AuofcgLBVppDenoiseFFT3DAmount=除去量 +AuofcgLBVppDenoiseFFT3DBlockSize=ブロックサイズ +AuofcgLBVppDenoiseFFT3DOverlap=オーバーラップ +AuofcgLBVppDenoiseFFT3DTemporal=時間方向 +AuofcgLBVppDenoiseFFT3DPrecision=精度 AuofcgLBVppDenoiseKnnThreshold=閾値 AuofcgLBVppDenoiseKnnStrength=強さ AuofcgLBVppDenoiseKnnRadius=半径 @@ -799,6 +805,12 @@ AuofrmTTfcgNUVppDenoiseSmoothQP=フィルタの強さ指定。\n値が大きい AuofrmTTfcgCXVppDenoiseDctStep=処理の品質。\n値が小さいほど高精度だが遅くなります。 AuofrmTTfcgNUVppDenoiseDctSigma=フィルタの強さ指定。\n値が大きいほど強さが増すものの、輪郭がぼける等の副作用も強くなります。 AuofrmTTfcgCXVppDenoiseDctBlockSize=ブロックサイズの指定。 +AuofrmTTfcgNUVppDenoiseFFT3DSigma=フィルタ強度。 +AuofrmTTfcgNUVppDenoiseFFT3DAmount=ノイズ除去量。 +AuofrmTTfcgCXVppDenoiseFFT3DBlockSize=FFTの計算ブロックサイズ。 +AuofrmTTfcgNUVppDenoiseFFT3DOverlap=FFTブロック同士のオーバーラップサイズ。\nアーティファクト発生を防ぐため、0.5以上が推奨。 +AuofrmTTfcgCXVppDenoiseFFT3DTemporal=時間方向のフィルタリングの有無の選択。 +AuofrmTTfcgCXVppDenoiseFFT3DPrecision=演算精度の選択。\n\n- auto\n自動的にfp16/fp32を選択する。\n\n- fp32\n単精度浮動小数点をメインに使って計算する。\n\n- fp16\n半精度浮動小数点をメインに使って計算する。 AuofrmTTfcgNUVppDenoiseKnnRadius=適用半径。\n値が大きいほど効果が強くなる一方、処理が重くなります。 AuofrmTTfcgNUVppDenoiseKnnStrength=フィルタの強さ。\n値が大きいほど効果が強くなります。 AuofrmTTfcgNUVppDenoiseKnnThreshold=エッジ検出の閾値。 diff --git a/NVEnc/NVEnc.zh.lng b/NVEnc/NVEnc.zh.lng index 65cde6d7..d2f15171 100644 --- a/NVEnc/NVEnc.zh.lng +++ b/NVEnc/NVEnc.zh.lng @@ -535,13 +535,19 @@ AuofcgLBVppDenoiseSmoothQuality=质量 AuofcgLBVppDenoiseDctStep=步骤 AuofcgLBVppDenoiseDctSigma=sigma AuofcgLBVppDenoiseDctBlockSize=块大小 +AuofcgLBVppDenoiseFFT3DSigma=强度 +AuofcgLBVppDenoiseFFT3DAmount=清除量 +AuofcgLBVppDenoiseFFT3DBlockSize=块大小 +AuofcgLBVppDenoiseFFT3DOverlap=复 +AuofcgLBVppDenoiseFFT3DTemporal=时空隧道 +AuofcgLBVppDenoiseFFT3DPrecision=精确度 AuofcgLBVppDenoiseKnnThreshold=阈值 AuofcgLBVppDenoiseKnnStrength=强度 -AuofcgLBVppDenoiseKnnRadius=半径 -AuofcgLBVppDenoiseNLMeansPatch=パッチサイズ -AuofcgLBVppDenoiseNLMeansSearch=探索範囲 -AuofcgLBVppDenoiseNLMeansSigma=分散(σ) -AuofcgLBVppDenoiseNLMeansH=強度(h) +AuofcgLBVppDenoiseKnnRadius=半长轴 +AuofcgLBVppDenoiseNLMeansPatch=补丁尺寸 +AuofcgLBVppDenoiseNLMeansSearch=搜索区 +AuofcgLBVppDenoiseNLMeansSigma=分权(σ) +AuofcgLBVppDenoiseNLMeansH=强度(h) AuofcgLBVppDenoisePmdThreshold=阈值 AuofcgLBVppDenoisePmdStrength=强度 AuofcgLBVppDenoisePmdApplyCount=次数 @@ -799,13 +805,19 @@ AuofrmTTfcgNUVppDenoiseSmoothQP=制定滤波器强度。\n该值越大,效果 AuofrmTTfcgCXVppDenoiseDctStep=处理质量。\n该值越小,精度越高,但速度相对缓慢。 AuofrmTTfcgNUVppDenoiseDctSigma=制定滤波器强度。\n该值越大,效果越强,但边缘模糊等副作用也相对增强。 AuofrmTTfcgCXVppDenoiseDctBlockSize=区块大小。 +AuofrmTTfcgNUVppDenoiseFFT3DSigma=过滤强度。 +AuofrmTTfcgNUVppDenoiseFFT3DAmount=噪声抑制。 +AuofrmTTfcgCXVppDenoiseFFT3DBlockSize=FFT 的计算块大小。 +AuofrmTTfcgNUVppDenoiseFFT3DOverlap=FFT 块之间的重叠大小。 \n建议使用 0.5 或更大,以防止产生Јn 伪影。 +AuofrmTTfcgCXVppDenoiseFFT3DTemporal=在时间方向上选择有/无滤波。 +AuofrmTTfcgCXVppDenoiseFFT3DPrecision=选择运算精度。\n\n- auto\n自动选择fp16/fp32。\n\n- fp16\n主要使用半精度浮点进行计算。某些环境下,速度很快。\n\n- fp32\n使用单精度浮点计算。 AuofrmTTfcgNUVppDenoiseKnnRadius=应用半径。\n该值越大,效果越强,但运算量也相对提升。 AuofrmTTfcgNUVppDenoiseKnnStrength=滤波器强度。\n该值越大,效果越强。 AuofrmTTfcgNUVppDenoiseKnnThreshold=边缘检测阈值。 -AuofrmTTfcgCXVppDenoiseNLMeansPatch=フィルタのパッチサイズ。 -AuofrmTTfcgCXVppDenoiseNLMeansSearch=フィルタの探索範囲。 -AuofrmTTfcgNUVppDenoiseNLMeansSigma=ノイズの分散。 より大きな値にするとより強くノイズ除去を行います。 -AuofrmTTfcgNUVppDenoiseNLMeansH=パラメータ。 値を大きくすると重みがより均一になります(ノイズ除去が強くなります)。 +AuofrmTTfcgCXVppDenoiseNLMeansPatch=滤波片尺寸。 +AuofrmTTfcgCXVppDenoiseNLMeansSearch=筛选搜索范围。 +AuofrmTTfcgNUVppDenoiseNLMeansSigma=噪音分散。\n数值越大,噪声抑制越强。 +AuofrmTTfcgNUVppDenoiseNLMeansH=参数。\n增加该值会使权重更加均匀\n(噪声抑制能力更强)。 AuofrmTTfcgCXVppDetailEnhance=选择边缘增强滤波器。 AuofrmTTfcgNUVppWarpsharpBlur=执行模糊处理的次数。\n该值越大,滤波器强度越弱。 AuofrmTTfcgNUVppWarpsharpThreshold=边缘检测阈值。\n该值越大,滤波器强度越强。 @@ -852,10 +864,10 @@ AuofrmTTfcgCBVppAfsDrop=稀疏化由场移位引起的显示时间短于一帧 AuofrmTTfcgCBVppAfsSmooth=启用平滑化。 AuofrmTTfcgCBVppAfsTune=用于确认条纹和运动判定结果。 AuofrmTTfcgCXVppYadifMode=- normal: 在不改变帧率的情况下去隔行。\n- bob: 60fps化。 -AuofrmTTfcgCBVppDecombFull=deinterlace all frames. -AuofrmTTfcgCBVppDecombBlend=blend rather than interpolate. -AuofrmTTfcgNUVppDecombThreshold=threshold for combed frame detection. -AuofrmTTfcgNUVppDecombDthreshold=threshold for deinterlacing frames detected as combed. +AuofrmTTfcgCBVppDecombFull=对所有帧进行去隔行扫描。 +AuofrmTTfcgCBVppDecombBlend=混合,而不是插值。 +AuofrmTTfcgNUVppDecombThreshold=梳理帧检测阈值。 +AuofrmTTfcgNUVppDecombDthreshold=检测到梳齿的去隔行扫描帧的阈值。 AuofrmTTfcgCXVppNnediNns=神经网络中的神经元数。该值越大,质量越高。 AuofrmTTfcgCXVppNnediNsize=神经网络参考的邻域块大小。 AuofrmTTfcgCXVppNnediQual=设定质量。\n- fast\n用单神经网络输出合成图像。\n\n- slow\n将fast的神经网络输出与其他神经网络输出混合来提高质量。 diff --git a/NVEnc/NVEnc_readme.txt b/NVEnc/NVEnc_readme.txt index fd163928..d2b3177d 100644 --- a/NVEnc/NVEnc_readme.txt +++ b/NVEnc/NVEnc_readme.txt @@ -215,6 +215,9 @@ NVIDIA グラフィックドライバ 551.23 今後の更新で設定ファイルの互換性がなくなるかもしれません。 【メモ】 +2024.06.xx +- 新たなノイズ除去フィルタを追加。(--vpp-fft3d) + 2024.05.28 (7.54) - 新たなインタレ解除フィルタを追加。(--vpp-decomb) - ドライバ555.85で、vbr使用時にビットレートが指定値より小さくなってしまう問題を回避。 diff --git a/NVEnc/frm/auo_mes.cpp b/NVEnc/frm/auo_mes.cpp index f1ea039f..b1276431 100644 --- a/NVEnc/frm/auo_mes.cpp +++ b/NVEnc/frm/auo_mes.cpp @@ -589,6 +589,12 @@ static const char * AUO_MES_ID_NAME_STR[] = { "AuofcgLBVppDenoiseDctStep", "AuofcgLBVppDenoiseDctSigma", "AuofcgLBVppDenoiseDctBlockSize", +"AuofcgLBVppDenoiseFFT3DSigma", +"AuofcgLBVppDenoiseFFT3DAmount", +"AuofcgLBVppDenoiseFFT3DBlockSize", +"AuofcgLBVppDenoiseFFT3DOverlap", +"AuofcgLBVppDenoiseFFT3DTemporal", +"AuofcgLBVppDenoiseFFT3DPrecision", "AuofcgLBVppDenoiseKnnThreshold", "AuofcgLBVppDenoiseKnnStrength", "AuofcgLBVppDenoiseKnnRadius", @@ -849,6 +855,12 @@ static const char * AUO_MES_ID_NAME_STR[] = { "AuofrmTTfcgCXVppDenoiseDctStep", "AuofrmTTfcgNUVppDenoiseDctSigma", "AuofrmTTfcgCXVppDenoiseDctBlockSize", +"AuofrmTTfcgNUVppDenoiseFFT3DSigma", +"AuofrmTTfcgNUVppDenoiseFFT3DAmount", +"AuofrmTTfcgCXVppDenoiseFFT3DBlockSize", +"AuofrmTTfcgNUVppDenoiseFFT3DOverlap", +"AuofrmTTfcgCXVppDenoiseFFT3DTemporal", +"AuofrmTTfcgCXVppDenoiseFFT3DPrecision", "AuofrmTTfcgNUVppDenoiseKnnRadius", "AuofrmTTfcgNUVppDenoiseKnnStrength", "AuofrmTTfcgNUVppDenoiseKnnThreshold", diff --git a/NVEnc/frm/auo_mes.h b/NVEnc/frm/auo_mes.h index 95ed733f..ca1971b9 100644 --- a/NVEnc/frm/auo_mes.h +++ b/NVEnc/frm/auo_mes.h @@ -670,6 +670,12 @@ enum AuoMes { AuofcgLBVppDenoiseDctStep, AuofcgLBVppDenoiseDctSigma, AuofcgLBVppDenoiseDctBlockSize, + AuofcgLBVppDenoiseFFT3DSigma, + AuofcgLBVppDenoiseFFT3DAmount, + AuofcgLBVppDenoiseFFT3DBlockSize, + AuofcgLBVppDenoiseFFT3DOverlap, + AuofcgLBVppDenoiseFFT3DTemporal, + AuofcgLBVppDenoiseFFT3DPrecision, AuofcgLBVppDenoiseKnnThreshold, AuofcgLBVppDenoiseKnnStrength, AuofcgLBVppDenoiseKnnRadius, @@ -942,6 +948,12 @@ enum AuoMes { AuofrmTTfcgCXVppDenoiseDctStep, AuofrmTTfcgNUVppDenoiseDctSigma, AuofrmTTfcgCXVppDenoiseDctBlockSize, + AuofrmTTfcgNUVppDenoiseFFT3DSigma, + AuofrmTTfcgNUVppDenoiseFFT3DAmount, + AuofrmTTfcgCXVppDenoiseFFT3DBlockSize, + AuofrmTTfcgNUVppDenoiseFFT3DOverlap, + AuofrmTTfcgCXVppDenoiseFFT3DTemporal, + AuofrmTTfcgCXVppDenoiseFFT3DPrecision, AuofrmTTfcgNUVppDenoiseKnnRadius, AuofrmTTfcgNUVppDenoiseKnnStrength, AuofrmTTfcgNUVppDenoiseKnnThreshold, diff --git a/NVEnc/frm/frmConfig.cpp b/NVEnc/frm/frmConfig.cpp index 82b8c298..3724c2f9 100644 --- a/NVEnc/frm/frmConfig.cpp +++ b/NVEnc/frm/frmConfig.cpp @@ -861,6 +861,9 @@ System::Void frmConfig::InitComboBox() { setComboBox(fcgCXVppDenoiseDctBlockSize, list_vpp_denoise_dct_block_size); setComboBox(fcgCXVppDenoiseNLMeansPatch, list_vpp_nlmeans_block_size); setComboBox(fcgCXVppDenoiseNLMeansSearch, list_vpp_nlmeans_block_size); + setComboBox(fcgCXVppDenoiseFFT3DBlockSize, list_vpp_fft3d_block_size); + setComboBox(fcgCXVppDenoiseFFT3DTemporal, list_vpp_fft3d_temporal_gui); + setComboBox(fcgCXVppDenoiseFFT3DPrecision, list_vpp_fp_prec); setComboBox(fcgCXVppDenoiseMethod, list_vpp_denoise); setComboBox(fcgCXVppDetailEnhance, list_vpp_detail_enahance); setComboBox(fcgCXVppDebandSample, list_vpp_deband_gui); @@ -998,6 +1001,7 @@ System::Void frmConfig::fcgChangeEnabled(System::Object^ sender, System::EventA fcgPNVppDenoisePmd->Visible = (fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("pmd"))); fcgPNVppDenoiseSmooth->Visible = (fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("smooth"))); fcgPNVppDenoiseDct->Visible = (fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("denoise-dct"))); + fcgPNVppDenoiseFFT3D->Visible = (fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("fft3d"))); fcgPNVppDenoiseConv3D->Visible = (fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("convolution3d"))); fcgPNVppNvvfxDenoise->Visible = (fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("nvvfx-denoise"))); fcgPNVppNvvfxArtifactReduction->Visible = (fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("nvvfx-artifact-reduction"))); @@ -1299,6 +1303,12 @@ System::Void frmConfig::LoadLangText() { LOAD_CLI_TEXT(fcgLBVppDenoiseDctStep); LOAD_CLI_TEXT(fcgLBVppDenoiseDctSigma); LOAD_CLI_TEXT(fcgLBVppDenoiseDctBlockSize); + LOAD_CLI_TEXT(fcgLBVppDenoiseFFT3DSigma); + LOAD_CLI_TEXT(fcgLBVppDenoiseFFT3DAmount); + LOAD_CLI_TEXT(fcgLBVppDenoiseFFT3DBlockSize); + LOAD_CLI_TEXT(fcgLBVppDenoiseFFT3DOverlap); + LOAD_CLI_TEXT(fcgLBVppDenoiseFFT3DTemporal); + LOAD_CLI_TEXT(fcgLBVppDenoiseFFT3DPrecision); LOAD_CLI_TEXT(fcgLBVppDenoiseKnnThreshold); LOAD_CLI_TEXT(fcgLBVppDenoiseKnnStrength); LOAD_CLI_TEXT(fcgLBVppDenoiseKnnRadius); @@ -1519,6 +1529,8 @@ System::Void frmConfig::ConfToFrm(CONF_GUIEX *cnf) { denoise_idx = get_cx_index(list_vpp_denoise, _T("smooth")); } else if (encPrm.vpp.dct.enable) { denoise_idx = get_cx_index(list_vpp_denoise, _T("denoise-dct")); + } else if (encPrm.vpp.fft3d.enable) { + denoise_idx = get_cx_index(list_vpp_denoise, _T("fft3d")); } else if (encPrm.vpp.convolution3d.enable) { denoise_idx = get_cx_index(list_vpp_denoise, _T("convolution3d")); } else if (encPrm.vppnv.nvvfxDenoise.enable) { @@ -1565,6 +1577,12 @@ System::Void frmConfig::ConfToFrm(CONF_GUIEX *cnf) { SetCXIndex(fcgCXVppDenoiseDctStep, get_cx_index(list_vpp_denoise_dct_step_gui, (int)encPrm.vpp.dct.step)); SetNUValue(fcgNUVppDenoiseDctSigma, encPrm.vpp.dct.sigma); SetCXIndex(fcgCXVppDenoiseDctBlockSize, get_cx_index(list_vpp_denoise_dct_block_size, (int)encPrm.vpp.dct.block_size)); + SetNUValue(fcgNUVppDenoiseFFT3DSigma, encPrm.vpp.fft3d.sigma); + SetNUValue(fcgNUVppDenoiseFFT3DAmount, encPrm.vpp.fft3d.amount); + SetCXIndex(fcgCXVppDenoiseFFT3DBlockSize, get_cx_index(list_vpp_fft3d_block_size, (int)encPrm.vpp.fft3d.block_size)); + SetNUValue(fcgNUVppDenoiseFFT3DOverlap, encPrm.vpp.fft3d.overlap); + SetCXIndex(fcgCXVppDenoiseFFT3DTemporal, get_cx_index(list_vpp_fft3d_temporal_gui, (int)encPrm.vpp.fft3d.temporal)); + SetCXIndex(fcgCXVppDenoiseFFT3DPrecision, get_cx_index(list_vpp_fp_prec, (int)encPrm.vpp.fft3d.precision)); SetCXIndex(fcgCXVppDenoiseConv3DMatrix, get_cx_index(list_vpp_convolution3d_matrix, (int)encPrm.vpp.convolution3d.matrix)); SetNUValue(fcgNUVppDenoiseConv3DThreshYSpatial, encPrm.vpp.convolution3d.threshYspatial); SetNUValue(fcgNUVppDenoiseConv3DThreshCSpatial, encPrm.vpp.convolution3d.threshCspatial); @@ -1843,6 +1861,14 @@ System::String^ frmConfig::FrmToConf(CONF_GUIEX *cnf) { encPrm.vpp.dct.sigma = (float)fcgNUVppDenoiseDctSigma->Value; encPrm.vpp.dct.block_size = list_vpp_denoise_dct_block_size[fcgCXVppDenoiseDctBlockSize->SelectedIndex].value; + encPrm.vpp.fft3d.enable = fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("fft3d")); + encPrm.vpp.fft3d.sigma = (float)fcgNUVppDenoiseFFT3DSigma->Value; + encPrm.vpp.fft3d.amount = (float)fcgNUVppDenoiseFFT3DAmount->Value; + encPrm.vpp.fft3d.block_size = list_vpp_fft3d_block_size[fcgCXVppDenoiseFFT3DBlockSize->SelectedIndex].value; + encPrm.vpp.fft3d.overlap = (float)fcgNUVppDenoiseFFT3DOverlap->Value; + encPrm.vpp.fft3d.temporal = list_vpp_fft3d_temporal_gui[fcgCXVppDenoiseFFT3DTemporal->SelectedIndex].value; + encPrm.vpp.fft3d.precision = (VppFpPrecision)list_vpp_fp_prec[fcgCXVppDenoiseFFT3DPrecision->SelectedIndex].value; + encPrm.vpp.convolution3d.enable = fcgCXVppDenoiseMethod->SelectedIndex == get_cx_index(list_vpp_denoise, _T("convolution3d")); encPrm.vpp.convolution3d.matrix = (VppConvolution3dMatrix)list_vpp_convolution3d_matrix[fcgCXVppDenoiseConv3DMatrix->SelectedIndex].value; encPrm.vpp.convolution3d.threshYspatial = (int)fcgNUVppDenoiseConv3DThreshYSpatial->Value; @@ -2245,6 +2271,12 @@ System::Void frmConfig::SetHelpToolTips() { SET_TOOL_TIP_EX(fcgCXVppDenoiseDctStep); SET_TOOL_TIP_EX(fcgNUVppDenoiseDctSigma); SET_TOOL_TIP_EX(fcgCXVppDenoiseDctBlockSize); + SET_TOOL_TIP_EX(fcgNUVppDenoiseFFT3DSigma); + SET_TOOL_TIP_EX(fcgNUVppDenoiseFFT3DAmount); + SET_TOOL_TIP_EX(fcgCXVppDenoiseFFT3DBlockSize); + SET_TOOL_TIP_EX(fcgNUVppDenoiseFFT3DOverlap); + SET_TOOL_TIP_EX(fcgCXVppDenoiseFFT3DTemporal); + SET_TOOL_TIP_EX(fcgCXVppDenoiseFFT3DPrecision); SET_TOOL_TIP_EX(fcgNUVppDenoiseKnnRadius); SET_TOOL_TIP_EX(fcgNUVppDenoiseKnnStrength); SET_TOOL_TIP_EX(fcgNUVppDenoiseKnnThreshold); diff --git a/NVEnc/frm/frmConfig.h b/NVEnc/frm/frmConfig.h index 7d6bee6c..a7c1b3ee 100644 --- a/NVEnc/frm/frmConfig.h +++ b/NVEnc/frm/frmConfig.h @@ -1606,6 +1606,19 @@ private: System::Windows::Forms::Label^ fcgLBVppDecombThreshold; private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; +private: System::Windows::Forms::Panel^ fcgPNVppDenoiseFFT3D; +private: System::Windows::Forms::Label^ fcgLBVppDenoiseFFT3DTemporal; +private: System::Windows::Forms::Label^ fcgLBVppDenoiseFFT3DPrecision; +private: System::Windows::Forms::ComboBox^ fcgCXVppDenoiseFFT3DPrecision; +private: System::Windows::Forms::NumericUpDown^ fcgNUVppDenoiseFFT3DOverlap; +private: System::Windows::Forms::NumericUpDown^ fcgNUVppDenoiseFFT3DAmount; +private: System::Windows::Forms::Label^ fcgLBVppDenoiseFFT3DOverlap; +private: System::Windows::Forms::NumericUpDown^ fcgNUVppDenoiseFFT3DSigma; +private: System::Windows::Forms::ComboBox^ fcgCXVppDenoiseFFT3DTemporal; +private: System::Windows::Forms::Label^ fcgLBVppDenoiseFFT3DAmount; +private: System::Windows::Forms::Label^ fcgLBVppDenoiseFFT3DBlockSize; +private: System::Windows::Forms::ComboBox^ fcgCXVppDenoiseFFT3DBlockSize; +private: System::Windows::Forms::Label^ fcgLBVppDenoiseFFT3DSigma; @@ -2047,9 +2060,6 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; this->fcgNUVppUnsharpWeight = (gcnew System::Windows::Forms::NumericUpDown()); this->fcgNUVppUnsharpRadius = (gcnew System::Windows::Forms::NumericUpDown()); this->fcggroupBoxVppDeinterlace = (gcnew System::Windows::Forms::GroupBox()); - this->fcgLBVppDeinterlace = (gcnew System::Windows::Forms::Label()); - this->fcgCXVppDeinterlace = (gcnew System::Windows::Forms::ComboBox()); - this->fcgPNVppYadif = (gcnew System::Windows::Forms::Panel()); this->fcgPNVppDecomb = (gcnew System::Windows::Forms::Panel()); this->fcgCBVppDecombBlend = (gcnew System::Windows::Forms::CheckBox()); this->fcgCBVppDecombFull = (gcnew System::Windows::Forms::CheckBox()); @@ -2057,6 +2067,9 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; this->fcgNUVppDecombDthreshold = (gcnew System::Windows::Forms::NumericUpDown()); this->fcgLBVppDecombThreshold = (gcnew System::Windows::Forms::Label()); this->fcgNUVppDecombThreshold = (gcnew System::Windows::Forms::NumericUpDown()); + this->fcgLBVppDeinterlace = (gcnew System::Windows::Forms::Label()); + this->fcgCXVppDeinterlace = (gcnew System::Windows::Forms::ComboBox()); + this->fcgPNVppYadif = (gcnew System::Windows::Forms::Panel()); this->fcgLBVppYadifMode = (gcnew System::Windows::Forms::Label()); this->fcgCXVppYadifMode = (gcnew System::Windows::Forms::ComboBox()); this->fcgPNVppNnedi = (gcnew System::Windows::Forms::Panel()); @@ -2127,6 +2140,19 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; this->fcgNUVppDebandThreY = (gcnew System::Windows::Forms::NumericUpDown()); this->fcgNUVppDebandRange = (gcnew System::Windows::Forms::NumericUpDown()); this->fcggroupBoxVppDenoise = (gcnew System::Windows::Forms::GroupBox()); + this->fcgPNVppDenoiseFFT3D = (gcnew System::Windows::Forms::Panel()); + this->fcgLBVppDenoiseFFT3DTemporal = (gcnew System::Windows::Forms::Label()); + this->fcgLBVppDenoiseFFT3DPrecision = (gcnew System::Windows::Forms::Label()); + this->fcgCXVppDenoiseFFT3DPrecision = (gcnew System::Windows::Forms::ComboBox()); + this->fcgNUVppDenoiseFFT3DOverlap = (gcnew System::Windows::Forms::NumericUpDown()); + this->fcgNUVppDenoiseFFT3DAmount = (gcnew System::Windows::Forms::NumericUpDown()); + this->fcgLBVppDenoiseFFT3DOverlap = (gcnew System::Windows::Forms::Label()); + this->fcgNUVppDenoiseFFT3DSigma = (gcnew System::Windows::Forms::NumericUpDown()); + this->fcgCXVppDenoiseFFT3DTemporal = (gcnew System::Windows::Forms::ComboBox()); + this->fcgLBVppDenoiseFFT3DAmount = (gcnew System::Windows::Forms::Label()); + this->fcgLBVppDenoiseFFT3DBlockSize = (gcnew System::Windows::Forms::Label()); + this->fcgCXVppDenoiseFFT3DBlockSize = (gcnew System::Windows::Forms::ComboBox()); + this->fcgLBVppDenoiseFFT3DSigma = (gcnew System::Windows::Forms::Label()); this->fcgPNVppDenoiseNLMeans = (gcnew System::Windows::Forms::Panel()); this->fcgNUVppDenoiseNLMeansH = (gcnew System::Windows::Forms::NumericUpDown()); this->fcgLBVppDenoiseNLMeansH = (gcnew System::Windows::Forms::Label()); @@ -2324,10 +2350,10 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; (cli::safe_cast(this->fcgNUVppUnsharpWeight))->BeginInit(); (cli::safe_cast(this->fcgNUVppUnsharpRadius))->BeginInit(); this->fcggroupBoxVppDeinterlace->SuspendLayout(); - this->fcgPNVppYadif->SuspendLayout(); this->fcgPNVppDecomb->SuspendLayout(); (cli::safe_cast(this->fcgNUVppDecombDthreshold))->BeginInit(); (cli::safe_cast(this->fcgNUVppDecombThreshold))->BeginInit(); + this->fcgPNVppYadif->SuspendLayout(); this->fcgPNVppNnedi->SuspendLayout(); this->fcgPNVppAfs->SuspendLayout(); (cli::safe_cast(this->fcgTBVppAfsThreCMotion))->BeginInit(); @@ -2354,6 +2380,10 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; (cli::safe_cast(this->fcgNUVppDebandThreY))->BeginInit(); (cli::safe_cast(this->fcgNUVppDebandRange))->BeginInit(); this->fcggroupBoxVppDenoise->SuspendLayout(); + this->fcgPNVppDenoiseFFT3D->SuspendLayout(); + (cli::safe_cast(this->fcgNUVppDenoiseFFT3DOverlap))->BeginInit(); + (cli::safe_cast(this->fcgNUVppDenoiseFFT3DAmount))->BeginInit(); + (cli::safe_cast(this->fcgNUVppDenoiseFFT3DSigma))->BeginInit(); this->fcgPNVppDenoiseNLMeans->SuspendLayout(); (cli::safe_cast(this->fcgNUVppDenoiseNLMeansH))->BeginInit(); (cli::safe_cast(this->fcgNUVppDenoiseNLMeansSigma))->BeginInit(); @@ -5298,35 +5328,6 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; this->fcggroupBoxVppDeinterlace->TabStop = false; this->fcggroupBoxVppDeinterlace->Text = L"インタレ解除"; // - // fcgLBVppDeinterlace - // - this->fcgLBVppDeinterlace->AutoSize = true; - this->fcgLBVppDeinterlace->Location = System::Drawing::Point(15, 19); - this->fcgLBVppDeinterlace->Name = L"fcgLBVppDeinterlace"; - this->fcgLBVppDeinterlace->Size = System::Drawing::Size(54, 14); - this->fcgLBVppDeinterlace->TabIndex = 0; - this->fcgLBVppDeinterlace->Text = L"解除モード"; - // - // fcgCXVppDeinterlace - // - this->fcgCXVppDeinterlace->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; - this->fcgCXVppDeinterlace->FormattingEnabled = true; - this->fcgCXVppDeinterlace->Location = System::Drawing::Point(83, 15); - this->fcgCXVppDeinterlace->Name = L"fcgCXVppDeinterlace"; - this->fcgCXVppDeinterlace->Size = System::Drawing::Size(164, 22); - this->fcgCXVppDeinterlace->TabIndex = 1; - this->fcgCXVppDeinterlace->Tag = L"reCmd"; - this->fcgCXVppDeinterlace->SelectedIndexChanged += gcnew System::EventHandler(this, &frmConfig::fcgChangeEnabled); - // - // fcgPNVppYadif - // - this->fcgPNVppYadif->Controls->Add(this->fcgLBVppYadifMode); - this->fcgPNVppYadif->Controls->Add(this->fcgCXVppYadifMode); - this->fcgPNVppYadif->Location = System::Drawing::Point(6, 41); - this->fcgPNVppYadif->Name = L"fcgPNVppYadif"; - this->fcgPNVppYadif->Size = System::Drawing::Size(251, 294); - this->fcgPNVppYadif->TabIndex = 2; - // // fcgPNVppDecomb // this->fcgPNVppDecomb->Controls->Add(this->fcgCBVppDecombBlend); @@ -5400,6 +5401,35 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; this->fcgNUVppDecombThreshold->Tag = L"reCmd"; this->fcgNUVppDecombThreshold->TextAlign = System::Windows::Forms::HorizontalAlignment::Right; // + // fcgLBVppDeinterlace + // + this->fcgLBVppDeinterlace->AutoSize = true; + this->fcgLBVppDeinterlace->Location = System::Drawing::Point(15, 19); + this->fcgLBVppDeinterlace->Name = L"fcgLBVppDeinterlace"; + this->fcgLBVppDeinterlace->Size = System::Drawing::Size(54, 14); + this->fcgLBVppDeinterlace->TabIndex = 0; + this->fcgLBVppDeinterlace->Text = L"解除モード"; + // + // fcgCXVppDeinterlace + // + this->fcgCXVppDeinterlace->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; + this->fcgCXVppDeinterlace->FormattingEnabled = true; + this->fcgCXVppDeinterlace->Location = System::Drawing::Point(83, 15); + this->fcgCXVppDeinterlace->Name = L"fcgCXVppDeinterlace"; + this->fcgCXVppDeinterlace->Size = System::Drawing::Size(164, 22); + this->fcgCXVppDeinterlace->TabIndex = 1; + this->fcgCXVppDeinterlace->Tag = L"reCmd"; + this->fcgCXVppDeinterlace->SelectedIndexChanged += gcnew System::EventHandler(this, &frmConfig::fcgChangeEnabled); + // + // fcgPNVppYadif + // + this->fcgPNVppYadif->Controls->Add(this->fcgLBVppYadifMode); + this->fcgPNVppYadif->Controls->Add(this->fcgCXVppYadifMode); + this->fcgPNVppYadif->Location = System::Drawing::Point(6, 41); + this->fcgPNVppYadif->Name = L"fcgPNVppYadif"; + this->fcgPNVppYadif->Size = System::Drawing::Size(251, 294); + this->fcgPNVppYadif->TabIndex = 2; + // // fcgLBVppYadifMode // this->fcgLBVppYadifMode->AutoSize = true; @@ -6145,6 +6175,7 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; // // fcggroupBoxVppDenoise // + this->fcggroupBoxVppDenoise->Controls->Add(this->fcgPNVppDenoiseFFT3D); this->fcggroupBoxVppDenoise->Controls->Add(this->fcgPNVppDenoiseNLMeans); this->fcggroupBoxVppDenoise->Controls->Add(this->fcgPNVppDenoiseDct); this->fcggroupBoxVppDenoise->Controls->Add(this->fcgPNVppNvvfxArtifactReduction); @@ -6161,6 +6192,147 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; this->fcggroupBoxVppDenoise->TabStop = false; this->fcggroupBoxVppDenoise->Text = L"ノイズ除去"; // + // fcgPNVppDenoiseFFT3D + // + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgLBVppDenoiseFFT3DTemporal); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgLBVppDenoiseFFT3DPrecision); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgCXVppDenoiseFFT3DPrecision); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgNUVppDenoiseFFT3DOverlap); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgNUVppDenoiseFFT3DAmount); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgLBVppDenoiseFFT3DOverlap); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgNUVppDenoiseFFT3DSigma); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgCXVppDenoiseFFT3DTemporal); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgLBVppDenoiseFFT3DAmount); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgLBVppDenoiseFFT3DBlockSize); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgCXVppDenoiseFFT3DBlockSize); + this->fcgPNVppDenoiseFFT3D->Controls->Add(this->fcgLBVppDenoiseFFT3DSigma); + this->fcgPNVppDenoiseFFT3D->Location = System::Drawing::Point(3, 42); + this->fcgPNVppDenoiseFFT3D->Name = L"fcgPNVppDenoiseFFT3D"; + this->fcgPNVppDenoiseFFT3D->Size = System::Drawing::Size(310, 92); + this->fcgPNVppDenoiseFFT3D->TabIndex = 73; + // + // fcgLBVppDenoiseFFT3DTemporal + // + this->fcgLBVppDenoiseFFT3DTemporal->AutoSize = true; + this->fcgLBVppDenoiseFFT3DTemporal->Location = System::Drawing::Point(7, 68); + this->fcgLBVppDenoiseFFT3DTemporal->Name = L"fcgLBVppDenoiseFFT3DTemporal"; + this->fcgLBVppDenoiseFFT3DTemporal->Size = System::Drawing::Size(56, 14); + this->fcgLBVppDenoiseFFT3DTemporal->TabIndex = 27; + this->fcgLBVppDenoiseFFT3DTemporal->Text = L"temporal"; + // + // fcgLBVppDenoiseFFT3DPrecision + // + this->fcgLBVppDenoiseFFT3DPrecision->AutoSize = true; + this->fcgLBVppDenoiseFFT3DPrecision->Location = System::Drawing::Point(168, 68); + this->fcgLBVppDenoiseFFT3DPrecision->Name = L"fcgLBVppDenoiseFFT3DPrecision"; + this->fcgLBVppDenoiseFFT3DPrecision->Size = System::Drawing::Size(31, 14); + this->fcgLBVppDenoiseFFT3DPrecision->TabIndex = 26; + this->fcgLBVppDenoiseFFT3DPrecision->Text = L"prec"; + // + // fcgCXVppDenoiseFFT3DPrecision + // + this->fcgCXVppDenoiseFFT3DPrecision->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; + this->fcgCXVppDenoiseFFT3DPrecision->FormattingEnabled = true; + this->fcgCXVppDenoiseFFT3DPrecision->Location = System::Drawing::Point(232, 64); + this->fcgCXVppDenoiseFFT3DPrecision->Name = L"fcgCXVppDenoiseFFT3DPrecision"; + this->fcgCXVppDenoiseFFT3DPrecision->Size = System::Drawing::Size(72, 22); + this->fcgCXVppDenoiseFFT3DPrecision->TabIndex = 25; + this->fcgCXVppDenoiseFFT3DPrecision->Tag = L"reCmd"; + // + // fcgNUVppDenoiseFFT3DOverlap + // + this->fcgNUVppDenoiseFFT3DOverlap->DecimalPlaces = 2; + this->fcgNUVppDenoiseFFT3DOverlap->Increment = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 65536 }); + this->fcgNUVppDenoiseFFT3DOverlap->Location = System::Drawing::Point(232, 37); + this->fcgNUVppDenoiseFFT3DOverlap->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 8, 0, 0, 65536 }); + this->fcgNUVppDenoiseFFT3DOverlap->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 2, 0, 0, 65536 }); + this->fcgNUVppDenoiseFFT3DOverlap->Name = L"fcgNUVppDenoiseFFT3DOverlap"; + this->fcgNUVppDenoiseFFT3DOverlap->Size = System::Drawing::Size(72, 21); + this->fcgNUVppDenoiseFFT3DOverlap->TabIndex = 24; + this->fcgNUVppDenoiseFFT3DOverlap->Tag = L"reCmd"; + this->fcgNUVppDenoiseFFT3DOverlap->TextAlign = System::Windows::Forms::HorizontalAlignment::Right; + this->fcgNUVppDenoiseFFT3DOverlap->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 5, 0, 0, 65536 }); + // + // fcgNUVppDenoiseFFT3DAmount + // + this->fcgNUVppDenoiseFFT3DAmount->DecimalPlaces = 3; + this->fcgNUVppDenoiseFFT3DAmount->Location = System::Drawing::Point(232, 10); + this->fcgNUVppDenoiseFFT3DAmount->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 }); + this->fcgNUVppDenoiseFFT3DAmount->Name = L"fcgNUVppDenoiseFFT3DAmount"; + this->fcgNUVppDenoiseFFT3DAmount->Size = System::Drawing::Size(72, 21); + this->fcgNUVppDenoiseFFT3DAmount->TabIndex = 23; + this->fcgNUVppDenoiseFFT3DAmount->Tag = L"reCmd"; + this->fcgNUVppDenoiseFFT3DAmount->TextAlign = System::Windows::Forms::HorizontalAlignment::Right; + this->fcgNUVppDenoiseFFT3DAmount->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 196608 }); + // + // fcgLBVppDenoiseFFT3DOverlap + // + this->fcgLBVppDenoiseFFT3DOverlap->AutoSize = true; + this->fcgLBVppDenoiseFFT3DOverlap->Location = System::Drawing::Point(168, 40); + this->fcgLBVppDenoiseFFT3DOverlap->Name = L"fcgLBVppDenoiseFFT3DOverlap"; + this->fcgLBVppDenoiseFFT3DOverlap->Size = System::Drawing::Size(47, 14); + this->fcgLBVppDenoiseFFT3DOverlap->TabIndex = 22; + this->fcgLBVppDenoiseFFT3DOverlap->Text = L"overlap"; + // + // fcgNUVppDenoiseFFT3DSigma + // + this->fcgNUVppDenoiseFFT3DSigma->DecimalPlaces = 2; + this->fcgNUVppDenoiseFFT3DSigma->Increment = System::Decimal(gcnew cli::array< System::Int32 >(4) { 5, 0, 0, 65536 }); + this->fcgNUVppDenoiseFFT3DSigma->Location = System::Drawing::Point(74, 10); + this->fcgNUVppDenoiseFFT3DSigma->Name = L"fcgNUVppDenoiseFFT3DSigma"; + this->fcgNUVppDenoiseFFT3DSigma->Size = System::Drawing::Size(72, 21); + this->fcgNUVppDenoiseFFT3DSigma->TabIndex = 21; + this->fcgNUVppDenoiseFFT3DSigma->Tag = L"reCmd"; + this->fcgNUVppDenoiseFFT3DSigma->TextAlign = System::Windows::Forms::HorizontalAlignment::Right; + this->fcgNUVppDenoiseFFT3DSigma->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 }); + // + // fcgCXVppDenoiseFFT3DTemporal + // + this->fcgCXVppDenoiseFFT3DTemporal->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; + this->fcgCXVppDenoiseFFT3DTemporal->FormattingEnabled = true; + this->fcgCXVppDenoiseFFT3DTemporal->Location = System::Drawing::Point(74, 64); + this->fcgCXVppDenoiseFFT3DTemporal->Name = L"fcgCXVppDenoiseFFT3DTemporal"; + this->fcgCXVppDenoiseFFT3DTemporal->Size = System::Drawing::Size(72, 22); + this->fcgCXVppDenoiseFFT3DTemporal->TabIndex = 20; + this->fcgCXVppDenoiseFFT3DTemporal->Tag = L"reCmd"; + // + // fcgLBVppDenoiseFFT3DAmount + // + this->fcgLBVppDenoiseFFT3DAmount->AutoSize = true; + this->fcgLBVppDenoiseFFT3DAmount->Location = System::Drawing::Point(168, 13); + this->fcgLBVppDenoiseFFT3DAmount->Name = L"fcgLBVppDenoiseFFT3DAmount"; + this->fcgLBVppDenoiseFFT3DAmount->Size = System::Drawing::Size(49, 14); + this->fcgLBVppDenoiseFFT3DAmount->TabIndex = 19; + this->fcgLBVppDenoiseFFT3DAmount->Text = L"amount"; + // + // fcgLBVppDenoiseFFT3DBlockSize + // + this->fcgLBVppDenoiseFFT3DBlockSize->AutoSize = true; + this->fcgLBVppDenoiseFFT3DBlockSize->Location = System::Drawing::Point(7, 40); + this->fcgLBVppDenoiseFFT3DBlockSize->Name = L"fcgLBVppDenoiseFFT3DBlockSize"; + this->fcgLBVppDenoiseFFT3DBlockSize->Size = System::Drawing::Size(36, 14); + this->fcgLBVppDenoiseFFT3DBlockSize->TabIndex = 17; + this->fcgLBVppDenoiseFFT3DBlockSize->Text = L"block"; + // + // fcgCXVppDenoiseFFT3DBlockSize + // + this->fcgCXVppDenoiseFFT3DBlockSize->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; + this->fcgCXVppDenoiseFFT3DBlockSize->FormattingEnabled = true; + this->fcgCXVppDenoiseFFT3DBlockSize->Location = System::Drawing::Point(74, 37); + this->fcgCXVppDenoiseFFT3DBlockSize->Name = L"fcgCXVppDenoiseFFT3DBlockSize"; + this->fcgCXVppDenoiseFFT3DBlockSize->Size = System::Drawing::Size(72, 22); + this->fcgCXVppDenoiseFFT3DBlockSize->TabIndex = 16; + this->fcgCXVppDenoiseFFT3DBlockSize->Tag = L"reCmd"; + // + // fcgLBVppDenoiseFFT3DSigma + // + this->fcgLBVppDenoiseFFT3DSigma->AutoSize = true; + this->fcgLBVppDenoiseFFT3DSigma->Location = System::Drawing::Point(7, 13); + this->fcgLBVppDenoiseFFT3DSigma->Name = L"fcgLBVppDenoiseFFT3DSigma"; + this->fcgLBVppDenoiseFFT3DSigma->Size = System::Drawing::Size(39, 14); + this->fcgLBVppDenoiseFFT3DSigma->TabIndex = 2; + this->fcgLBVppDenoiseFFT3DSigma->Text = L"sigma"; + // // fcgPNVppDenoiseNLMeans // this->fcgPNVppDenoiseNLMeans->Controls->Add(this->fcgNUVppDenoiseNLMeansH); @@ -7589,12 +7761,12 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; (cli::safe_cast(this->fcgNUVppUnsharpRadius))->EndInit(); this->fcggroupBoxVppDeinterlace->ResumeLayout(false); this->fcggroupBoxVppDeinterlace->PerformLayout(); - this->fcgPNVppYadif->ResumeLayout(false); - this->fcgPNVppYadif->PerformLayout(); this->fcgPNVppDecomb->ResumeLayout(false); this->fcgPNVppDecomb->PerformLayout(); (cli::safe_cast(this->fcgNUVppDecombDthreshold))->EndInit(); (cli::safe_cast(this->fcgNUVppDecombThreshold))->EndInit(); + this->fcgPNVppYadif->ResumeLayout(false); + this->fcgPNVppYadif->PerformLayout(); this->fcgPNVppNnedi->ResumeLayout(false); this->fcgPNVppNnedi->PerformLayout(); this->fcgPNVppAfs->ResumeLayout(false); @@ -7624,6 +7796,11 @@ private: System::Windows::Forms::NumericUpDown^ fcgNUVppDecombThreshold; (cli::safe_cast(this->fcgNUVppDebandThreY))->EndInit(); (cli::safe_cast(this->fcgNUVppDebandRange))->EndInit(); this->fcggroupBoxVppDenoise->ResumeLayout(false); + this->fcgPNVppDenoiseFFT3D->ResumeLayout(false); + this->fcgPNVppDenoiseFFT3D->PerformLayout(); + (cli::safe_cast(this->fcgNUVppDenoiseFFT3DOverlap))->EndInit(); + (cli::safe_cast(this->fcgNUVppDenoiseFFT3DAmount))->EndInit(); + (cli::safe_cast(this->fcgNUVppDenoiseFFT3DSigma))->EndInit(); this->fcgPNVppDenoiseNLMeans->ResumeLayout(false); this->fcgPNVppDenoiseNLMeans->PerformLayout(); (cli::safe_cast(this->fcgNUVppDenoiseNLMeansH))->EndInit(); diff --git a/NVEnc/frm/frmConfig_helper.h b/NVEnc/frm/frmConfig_helper.h index 7ea01907..3329fa80 100644 --- a/NVEnc/frm/frmConfig_helper.h +++ b/NVEnc/frm/frmConfig_helper.h @@ -300,6 +300,12 @@ static const ENC_OPTION_STR2 list_vpp_deband_gui[] = { { AUO_MES_UNKNOWN, NULL, 0 } }; +static const ENC_OPTION_STR2 list_vpp_fft3d_temporal_gui[] = { + { AUO_MES_UNKNOWN, L"off", 0 }, + { AUO_MES_UNKNOWN, L"on", 1 }, + { AUO_MES_UNKNOWN, NULL, 0 } +}; + #if ENCODER_QSV static const ENC_OPTION_STR2 list_rotate_angle_ja[] = { { AUO_MES_UNKNOWN, L"0°", MFX_ANGLE_0 }, diff --git a/NVEncC_Options.en.md b/NVEncC_Options.en.md index 7909c1a1..0f50596b 100644 --- a/NVEncC_Options.en.md +++ b/NVEncC_Options.en.md @@ -200,6 +200,7 @@ - [--vpp-nvvfx-artifact-reduction \[\=\\]\[,\=\\],...](#--vpp-nvvfx-artifact-reduction-param1value1param2value2) - [--vpp-smooth \[\=\\]\[,\=\\],...](#--vpp-smooth-param1value1param2value2) - [--vpp-denoise-dct \[\=\\]\[,\=\\],...](#--vpp-denoise-dct-param1value1param2value2) + - [--vpp-fft3d \[\=\\]\[,\=\\],...](#--vpp-fft3d-param1value1param2value2) - [--vpp-knn \[\=\\]\[,\=\\],...](#--vpp-knn-param1value1param2value2) - [--vpp-nlmeans \[\=\\[,\=\\]...\]](#--vpp-nlmeans-param1value1param2value2) - [--vpp-pmd \[\=\\]\[,\=\\],...](#--vpp-pmd-param1value1param2value2) @@ -1620,6 +1621,7 @@ Vpp filters will be applied in fixed order, regardless of the order in the comma - [--vpp-nvvfx-artifact-reduction](#--vpp-nvvfx-artifact-reduction-param1value1param2value2) - [--vpp-smooth](#--vpp-smooth-param1value1param2value2) - [--vpp-denoise-dct](#--vpp-denoise-dct-param1value1param2value2) +- [--vpp-fft3d](#--vpp-fft3d-param1value1param2value2) - [--vpp-knn](#--vpp-knn-param1value1param2value2) - [--vpp-nlmeans](#--vpp-nlmeans-param1value1param2value2) - [--vpp-pmd](#--vpp-pmd-param1value1param2value2) @@ -2202,6 +2204,38 @@ Please download and install [Video Effect models and runtime dependencies](https - 8 - 16 (slow) +### --vpp-fft3d [<param1>=<value1>][,<param2>=<value2>],... + + FFT based denoise filter. + +- **parameters** + - sigma=<float> + Strength of filter. (default=1.0, 0.0 - 100.0) + + - amount=<float> (default=1.0, 0.0 - 1.0) + Amount of denoising. + + - block_size=<int> (default=32) + - 8 + - 16 + - 32 + - 64 + + - overlap=<float> (default=0.5, 0.2 - 0.8) + Block overlap, value 0.5 or larger is recomended. + + - method=<int> (default = 0) + - 0 ... wiener method + - 1 ... hard thresholding + + - temporal=<int> (default = 1) + - 0 ... spatial filtering only + - 1 ... enable temporal filtering + + - prec=<string> (default = auto) + - auto ... use fp16 if possible (faster) + - fp32 ... always use fp32 + ### --vpp-knn [<param1>=<value1>][,<param2>=<value2>],... Strong noise reduction filter. diff --git a/NVEncC_Options.ja.md b/NVEncC_Options.ja.md index 400ea679..edb40b06 100644 --- a/NVEncC_Options.ja.md +++ b/NVEncC_Options.ja.md @@ -196,6 +196,7 @@ - [--vpp-nvvfx-artifact-reduction \[\=\\]\[,\=\\],...](#--vpp-nvvfx-artifact-reduction-param1value1param2value2) - [--vpp-smooth \[\=\\]\[,\=\\],...](#--vpp-smooth-param1value1param2value2) - [--vpp-denoise-dct \[\=\\]\[,\=\\],...](#--vpp-denoise-dct-param1value1param2value2) + - [--vpp-fft3d \[\=\\]\[,\=\\],...](#--vpp-fft3d-param1value1param2value2) - [--vpp-knn \[\=\\]\[,\=\\],...](#--vpp-knn-param1value1param2value2) - [--vpp-nlmeans \[\=\\[,\=\\]...\]](#--vpp-nlmeans-param1value1param2value2) - [--vpp-pmd \[\=\\]\[,\=\\],...](#--vpp-pmd-param1value1param2value2) @@ -2260,6 +2261,39 @@ decombによるインタレ解除を行う。 - 8 - 16 (slow) +### --vpp-fft3d [<param1>=<value1>][,<param2>=<value2>],... + + FFTベースのノイズ除去フィルタ。 + +- **パラメータ** + - sigma=<float> + フィルタ強度。 (default=1.0, 0.0 - 100.0) + + - amount=<float> (default=1.0, 0.0 - 1.0) + ノイズ除去量。 + + - block_size=<int> (default=32) + FFTの計算ブロックサイズ。 + - 8 + - 16 + - 32 + - 64 + + - overlap=<float> (default=0.5, 0.2 - 0.8) + FFTブロック同士のオーバーラップサイズ。アーティファクト発生を防ぐため、0.5以上が推奨。 + + - method=<int> (default = 0) + - 0 ... wiener法 + - 1 ... 閾値による打ち切り + + - temporal=<int> (default = 1) + - 0 ... 空間方向のフィルタリングのみ + - 1 ... 時間方向のフィルタリングも行う + + - prec=<string> (default = auto) + - auto ... 可能な場合fp16(半精度浮動小数点)で計算する (高速) + - fp32 ... 常にfp32(単精度浮動小数点)で計算する + ### --vpp-knn [<param1>=<value1>][,<param2>=<value2>],... diff --git a/NVEncCore/rgy_prm.h b/NVEncCore/rgy_prm.h index c9e9a505..d07d5e48 100644 --- a/NVEncCore/rgy_prm.h +++ b/NVEncCore/rgy_prm.h @@ -366,6 +366,7 @@ const CX_DESC list_vpp_denoise[] = { { _T("denoise-dct"), 8 }, { _T("smooth"), 3 }, { _T("convolution3d"), 5 }, + { _T("fft3d"), 10 }, #if ENCODER_VCEENC { _T("preprocess"), 4 }, #endif diff --git a/NVEncCore/rgy_version.h b/NVEncCore/rgy_version.h index 8265382c..2944c986 100644 --- a/NVEncCore/rgy_version.h +++ b/NVEncCore/rgy_version.h @@ -29,9 +29,9 @@ #ifndef __RGY_CONFIG_H__ #define __RGY_CONFIG_H__ -#define VER_FILEVERSION 0,7,55,0 -#define VER_STR_FILEVERSION "7.55" -#define VER_STR_FILEVERSION_TCHAR _T("7.55") +#define VER_FILEVERSION 0,7,56,0 +#define VER_STR_FILEVERSION "7.56" +#define VER_STR_FILEVERSION_TCHAR _T("7.56") #ifdef _M_IX86 #define BUILD_ARCH_STR _T("x86")