Only provide templates for supported capabilities

Plugs in the StaticProperties class for ease of accessing the
static metadata.

Expands StaticProperties to handle checking template support.

Test: Unit tests pass, test app runs, fixes 2 failing CTS tests on rpi3
BUG: b/32951283
Change-Id: I3077a3507751c3072b88f7d91902bdaa5b53c30e
diff --git a/modules/camera/3_4/camera.h b/modules/camera/3_4/camera.h
index e1f7639..2685fd1 100644
--- a/modules/camera/3_4/camera.h
+++ b/modules/camera/3_4/camera.h
@@ -27,6 +27,7 @@
 #include "capture_request.h"
 #include "metadata/metadata.h"
 #include "request_tracker.h"
+#include "static_properties.h"
 #include "stream.h"
 
 namespace default_camera_hal {
@@ -97,6 +98,8 @@
     private:
         // Camera device handle returned to framework for use
         camera3_device_t mDevice;
+        // Get static info from the device and store it in mStaticInfo.
+        int loadStaticInfo();
         // Reuse a stream already created by this device
         Stream *reuseStream(camera3_stream_t *astream);
         // Destroy all streams in a stream array, and the array itself
@@ -121,7 +124,7 @@
         // Identifier used by framework to distinguish cameras
         const int mId;
         // CameraMetadata containing static characteristics
-        std::unique_ptr<const android::CameraMetadata> mStaticInfo;
+        std::unique_ptr<StaticProperties> mStaticInfo;
         // Flag indicating if settings have been set since
         // the last configure_streams() call.
         bool mSettingsSet;