parent
a7617744cc
commit
9af05a3f1d
4
OBS.rc
4
OBS.rc
|
@ -132,7 +132,9 @@ BEGIN
|
|||
RTEXT "Settings.Encoding.Audio.Bitrate",IDC_STATIC,221,101,128,8
|
||||
COMBOBOX IDC_AUDIOBITRATE,354,99,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Settings.Encoding.Audio.Format",IDC_STATIC,10,117,138,8
|
||||
COMBOBOX IDC_AUDIOFORMAT,152,115,264,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_AUDIOFORMAT,152,115,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Settings.Encoding.Audio.Channel",IDC_STATIC,221,117,128,8
|
||||
COMBOBOX IDC_AUDIOCHANNEL,354,115,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Settings.Info",IDC_INFO,4,288,417,37,NOT WS_VISIBLE
|
||||
RTEXT "Settings.Encoding.Video.Encoder",IDC_STATIC,10,16,138,8
|
||||
CONTROL "Settings.Encoding.Video.Encoderx264",IDC_ENCODERX264,
|
||||
|
|
|
@ -46,7 +46,7 @@ public:
|
|||
{
|
||||
curBitRate = bitRate;
|
||||
|
||||
faac = faacEncOpen(App->GetSampleRateHz(), 2, &numReadSamples, &outputSize);
|
||||
faac = faacEncOpen(App->GetSampleRateHz(), App->NumAudioChannels(), &numReadSamples, &outputSize);
|
||||
|
||||
//Log(TEXT("numReadSamples: %d"), numReadSamples);
|
||||
aacBuffer.SetSize(outputSize+2);
|
||||
|
@ -54,7 +54,7 @@ public:
|
|||
aacBuffer[1] = 0x1;
|
||||
|
||||
faacEncConfigurationPtr config = faacEncGetCurrentConfiguration(faac);
|
||||
config->bitRate = (bitRate*1000)/2;
|
||||
config->bitRate = (bitRate*1000)/App->NumAudioChannels();
|
||||
config->quantqual = 100;
|
||||
config->inputFormat = FAAC_INPUT_FLOAT;
|
||||
config->mpegVersion = MPEG4;
|
||||
|
|
|
@ -61,8 +61,14 @@ public:
|
|||
|
||||
lame_set_in_samplerate(lgf, App->GetSampleRateHz());
|
||||
lame_set_out_samplerate(lgf, App->GetSampleRateHz());
|
||||
lame_set_num_channels(lgf, 2);
|
||||
lame_set_mode(lgf, STEREO);
|
||||
lame_set_num_channels(lgf, App->NumAudioChannels());
|
||||
//lame_set_mode(lgf, STEREO);
|
||||
if (App->NumAudioChannels()==2){
|
||||
lame_set_mode(lgf, STEREO);
|
||||
}
|
||||
if (App->NumAudioChannels()==1){
|
||||
lame_set_mode(lgf, MONO);
|
||||
}
|
||||
lame_set_disable_reservoir(lgf, TRUE); //bit reservoir has to be disabled for seamless streaming
|
||||
lame_set_VBR(lgf, vbr_off);
|
||||
lame_set_brate(lgf, bitRate);
|
||||
|
|
|
@ -291,6 +291,7 @@ void SetupIni()
|
|||
|
||||
AppConfig->SetInt (TEXT("Audio Encoding"), TEXT("Format"), 1);
|
||||
AppConfig->SetString(TEXT("Audio Encoding"), TEXT("Bitrate"), TEXT("128"));
|
||||
AppConfig->SetInt (TEXT("Audio Encoding"), TEXT("isSTEREO"), 1);
|
||||
|
||||
AppConfig->SetInt (TEXT("Publish"), TEXT("Service"), 0);
|
||||
AppConfig->SetInt (TEXT("Publish"), TEXT("Mode"), 0);
|
||||
|
|
|
@ -587,6 +587,8 @@ class OBS
|
|||
List<AudioSource*> auxAudioSources;
|
||||
|
||||
UINT sampleRateHz;
|
||||
UINT audioChannels;
|
||||
BOOL isSTEREO;
|
||||
|
||||
AudioEncoder *audioEncoder;
|
||||
|
||||
|
@ -1032,6 +1034,7 @@ public:
|
|||
}
|
||||
|
||||
inline UINT GetSampleRateHz() const {return sampleRateHz;}
|
||||
inline UINT NumAudioChannels() const {return audioChannels;}
|
||||
|
||||
inline QWORD GetAudioTime() const {return latestAudioTime;}
|
||||
inline QWORD GetVideoTime() const {return latestVideoTime;}
|
||||
|
|
|
@ -473,7 +473,20 @@ retryHookTestV2:
|
|||
}
|
||||
|
||||
Log(L"------------------------------------------");
|
||||
Log(L"Audio Format: %uhz", sampleRateHz);
|
||||
Log(L"Audio Format: %u Hz", sampleRateHz);
|
||||
|
||||
//------------------------------------------------------------------
|
||||
|
||||
BOOL isSTEREO = AppConfig->GetInt(L"Audio Encoding", L"isSTEREO", 1);
|
||||
|
||||
switch (isSTEREO) {
|
||||
case 0: audioChannels = 1; break;
|
||||
default:
|
||||
case 1: audioChannels = 2; break;
|
||||
}
|
||||
|
||||
Log(L"------------------------------------------");
|
||||
Log(L"Audio Channels: %u Ch", audioChannels);
|
||||
|
||||
//------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -267,8 +267,13 @@ char* OBS::EncMetaData(char *enc, char *pend, bool bFLVFile)
|
|||
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiodatarate, double(audioBitRate)); //ex. 128kb\s
|
||||
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiosamplerate, double(App->GetSampleRateHz()));
|
||||
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiosamplesize, 16.0);
|
||||
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiochannels, 2.0);
|
||||
enc = AMF_EncodeNamedBoolean(enc, pend, &av_stereo, true);
|
||||
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiochannels, double(App->NumAudioChannels()));
|
||||
//enc = AMF_EncodeNamedBoolean(enc, pend, &av_stereo, true);
|
||||
|
||||
if (App->NumAudioChannels() > 2 || App->NumAudioChannels() <1)
|
||||
CrashError(TEXT("bad audio channnel configuration"));
|
||||
enc = AMF_EncodeNamedBoolean(enc, pend, &av_stereo, App->NumAudioChannels()==2);
|
||||
|
||||
enc = AMF_EncodeNamedString(enc, pend, &av_encoder, &av_OBSVersion);
|
||||
*enc++ = 0;
|
||||
*enc++ = 0;
|
||||
|
|
|
@ -114,6 +114,10 @@ void SettingsEncoding::ApplySettings()
|
|||
if(curSel != CB_ERR)
|
||||
AppConfig->SetInt(TEXT("Audio Encoding"), TEXT("Format"), curSel);
|
||||
|
||||
int curSelCh = (int)SendMessage(GetDlgItem(hwnd, IDC_AUDIOCHANNEL), CB_GETCURSEL, 0, 0);
|
||||
if(curSelCh != CB_ERR)
|
||||
AppConfig->SetInt(TEXT("Audio Encoding"), TEXT("isSTEREO"), curSelCh);
|
||||
|
||||
bool bUseCBR = SendMessage(GetDlgItem(hwnd, IDC_USECBR), BM_GETCHECK, 0, 0) == BST_CHECKED;
|
||||
AppConfig->SetInt(TEXT("Video Encoding"), TEXT("UseCBR"), bUseCBR);
|
||||
|
||||
|
@ -252,31 +256,60 @@ INT_PTR SettingsEncoding::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
|
|||
|
||||
//--------------------------------------------
|
||||
|
||||
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOBITRATE);
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("112"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("192"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("256"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("320"));
|
||||
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
|
||||
|
||||
LoadSettingComboString(hwndTemp, TEXT("Audio Encoding"), TEXT("Bitrate"), TEXT("96"));
|
||||
BOOL isAAC = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCODEC), CB_GETCURSEL, 0, 0) == 1;
|
||||
|
||||
if (isAAC)
|
||||
{
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48kHz"));
|
||||
} else {
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
|
||||
}
|
||||
|
||||
LoadSettingComboInt(hwndTemp, TEXT("Audio Encoding"), TEXT("Format"), 1, isAAC ? 1 : 0);
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
|
||||
//SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48khz mono"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1khz stereo"));
|
||||
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOCHANNEL);
|
||||
|
||||
BOOL isAAC = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCODEC), CB_GETCURSEL, 0, 0) == 1;
|
||||
if (isAAC)
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48khz stereo"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("mono"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("stereo"));
|
||||
|
||||
LoadSettingComboInt(hwndTemp, TEXT("Audio Encoding"), TEXT("Format"), 1, isAAC ? 1 : 0);
|
||||
LoadSettingComboInt(hwndTemp, TEXT("Audio Encoding"), TEXT("isSTEREO"), 1, 1);
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOBITRATE);
|
||||
|
||||
BOOL isSTEREO = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCHANNEL), CB_GETCURSEL, 0, 0) == 1;
|
||||
|
||||
if (isSTEREO)
|
||||
{
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));//default
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("112"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("192"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("256"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("320"));
|
||||
}else{
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("32"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("40"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));//default
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("56"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
|
||||
}
|
||||
|
||||
LoadSettingComboString(hwndTemp, TEXT("Audio Encoding"), TEXT("Bitrate"), isSTEREO ? TEXT("96") : TEXT("48"));
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
|
@ -299,23 +332,73 @@ INT_PTR SettingsEncoding::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
|
|||
{
|
||||
case IDC_QUALITY:
|
||||
case IDC_AUDIOBITRATE:
|
||||
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||||
{
|
||||
bDataChanged = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case IDC_AUDIOFORMAT:
|
||||
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||||
{
|
||||
bDataChanged = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case IDC_AUDIOCHANNEL:
|
||||
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||||
{
|
||||
HWND hwndAudioBitrate = GetDlgItem(hwnd, IDC_AUDIOBITRATE);
|
||||
SendMessage(hwndAudioBitrate, CB_RESETCONTENT, 0, 0);
|
||||
|
||||
BOOL isSTEREO = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCHANNEL), CB_GETCURSEL, 0, 0) == 1;
|
||||
|
||||
if (isSTEREO)
|
||||
{
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));//default
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("112"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("192"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("256"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("320"));
|
||||
}else{
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("32"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("40"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));//default
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("56"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
|
||||
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
|
||||
}
|
||||
|
||||
SendMessage(hwndAudioBitrate, CB_SETCURSEL, isSTEREO ? 3 : 2, 0);
|
||||
|
||||
bDataChanged = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case IDC_AUDIOCODEC:
|
||||
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||||
{
|
||||
HWND hwndTemp = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
|
||||
SendMessage(hwndTemp, CB_RESETCONTENT, 0, 0);
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1khz stereo"));
|
||||
HWND hwndAudioFormat = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
|
||||
SendMessage(hwndAudioFormat, CB_RESETCONTENT, 0, 0);
|
||||
|
||||
BOOL isAAC = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCODEC), CB_GETCURSEL, 0, 0) == 1;
|
||||
if (isAAC)
|
||||
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48khz stereo"));
|
||||
|
||||
SendMessage(hwndTemp, CB_SETCURSEL, isAAC ? 1 : 0, 0);
|
||||
if (isAAC){
|
||||
SendMessage(hwndAudioFormat, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
|
||||
SendMessage(hwndAudioFormat, CB_ADDSTRING, 0, (LPARAM)TEXT("48kHz"));
|
||||
}else{
|
||||
SendMessage(hwndAudioFormat, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
|
||||
}
|
||||
|
||||
SendMessage(hwndAudioFormat, CB_SETCURSEL, isAAC ? 1 : 0, 0);
|
||||
|
||||
bDataChanged = true;
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@
|
|||
#define IDC_BASETHRESHOLD_EDIT 1020
|
||||
#define IDC_KEYFRAMEINTERVAL_EDIT 1020
|
||||
#define IDC_VIDEOCODEC 1020
|
||||
#define IDC_AUDIOCHANNEL 1021
|
||||
#define IDC_BASETHRESHOLD 1021
|
||||
#define IDC_BLEND_EDIT 1022
|
||||
#define IDC_BLEND 1023
|
||||
|
|
|
@ -191,6 +191,7 @@ Settings.Encoding.Video="Video Encoding"
|
|||
Settings.Encoding.Audio.Bitrate="Bitrate:"
|
||||
Settings.Encoding.Audio.Codec="Codec:"
|
||||
Settings.Encoding.Audio.Format="Format:"
|
||||
Settings.Encoding.Audio.Channel="Channel:"
|
||||
|
||||
Settings.Encoding.Video.Encoder="Encoder:"
|
||||
Settings.Encoding.Video.Encoderx264="x264"
|
||||
|
|
Loading…
Reference in New Issue