Initialize capture templates.

As part of this, refactored characteristic initialization into its own
function so it can be used by both templates and static info.

BUG: 29221795

Change-Id: I88bb2e6a96256e3641c7c5d387769880b260535f
diff --git a/modules/camera/3_4/V4L2Camera.h b/modules/camera/3_4/V4L2Camera.h
index ff7275a..7aece03 100644
--- a/modules/camera/3_4/V4L2Camera.h
+++ b/modules/camera/3_4/V4L2Camera.h
@@ -19,11 +19,14 @@
 #ifndef V4L2_CAMERA_H
 #define V4L2_CAMERA_H
 
+#include <array>
 #include <string>
+#include <vector>
 
 #include <nativehelper/ScopedFd.h>
 #include <system/camera_metadata.h>
 
+#include "ArrayVector.h"
 #include "Camera.h"
 #include "Common.h"
 
@@ -58,6 +61,50 @@
   // The opened device fd.
   ScopedFd mDeviceFd;
 
+  bool mTemplatesInitialized;
+  int initTemplates();
+
+  // Camera characteristics.
+  bool mCharacteristicsInitialized;  // If false, characteristics are invalid.
+  // Fixed characteristics.
+  float mAperture;
+  float mFilterDensity;
+  float mFocalLength;
+  int32_t mOrientation;
+  std::array<float, 2> mPhysicalSize;  // {width, height}, in mm.
+  std::array<int32_t, 4> mPixelArraySize;  // {xmin, ymin, width, height}.
+  uint8_t mCropType;
+  float mMaxZoom;
+  std::array<int32_t, 2> mAeCompensationRange;  // {min, max}.
+  camera_metadata_rational mAeCompensationStep;
+  uint8_t mAeLockAvailable;
+  uint8_t mAwbLockAvailable;
+  uint8_t mFlashAvailable;
+  float mFocusDistance;
+  // Variable characteristics available options.
+  std::vector<uint8_t> mAeModes;
+  std::vector<uint8_t> mAeAntibandingModes;
+  std::vector<uint8_t> mAfModes;
+  std::vector<uint8_t> mAwbModes;
+  std::vector<uint8_t> mSceneModes;
+  std::vector<uint8_t> mControlModes;
+  std::vector<uint8_t> mEffects;
+  std::vector<uint8_t> mLeds;
+  std::vector<uint8_t> mOpticalStabilizationModes;
+  std::vector<uint8_t> mVideoStabilizationModes;
+  // {format, width, height, direction} (input or output).
+  ArrayVector<int32_t, 4> mStreamConfigs;
+  // {format, width, height, duration} (duration in ns).
+  ArrayVector<int64_t, 4> mMinFrameDurations;
+  int64_t mMaxFrameDuration;
+  // {format, width, height, duration} (duration in ns).
+  ArrayVector<int64_t, 4> mStallDurations;
+  // {min, max} (in fps).
+  ArrayVector<int32_t, 2> mFpsRanges;
+
+  // Initialize characteristics and set mCharacteristicsInitialized to True.
+  int initCharacteristics();
+
   DISALLOW_COPY_AND_ASSIGN(V4L2Camera);
 };