提交 28af4533 编写于 作者: B brittneysclark 提交者: jp9000

obs-qsv11: Enable VDEnc on ICL+

Enable AVC VDEnc (fixed function encode) on ICL+
上级 8e0e2dd3
......@@ -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;
......
......@@ -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
};
......
......@@ -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;
}
......
......@@ -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 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册