Revert "Merge pull request #1418 from cabirdme/qsv_feature_add"

This reverts commit 3c22cf35c9, reversing
changes made to c7dab6c92b.

This is being reverted due to many people being unable to start up the
QSV encoder with these changes.
This commit is contained in:
jp9000
2019-03-05 15:20:16 -08:00
parent 92cb20e7a2
commit 4c7860056e
4 changed files with 27 additions and 60 deletions

View File

@@ -280,17 +280,8 @@ enum qsv_cpu_platform qsv_get_cpu_platform()
case 0x45:
case 0x46:
return QSV_CPU_PLATFORM_HSW;
case 0x3d:
case 0x47:
case 0x4f:
case 0x56:
return QSV_CPU_PLATFORM_BDW;
case 0x4e:
case 0x5e:
return QSV_CPU_PLATFORM_SKL;
}
//assume newer revisions are at least as capable as Skylake
//assume newer revisions are at least as capable as Haswell
return QSV_CPU_PLATFORM_INTEL;
}

View File

@@ -76,9 +76,8 @@ static const struct qsv_rate_control_info qsv_ratecontrols[] = {
{"CQP", false},
{"AVBR", false},
{"ICQ", true},
{"LA_CBR", true},
{"LA_VBR", true},
{"LA_ICQ", true},
{"LA", true},
{0, false}
};
static const char * const qsv_profile_names[] = {
@@ -118,7 +117,6 @@ typedef struct
mfxU16 nKeyIntSec;
mfxU16 nbFrames;
mfxU16 nICQQuality;
bool bMBBRC;
} qsv_param_t;
enum qsv_cpu_platform {
@@ -129,8 +127,6 @@ enum qsv_cpu_platform {
QSV_CPU_PLATFORM_SLM,
QSV_CPU_PLATFORM_CHT,
QSV_CPU_PLATFORM_HSW,
QSV_CPU_PLATFORM_BDW,
QSV_CPU_PLATFORM_SKL,
QSV_CPU_PLATFORM_INTEL
};

View File

@@ -198,7 +198,6 @@ 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;
@@ -213,7 +212,6 @@ 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;
@@ -245,10 +243,6 @@ 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;
}
@@ -259,17 +253,28 @@ 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;

View File

