提交 5bb88634 编写于 作者: P Palana

UI: Create best matching audio encoder for given bitrate

上级 8945309b
#include <string> #include <string>
#include <QMessageBox> #include <QMessageBox>
#include "audio-encoders.hpp"
#include "window-basic-main.hpp" #include "window-basic-main.hpp"
#include "window-basic-main-outputs.hpp" #include "window-basic-main-outputs.hpp"
...@@ -46,26 +47,28 @@ static void OBSStopRecording(void *data, calldata_t *params) ...@@ -46,26 +47,28 @@ static void OBSStopRecording(void *data, calldata_t *params)
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
static OBSEncoder CreateAACEncoder(const char *name, size_t idx) static bool CreateAACEncoder(OBSEncoder &res, string &id, int bitrate,
const char *name, size_t idx)
{ {
static const char *encoders[] = { const char *id_ = GetAACEncoderForBitrate(bitrate);
"CoreAudio_AAC", if (!id_) {
"libfdk_aac", id.clear();
"ffmpeg_aac" res = nullptr;
}; return false;
}
OBSEncoder result; if (id == id_)
return true;
for (const char *encoder : encoders) { id = id_;
result = obs_audio_encoder_create(encoder, name, nullptr, idx, res = obs_audio_encoder_create(id_, name, nullptr, idx, nullptr);
nullptr);
if (result) { if (res) {
obs_encoder_release(result); obs_encoder_release(res);
break; return true;
}
} }
return result; return false;
} }
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
...@@ -74,6 +77,8 @@ struct SimpleOutput : BasicOutputHandler { ...@@ -74,6 +77,8 @@ struct SimpleOutput : BasicOutputHandler {
OBSEncoder aac; OBSEncoder aac;
OBSEncoder h264; OBSEncoder h264;
string aacEncoderID;
SimpleOutput(OBSBasic *main_); SimpleOutput(OBSBasic *main_);
virtual void Update() override; virtual void Update() override;
...@@ -109,8 +114,8 @@ SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_) ...@@ -109,8 +114,8 @@ SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_)
throw "Failed to create h264 encoder (simple output)"; throw "Failed to create h264 encoder (simple output)";
obs_encoder_release(h264); obs_encoder_release(h264);
aac = CreateAACEncoder("simple_aac", 0); if (!CreateAACEncoder(aac, aacEncoderID, GetAudioBitrate(),
if (!aac) "simple_aac", 0))
throw "Failed to create audio encoder (simple output)"; throw "Failed to create audio encoder (simple output)";
startStreaming.Connect(obs_output_get_signal_handler(streamOutput), startStreaming.Connect(obs_output_get_signal_handler(streamOutput),
...@@ -296,6 +301,8 @@ struct AdvancedOutput : BasicOutputHandler { ...@@ -296,6 +301,8 @@ struct AdvancedOutput : BasicOutputHandler {
bool ffmpegRecording; bool ffmpegRecording;
bool useStreamEncoder; bool useStreamEncoder;
string aacEncoderID[4];
AdvancedOutput(OBSBasic *main_); AdvancedOutput(OBSBasic *main_);
inline void UpdateStreamSettings(); inline void UpdateStreamSettings();
...@@ -393,8 +400,8 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_) ...@@ -393,8 +400,8 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_)
char name[9]; char name[9];
sprintf(name, "adv_aac%d", i); sprintf(name, "adv_aac%d", i);
aacTrack[i] = CreateAACEncoder(name, i); if (!CreateAACEncoder(aacTrack[i], aacEncoderID[i],
if (!aacTrack[i]) GetAudioBitrate(i), name, i))
throw "Failed to create audio encoder " throw "Failed to create audio encoder "
"(advanced output)"; "(advanced output)";
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册