summaryrefslogtreecommitdiff
path: root/devices
diff options
context:
space:
mode:
authorDaniel Norman <danielnorman@google.com>2022-02-02 21:03:24 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-02-02 21:03:24 +0000
commitc0e4ca1dc7bb3ee70a5ce7e682a5c406cda5ccc8 (patch)
treef84f8d2597aed31350c3cfe8c445ac7f3ccd6802 /devices
parent3e450bc0efb354eaaee77ddda945982f3ef48df2 (diff)
parentca39774216f52ae80d4098a6d7d0c3b188874c5b (diff)
downloadcamera-c0e4ca1dc7bb3ee70a5ce7e682a5c406cda5ccc8.tar.gz
Revert "Revert "Creates a vendor APEX for the emulated camera pr..." am: e8c53d5bc7 am: af0170f1f4 am: ca39774216
Original change: https://android-review.googlesource.com/c/platform/hardware/google/camera/+/1966270 Change-Id: I8d33b1868774f1dba1f33a2e92198e3d5f71017b
Diffstat (limited to 'devices')
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp50
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.h2
-rw-r--r--devices/EmulatedCamera/hwl/apex/Android.bp69
-rw-r--r--devices/EmulatedCamera/hwl/apex/apex_manifest.json4
-rw-r--r--devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.avbpubkeybin0 -> 1032 bytes
-rw-r--r--devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pem51
-rw-r--r--devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pk8bin0 -> 2376 bytes
-rw-r--r--devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.rc7
-rw-r--r--devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.x509.pem34
-rw-r--r--devices/EmulatedCamera/hwl/apex/file_contexts5
-rw-r--r--devices/EmulatedCamera/hwl/configs/Android.bp45
11 files changed, 247 insertions, 20 deletions
diff --git a/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp b/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.cpp
index 7e833dc..d4fae3e 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;
}
diff --git a/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.h b/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.h
index 5a13332..e9c086b 100644
--- a/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.h
+++ b/devices/EmulatedCamera/hwl/EmulatedCameraProviderHWLImpl.h
@@ -83,8 +83,6 @@ class EmulatedCameraProviderHwlImpl : public CameraProviderHwl {
status_t WaitForQemuSfFakeCameraPropertyAvailable();
bool SupportsMandatoryConcurrentStreams(uint32_t camera_id);
- static const char* kConfigurationFileLocation[];
-
std::vector<std::unique_ptr<HalCameraMetadata>> static_metadata_;
// Logical to physical camera Id mapping. Empty value vector in case
// of regular non-logical device.
diff --git a/devices/EmulatedCamera/hwl/apex/Android.bp b/devices/EmulatedCamera/hwl/apex/Android.bp
new file mode 100644
index 0000000..8f79f15
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/Android.bp
@@ -0,0 +1,69 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+apex_key {
+ name: "com.google.emulated.camera.provider.hal.key",
+ public_key: "com.google.emulated.camera.provider.hal.avbpubkey",
+ private_key: "com.google.emulated.camera.provider.hal.pem",
+}
+
+android_app_certificate {
+ name: "com.google.emulated.camera.provider.hal.certificate",
+ certificate: "com.google.emulated.camera.provider.hal",
+}
+
+prebuilt_etc {
+ name: "com.google.emulated.camera.provider.hal.rc",
+ src: "com.google.emulated.camera.provider.hal.rc",
+ installable: false,
+}
+
+apex {
+ name: "com.google.emulated.camera.provider.hal",
+ manifest: "apex_manifest.json",
+ key: "com.google.emulated.camera.provider.hal.key",
+ certificate: ":com.google.emulated.camera.provider.hal.certificate",
+ file_contexts: "file_contexts",
+ use_vndk_as_stable: true,
+ updatable: false,
+ // Install the apex in /vendor/apex
+ soc_specific: true,
+ binaries: [
+ "android.hardware.camera.provider@2.7-service-google",
+ ],
+ native_shared_libs: [
+ "libgooglecamerahwl_impl",
+ ],
+ overrides: [
+ "android.hardware.camera.provider@2.7-impl-google",
+ "android.hardware.camera.provider@2.7-service-google",
+ "libgooglecamerahwl_impl",
+ ],
+ prebuilts: [
+ "com.google.emulated.camera.provider.hal.rc",
+ "android.hardware.camera.concurrent.prebuilt.xml",
+ "android.hardware.camera.flash-autofocus.prebuilt.xml",
+ "android.hardware.camera.front.prebuilt.xml",
+ "android.hardware.camera.full.prebuilt.xml",
+ "android.hardware.camera.raw.prebuilt.xml",
+ "emu_camera_back.json",
+ "emu_camera_depth.json",
+ "emu_camera_front.json",
+ ],
+ vintf_fragments: [":android.hardware.camera.provider@2.7-service-google.xml"],
+}
diff --git a/devices/EmulatedCamera/hwl/apex/apex_manifest.json b/devices/EmulatedCamera/hwl/apex/apex_manifest.json
new file mode 100644
index 0000000..50c09a8
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+ "name": "com.google.emulated.camera.provider.hal",
+ "version": 1
+}
diff --git a/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.avbpubkey b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.avbpubkey
new file mode 100644
index 0000000..0c28e11
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.avbpubkey
Binary files differ
diff --git a/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pem b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pem
new file mode 100644
index 0000000..94c79c9
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
diff --git a/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pk8 b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pk8
new file mode 100644
index 0000000..f83b5da
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.pk8
Binary files differ
diff --git a/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.rc b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.rc
new file mode 100644
index 0000000..134cd8f
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.rc
@@ -0,0 +1,7 @@
+service vendor.camera-provider-2-7-google /apex/com.google.emulated.camera.provider.hal/bin/hw/android.hardware.camera.provider@2.7-service-google
+ class hal
+ user system
+ group system
+ capabilities SYS_NICE
+ rlimit rtprio 10 10
+ task_profiles CameraServiceCapacity CameraServicePerformance
diff --git a/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.x509.pem b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.x509.pem
new file mode 100644
index 0000000..528c923
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/com.google.emulated.camera.provider.hal.x509.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF7TCCA9UCFHsvubLT/OxpJdqifK/l7sBMmpCoMA0GCSqGSIb3DQEBCwUAMIGx
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
+bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEi
+MCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTEtMCsGA1UEAwwkY29t
+LmFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLnByb3ZpZGVyMCAXDTIyMDEyNDIzMTMy
+NloYDzQ3NTkxMjIxMjMxMzI2WjCBsTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh
+bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB0FuZHJv
+aWQxEDAOBgNVBAsMB0FuZHJvaWQxIjAgBgkqhkiG9w0BCQEWE2FuZHJvaWRAYW5k
+cm9pZC5jb20xLTArBgNVBAMMJGNvbS5hbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5w
+cm92aWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK9HkJ08NHPl
+75cP95BmQ+ODGQ/9QWKyFn0oCmXAuIgjPDgOyqyCQ5zuUW2xOALeRBsB9+7vf4ZG
+zxiXf5FoBAg5p5wdYd1rxMlVvFUFhr0ciGw8gRiML35Ve3+3G+GzJtUft+KfQ932
+VvcDA6SobNhSfPeSEhIFhWQO/Rll3P7p7ipPre5IVsQR8MdkVW5mw7+i2C2SLbkx
+F8qRWhbD38syqoaD1LQcUxQZLFfchf2oSaN9YrfWgoQNZiYBlEHMRo7XGfjsgrJU
+HjyM0fJyzMLs1GGUr/BNlU0+SQFrRDQ85tzLaj5rcjLeiKk2O4PN529LR6/q7eBW
+vNT37q7CrRSfUXBCcVxx1R9f341VKutIxnbazPcGycsShETFj5RmHJse/2EveB6h
+5ficqIiSA5eKpLIkogsgZHadlz/FHjL+Q+5a19q2vkeR1SRgE4XZCE9O22clTv/g
+oWM7CoeZOpdB4ZeRxynusSNaShWeDRYxrQRsiMRIjn8TdTD+Nd6nD4/QKITFpuGF
+5klnaqx1s+XxdHBTQ0QNttKuTE212F0Vc6CcA0UwvoQGFjQfzOAiXBktLmh9vMRY
+6tTDhS9OK+Z6Ioy9S/Vv9vi77CRJ5Fl8g+rXlbkdJtp84B8igLvx/oOxu95mB/M7
+2RWwMGHnFFKS3aUZm7ypuJNBHTxk0PLZAgMBAAEwDQYJKoZIhvcNAQELBQADggIB
+AFAY+aeKyZ/UjgWX8vqWH7fLVKa4zwQGgLpr7Uo9c7vMtXwWdJkgbSzKQjcsC8WL
+c7c26Acv1CpULo3U/b67N+3WnQr3F3K3YraKuiBCMCuTjeq0k3yZyuwr2ktzpo23
+Ei77ldprBu/I7CSOWYOzJCgsymuSbzJhjEt2LKTR+gNLWyKFQJhZZIY2oTq1LT2j
+CMVYvVnuDSWW/Dt6u2+tIgFr2u3ZB7TtkfSNgT797gmCdRn4rEJFDH6ExFFDHBa4
+cfWPqZDs+X871jOInqkJVjBT6RMdW/PewY9i2gb/BU7mTziR8/n9+QvHBReH44Ys
+nVNjC09/njG/jrAILB3y/df4zDJUJMz1jOZXZyuAE0bo08+YhG58Ms1wJ26oAu9E
+PXBNDv9ihISsepOoY7laoFyrPIlXitRtXd/zbY+k7Uw0dwNNJ3dwhcuKO+FDW5pb
+Lubh2w6TgQKUGqPwe9C3hLmvYVqc34U/R61Fq33dRwl6wxzoWQ6R+DuC42GWFyiz
+nXWTUTPBOy9xTHtNi2nDvGh4M3ILLBWPseNJfQkDloLOlOjBQpMMvOfW0qcBQeRd
+cexJXMTwx/mEeron+cxIjQerWdvjNMhAPPQdFGN/yDbsoNrZdYH+xszJ2paa4gTl
+9Cl3KC8vmRy2JyD6P7Cv9D1BGekHODIRR+ccyfarcfGm
+-----END CERTIFICATE-----
diff --git a/devices/EmulatedCamera/hwl/apex/file_contexts b/devices/EmulatedCamera/hwl/apex/file_contexts
new file mode 100644
index 0000000..2f0ab85
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/apex/file_contexts
@@ -0,0 +1,5 @@
+(/.*)? u:object_r:vendor_file:s0
+# Permission XMLs
+/etc/permissions(/.*)? u:object_r:vendor_configs_file:s0
+# Service binary
+/bin/hw/android\.hardware\.camera\.provider@2\.7-service-google u:object_r:hal_camera_default_exec:s0
diff --git a/devices/EmulatedCamera/hwl/configs/Android.bp b/devices/EmulatedCamera/hwl/configs/Android.bp
new file mode 100644
index 0000000..25690de
--- /dev/null
+++ b/devices/EmulatedCamera/hwl/configs/Android.bp
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package {
+ // See: http://go/android-license-faq
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+prebuilt_defaults {
+ name: "emu_camera_config_defaults",
+ relative_install_path: "config",
+ soc_specific: true,
+ installable: false,
+}
+
+prebuilt_etc {
+ name: "emu_camera_back.json",
+ src: "emu_camera_back.json",
+ defaults: ["emu_camera_config_defaults"],
+}
+
+prebuilt_etc {
+ name: "emu_camera_depth.json",
+ src: "emu_camera_depth.json",
+ defaults: ["emu_camera_config_defaults"],
+}
+
+prebuilt_etc {
+ name: "emu_camera_front.json",
+ src: "emu_camera_front.json",
+ defaults: ["emu_camera_config_defaults"],
+}