diff --git a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp index 8b97f1a52..2322710c4 100644 --- a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp +++ b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp @@ -331,6 +331,17 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams, } } + constexpr uint32_t pixelcount_4k = 3840 * 2160; + /* If size is 4K+, set tile columns per frame to 2. */ + if (codec == QSV_CODEC_AV1 && + (pParams->nWidth * pParams->nHeight) >= pixelcount_4k) { + memset(&m_ExtAv1TileParam, 0, sizeof(m_ExtAv1TileParam)); + m_ExtAv1TileParam.Header.BufferId = MFX_EXTBUFF_AV1_TILE_PARAM; + m_ExtAv1TileParam.Header.BufferSz = sizeof(m_ExtAv1TileParam); + m_ExtAv1TileParam.NumTileColumns = 2; + extendedBuffers.push_back((mfxExtBuffer *)&m_ExtAv1TileParam); + } + #if defined(_WIN32) // TODO: Ask about this one on VAAPI too. memset(&m_ExtVideoSignalInfo, 0, sizeof(m_ExtVideoSignalInfo)); diff --git a/plugins/obs-qsv11/QSV_Encoder_Internal.h b/plugins/obs-qsv11/QSV_Encoder_Internal.h index d96ac11dc..cfd9e12d5 100644 --- a/plugins/obs-qsv11/QSV_Encoder_Internal.h +++ b/plugins/obs-qsv11/QSV_Encoder_Internal.h @@ -123,6 +123,7 @@ private: mfxExtCodingOption2 m_co2; mfxExtCodingOption m_co; mfxExtHEVCParam m_ExtHEVCParam{}; + mfxExtAV1TileParam m_ExtAv1TileParam{}; mfxExtVideoSignalInfo m_ExtVideoSignalInfo{}; mfxExtChromaLocInfo m_ExtChromaLocInfo{}; mfxExtMasteringDisplayColourVolume m_ExtMasteringDisplayColourVolume{};