Add default template initialization.

Adds a flow for Metadata to initialize templates.
PartialMetadataInterfaces expose another populate method,
which use a default value getter from ControlOptionsInterfaces.

BUG: 30140438
TEST: unit tests pass

Change-Id: I1c01469dcf4d06f7c4c62ebe2acd3d9b2294a161
diff --git a/modules/camera/3_4/metadata/control.h b/modules/camera/3_4/metadata/control.h
index 7c8c6bf..c0426c1 100644
--- a/modules/camera/3_4/metadata/control.h
+++ b/modules/camera/3_4/metadata/control.h
@@ -45,6 +45,8 @@
       android::CameraMetadata* metadata) const override;
   virtual int PopulateDynamicFields(
       android::CameraMetadata* metadata) const override;
+  virtual int PopulateTemplateRequest(
+      int template_type, android::CameraMetadata* metadata) const override;
   virtual bool SupportsRequestValues(
       const android::CameraMetadata& metadata) const override;
   virtual int SetRequestValues(
@@ -112,6 +114,20 @@
 }
 
 template <typename T>
+int Control<T>::PopulateTemplateRequest(
+    int template_type, android::CameraMetadata* metadata) const {
+  HAL_LOG_ENTER();
+
+  // Populate with a default.
+  T value;
+  int res = options_->DefaultValueForTemplate(template_type, &value);
+  if (res) {
+    return res;
+  }
+  return UpdateMetadata(metadata, delegate_->tag(), value);
+}
+
+template <typename T>
 bool Control<T>::SupportsRequestValues(
     const android::CameraMetadata& metadata) const {
   HAL_LOG_ENTER();