diff options
Diffstat (limited to 'devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp')
-rw-r--r-- | devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp b/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp index 910c9cb..d3efc6e 100644 --- a/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp +++ b/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp @@ -35,11 +35,14 @@ namespace android { // Location of the camera configuration files. -const char* EmulatedCameraProviderHwlImpl::kConfigurationFileLocation[] = { - "/vendor/etc/config/emu_camera_back.json", - "/vendor/etc/config/emu_camera_front.json", - "/vendor/etc/config/emu_camera_depth.json", +constexpr std::string_view kConfigurationFileNames[] = { + "emu_camera_back.json", + "emu_camera_front.json", + "emu_camera_depth.json", }; +constexpr std::string_view kConfigurationFileDirVendor = "/vendor/etc/config/"; +constexpr std::string_view kConfigurationFileDirApex = + "/apex/com.google.emulated.camera.provider.hal/etc/config/"; constexpr StreamSize s240pStreamSize = std::pair(240, 180); constexpr StreamSize s720pStreamSize = std::pair(1280, 720); @@ -698,11 +701,18 @@ status_t EmulatedCameraProviderHwlImpl::Initialize() { // accordingly, push any remaining physical cameras in the back. std::string config; size_t logical_id = 0; - std::vector<const char*> configurationFileLocation; + std::vector<std::string> config_file_locations; + std::string config_dir = ""; + struct stat st; + if (stat(kConfigurationFileDirApex.data(), &st) == 0) { + config_dir += kConfigurationFileDirApex.data(); + } else { + config_dir += kConfigurationFileDirVendor.data(); + } char prop[PROPERTY_VALUE_MAX]; if (!property_get_bool("ro.boot.qemu", false)) { - for (const auto& iter : kConfigurationFileLocation) { - configurationFileLocation.emplace_back(iter); + for (const auto& iter : kConfigurationFileNames) { + config_file_locations.emplace_back(config_dir + iter.data()); } } else { // Android Studio Emulator @@ -710,34 +720,38 @@ status_t EmulatedCameraProviderHwlImpl::Initialize() { if (WaitForQemuSfFakeCameraPropertyAvailable() == OK) { property_get("vendor.qemu.sf.fake_camera", prop, nullptr); if (strcmp(prop, "both") == 0) { - configurationFileLocation.emplace_back(kConfigurationFileLocation[0]); - configurationFileLocation.emplace_back(kConfigurationFileLocation[1]); + config_file_locations.emplace_back(config_dir + + kConfigurationFileNames[0].data()); + config_file_locations.emplace_back(config_dir + + kConfigurationFileNames[1].data()); } else if (strcmp(prop, "front") == 0) { - configurationFileLocation.emplace_back(kConfigurationFileLocation[1]); + config_file_locations.emplace_back(config_dir + + kConfigurationFileNames[1].data()); logical_id = 1; } else if (strcmp(prop, "back") == 0) { - configurationFileLocation.emplace_back(kConfigurationFileLocation[0]); + config_file_locations.emplace_back(config_dir + + kConfigurationFileNames[0].data()); logical_id = 1; } } } } - static_metadata_.resize(ARRAY_SIZE(kConfigurationFileLocation)); + static_metadata_.resize(ARRAY_SIZE(kConfigurationFileNames)); - for (const auto& config_path : configurationFileLocation) { + for (const auto& config_path : config_file_locations) { if (!android::base::ReadFileToString(config_path, &config)) { ALOGW("%s: Could not open configuration file: %s", __FUNCTION__, - config_path); + config_path.c_str()); continue; } Json::CharReaderBuilder builder; std::unique_ptr<Json::CharReader> config_reader(builder.newCharReader()); Json::Value root; - std::string errorMessage; - if (!config_reader->parse(&*config.begin(), &*config.end(), &root, &errorMessage)) { - ALOGE("Could not parse configuration file: %s", - errorMessage.c_str()); + std::string error_message; + if (!config_reader->parse(&*config.begin(), &*config.end(), &root, + &error_message)) { + ALOGE("Could not parse configuration file: %s", error_message.c_str()); return BAD_VALUE; } |