Snap for 5558509 from d2455c3e606688a0333cb32818d7e3a09ee55a5a to qt-release

Change-Id: Id9f3844eee18086914a50a020fd6f441569a9ef2
diff --git a/internal/dynamic_depth/container.cc b/internal/dynamic_depth/container.cc
index e7a35dd..ff84a40 100644
--- a/internal/dynamic_depth/container.cc
+++ b/internal/dynamic_depth/container.cc
@@ -2,15 +2,18 @@
 
 #include "android-base/logging.h"
 #include "dynamic_depth/const.h"
+#include "xmpmeta/xml/const.h"
 
 using ::dynamic_depth::xmpmeta::xml::Deserializer;
 using ::dynamic_depth::xmpmeta::xml::Serializer;
+using ::dynamic_depth::xmpmeta::xml::XmlConst;
 
 namespace dynamic_depth {
 
 constexpr char kNamespaceHref[] =
     "http://ns.google.com/photos/dd/1.0/container/";
 constexpr char kDirectory[] = "Directory";
+constexpr char kResourceType[] = "Resource";
 
 // Private constructor.
 Container::Container() {}
@@ -92,6 +95,12 @@
       serializer->CreateSerializer(
           DynamicDepthConst::Namespace(DynamicDepthConst::Container()),
           DynamicDepthConst::Container());
+  if (!container_serializer->WriteProperty(XmlConst::RdfPrefix(),
+                                           XmlConst::RdfParseType(),
+                                           kResourceType)) {
+    return false;
+  }
+
   std::unique_ptr<Serializer> directory_serializer =
       container_serializer->CreateListSerializer(DynamicDepthConst::Container(),
                                                  kDirectory);
diff --git a/internal/dynamic_depth/device.cc b/internal/dynamic_depth/device.cc
index 399ea74..84b1720 100644
--- a/internal/dynamic_depth/device.cc
+++ b/internal/dynamic_depth/device.cc
@@ -35,14 +35,14 @@
   // Find and parse the Device node.
   // Only these two fields are required to be present; the rest are optional.
   // TODO(miraleung): Search for Device by namespace.
-  xmlNodePtr device_node =
-      DepthFirstSearch(xmlDoc, DynamicDepthConst::Device());
-  if (device_node == nullptr) {
-    LOG(ERROR) << "No device node found";
+  xmlNodePtr description_node =
+      DepthFirstSearch(xmlDoc, XmlConst::RdfDescription());
+  if (description_node == nullptr) {
+    LOG(ERROR) << "No rdf description found";
     return nullptr;
   }
 
-  const DeserializerImpl deserializer(device_node);
+  const DeserializerImpl deserializer(description_node);
   auto cameras = Cameras::FromDeserializer(deserializer);
   if (cameras == nullptr) {
     LOG(ERROR) << "No cameras found";
@@ -186,12 +186,6 @@
     return false;
   }
 
-  // Create a node here instead of through a new deserializer, otherwise
-  // an extraneous prefix will be written to the node name.
-  xmlNodePtr device_node =
-      xmlNewNode(nullptr, ToXmlChar(DynamicDepthConst::Device()));
-  xmlAddChild(root_node, device_node);
-
   PopulateNamespaces();
   xmlNsPtr prev_ns = root_node->ns;
   for (const auto& entry : namespaces_) {
@@ -202,7 +196,7 @@
   }
 
   // Set up serialization on the first description node in the extended section.
-  SerializerImpl device_serializer(namespaces_, device_node);
+  SerializerImpl device_serializer(namespaces_, root_node);
 
   // Serialize elements.
   if (params_->container &&
diff --git a/internal/dynamic_depth/earth_pose.cc b/internal/dynamic_depth/earth_pose.cc
index cd5e0a7..db9e2b3 100644
--- a/internal/dynamic_depth/earth_pose.cc
+++ b/internal/dynamic_depth/earth_pose.cc
@@ -2,6 +2,8 @@
 
 #include <math.h>
 
+#include <cmath>
+
 #include "android-base/logging.h"
 #include "dynamic_depth/const.h"
 
@@ -25,9 +27,9 @@
   if (quat.size() < 4) {
     return std::vector<float>();
   }
-  float length =
-      sqrt((quat[0] * quat[0]) + (quat[1] * quat[1]) + (quat[2] * quat[2])) +
-      (quat[3] * quat[3]);
+  float length = std::sqrt((quat[0] * quat[0]) + (quat[1] * quat[1]) +
+                           (quat[2] * quat[2])) +
+                 (quat[3] * quat[3]);
   const std::vector<float> normalized = {quat[0] / length, quat[1] / length,
                                          quat[2] / length, quat[3] / length};
   return normalized;
diff --git a/internal/dynamic_depth/pose.cc b/internal/dynamic_depth/pose.cc
index 63c0740..ae9a1c9 100644
--- a/internal/dynamic_depth/pose.cc
+++ b/internal/dynamic_depth/pose.cc
@@ -2,6 +2,8 @@
 
 #include <math.h>
 
+#include <cmath>
+
 #include "android-base/logging.h"
 #include "dynamic_depth/const.h"
 
@@ -25,8 +27,8 @@
   if (quat.size() < 4) {
     return std::vector<float>();
   }
-  float length = sqrt((quat[0] * quat[0]) + (quat[1] * quat[1]) +
-                      (quat[2] * quat[2]) + (quat[3] * quat[3]));
+  float length = std::sqrt((quat[0] * quat[0]) + (quat[1] * quat[1]) +
+                           (quat[2] * quat[2]) + (quat[3] * quat[3]));
   const std::vector<float> normalized = {quat[0] / length, quat[1] / length,
                                          quat[2] / length, quat[3] / length};
   return normalized;
diff --git a/internal/xmpmeta/xml/const.cc b/internal/xmpmeta/xml/const.cc
index 5af3c16..4a20f1d 100644
--- a/internal/xmpmeta/xml/const.cc
+++ b/internal/xmpmeta/xml/const.cc
@@ -23,6 +23,8 @@
 
 const char* XmlConst::RdfLi() { return "li"; }
 
+const char* XmlConst::RdfParseType() { return "parseType"; }
+
 // XML metadata constants.
 const char* XmlConst::NsAttrName() { return "xmlns"; }
 
diff --git a/internal/xmpmeta/xml/const.h b/internal/xmpmeta/xml/const.h
index 8a1998a..e540b07 100644
--- a/internal/xmpmeta/xml/const.h
+++ b/internal/xmpmeta/xml/const.h
@@ -17,6 +17,7 @@
   static const char* RdfPrefix();
   static const char* RdfSeq();
   static const char* RdfLi();
+  static const char* RdfParseType();
 
   // XML metadata.
   static const char* NsAttrName();