From fcfe891dcf4f6398a465cc885a84e1d4073ec278 Mon Sep 17 00:00:00 2001 From: Palana Date: Mon, 10 Aug 2015 14:54:42 +0200 Subject: [PATCH] coreaudio-encoder: Update bitrate property on sample rate modification --- plugins/coreaudio-encoder/encoder.cpp | 43 +++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/plugins/coreaudio-encoder/encoder.cpp b/plugins/coreaudio-encoder/encoder.cpp index e3269ad5f..a74efe138 100644 --- a/plugins/coreaudio-encoder/encoder.cpp +++ b/plugins/coreaudio-encoder/encoder.cpp @@ -1260,8 +1260,10 @@ static vector get_bitrates(DStr &log, ca_encoder *ca, } static void add_bitrates(obs_property_t *prop, ca_encoder *ca, - Float64 samplerate=44100.) + Float64 samplerate=44100., UInt32 *selected=nullptr) { + obs_property_list_clear(prop); + DStr log; auto bitrates = get_bitrates(log, ca, samplerate); @@ -1274,15 +1276,51 @@ static void add_bitrates(obs_property_t *prop, ca_encoder *ca, if (log->len) CA_CO_DLOG_(LOG_DEBUG, "Bitrate enumeration log"); + bool selected_in_range = true; + if (selected) { + selected_in_range = find(begin(bitrates), end(bitrates), + *selected * 1000) != end(bitrates); + + if (!selected_in_range) + bitrates.push_back(*selected * 1000); + } + sort(begin(bitrates), end(bitrates)); DStr buffer; for (UInt32 bitrate : bitrates) { dstr_printf(buffer, "%u", (uint32_t)bitrate / 1000); - obs_property_list_add_int(prop, buffer->array, bitrate / 1000); + size_t idx = obs_property_list_add_int(prop, buffer->array, + bitrate / 1000); + + if (selected_in_range || bitrate / 1000 != *selected) + continue; + + obs_property_list_item_disable(prop, idx, true); } } +static bool samplerate_updated(obs_properties_t *props, obs_property_t *prop, + obs_data_t *settings) +{ + auto samplerate = + static_cast(obs_data_get_int(settings, "samplerate")); + if (!samplerate) + samplerate = 44100; + + prop = obs_properties_get(props, "bitrate"); + if (prop) { + auto bitrate = static_cast( + obs_data_get_int(settings, "bitrate")); + + add_bitrates(prop, nullptr, samplerate, &bitrate); + + return true; + } + + return false; +} + static obs_properties_t *aac_properties(void *data) { ca_encoder *ca = static_cast(data); @@ -1293,6 +1331,7 @@ static obs_properties_t *aac_properties(void *data) obs_module_text("OutputSamplerate"), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); add_samplerates(p, ca); + obs_property_set_modified_callback(p, samplerate_updated); p = obs_properties_add_list(props, "bitrate", obs_module_text("Bitrate"),