mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 04:42:18 +02:00
obs-qsv11: Remove statics, fix buffer misuse
This whole "array of pointers" thing is very dumb and dangerous.
This commit is contained in:
parent
fceee90aa9
commit
dd61943ddf
@ -61,6 +61,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <VersionHelpers.h>
|
||||
#include <obs-module.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
#define do_log(level, format, ...) \
|
||||
blog(level, "[qsv encoder: '%s'] " format, "msdk_impl", ##__VA_ARGS__)
|
||||
|
||||
@ -298,8 +300,7 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
(mfxU16)(pParams->nKeyIntSec * pParams->nFpsNum /
|
||||
(float)pParams->nFpsDen);
|
||||
|
||||
static mfxExtBuffer *extendedBuffers[7];
|
||||
int iBuffers = 0;
|
||||
std::vector<mfxExtBuffer *> extendedBuffers;
|
||||
|
||||
if (m_ver.Major == 1 && m_ver.Minor >= 8) {
|
||||
memset(&m_co2, 0, sizeof(mfxExtCodingOption2));
|
||||
@ -322,7 +323,7 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
m_co2.LookAheadDepth = pParams->nLADEPTH;
|
||||
}
|
||||
}
|
||||
extendedBuffers[iBuffers++] = (mfxExtBuffer *)&m_co2;
|
||||
extendedBuffers.push_back((mfxExtBuffer *)&m_co2);
|
||||
}
|
||||
|
||||
if ((m_mfxEncParams.mfx.LowPower == MFX_CODINGOPTION_ON) ||
|
||||
@ -331,12 +332,7 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
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;
|
||||
}
|
||||
|
||||
if (iBuffers > 0) {
|
||||
m_mfxEncParams.ExtParam = extendedBuffers;
|
||||
m_mfxEncParams.NumExtParam = (mfxU16)iBuffers;
|
||||
extendedBuffers.push_back((mfxExtBuffer *)&m_co3);
|
||||
}
|
||||
|
||||
if (codec == QSV_CODEC_HEVC) {
|
||||
@ -347,8 +343,8 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
m_ExtHEVCParam.PicWidthInLumaSamples = pParams->nWidth;
|
||||
m_ExtHEVCParam.PicHeightInLumaSamples =
|
||||
pParams->nHeight;
|
||||
extendedBuffers[iBuffers++] =
|
||||
(mfxExtBuffer *)&m_ExtHEVCParam;
|
||||
extendedBuffers.push_back(
|
||||
(mfxExtBuffer *)&m_ExtHEVCParam);
|
||||
}
|
||||
}
|
||||
|
||||
@ -362,7 +358,7 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
m_ExtVideoSignalInfo.TransferCharacteristics =
|
||||
pParams->TransferCharacteristics;
|
||||
m_ExtVideoSignalInfo.MatrixCoefficients = pParams->MatrixCoefficients;
|
||||
extendedBuffers[iBuffers++] = (mfxExtBuffer *)&m_ExtVideoSignalInfo;
|
||||
extendedBuffers.push_back((mfxExtBuffer *)&m_ExtVideoSignalInfo);
|
||||
|
||||
/* TODO: Ask Intel why this is MFX_ERR_UNSUPPORTED */
|
||||
#if 0
|
||||
@ -374,7 +370,7 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
pParams->ChromaSampleLocTypeTopField;
|
||||
m_ExtChromaLocInfo.ChromaSampleLocTypeBottomField =
|
||||
pParams->ChromaSampleLocTypeBottomField;
|
||||
extendedBuffers[iBuffers++] = (mfxExtBuffer *)&m_ExtChromaLocInfo;
|
||||
extendedBuffers.push_back((mfxExtBuffer *)&m_ExtChromaLocInfo);
|
||||
#endif
|
||||
|
||||
if (pParams->MaxContentLightLevel > 0) {
|
||||
@ -406,8 +402,8 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
pParams->MaxDisplayMasteringLuminance;
|
||||
m_ExtMasteringDisplayColourVolume.MinDisplayMasteringLuminance =
|
||||
pParams->MinDisplayMasteringLuminance;
|
||||
extendedBuffers[iBuffers++] =
|
||||
(mfxExtBuffer *)&m_ExtMasteringDisplayColourVolume;
|
||||
extendedBuffers.push_back(
|
||||
(mfxExtBuffer *)&m_ExtMasteringDisplayColourVolume);
|
||||
|
||||
memset(&m_ExtContentLightLevelInfo, 0,
|
||||
sizeof(m_ExtContentLightLevelInfo));
|
||||
@ -421,8 +417,8 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
pParams->MaxContentLightLevel;
|
||||
m_ExtContentLightLevelInfo.MaxPicAverageLightLevel =
|
||||
pParams->MaxPicAverageLightLevel;
|
||||
extendedBuffers[iBuffers++] =
|
||||
(mfxExtBuffer *)&m_ExtContentLightLevelInfo;
|
||||
extendedBuffers.push_back(
|
||||
(mfxExtBuffer *)&m_ExtContentLightLevelInfo);
|
||||
}
|
||||
|
||||
// Width must be a multiple of 16
|
||||
@ -436,6 +432,9 @@ mfxStatus QSV_Encoder_Internal::InitParams(qsv_param_t *pParams,
|
||||
else
|
||||
m_mfxEncParams.IOPattern = MFX_IOPATTERN_IN_SYSTEM_MEMORY;
|
||||
|
||||
m_mfxEncParams.ExtParam = extendedBuffers.data();
|
||||
m_mfxEncParams.NumExtParam = (mfxU16)extendedBuffers.size();
|
||||
|
||||
mfxStatus sts = m_pmfxENC->Query(&m_mfxEncParams, &m_mfxEncParams);
|
||||
if (sts == MFX_ERR_UNSUPPORTED || sts == MFX_ERR_UNDEFINED_BEHAVIOR) {
|
||||
if (m_mfxEncParams.mfx.LowPower == MFX_CODINGOPTION_ON) {
|
||||
@ -533,8 +532,8 @@ mfxStatus QSV_Encoder_Internal::GetVideoParam(enum qsv_codec codec)
|
||||
opt.Header.BufferId = MFX_EXTBUFF_CODING_OPTION_SPSPPS;
|
||||
opt.Header.BufferSz = sizeof(mfxExtCodingOptionSPSPPS);
|
||||
|
||||
static mfxExtBuffer *extendedBuffers[1];
|
||||
m_parameter.ExtParam = extendedBuffers;
|
||||
std::vector<mfxExtBuffer *> extendedBuffers;
|
||||
extendedBuffers.reserve(2);
|
||||
|
||||
opt.SPSBuffer = m_SPSBuffer;
|
||||
opt.PPSBuffer = m_PPSBuffer;
|
||||
@ -548,14 +547,14 @@ mfxStatus QSV_Encoder_Internal::GetVideoParam(enum qsv_codec codec)
|
||||
opt_vps.VPSBuffer = m_VPSBuffer;
|
||||
opt_vps.VPSBufSize = 1024;
|
||||
|
||||
extendedBuffers[0] = (mfxExtBuffer *)&opt_vps;
|
||||
extendedBuffers[1] = (mfxExtBuffer *)&opt;
|
||||
m_parameter.NumExtParam = 2;
|
||||
} else {
|
||||
extendedBuffers[0] = (mfxExtBuffer *)&opt;
|
||||
m_parameter.NumExtParam = 1;
|
||||
extendedBuffers.push_back((mfxExtBuffer *)&opt_vps);
|
||||
}
|
||||
|
||||
extendedBuffers.push_back((mfxExtBuffer *)&opt);
|
||||
|
||||
m_parameter.ExtParam = extendedBuffers.data();
|
||||
m_parameter.NumExtParam = (mfxU16)extendedBuffers.size();
|
||||
|
||||
mfxStatus sts = m_pmfxENC->GetVideoParam(&m_parameter);
|
||||
MSDK_CHECK_RESULT(sts, MFX_ERR_NONE, sts);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user