Loading services/audioflinger/Threads.cpp +16 −12 Original line number Diff line number Diff line Loading @@ -338,28 +338,32 @@ std::string IAfThreadBase::formatToString(audio_format_t format) { // under #ifdef __cplusplus #endif static std::string patchSinksToString(const struct audio_patch *patch) { std::stringstream ss; std::string s; for (size_t i = 0; i < patch->num_sinks; ++i) { if (i > 0) { ss << "|"; if (i > 0) s.append("|"); if (patch->sinks[i].ext.device.address[0]) { s.append("(").append(toString(patch->sinks[i].ext.device.type)) .append(", ").append(patch->sinks[i].ext.device.address).append(")"); } else { s.append(toString(patch->sinks[i].ext.device.type)); } ss << "(" << toString(patch->sinks[i].ext.device.type) << ", " << patch->sinks[i].ext.device.address << ")"; } return ss.str(); return s; } static std::string patchSourcesToString(const struct audio_patch *patch) { std::stringstream ss; std::string s; for (size_t i = 0; i < patch->num_sources; ++i) { if (i > 0) { ss << "|"; if (i > 0) s.append("|"); if (patch->sources[i].ext.device.address[0]) { s.append("(").append(toString(patch->sources[i].ext.device.type)) .append(", ").append(patch->sources[i].ext.device.address).append(")"); } else { s.append(toString(patch->sources[i].ext.device.type)); } ss << "(" << toString(patch->sources[i].ext.device.type) << ", " << patch->sources[i].ext.device.address << ")"; } return ss.str(); return s; } static std::string toString(audio_latency_mode_t mode) { Loading services/mediametrics/StringUtils.cpp +27 −20 Original line number Diff line number Diff line Loading @@ -80,33 +80,40 @@ std::vector<std::pair<std::string, std::string>> getDeviceAddressPairs(const std { std::vector<std::pair<std::string, std::string>> result; // Currently, the device format is EXACTLY // (device1, addr1)|(device2, addr2)|... // Currently, the device format is // // devices = device_addr OR device_addr|devices // device_addr = device OR (device, addr) // // EXAMPLE: // device1|(device2, addr2)|... static constexpr char delim[] = "()|,"; for (auto it = devices.begin(); ; ) { std::string address; std::string device = tokenizer(it, devices.end(), delim); if (device.empty()) return result; if (device == "(") { // it is a pair otherwise we consider it a device device = tokenizer(it, devices.end(), delim); // get actual device auto token = tokenizer(it, devices.end(), delim); if (token != "(") return result; auto device = tokenizer(it, devices.end(), delim); if (device.empty() || !std::isalnum(device[0])) return result; token = tokenizer(it, devices.end(), delim); if (token != ",") return result; if (token != ",") return result; // malformed, must have a comma // special handling here for empty addresses auto address = tokenizer(it, devices.end(), delim); if (address.empty() || !std::isalnum(device[0])) return result; address = tokenizer(it, devices.end(), delim); if (address.empty()) return result; if (address == ")") { // no address, just the ")" address.clear(); } else { token = tokenizer(it, devices.end(), delim); if (token != ")") return result; } } // misaligned token, device must start alphanumeric. if (!std::isalnum(device[0])) return result; result.emplace_back(std::move(device), std::move(address)); token = tokenizer(it, devices.end(), delim); auto token = tokenizer(it, devices.end(), delim); if (token != "|") return result; // this includes end of string detection } } Loading services/mediametrics/tests/mediametrics_tests.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -963,6 +963,31 @@ TEST(mediametrics_tests, device_parsing) { ASSERT_EQ("B", devaddr[0].second); ASSERT_EQ("C", devaddr[1].first); ASSERT_EQ("D2", devaddr[1].second); devaddr = android::mediametrics::stringutils::getDeviceAddressPairs( " Z "); ASSERT_EQ((size_t)1, devaddr.size()); ASSERT_EQ("Z", devaddr[0].first); devaddr = android::mediametrics::stringutils::getDeviceAddressPairs( " A | B|C "); ASSERT_EQ((size_t)3, devaddr.size()); ASSERT_EQ("A", devaddr[0].first); ASSERT_EQ("", devaddr[0].second); ASSERT_EQ("B", devaddr[1].first); ASSERT_EQ("", devaddr[1].second); ASSERT_EQ("C", devaddr[2].first); ASSERT_EQ("", devaddr[2].second); devaddr = android::mediametrics::stringutils::getDeviceAddressPairs( " A | (B1, 10) |C "); ASSERT_EQ((size_t)3, devaddr.size()); ASSERT_EQ("A", devaddr[0].first); ASSERT_EQ("", devaddr[0].second); ASSERT_EQ("B1", devaddr[1].first); ASSERT_EQ("10", devaddr[1].second); ASSERT_EQ("C", devaddr[2].first); ASSERT_EQ("", devaddr[2].second); } TEST(mediametrics_tests, timed_action) { Loading Loading
services/audioflinger/Threads.cpp +16 −12 Original line number Diff line number Diff line Loading @@ -338,28 +338,32 @@ std::string IAfThreadBase::formatToString(audio_format_t format) { // under #ifdef __cplusplus #endif static std::string patchSinksToString(const struct audio_patch *patch) { std::stringstream ss; std::string s; for (size_t i = 0; i < patch->num_sinks; ++i) { if (i > 0) { ss << "|"; if (i > 0) s.append("|"); if (patch->sinks[i].ext.device.address[0]) { s.append("(").append(toString(patch->sinks[i].ext.device.type)) .append(", ").append(patch->sinks[i].ext.device.address).append(")"); } else { s.append(toString(patch->sinks[i].ext.device.type)); } ss << "(" << toString(patch->sinks[i].ext.device.type) << ", " << patch->sinks[i].ext.device.address << ")"; } return ss.str(); return s; } static std::string patchSourcesToString(const struct audio_patch *patch) { std::stringstream ss; std::string s; for (size_t i = 0; i < patch->num_sources; ++i) { if (i > 0) { ss << "|"; if (i > 0) s.append("|"); if (patch->sources[i].ext.device.address[0]) { s.append("(").append(toString(patch->sources[i].ext.device.type)) .append(", ").append(patch->sources[i].ext.device.address).append(")"); } else { s.append(toString(patch->sources[i].ext.device.type)); } ss << "(" << toString(patch->sources[i].ext.device.type) << ", " << patch->sources[i].ext.device.address << ")"; } return ss.str(); return s; } static std::string toString(audio_latency_mode_t mode) { Loading
services/mediametrics/StringUtils.cpp +27 −20 Original line number Diff line number Diff line Loading @@ -80,33 +80,40 @@ std::vector<std::pair<std::string, std::string>> getDeviceAddressPairs(const std { std::vector<std::pair<std::string, std::string>> result; // Currently, the device format is EXACTLY // (device1, addr1)|(device2, addr2)|... // Currently, the device format is // // devices = device_addr OR device_addr|devices // device_addr = device OR (device, addr) // // EXAMPLE: // device1|(device2, addr2)|... static constexpr char delim[] = "()|,"; for (auto it = devices.begin(); ; ) { std::string address; std::string device = tokenizer(it, devices.end(), delim); if (device.empty()) return result; if (device == "(") { // it is a pair otherwise we consider it a device device = tokenizer(it, devices.end(), delim); // get actual device auto token = tokenizer(it, devices.end(), delim); if (token != "(") return result; auto device = tokenizer(it, devices.end(), delim); if (device.empty() || !std::isalnum(device[0])) return result; token = tokenizer(it, devices.end(), delim); if (token != ",") return result; if (token != ",") return result; // malformed, must have a comma // special handling here for empty addresses auto address = tokenizer(it, devices.end(), delim); if (address.empty() || !std::isalnum(device[0])) return result; address = tokenizer(it, devices.end(), delim); if (address.empty()) return result; if (address == ")") { // no address, just the ")" address.clear(); } else { token = tokenizer(it, devices.end(), delim); if (token != ")") return result; } } // misaligned token, device must start alphanumeric. if (!std::isalnum(device[0])) return result; result.emplace_back(std::move(device), std::move(address)); token = tokenizer(it, devices.end(), delim); auto token = tokenizer(it, devices.end(), delim); if (token != "|") return result; // this includes end of string detection } } Loading
services/mediametrics/tests/mediametrics_tests.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -963,6 +963,31 @@ TEST(mediametrics_tests, device_parsing) { ASSERT_EQ("B", devaddr[0].second); ASSERT_EQ("C", devaddr[1].first); ASSERT_EQ("D2", devaddr[1].second); devaddr = android::mediametrics::stringutils::getDeviceAddressPairs( " Z "); ASSERT_EQ((size_t)1, devaddr.size()); ASSERT_EQ("Z", devaddr[0].first); devaddr = android::mediametrics::stringutils::getDeviceAddressPairs( " A | B|C "); ASSERT_EQ((size_t)3, devaddr.size()); ASSERT_EQ("A", devaddr[0].first); ASSERT_EQ("", devaddr[0].second); ASSERT_EQ("B", devaddr[1].first); ASSERT_EQ("", devaddr[1].second); ASSERT_EQ("C", devaddr[2].first); ASSERT_EQ("", devaddr[2].second); devaddr = android::mediametrics::stringutils::getDeviceAddressPairs( " A | (B1, 10) |C "); ASSERT_EQ((size_t)3, devaddr.size()); ASSERT_EQ("A", devaddr[0].first); ASSERT_EQ("", devaddr[0].second); ASSERT_EQ("B1", devaddr[1].first); ASSERT_EQ("10", devaddr[1].second); ASSERT_EQ("C", devaddr[2].first); ASSERT_EQ("", devaddr[2].second); } TEST(mediametrics_tests, timed_action) { Loading