Add v4l2 enum controls.

Some V4L2 controls are simple enum menus, and are directly
analagous to metadata controls. The new V4L2EnumControl class
is a generalized converter between the two.

BUG: https://b/30140438, https://b/29394024
TEST: unit tests pass

Change-Id: I9f8bed200e21cb7e3f3336608fe210f094b7aa42
diff --git a/modules/camera/3_4/v4l2_wrapper.h b/modules/camera/3_4/v4l2_wrapper.h
index da38e5a..f2f08b3 100644
--- a/modules/camera/3_4/v4l2_wrapper.h
+++ b/modules/camera/3_4/v4l2_wrapper.h
@@ -43,7 +43,9 @@
    public:
     Connection(std::shared_ptr<V4L2Wrapper> device)
         : device_(std::move(device)), connect_result_(device_->Connect()) {}
-    ~Connection() { if (connect_result_ == 0) device_->Disconnect(); }
+    ~Connection() {
+      if (connect_result_ == 0) device_->Disconnect();
+    }
     // Check whether the connection succeeded or not.
     inline int status() const { return connect_result_; }
 
@@ -53,26 +55,26 @@
   };
 
   // Turn the stream on or off.
-  int StreamOn();
-  int StreamOff();
+  virtual int StreamOn();
+  virtual int StreamOff();
   // Manage controls.
-  int QueryControl(uint32_t control_id, v4l2_query_ext_ctrl* result);
-  int GetControl(uint32_t control_id, int32_t* value);
-  int SetControl(uint32_t control_id, int32_t desired,
-                 int32_t* result = nullptr);
+  virtual int QueryControl(uint32_t control_id, v4l2_query_ext_ctrl* result);
+  virtual int GetControl(uint32_t control_id, int32_t* value);
+  virtual int SetControl(uint32_t control_id, int32_t desired,
+                         int32_t* result = nullptr);
   // Manage format.
-  int GetFormats(std::set<uint32_t>* v4l2_formats);
-  int GetFormatFrameSizes(uint32_t v4l2_format,
-                          std::set<std::array<int32_t, 2>>* sizes);
+  virtual int GetFormats(std::set<uint32_t>* v4l2_formats);
+  virtual int GetFormatFrameSizes(uint32_t v4l2_format,
+                                  std::set<std::array<int32_t, 2>>* sizes);
   // Durations are returned in ns.
-  int GetFormatFrameDurationRange(uint32_t v4l2_format,
-                                  const std::array<int32_t, 2>& size,
-                                  std::array<int64_t, 2>* duration_range);
-  int SetFormat(const default_camera_hal::Stream& stream,
-                uint32_t* result_max_buffers);
+  virtual int GetFormatFrameDurationRange(
+      uint32_t v4l2_format, const std::array<int32_t, 2>& size,
+      std::array<int64_t, 2>* duration_range);
+  virtual int SetFormat(const default_camera_hal::Stream& stream,
+                        uint32_t* result_max_buffers);
   // Manage buffers.
-  int EnqueueBuffer(const camera3_stream_buffer_t* camera_buffer);
-  int DequeueBuffer(v4l2_buffer* buffer);
+  virtual int EnqueueBuffer(const camera3_stream_buffer_t* camera_buffer);
+  virtual int DequeueBuffer(v4l2_buffer* buffer);
 
  private:
   // Constructor is private to allow failing on bad input.