@@ -146,7 +146,7 @@ static void obs_qsv_defaults(obs_data_t *settings)
obs_data_set_default_string(settings, "target_usage", "balanced");
obs_data_set_default_int(settings, "bitrate", 2500);
obs_data_set_default_int(settings, "max_bitrate", 3000);
obs_data_set_default_string(settings, "profile", "high");
obs_data_set_default_string(settings, "profile", "main");
obs_data_set_default_int(settings, "async_depth", 4);
obs_data_set_default_string(settings, "rate_control", "CBR");
@@ -156,10 +156,9 @@ static void obs_qsv_defaults(obs_data_t *settings)
obs_data_set_default_int(settings, "qpp", 23);
obs_data_set_default_int(settings, "qpb", 23);
obs_data_set_default_int(settings, "icq_quality", 23);
obs_data_set_default_int(settings, "la_depth", 15);
obs_data_set_default_int(settings, "la_depth", 40);
obs_data_set_default_int(settings, "keyint_sec", 3);
obs_data_set_default_int(settings, "bframes", 1);
}
static inline void add_strings(obs_property_t *list, const char *const *strings)
@@ -181,14 +180,6 @@ static inline void add_strings(obs_property_t *list, const char *const *strings)
#define TEXT_ICQ_QUALITY obs_module_text("ICQQuality")
#define TEXT_LA_DEPTH obs_module_text("LookAheadDepth")
#define TEXT_KEYINT_SEC obs_module_text("KeyframeIntervalSec")
#define TEXT_BFRAMES obs_module_text("B Frames")
#define TEXT_MBBRC obs_module_text("Content Adaptive Quantization")
static inline bool is_skl_or_greater_platform()
{
enum qsv_cpu_platform plat = qsv_get_cpu_platform();
return (plat >= QSV_CPU_PLATFORM_SKL);
}
static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
obs_data_t *settings)
@@ -228,17 +219,10 @@ static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
obs_property_set_visible(p, bVisible);
bVisible = astrcmpi(rate_control, "LA_ICQ") == 0 ||
astrcmpi(rate_control, "LA_CBR") == 0 ||
astrcmpi(rate_control, "LA_VBR") == 0;
astrcmpi(rate_control, "LA") == 0;
p = obs_properties_get(ppts, "la_depth");
obs_property_set_visible(p, bVisible);
bVisible = astrcmpi(rate_control, "CBR") == 0 ||
astrcmpi(rate_control, "VBR") == 0 ||
astrcmpi(rate_control, "AVBR") == 0;
p = obs_properties_get(ppts, "mbbrc");
obs_property_set_visible(p, bVisible);
return true;
}
@@ -287,10 +271,6 @@ static obs_properties_t *obs_qsv_props(void *unused)
obs_properties_add_int(props, "qpb", "QPB", 1, 51, 1);
obs_properties_add_int(props, "icq_quality", TEXT_ICQ_QUALITY, 1, 51, 1);
obs_properties_add_int(props, "la_depth", TEXT_LA_DEPTH, 10, 100, 1);
obs_properties_add_int(props, "bframes", TEXT_BFRAMES, 0, 3, 1);
if (is_skl_or_greater_platform())
obs_properties_add_bool(props, "mbbrc", TEXT_MBBRC);
return props;
}
@@ -315,8 +295,7 @@ static void update_params(struct obs_qsv *obsqsv, obs_data_t *settings)
int la_depth = (int)obs_data_get_int(settings, "la_depth");
int keyint_sec = (int)obs_data_get_int(settings, "keyint_sec");
bool cbr_override = obs_data_get_bool(settings, "cbr");
int bFrames = (int)obs_data_get_int(settings, "bframes");
bool mbbrc = obs_data_get_bool(settings, "mbbrc");
int bFrames = 7;
if (obs_data_has_user_value(settings, "bf"))
bFrames = (int)obs_data_get_int(settings, "bf");
@@ -362,10 +341,8 @@ static void update_params(struct obs_qsv *obsqsv, obs_data_t *settings)
obsqsv->params.nRateControl = MFX_RATECONTROL_ICQ;
else if (astrcmpi(rate_control, "LA_ICQ") == 0)
obsqsv->params.nRateControl = MFX_RATECONTROL_LA_ICQ;
else if (astrcmpi(rate_control, "LA_VBR") == 0)
else if (astrcmpi(rate_control, "LA") == 0)
obsqsv->params.nRateControl = MFX_RATECONTROL_LA;
else if (astrcmpi(rate_control, "LA_CBR") == 0)
obsqsv->params.nRateControl = MFX_RATECONTROL_LA_HRD;
obsqsv->params.nAsyncDepth = (mfxU16)async_depth;
obsqsv->params.nAccuracy = (mfxU16)accuracy;
@@ -383,7 +360,6 @@ static void update_params(struct obs_qsv *obsqsv, obs_data_t *settings)
obsqsv->params.nbFrames = (mfxU16)bFrames;
obsqsv->params.nKeyIntSec = (mfxU16)keyint_sec;
obsqsv->params.nICQQuality = (mfxU16)icq_quality;
obsqsv->params.bMBBRC = mbbrc;
info("settings:\n\trate_control: %s", rate_control);
@@ -407,8 +383,7 @@ static void update_params(struct obs_qsv *obsqsv, obs_data_t *settings)
(int)obsqsv->params.nICQQuality);
if (obsqsv->params.nRateControl == MFX_RATECONTROL_LA_ICQ ||
obsqsv->params.nRateControl == MFX_RATECONTROL_LA ||
obsqsv->params.nRateControl == MFX_RATECONTROL_LA_HRD)
obsqsv->params.nRateControl == MFX_RATECONTROL_LA)
blog(LOG_INFO,
"\tLookahead Depth:%d",
(int)obsqsv->params.nLADEPTH);