diff --git a/OBS.rc b/OBS.rc index e2f84412..2f3104ba 100644 --- a/OBS.rc +++ b/OBS.rc @@ -353,39 +353,41 @@ IDD_SETTINGS_ADVANCED DIALOGEX 0, 0, 427, 336 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Settings.General",IDC_STATIC,4,2,413,60 + GROUPBOX "Settings.General",IDC_STATIC,4,2,413,75 CONTROL "Settings.Advanced.UseMultithreadedOptimizations",IDC_USEMULTITHREADEDOPTIMIZATIONS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,15,173,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,15,300,10 RTEXT "Settings.Advanced.ProcessPriority",IDC_STATIC,7,29,168,8 COMBOBOX IDC_PRIORITY,177,27,150,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP RTEXT "Settings.Advanced.SceneBufferTime",IDC_STATIC,7,47,168,8 EDITTEXT IDC_SCENEBUFFERTIME_EDIT,177,44,40,14,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SCENEBUFFERTIME,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,218,44,10,14 - GROUPBOX "Settings.Video",IDC_STATIC,4,67,413,98 - RTEXT "Settings.Advanced.VideoEncoderCPUTradeoff",IDC_STATIC,5,79,168,8 - COMBOBOX IDC_PRESET,177,77,82,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Settings.Advanced.UseCFR",IDC_USECFR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,93,292,10 + CONTROL "Settings.Advanced.DisablePreviewEncoding",IDC_DISABLEPREVIEWENCODING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,21,62,318,10 + GROUPBOX "Settings.Video",IDC_STATIC,4,81,413,98 + RTEXT "Settings.Advanced.VideoEncoderCPUTradeoff",IDC_STATIC,5,93,168,8 + COMBOBOX IDC_PRESET,177,91,82,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Settings.Advanced.UseCFR",IDC_USECFR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,107,292,10 CONTROL "Settings.Advanced.VideoEncoderSettings",IDC_USEVIDEOENCODERSETTINGS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,106,260,10 - EDITTEXT IDC_VIDEOENCODERSETTINGS,33,119,373,14,ES_AUTOHSCROLL + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,120,260,10 + EDITTEXT IDC_VIDEOENCODERSETTINGS,33,133,373,14,ES_AUTOHSCROLL CONTROL "Settings.Advanced.UnlockHigherFPS",IDC_UNLOCKHIGHFPS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,138,217,10 - GROUPBOX "Settings.Audio",IDC_STATIC,4,167,413,57 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,152,217,10 + GROUPBOX "Settings.Audio",IDC_STATIC,4,181,413,57 CONTROL "Settings.Advanced.SyncToVideoTime",IDC_SYNCTOVIDEOTIME, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,179,390,10 - LTEXT "Settings.Advanced.GlobalAudioTimeAdjust",IDC_STATIC,5,194,168,8,0,WS_EX_RIGHT - EDITTEXT IDC_AUDIOTIMEADJUST_EDIT,176,191,40,14,ES_AUTOHSCROLL - CONTROL "",IDC_AUDIOTIMEADJUST,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,216,191,10,14 - CONTROL "Settings.Audio.UseMicQPC",IDC_USEMICQPC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,208,332,10 - GROUPBOX "Settings.Advanced.Network",IDC_STATIC,7,228,413,60 - RTEXT "Settings.Advanced.BindToIP",IDC_STATIC,4,241,168,8 - COMBOBOX IDC_BINDIP,177,239,150,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,193,390,10 + LTEXT "Settings.Advanced.GlobalAudioTimeAdjust",IDC_STATIC,5,208,168,8,0,WS_EX_RIGHT + EDITTEXT IDC_AUDIOTIMEADJUST_EDIT,176,205,40,14,ES_AUTOHSCROLL + CONTROL "",IDC_AUDIOTIMEADJUST,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,216,205,10,14 + CONTROL "Settings.Audio.UseMicQPC",IDC_USEMICQPC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,222,332,10 + GROUPBOX "Settings.Advanced.Network",IDC_STATIC,7,242,413,60 + RTEXT "Settings.Advanced.BindToIP",IDC_STATIC,4,255,168,8 + COMBOBOX IDC_BINDIP,177,253,150,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Settings.Advanced.AutomaticLatency",IDC_LATENCYMETHOD, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,256,169,10,WS_EX_RIGHT - RTEXT "Settings.Advanced.LatencyTuning",IDC_STATIC,5,271,168,8 - EDITTEXT IDC_LATENCYTUNE,178,268,40,14,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "Settings.Info",IDC_INFO,7,293,418,24,NOT WS_VISIBLE - CONTROL "Settings.Advanced.UseQSV",IDC_USEQSV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,151,217,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,270,169,10,WS_EX_RIGHT + RTEXT "Settings.Advanced.LatencyTuning",IDC_STATIC,5,285,168,8 + EDITTEXT IDC_LATENCYTUNE,178,282,40,14,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Settings.Info",IDC_INFO,7,304,418,24,NOT WS_VISIBLE + CONTROL "Settings.Advanced.UseQSV",IDC_USEQSV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,165,217,10 END IDD_CONFIGURETRANSITIONSOURCE DIALOGEX 0, 0, 338, 216 @@ -705,7 +707,7 @@ BEGIN RIGHTMARGIN, 420 TOPMARGIN, 7 BOTTOMMARGIN, 328 - HORZGUIDE, 67 + HORZGUIDE, 7 END IDD_CONFIGURETRANSITIONSOURCE, DIALOG diff --git a/Source/NullOutput.cpp b/Source/NullOutput.cpp index e6b5c7c7..83cc89af 100644 --- a/Source/NullOutput.cpp +++ b/Source/NullOutput.cpp @@ -23,7 +23,7 @@ class NullVideoEncoder : public VideoEncoder { public: - virtual bool Encode(LPVOID picIn, List &packets, List &packetTypes, DWORD timestamp, int &ctsOffset) {return true;} + virtual bool Encode(LPVOID picIn, List &packets, List &packetTypes, DWORD timestamp, int &ctsOffset) {return false;} virtual void GetHeaders(DataPacket &packet) {} virtual int GetBitRate() const {return 0;} virtual String GetInfoString() const {return String();} @@ -35,7 +35,7 @@ public: class NullAudioEncoder : public AudioEncoder { public: - virtual bool Encode(float *input, UINT numInputFrames, DataPacket &packet, QWORD ×tamp) {return true;} + virtual bool Encode(float *input, UINT numInputFrames, DataPacket &packet, QWORD ×tamp) {return false;} virtual void GetHeaders(DataPacket &packet) {} virtual UINT GetFrameSize() const {return 0;} virtual int GetBitRate() const {return 0;} diff --git a/Source/OBSCapture.cpp b/Source/OBSCapture.cpp index 3f60f8b3..561c12ca 100644 --- a/Source/OBSCapture.cpp +++ b/Source/OBSCapture.cpp @@ -304,11 +304,21 @@ void OBS::Start() //------------------------------------------------------------- + bool bDisableEncoding = false; + + if (bTestStream) + bDisableEncoding = GlobalConfig->GetInt(TEXT("General"), TEXT("DisablePreviewEncoding"), false) != 0; + + //------------------------------------------------------------- + UINT bitRate = (UINT)AppConfig->GetInt(TEXT("Audio Encoding"), TEXT("Bitrate"), 96); String strEncoder = AppConfig->GetString(TEXT("Audio Encoding"), TEXT("Codec"), TEXT("AAC")); + if (bDisableEncoding) + audioEncoder = CreateNullAudioEncoder(); + else #ifdef USE_AAC - if(strEncoder.CompareI(TEXT("AAC")) && OSGetVersion() >= 7) + if(strEncoder.CompareI(TEXT("AAC")))// && OSGetVersion() >= 7) audioEncoder = CreateAACEncoder(bitRate); else #endif @@ -440,8 +450,11 @@ void OBS::Start() ctsOffset = 0; videoEncoder = nullptr; - if(AppConfig->GetInt(TEXT("Video Encoding"), TEXT("UseQSV")) != 0) + if (bDisableEncoding) + videoEncoder = CreateNullVideoEncoder(); + else if(GlobalConfig->GetInt(TEXT("Video Encoding"), TEXT("UseQSV")) != 0) videoEncoder = CreateQSVEncoder(fps, outputCX, outputCY, quality, preset, bUsing444, maxBitRate, bufferSize, bUseCFR, bDupeFrames); + if(!videoEncoder) videoEncoder = CreateX264Encoder(fps, outputCX, outputCY, quality, preset, bUsing444, maxBitRate, bufferSize, bUseCFR, bDupeFrames); diff --git a/Source/OBSVideoCapture.cpp b/Source/OBSVideoCapture.cpp index 35b8735d..68f2758d 100644 --- a/Source/OBSVideoCapture.cpp +++ b/Source/OBSVideoCapture.cpp @@ -291,7 +291,7 @@ void OBS::MainCaptureLoop() int curOutBuffer = 0; - bool bUsingQSV = videoEncoder->isQSV();//AppConfig->GetInt(TEXT("Video Encoding"), TEXT("UseQSV")) != 0; + bool bUsingQSV = videoEncoder->isQSV();//GlobalConfig->GetInt(TEXT("Video Encoding"), TEXT("UseQSV")) != 0; if(bUsingQSV) bUsing444 = false; diff --git a/Source/SettingsAdvanced.cpp b/Source/SettingsAdvanced.cpp index ccefa9cc..8043071c 100644 --- a/Source/SettingsAdvanced.cpp +++ b/Source/SettingsAdvanced.cpp @@ -79,6 +79,11 @@ void SettingsAdvanced::ApplySettings() //-------------------------------------------------- + bool bDisablePreviewEncoding = SendMessage(GetDlgItem(hwnd, IDC_DISABLEPREVIEWENCODING), BM_GETCHECK, 0, 0) == BST_CHECKED; + GlobalConfig->SetInt(TEXT("General"), TEXT("DisablePreviewEncoding"), bDisablePreviewEncoding); + + //-------------------------------------------------- + bool bUseCFR = SendMessage(GetDlgItem(hwnd, IDC_USECFR), BM_GETCHECK, 0, 0) == BST_CHECKED; AppConfig->SetInt (TEXT("Video Encoding"), TEXT("UseCFR"), bUseCFR); @@ -98,7 +103,7 @@ void SettingsAdvanced::ApplySettings() //------------------------------------ BOOL bUseQSV = SendMessage(GetDlgItem(hwnd, IDC_USEQSV), BM_GETCHECK, 0, 0) == BST_CHECKED; - AppConfig->SetInt (TEXT("Video Encoding"), TEXT("UseQSV"), bUseQSV); + GlobalConfig->SetInt(TEXT("Video Encoding"), TEXT("UseQSV"), bUseQSV); //------------------------------------ @@ -210,6 +215,11 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam else //Normal SendMessage(hwndTemp, CB_SETCURSEL, 2, 0); + //------------------------------------ + + bool bDisablePreviewEncoding = GlobalConfig->GetInt(TEXT("General"), TEXT("DisablePreviewEncoding"), false) != 0; + SendMessage(GetDlgItem(hwnd, IDC_DISABLEPREVIEWENCODING), BM_SETCHECK, bDisablePreviewEncoding ? BST_CHECKED : BST_UNCHECKED, 0); + //-------------------------------------------- hwndTemp = GetDlgItem(hwnd, IDC_PRESET); @@ -252,7 +262,7 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam //------------------------------------ - bool bUseQSV = AppConfig->GetInt(TEXT("Video Encoding"), TEXT("UseQSV")) != 0; + bool bUseQSV = GlobalConfig->GetInt(TEXT("Video Encoding"), TEXT("UseQSV")) != 0; SendMessage(GetDlgItem(hwnd, IDC_USEQSV), BM_SETCHECK, bUseQSV ? BST_CHECKED : BST_UNCHECKED, 0); //------------------------------------ @@ -412,6 +422,7 @@ INT_PTR SettingsAdvanced::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam } break; + case IDC_DISABLEPREVIEWENCODING: case IDC_USEMICQPC: case IDC_SYNCTOVIDEOTIME: case IDC_USECFR: diff --git a/Source/SettingsEncoding.cpp b/Source/SettingsEncoding.cpp index a68fb2d4..5510fb67 100644 --- a/Source/SettingsEncoding.cpp +++ b/Source/SettingsEncoding.cpp @@ -163,7 +163,7 @@ INT_PTR SettingsEncoding::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("MP3")); #ifdef USE_AAC - if(OSGetVersion() >= 7) + if(1)//OSGetVersion() >= 7) { SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("AAC")); LoadSettingComboString(hwndTemp, TEXT("Audio Encoding"), TEXT("Codec"), TEXT("AAC")); diff --git a/resource.h b/resource.h index ac4cdbfa..7ac64bd0 100644 --- a/resource.h +++ b/resource.h @@ -206,6 +206,8 @@ #define IDC_TIMER1 1100 #define IDC_CAPTURERAM 1100 #define IDC_COMPATIBILITYMODE 1100 +#define IDC_USEMULTITHREADEDOPTIMIZATIONS2 1100 +#define IDC_DISABLEPREVIEWENCODING 1100 #define IDC_PROGRESS1 1101 #define IDC_DASHBOARDLINK_STATIC 1102 #define IDC_DASHBOARDLINK 1103 diff --git a/rundir/locale/en.txt b/rundir/locale/en.txt index b15041fe..c455c306 100644 --- a/rundir/locale/en.txt +++ b/rundir/locale/en.txt @@ -120,6 +120,7 @@ Settings.Video "Video" Settings.Advanced.AutomaticLatency "Automatic low latency mode:" Settings.Advanced.BindToIP "Bind To Interface:" +Settings.Advanced.DisablePreviewEncoding "Disable encoding while previewing" Settings.Advanced.GlobalAudioTimeAdjust "Global Audio Time Offset (milliseconds):" Settings.Advanced.LatencyTuning "Latency tuning factor:" Settings.Advanced.Network "Network"