summaryrefslogtreecommitdiff
path: root/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp')
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp50
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;
}