From 28af4533206d4112c4751b670563d590f8c480a4 Mon Sep 17 00:00:00 2001 From: brittneysclark Date: Sat, 6 Jun 2020 01:59:22 -0700 Subject: [PATCH] obs-qsv11: Enable VDEnc on ICL+ Enable AVC VDEnc (fixed function encode) on ICL+ --- plugins/obs-qsv11/QSV_Encoder.cpp | 2 ++ plugins/obs-qsv11/QSV_Encoder.h | 1 + plugins/obs-qsv11/QSV_Encoder_Internal.cpp | 31 ++++++++++++++++++- .../include/msdk/include/mfxstructures.h | 5 ++- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/plugins/obs-qsv11/QSV_Encoder.cpp b/plugins/obs-qsv11/QSV_Encoder.cpp index e3d7873ab..bad352106 100644 --- a/plugins/obs-qsv11/QSV_Encoder.cpp +++ b/plugins/obs-qsv11/QSV_Encoder.cpp @@ -397,6 +397,8 @@ enum qsv_cpu_platform qsv_get_cpu_platform() case 0x8e: case 0x9e: return QSV_CPU_PLATFORM_KBL; + case 0x66: + return QSV_CPU_PLATFORM_CNL; case 0x7d: case 0x7e: return QSV_CPU_PLATFORM_ICL; diff --git a/plugins/obs-qsv11/QSV_Encoder.h b/plugins/obs-qsv11/QSV_Encoder.h index 88fcd21be..146b34c74 100644 --- a/plugins/obs-qsv11/QSV_Encoder.h +++ b/plugins/obs-qsv11/QSV_Encoder.h @@ -118,6 +118,7 @@ enum qsv_cpu_platform { QSV_CPU_PLATFORM_BDW, QSV_CPU_PLATFORM_SKL, QSV_CPU_PLATFORM_KBL, + QSV_CPU_PLATFORM_CNL, QSV_CPU_PLATFORM_ICL, QSV_CPU_PLATFORM_INTEL }; diff --git a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp index 514b242f6..4de63b43e 100644 --- a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp +++ b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp @@ -211,6 +211,17 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t *pParams) m_mfxEncParams.mfx.FrameInfo.CropH = pParams->nHeight; m_mfxEncParams.mfx.GopRefDist = pParams->nbFrames + 1; + enum qsv_cpu_platform qsv_platform = qsv_get_cpu_platform(); + if ((qsv_platform >= QSV_CPU_PLATFORM_ICL) && + (pParams->nbFrames == 0) && + (m_ver.Major == 1 && m_ver.Minor >= 31)) { + m_mfxEncParams.mfx.LowPower = MFX_CODINGOPTION_ON; + if (pParams->nRateControl == MFX_RATECONTROL_LA_ICQ || + pParams->nRateControl == MFX_RATECONTROL_LA_HRD || + pParams->nRateControl == MFX_RATECONTROL_LA) + pParams->nRateControl = MFX_RATECONTROL_VBR; + } + m_mfxEncParams.mfx.RateControlMethod = pParams->nRateControl; switch (pParams->nRateControl) { @@ -268,10 +279,23 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t *pParams) m_co2.MBBRC = MFX_CODINGOPTION_ON; if (pParams->nbFrames > 1) m_co2.BRefType = MFX_B_REF_PYRAMID; + if (m_mfxEncParams.mfx.LowPower == MFX_CODINGOPTION_ON) { + m_co2.RepeatPPS = MFX_CODINGOPTION_OFF; + if (pParams->nRateControl == MFX_RATECONTROL_CBR || + pParams->nRateControl == MFX_RATECONTROL_VBR) { + m_co2.LookAheadDepth = pParams->nLADEPTH; + } + } extendedBuffers[iBuffers++] = (mfxExtBuffer *)&m_co2; } - if (pParams->bCQM) { + if (m_mfxEncParams.mfx.LowPower == MFX_CODINGOPTION_ON) { + memset(&m_co3, 0, sizeof(mfxExtCodingOption3)); + m_co3.Header.BufferId = MFX_EXTBUFF_CODING_OPTION3; + m_co3.Header.BufferSz = sizeof(m_co3); + m_co3.ScenarioInfo = MFX_SCENARIO_GAME_STREAMING; + extendedBuffers[iBuffers++] = (mfxExtBuffer *)&m_co3; + } else if (pParams->bCQM) { if (m_ver.Major == 1 && m_ver.Minor >= 16) { memset(&m_co3, 0, sizeof(mfxExtCodingOption3)); m_co3.Header.BufferId = MFX_EXTBUFF_CODING_OPTION3; @@ -297,6 +321,11 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t *pParams) else m_mfxEncParams.IOPattern = MFX_IOPATTERN_IN_SYSTEM_MEMORY; + mfxStatus sts = m_pmfxENC->Query(&m_mfxEncParams, &m_mfxEncParams); + if (sts == MFX_ERR_UNSUPPORTED || sts == MFX_ERR_UNDEFINED_BEHAVIOR) { + m_mfxEncParams.mfx.LowPower = MFX_CODINGOPTION_OFF; + } + return true; } diff --git a/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h b/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h index 4f1c27f48..229ad8ed4 100644 --- a/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h +++ b/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h @@ -642,7 +642,10 @@ enum { MFX_SCENARIO_VIDEO_CONFERENCE = 2, MFX_SCENARIO_ARCHIVE = 3, MFX_SCENARIO_LIVE_STREAMING = 4, - MFX_SCENARIO_CAMERA_CAPTURE = 5 + MFX_SCENARIO_CAMERA_CAPTURE = 5, + MFX_SCENARIO_VIDEO_SURVEILLANCE = 6, + MFX_SCENARIO_GAME_STREAMING = 7, + MFX_SCENARIO_REMOTE_GAMING = 8 }; /* ContentInfo */ -- GitLab