Snap for 5297348 from 3663c2c50d146a507e222cb6c2cef32dde2b09c3 to qt-release

Change-Id: I95b98c02c4b36ed1168f541282a76d42e26c2dc1
diff --git a/README.android b/README.android
index 00f3c0b..248e7b6 100644
--- a/README.android
+++ b/README.android
@@ -7,3 +7,4 @@
 -------------
 - Android depth photo validation sequence "ValidateAndroidDynamicDepthBuffer()".
 - Add NDK library variant.
+- Check for depth map payload
diff --git a/includes/dynamic_depth/dynamic_depth.h b/includes/dynamic_depth/dynamic_depth.h
index 966fc1f..4b75207 100644
--- a/includes/dynamic_depth/dynamic_depth.h
+++ b/includes/dynamic_depth/dynamic_depth.h
@@ -1,6 +1,8 @@
 #ifndef DYNAMIC_DEPTH_INCLUDES_DYNAMIC_DEPTH_DYNAMIC_DEPTH_H_  // NOLINT
 #define DYNAMIC_DEPTH_INCLUDES_DYNAMIC_DEPTH_DYNAMIC_DEPTH_H_  // NOLINT
 
+#include <iostream>
+
 #include "dynamic_depth/device.h"
 #include "xmpmeta/xmp_writer.h"
 
@@ -31,6 +33,12 @@
 // Convenience method for the aboove.
 bool GetItemPayload(const string& input_image_filename, const Device* device,
                     const string& item_uri, string* out_payload);
+
+// Used by AOSP.
+// Same as the above, but for an istream.
+bool GetItemPayload(const Container* container, const string& item_uri,
+                    std::istream& input_jpeg_stream, string* out_payload);
+
 }  // namespace dynamic_depth
 
 #endif  // DYNAMIC_DEPTH_INCLUDES_DYNAMIC_DEPTH_DYNAMIC_DEPTH_H_  // NOLINT
diff --git a/internal/dynamic_depth/depth_jpeg.cc b/internal/dynamic_depth/depth_jpeg.cc
index ec5ab89..396a41e 100644
--- a/internal/dynamic_depth/depth_jpeg.cc
+++ b/internal/dynamic_depth/depth_jpeg.cc
@@ -104,6 +104,18 @@
     return -1;
   }
 
+  std::istringstream input_jpeg_stream(std::string(buffer, buffer_length));
+  std::string depth_payload;
+  if (!GetItemPayload(device->GetContainer(), depth_uri, input_jpeg_stream, &depth_payload)) {
+    LOG(ERROR) << "Unable to retrieve depth map";
+    return -1;
+  }
+
+  if (depth_payload.empty()) {
+    LOG(ERROR) << "Invalid depth map";
+    return -1;
+  }
+
   return 0;
 }
 
diff --git a/internal/dynamic_depth/dynamic_depth.cc b/internal/dynamic_depth/dynamic_depth.cc
index 2294289..67b5fb4 100644
--- a/internal/dynamic_depth/dynamic_depth.cc
+++ b/internal/dynamic_depth/dynamic_depth.cc
@@ -82,6 +82,12 @@
 bool GetItemPayload(const string& input_image_filename,
                     const Container* container, const string& item_uri,
                     string* out_payload) {
+  std::ifstream input_stream(input_image_filename);
+  return GetItemPayload(container, item_uri, input_stream, out_payload);
+}
+
+bool GetItemPayload(const Container* container, const string& item_uri,
+                    std::istream& input_jpeg_stream, string* out_payload) {
   if (container == nullptr) {
     LOG(ERROR) << "Container cannot be null";
     return false;
@@ -121,9 +127,9 @@
   }
 
   std::string std_payload;
-  bool success =
-      ::photos_editing_formats::image_io::gcontainer::ParseFileAfterImage(
-          input_image_filename, file_offset, file_length, &std_payload);
+  bool success = ::photos_editing_formats::image_io::gcontainer::
+      ParseFileAfterImageFromStream(file_offset, file_length, input_jpeg_stream,
+                                    &std_payload);
   *out_payload = std_payload;
   return success;
 }