Add QSV preset selection setting

Also improve string output for QSV target usages
master
palana 2014-02-14 03:48:42 +01:00
parent ed314cfce6
commit e8467dc87f
6 changed files with 81 additions and 16 deletions

4
OBS.rc
View File

@ -413,8 +413,10 @@ BEGIN
LTEXT "Settings.Info",IDC_INFO,7,345,418,21,NOT WS_VISIBLE
RTEXT "Settings.Advanced.X264Profile",IDC_STATIC,7,109,160,8
COMBOBOX IDC_X264PROFILE,170,106,82,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Advanced.NVENCPreset",IDC_STATIC,7,212,160,8
RTEXT "Settings.Advanced.NVENCPreset",IDC_NVENCPRESET_LABEL,7,212,160,8
COMBOBOX IDC_NVENCPRESET,170,209,120,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Advanced.QSVPreset",IDC_QSVPRESET_LABEL,7,212,160,8
COMBOBOX IDC_QSVPRESET,170,209,120,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
IDD_CONFIGURETRANSITIONSOURCE DIALOGEX 0, 0, 338, 216

View File

@ -64,13 +64,13 @@ namespace
};
const TCHAR* usageStr[] = {
TO_STR(MFX_TARGETUSAGE_UNKNOWN),
TO_STR(MFX_TARGETUSAGE_BEST_QUALITY),
TO_STR(2),
TO_STR(3),
TO_STR(MFX_TARGETUSAGE_BALANCED),
TO_STR(5),
TO_STR(6),
TO_STR(MFX_TARGETUSAGE_BEST_SPEED)
TO_STR(MFX_TARGETUSAGE_1_BEST_QUALITY),
TO_STR(MFX_TARGETUSAGE_2),
TO_STR(MFX_TARGETUSAGE_3),
TO_STR(MFX_TARGETUSAGE_4_BALANCED),
TO_STR(MFX_TARGETUSAGE_5),
TO_STR(MFX_TARGETUSAGE_6),
TO_STR(MFX_TARGETUSAGE_7_BEST_SPEED)
};
CTSTR qsv_intf_str(const mfxU32 impl)
@ -366,6 +366,9 @@ public:
int keyint = fps*keyframeInterval;
int bframes = 7;
int qsv_preset = AppConfig->GetInt(L"Video Encoding", L"QSVPreset", 1); // MFX_TARGETUSAGE_BEST_QUALITY
if (qsv_preset < MFX_TARGETUSAGE_1 || qsv_preset > MFX_TARGETUSAGE_7) qsv_preset = MFX_TARGETUSAGE_1;
bool main_profile = (AppConfig->GetString(TEXT("Video Encoding"), TEXT("X264Profile"), TEXT("high")) != L"high") ? true : false;
bHaveCustomImpl = false;
@ -442,7 +445,7 @@ public:
request->mode = request->MODE_ENCODE;
request->obs_process_id = GetCurrentProcessId();
request->target_usage = MFX_TARGETUSAGE_BEST_QUALITY;
request->target_usage = qsv_preset;
request->fps = fps;
request->keyint = keyint;
request->bframes = bframes;

View File

@ -231,4 +231,6 @@ public:
virtual void CancelSettings();
virtual bool HasDefaults() const;
virtual void SetDefaults();
private:
void SelectPresetDialog(bool useQSV, bool useNVENC);
};

View File

