UI: Fix audio ids not being stored properly

Audio ids were being stored in a map with const char pointers, thus they
were destroyed when call_once finished. To fix this, store std::strings
instead.
master
jp9000 2022-03-13 07:04:11 -07:00
parent 2a991a4fa0
commit 02e5410381
3 changed files with 9 additions and 8 deletions

View File

@ -18,12 +18,12 @@ static const char *NullToEmpty(const char *str)
return str ? str : ""; return str ? str : "";
} }
static const char *EncoderName(const char *id) static const char *EncoderName(const std::string &id)
{ {
return NullToEmpty(obs_encoder_get_display_name(id)); return NullToEmpty(obs_encoder_get_display_name(id.c_str()));
} }
static map<int, const char *> bitrateMap; static map<int, std::string> bitrateMap;
static void HandleIntProperty(obs_property_t *prop, const char *id) static void HandleIntProperty(obs_property_t *prop, const char *id)
{ {
@ -199,7 +199,7 @@ static void PopulateBitrateMap()
}); });
} }
const map<int, const char *> &GetAACEncoderBitrateMap() const map<int, std::string> &GetAACEncoderBitrateMap()
{ {
PopulateBitrateMap(); PopulateBitrateMap();
return bitrateMap; return bitrateMap;
@ -211,7 +211,7 @@ const char *GetAACEncoderForBitrate(int bitrate)
auto res = map_.find(bitrate); auto res = map_.find(bitrate);
if (res == end(map_)) if (res == end(map_))
return NULL; return NULL;
return res->second; return res->second.c_str();
} }
#define INVALID_BITRATE 10000 #define INVALID_BITRATE 10000

View File

@ -4,6 +4,6 @@
#include <map> #include <map>
const std::map<int, const char *> &GetAACEncoderBitrateMap(); const std::map<int, std::string> &GetAACEncoderBitrateMap();
const char *GetAACEncoderForBitrate(int bitrate); const char *GetAACEncoderForBitrate(int bitrate);
int FindClosestAvailableAACBitrate(int bitrate); int FindClosestAvailableAACBitrate(int bitrate);

View File

@ -277,8 +277,9 @@ static void PopulateAACBitrates(initializer_list<QComboBox *> boxes)
vector<pair<QString, QString>> pairs; vector<pair<QString, QString>> pairs;
for (auto &entry : bitrateMap) for (auto &entry : bitrateMap)
pairs.emplace_back(QString::number(entry.first), pairs.emplace_back(
obs_encoder_get_display_name(entry.second)); QString::number(entry.first),
obs_encoder_get_display_name(entry.second.c_str()));
for (auto box : boxes) { for (auto box : boxes) {
QString currentText = box->currentText(); QString currentText = box->currentText();