Merge pull request #1418 from cabirdme/qsv_feature_add

obs-qsv: Expose additional QSV encoder settings through GUI
This commit is contained in:
Jim
2018-09-16 08:17:12 -07:00
committed by GitHub
4 changed files with 60 additions and 27 deletions

View File

@@ -197,6 +197,7 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t * pParams)
{
memset(&m_mfxEncParams, 0, sizeof(m_mfxEncParams));
m_mfxEncParams.mfx.CodecId = MFX_CODEC_AVC;
m_mfxEncParams.mfx.GopOptFlag = MFX_GOP_STRICT;
m_mfxEncParams.mfx.NumSlice = 1;
@@ -211,6 +212,7 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t * pParams)
m_mfxEncParams.mfx.FrameInfo.CropY = 0;
m_mfxEncParams.mfx.FrameInfo.CropW = pParams->nWidth;
m_mfxEncParams.mfx.FrameInfo.CropH = pParams->nHeight;
m_mfxEncParams.mfx.GopRefDist = pParams->nbFrames + 1;
m_mfxEncParams.mfx.RateControlMethod = pParams->nRateControl;
@@ -242,6 +244,10 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t * pParams)
case MFX_RATECONTROL_LA_ICQ:
m_mfxEncParams.mfx.ICQQuality = pParams->nICQQuality;
break;
case MFX_RATECONTROL_LA_HRD:
m_mfxEncParams.mfx.TargetKbps = pParams->nTargetBitRate;
m_mfxEncParams.mfx.MaxKbps = pParams->nTargetBitRate;
break;
default:
break;
}
@@ -252,28 +258,17 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t * pParams)
static mfxExtBuffer* extendedBuffers[2];
int iBuffers = 0;
if (pParams->nAsyncDepth == 1) {
m_mfxEncParams.mfx.NumRefFrame = 1;
// low latency, I and P frames only
m_mfxEncParams.mfx.GopRefDist = 1;
memset(&m_co, 0, sizeof(mfxExtCodingOption));
m_co.Header.BufferId = MFX_EXTBUFF_CODING_OPTION;
m_co.Header.BufferSz = sizeof(mfxExtCodingOption);
m_co.MaxDecFrameBuffering = 1;
extendedBuffers[iBuffers++] = (mfxExtBuffer*)&m_co;
}
else
m_mfxEncParams.mfx.GopRefDist = pParams->nbFrames + 1;
memset(&m_co2, 0, sizeof(mfxExtCodingOption2));
m_co2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION2;
m_co2.Header.BufferSz = sizeof(m_co2);
if (pParams->bMBBRC)
m_co2.MBBRC = MFX_CODINGOPTION_ON;
if (pParams->nRateControl == MFX_RATECONTROL_LA_ICQ ||
pParams->nRateControl == MFX_RATECONTROL_LA) {
pParams->nRateControl == MFX_RATECONTROL_LA)
memset(&m_co2, 0, sizeof(mfxExtCodingOption2));
m_co2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION;
m_co2.Header.BufferSz = sizeof(m_co2);
m_co2.LookAheadDepth = pParams->nLADEPTH;
extendedBuffers[iBuffers++] = (mfxExtBuffer*)& m_co2;
}
extendedBuffers[iBuffers++] = (mfxExtBuffer*)& m_co2;
if (iBuffers > 0) {
m_mfxEncParams.ExtParam = extendedBuffers;