@ -55,6 +55,25 @@ void SettingsAdvanced::DestroyPane()
hwnd = NULL;
}
void SettingsAdvanced::SelectPresetDialog(bool useQSV, bool useNVENC)
{
HWND hwndTemp = GetDlgItem(hwnd, IDC_NVENCPRESET);
ShowWindow(hwndTemp, ((bHasNVENC && !useQSV) || useNVENC) ? SW_SHOW : SW_HIDE);
EnableWindow(hwndTemp, bHasNVENC || useNVENC);
hwndTemp = GetDlgItem(hwnd, IDC_NVENCPRESET_LABEL);
ShowWindow(hwndTemp, ((bHasNVENC && !useQSV) || useNVENC) ? SW_SHOW : SW_HIDE);
EnableWindow(hwndTemp, bHasNVENC || useNVENC);
hwndTemp = GetDlgItem(hwnd, IDC_QSVPRESET);
ShowWindow(hwndTemp, ((bHasQSV && !bHasNVENC) || (useQSV && !useNVENC)) ? SW_SHOW : SW_HIDE);
EnableWindow(hwndTemp, bHasQSV || useQSV);
hwndTemp = GetDlgItem(hwnd, IDC_QSVPRESET_LABEL);
ShowWindow(hwndTemp, ((bHasQSV && !bHasNVENC) || (useQSV && !useNVENC)) ? SW_SHOW : SW_HIDE);
EnableWindow(hwndTemp, bHasQSV || useQSV);
}
void SettingsAdvanced::ApplySettings()
{
bool bUseQSV = SendMessage(GetDlgItem(hwnd, IDC_USEQSV), BM_GETCHECK, 0, 0) == BST_CHECKED;
@ -87,6 +106,8 @@ void SettingsAdvanced::ApplySettings()
return;
}
SelectPresetDialog(bUseQSV, bUseNVENC);
//--------------------------------------------------
String strTemp = GetCBText(GetDlgItem(hwnd, IDC_PRESET));
@ -159,6 +180,15 @@ void SettingsAdvanced::ApplySettings()
//------------------------------------
int qsvPreset = (int)SendMessage(GetDlgItem(hwnd, IDC_QSVPRESET), CB_GETCURSEL, 0, 0);
if (qsvPreset != CB_ERR)
{
qsvPreset = (int)SendMessage(GetDlgItem(hwnd, IDC_QSVPRESET), CB_GETITEMDATA, qsvPreset, 0);
AppConfig->SetInt(TEXT("Video Encoding"), TEXT("QSVPreset"), qsvPreset);
}
//------------------------------------
EnableWindow(GetDlgItem(hwnd, IDC_USENVENC), (bHasNVENC || bUseNVENC) && !bUseQSV);
AppConfig->SetInt(TEXT("Video Encoding"), TEXT("UseNVENC"), bUseNVENC && !bUseQSV);
SendMessage(GetDlgItem(hwnd, IDC_USENVENC), BM_SETCHECK, (bUseNVENC && !bUseQSV) ? BST_CHECKED : BST_UNCHECKED, 0);
@ -227,10 +257,11 @@ void SettingsAdvanced::SetDefaults()
SendMessage(GetDlgItem(hwnd, IDC_QSVUSEVIDEOENCODERSETTINGS), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hwnd, IDC_USENVENC), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hwnd, IDC_NVENCPRESET), CB_SETCURSEL, 0, 0);
SendMessage(GetDlgItem(hwnd, IDC_QSVPRESET), CB_SETCURSEL, 0, 0);
EnableWindow(GetDlgItem(hwnd, IDC_USEQSV), bHasQSV);
EnableWindow(GetDlgItem(hwnd, IDC_QSVUSEVIDEOENCODERSETTINGS), FALSE);
EnableWindow(GetDlgItem(hwnd, IDC_USENVENC), bHasNVENC);
EnableWindow(GetDlgItem(hwnd, IDC_NVENCPRESET), FALSE);
SelectPresetDialog(false, false);
SendMessage(GetDlgItem(hwnd, IDC_SYNCTOVIDEOTIME), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hwnd, IDC_USEMICQPC), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hwnd, IDC_MICSYNCFIX), BM_SETCHECK, BST_UNCHECKED, 0);
@ -368,7 +399,7 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
bool bUseQSV = AppConfig->GetInt(TEXT("Video Encoding"), TEXT("UseQSV")) != 0;
bHasNVENC = CheckNVENCHardwareSupport(false);
bHasNVENC = true;// CheckNVENCHardwareSupport(false);
bool bUseNVENC = AppConfig->GetInt(TEXT("Video Encoding"), TEXT("UseNVENC")) != 0;
@ -385,14 +416,14 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
ti.uId = (UINT_PTR)GetDlgItem(hwnd, IDC_QSVUSEVIDEOENCODERSETTINGS);
SendMessage(hwndToolTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
EnableWindow(GetDlgItem(hwnd, IDC_QSVUSEVIDEOENCODERSETTINGS), bUseQSV && !bUseNVENC);
EnableWindow(GetDlgItem(hwnd, IDC_QSVUSEVIDEOENCODERSETTINGS), bUseQSV);
EnableWindow(GetDlgItem(hwnd, IDC_USENVENC), bUseNVENC || (bHasNVENC && !bUseQSV));
SendMessage(GetDlgItem(hwnd, IDC_USENVENC), BM_SETCHECK, bUseNVENC ? BST_CHECKED : BST_UNCHECKED, 0);
hwndTemp = GetDlgItem(hwnd, IDC_NVENCPRESET);
EnableWindow(hwndTemp, bHasNVENC && bUseNVENC && !bUseQSV);
SelectPresetDialog(bUseQSV, bUseNVENC);
hwndTemp = GetDlgItem(hwnd, IDC_NVENCPRESET);
static const CTSTR nv_preset_names[8] = {
TEXT("High Quality"),
TEXT("High Performance"),
@ -408,6 +439,28 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
LoadSettingComboString(hwndTemp, TEXT("Video Encoding"), TEXT("NVENCPreset"), nv_preset_names[0]);
hwndTemp = GetDlgItem(hwnd, IDC_QSVPRESET);
static const struct {
CTSTR name;
int id;
} qsv_presets[] = {
{ L"1 (Best Quality)", 1 },
{ L"2", 2 },
{ L"3", 3 },
{ L"4 (Balanced)", 4 },
{ L"5", 5 },
{ L"6", 6 },
{ L"7 (Best Speed)", 7 }
};
for (int i = 0; i < _countof(qsv_presets); i++)
{
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)qsv_presets[i].name);
SendMessage(hwndTemp, CB_SETITEMDATA, i, qsv_presets[i].id);
}
int qsvPreset = AppConfig->GetInt(L"Video Encoding", L"QSVPreset", 1);
if (qsvPreset < 1 || qsvPreset > 7) qsvPreset = 1;
SendMessage(hwndTemp, CB_SETCURSEL, qsvPreset - 1, 0);
//------------------------------------
bool bSyncToVideoTime = AppConfig->GetInt(TEXT("Audio"), TEXT("SyncToVideoTime")) != 0;
@ -563,6 +616,7 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
case IDC_PRIORITY:
case IDC_BINDIP:
case IDC_NVENCPRESET:
case IDC_QSVPRESET:
if(HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE)
{
ShowWindow(GetDlgItem(hwnd, IDC_INFO), SW_SHOW);
@ -581,7 +635,7 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
EnableWindow(GetDlgItem(hwnd, IDC_QSVUSEVIDEOENCODERSETTINGS), (bHasQSV || bUseQSV) && !bUseNVENC);
EnableWindow(GetDlgItem(hwnd, IDC_USEQSV), !bUseNVENC && (bHasQSV || bUseQSV_prev));
EnableWindow(GetDlgItem(hwnd, IDC_USENVENC), !bUseQSV && (bHasNVENC || bUseNVENC_prev));
EnableWindow(GetDlgItem(hwnd, IDC_NVENCPRESET), !bUseQSV && bUseNVENC);
SelectPresetDialog(bUseQSV, bUseNVENC);
}
case IDC_DISABLEPREVIEWENCODING:
case IDC_ALLOWOTHERHOTKEYMODIFIERS:

