summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorEmilian Peev <epeev@google.com>2019-01-29 08:58:48 -0800
committerEmilian Peev <epeev@google.com>2019-02-04 16:18:10 -0800
commit1a5387f472b510232e0fd3af0b06e350341c334d (patch)
treeb70030c8a71135e0f226cf09252286fc64f4e48e /internal
parent938d58078455ad446fb1196cb9978429faff36cc (diff)
downloaddynamic_depth-1a5387f472b510232e0fd3af0b06e350341c334d.tar.gz
Add an NDK library variant
An NDK built library variant is needed for clients using the NDK toolchain. Move the Android depth buffer validation sequence in a separate module. Bug: 123237859 Test: Camera CTS Change-Id: Ibf149f0be02a40de31e901cfc420f203d10e5bf3
Diffstat (limited to 'internal')
-rw-r--r--internal/dynamic_depth/depth_jpeg.cc110
-rw-r--r--internal/dynamic_depth/dynamic_depth.cc91
2 files changed, 110 insertions, 91 deletions
diff --git a/internal/dynamic_depth/depth_jpeg.cc b/internal/dynamic_depth/depth_jpeg.cc
new file mode 100644
index 0000000..ec5ab89
--- /dev/null
+++ b/internal/dynamic_depth/depth_jpeg.cc
@@ -0,0 +1,110 @@
+#include "dynamic_depth/depth_jpeg.h"
+
+#include <fstream>
+#include <sstream>
+
+#include "android-base/logging.h"
+#include "dynamic_depth/container.h"
+#include "dynamic_depth/device.h"
+#include "dynamic_depth/dynamic_depth.h"
+#include "dynamic_depth/item.h"
+#include "image_io/gcontainer/gcontainer.h"
+#include "xmpmeta/xmp_data.h"
+#include "xmpmeta/xmp_parser.h"
+#include "xmpmeta/xmp_writer.h"
+
+using ::dynamic_depth::xmpmeta::XmpData;
+
+namespace dynamic_depth {
+
+int32_t ValidateAndroidDynamicDepthBuffer(const char* buffer, size_t buffer_length) {
+ XmpData xmp_data;
+ const string image_data(buffer, buffer_length);
+ ReadXmpFromMemory(image_data, /*XmpSkipExtended*/ false, &xmp_data);
+
+ // Check device presence
+ std::unique_ptr<Device> device = Device::FromXmp(xmp_data);
+ if (device == nullptr) {
+ LOG(ERROR) << "Dynamic depth device element not present!";
+ return -1;
+ }
+
+ // Check profiles
+ const Profiles* profiles = device->GetProfiles();
+ if (profiles == nullptr) {
+ LOG(ERROR) << "No Profile found in the dynamic depth metadata";
+ return -1;
+ }
+
+ const std::vector<const Profile*> profile_list = profiles->GetProfiles();
+ // Stop at the first depth photo profile found.
+ bool depth_photo_profile_found = false;
+ int camera_index = 0;
+ for (auto profile : profile_list) {
+ depth_photo_profile_found = !profile->GetType().compare("DepthPhoto");
+ if (depth_photo_profile_found) {
+ // Use the first one if available.
+ auto indices = profile->GetCameraIndices();
+ if (!indices.empty()) {
+ camera_index = indices[0];
+ } else {
+ camera_index = -1;
+ }
+ break;
+ }
+ }
+
+ if (!depth_photo_profile_found || camera_index < 0) {
+ LOG(ERROR) << "No dynamic depth profile found";
+ return -1;
+ }
+
+ auto cameras = device->GetCameras();
+ if (cameras == nullptr || camera_index > cameras->GetCameras().size() ||
+ cameras->GetCameras()[camera_index] == nullptr) {
+ LOG(ERROR) << "No camera or depth photo data found";
+ return -1;
+ }
+
+ auto camera = cameras->GetCameras()[camera_index];
+ auto depth_map = camera->GetDepthMap();
+ if (depth_map == nullptr) {
+ LOG(ERROR) << "No depth map found";
+ return -1;
+ }
+
+ auto depth_uri = depth_map->GetDepthUri();
+ if (depth_uri.empty()) {
+ LOG(ERROR) << "Invalid depth map URI";
+ return -1;
+ }
+
+ auto depth_units = depth_map->GetUnits();
+ if (depth_units != dynamic_depth::DepthUnits::kMeters) {
+ LOG(ERROR) << "Unexpected depth map units";
+ return -1;
+ }
+
+ auto depth_format = depth_map->GetFormat();
+ if (depth_format != dynamic_depth::DepthFormat::kRangeInverse) {
+ LOG(ERROR) << "Unexpected depth map format";
+ return -1;
+ }
+
+ auto near = depth_map->GetNear();
+ auto far = depth_map->GetFar();
+ if ((near < 0.f) || (far < 0.f) || (near > far) || (near == far)) {
+ LOG(ERROR) << "Unexpected depth map near and far values";
+ return -1;
+ }
+
+ auto confidence_uri = depth_map->GetConfidenceUri();
+ if (confidence_uri.empty()) {
+ LOG(ERROR) << "No confidence URI";
+ return -1;
+ }
+
+ return 0;
+}
+
+} // namespace dynamic_depth
diff --git a/internal/dynamic_depth/dynamic_depth.cc b/internal/dynamic_depth/dynamic_depth.cc
index fa3983e..2294289 100644
--- a/internal/dynamic_depth/dynamic_depth.cc
+++ b/internal/dynamic_depth/dynamic_depth.cc
@@ -8,7 +8,6 @@
#include "dynamic_depth/item.h"
#include "image_io/gcontainer/gcontainer.h"
#include "xmpmeta/xmp_data.h"
-#include "xmpmeta/xmp_parser.h"
#include "xmpmeta/xmp_writer.h"
namespace dynamic_depth {
@@ -129,94 +128,4 @@ bool GetItemPayload(const string& input_image_filename,
return success;
}
-extern "C" int32_t ValidateAndroidDynamicDepthBuffer(const char* buffer, size_t buffer_length) {
- XmpData xmp_data;
- const string image_data(buffer, buffer_length);
- ReadXmpFromMemory(image_data, /*XmpSkipExtended*/ false, &xmp_data);
-
- // Check device presence
- std::unique_ptr<Device> device = Device::FromXmp(xmp_data);
- if (device == nullptr) {
- LOG(ERROR) << "Dynamic depth device element not present!";
- return -1;
- }
-
- // Check profiles
- const Profiles* profiles = device->GetProfiles();
- if (profiles == nullptr) {
- LOG(ERROR) << "No Profile found in the dynamic depth metadata";
- return -1;
- }
-
- const std::vector<const Profile*> profile_list = profiles->GetProfiles();
- // Stop at the first depth photo profile found.
- bool depth_photo_profile_found = false;
- int camera_index = 0;
- for (auto profile : profile_list) {
- depth_photo_profile_found = !profile->GetType().compare("DepthPhoto");
- if (depth_photo_profile_found) {
- // Use the first one if available.
- auto indices = profile->GetCameraIndices();
- if (!indices.empty()) {
- camera_index = indices[0];
- } else {
- camera_index = -1;
- }
- break;
- }
- }
-
- if (!depth_photo_profile_found || camera_index < 0) {
- LOG(ERROR) << "No dynamic depth profile found";
- return -1;
- }
-
- auto cameras = device->GetCameras();
- if (cameras == nullptr || camera_index > cameras->GetCameras().size() ||
- cameras->GetCameras()[camera_index] == nullptr) {
- LOG(ERROR) << "No camera or depth photo data found";
- return -1;
- }
-
- auto camera = cameras->GetCameras()[camera_index];
- auto depth_map = camera->GetDepthMap();
- if (depth_map == nullptr) {
- LOG(ERROR) << "No depth map found";
- return -1;
- }
-
- auto depth_uri = depth_map->GetDepthUri();
- if (depth_uri.empty()) {
- LOG(ERROR) << "Invalid depth map URI";
- return -1;
- }
-
- auto depth_units = depth_map->GetUnits();
- if (depth_units != dynamic_depth::DepthUnits::kMeters) {
- LOG(ERROR) << "Unexpected depth map units";
- return -1;
- }
-
- auto depth_format = depth_map->GetFormat();
- if (depth_format != dynamic_depth::DepthFormat::kRangeInverse) {
- LOG(ERROR) << "Unexpected depth map format";
- return -1;
- }
-
- auto near = depth_map->GetNear();
- auto far = depth_map->GetFar();
- if ((near < 0.f) || (far < 0.f) || (near > far) || (near == far)) {
- LOG(ERROR) << "Unexpected depth map near and far values";
- return -1;
- }
-
- auto confidence_uri = depth_map->GetConfidenceUri();
- if (confidence_uri.empty()) {
- LOG(ERROR) << "No confidence URI";
- return -1;
- }
-
- return 0;
-}
-
} // namespace dynamic_depth