View File

@ -291,8 +291,11 @@
#define IDC_STARTRECORDINGHOTKEY_STATIC 1170
#define IDC_COPIED 1170
#define IDC_ANALYZE 1171
#define IDC_NVENCPRESET_LABEL 1171
#define IDC_STOPRECORDINGHOTKEY_STATIC 1171
#define IDC_STARTRECORDINGHOTKEY 1172
#define IDC_QSVPRESET_LABEL 1172
#define IDC_QSVPRESET 1173
#define IDC_STOPRECORDINGHOTKEY 1173
#define IDC_CLEARHOTKEY_STARTRECORDING 1174
#define IDC_CLEARHOTKEY_STOPRECORDING 1175
@ -351,7 +354,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 149
#define _APS_NEXT_COMMAND_VALUE 40068
#define _APS_NEXT_CONTROL_VALUE 1173
#define _APS_NEXT_CONTROL_VALUE 1174
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -163,6 +163,7 @@ Settings.Advanced.VideoEncoderSettings="Custom x264 Encoder Settings"
Settings.Advanced.VideoEncoderSettingsTooltip="This allows you to set custom x264 encoder settings. In the form of [parameter]=[value] (e.g. \"vbv-maxrate=1000 vbv-bufsize=1000\")."
Settings.Advanced.X264Profile="x264 Encoding Profile:"
Settings.Advanced.NVENCPreset="NVENC Preset:"
Settings.Advanced.QSVPreset="Quick Sync Preset:"
Settings.Advanced.DisableQSVorNVENC="Please disable either 'Use Quick Sync' or 'Use Nvidia NVENC'."
Settings.Advanced.Priority.Idle="Idle"