diff --git a/modules/camera/Camera.cpp b/modules/camera/Camera.cpp
index 0ddf001..1f22e00 100644
--- a/modules/camera/Camera.cpp
+++ b/modules/camera/Camera.cpp
@@ -569,17 +569,26 @@
 {
     camdev_to_camera(dev)->dump(fd);
 }
+
+static int flush(const camera3_device_t*)
+{
+    ALOGE("%s: unimplemented.", __func__);
+    return -1;
+}
+
 } // extern "C"
 
 const camera3_device_ops_t Camera::sOps = {
-    .initialize              = default_camera_hal::initialize,
-    .configure_streams       = default_camera_hal::configure_streams,
+    .initialize = default_camera_hal::initialize,
+    .configure_streams = default_camera_hal::configure_streams,
     .register_stream_buffers = default_camera_hal::register_stream_buffers,
-    .construct_default_request_settings =
-            default_camera_hal::construct_default_request_settings,
+    .construct_default_request_settings
+        = default_camera_hal::construct_default_request_settings,
     .process_capture_request = default_camera_hal::process_capture_request,
     .get_metadata_vendor_tag_ops = NULL,
-    .dump                    = default_camera_hal::dump
+    .dump = default_camera_hal::dump,
+    .flush = default_camera_hal::flush,
+    .reserved = {0},
 };
 
 } // namespace default_camera_hal
diff --git a/modules/camera/CameraHAL.cpp b/modules/camera/CameraHAL.cpp
index 148f99c..b04cf0c 100644
--- a/modules/camera/CameraHAL.cpp
+++ b/modules/camera/CameraHAL.cpp
@@ -183,7 +183,8 @@
     get_number_of_cameras : get_number_of_cameras,
     get_camera_info       : get_camera_info,
     set_callbacks         : set_callbacks,
-    get_vendor_tag_ops    : get_vendor_tag_ops
+    get_vendor_tag_ops    : get_vendor_tag_ops,
+    reserved              : {0},
 };
 } // extern "C"
 
diff --git a/modules/camera/ExampleCamera.cpp b/modules/camera/ExampleCamera.cpp
index a275190..ca28b99 100644
--- a/modules/camera/ExampleCamera.cpp
+++ b/modules/camera/ExampleCamera.cpp
@@ -184,25 +184,37 @@
 
     // Create standard settings templates from copies of base metadata
     // TODO: use vendor tags in base metadata
-    if (res = base.add1UInt8(ANDROID_CONTROL_MODE, ANDROID_CONTROL_MODE_OFF))
+    res = base.add1UInt8(ANDROID_CONTROL_MODE, ANDROID_CONTROL_MODE_OFF);
+    if (res)
         return res;
 
     // Use base settings to create all other templates and set them
-    if (res = setPreviewTemplate(base)) return res;
-    if (res = setStillTemplate(base)) return res;
-    if (res = setRecordTemplate(base)) return res;
-    if (res = setSnapshotTemplate(base)) return res;
-    if (res = setZslTemplate(base)) return res;
+    res = setPreviewTemplate(base);
+    if (res)
+        return res;
+    res = setStillTemplate(base);
+    if (res)
+        return res;
+    res = setRecordTemplate(base);
+    if (res)
+        return res;
+    res = setSnapshotTemplate(base);
+    if (res)
+        return res;
+    res = setZslTemplate(base);
+    if (res)
+        return res;
 
     return 0;
 }
 
 int ExampleCamera::setPreviewTemplate(Metadata m)
 {
-    int res;
     // Setup default preview controls
-    if (res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
-            ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW))
+    int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
+                            ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW);
+
+    if (res)
         return res;
     // TODO: set fast auto-focus, auto-whitebalance, auto-exposure, auto flash
     return setTemplate(CAMERA3_TEMPLATE_PREVIEW, m.get());
@@ -210,10 +222,10 @@
 
 int ExampleCamera::setStillTemplate(Metadata m)
 {
-    int res;
+    int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
+                            ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
     // Setup default still capture controls
-    if (res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
-            ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE))
+    if (res)
         return res;
     // TODO: set fast auto-focus, auto-whitebalance, auto-exposure, auto flash
     return setTemplate(CAMERA3_TEMPLATE_STILL_CAPTURE, m.get());
@@ -221,10 +233,10 @@
 
 int ExampleCamera::setRecordTemplate(Metadata m)
 {
-    int res;
+    int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
+                            ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
     // Setup default video record controls
-    if (res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
-            ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD))
+    if (res)
         return res;
     // TODO: set slow auto-focus, auto-whitebalance, auto-exposure, flash off
     return setTemplate(CAMERA3_TEMPLATE_VIDEO_RECORD, m.get());
@@ -232,21 +244,21 @@
 
 int ExampleCamera::setSnapshotTemplate(Metadata m)
 {
-    int res;
+    int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
+                            ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT);
     // Setup default video snapshot controls
-    if (res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
-            ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT))
+    if (res)
         return res;
-    // TODO: set slow auto-focus, auto-whitebalance, auto-exposure, flash off 
+    // TODO: set slow auto-focus, auto-whitebalance, auto-exposure, flash off
     return setTemplate(CAMERA3_TEMPLATE_VIDEO_SNAPSHOT, m.get());
 }
 
 int ExampleCamera::setZslTemplate(Metadata m)
 {
-    int res;
+    int res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
+                            ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG);
     // Setup default zero shutter lag controls
-    if (res = m.add1UInt8(ANDROID_CONTROL_CAPTURE_INTENT,
-            ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG))
+    if (res)
         return res;
     // TODO: set reprocessing parameters for zsl input queue
     return setTemplate(CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG, m.get());
diff --git a/modules/camera/Metadata.cpp b/modules/camera/Metadata.cpp
index 72314d5..f195534 100644
--- a/modules/camera/Metadata.cpp
+++ b/modules/camera/Metadata.cpp
@@ -143,18 +143,20 @@
     // Double new dimensions to minimize future reallocations
     tmp = allocate_camera_metadata(entry_capacity * 2, data_capacity * 2);
     if (tmp == NULL) {
-        ALOGE("%s: Failed to allocate new metadata with %d entries, %d data",
+        ALOGE("%s: Failed to allocate new metadata with %zu entries, %zu data",
                 __func__, entry_capacity, data_capacity);
         return -ENOMEM;
     }
     // Append the current metadata to the new (empty) metadata
-    if (res = append_camera_metadata(tmp, mData)) {
+    res = append_camera_metadata(tmp, mData);
+    if (res) {
         ALOGE("%s: Failed to append old metadata %p to new %p",
                 __func__, mData, tmp);
         return res;
     }
     // Add the remaining new item
-    if (res = add_camera_metadata_entry(tmp, tag, tag_data, count)) {
+    res = add_camera_metadata_entry(tmp, tag, tag_data, count);
+    if (res) {
         ALOGE("%s: Failed to add new entry (%d, %p, %d) to metadata %p",
                 __func__, tag, tag_data, count, tmp);
         return res;
diff --git a/modules/camera/Stream.cpp b/modules/camera/Stream.cpp
index 9b9ab98..b846a71 100644
--- a/modules/camera/Stream.cpp
+++ b/modules/camera/Stream.cpp
@@ -227,15 +227,16 @@
 
     fdprintf(fd, "Stream ID: %d (%p)\n", mId, mStream);
     fdprintf(fd, "Stream Type: %s (%d)\n", typeToString(mType), mType);
-    fdprintf(fd, "Width: %u Height: %u\n", mWidth, mHeight);
+    fdprintf(fd, "Width: %"PRIu32" Height: %"PRIu32"\n", mWidth, mHeight);
     fdprintf(fd, "Stream Format: %s (%d)", formatToString(mFormat), mFormat);
     // ToDo: prettyprint usage mask flags
-    fdprintf(fd, "Gralloc Usage Mask: 0x%x\n", mUsage);
-    fdprintf(fd, "Max Buffer Count: %d\n", mMaxBuffers);
+    fdprintf(fd, "Gralloc Usage Mask: %#"PRIx32"\n", mUsage);
+    fdprintf(fd, "Max Buffer Count: %"PRIu32"\n", mMaxBuffers);
     fdprintf(fd, "Buffers Registered: %s\n", mRegistered ? "true" : "false");
-    fdprintf(fd, "Number of Buffers: %d\n", mNumBuffers);
-    for (int i = 0; i < mNumBuffers; i++) {
-        fdprintf(fd, "Buffer %d/%d: %p\n", i, mNumBuffers, mBuffers[i]);
+    fdprintf(fd, "Number of Buffers: %"PRIu32"\n", mNumBuffers);
+    for (uint32_t i = 0; i < mNumBuffers; i++) {
+        fdprintf(fd, "Buffer %"PRIu32"/%"PRIu32": %p\n", i, mNumBuffers,
+                                                                mBuffers[i]);
     }
 }
 
diff --git a/modules/camera/VendorTags.cpp b/modules/camera/VendorTags.cpp
index 58bd606..2c54648 100644
--- a/modules/camera/VendorTags.cpp
+++ b/modules/camera/VendorTags.cpp
@@ -46,53 +46,53 @@
 };
 
 // Entry arrays for each section
-const Entry DemoWizardry[DEMO_WIZARDRY_END - DEMO_WIZARDRY_START] = {
-    [DEMO_WIZARDRY_DIMENSION_SIZE - DEMO_WIZARDRY_START] =
+const Entry DemoWizardry[demo_wizardry_end - demo_wizardry_start] = {
+    [demo_wizardry_dimension_size - demo_wizardry_start] =
         {"dimensionSize",   TYPE_INT32},
-    [DEMO_WIZARDRY_DIMENSIONS - DEMO_WIZARDRY_START] =
+    [demo_wizardry_dimensions - demo_wizardry_start] =
         {"dimensions",      TYPE_INT32},
-    [DEMO_WIZARDRY_FAMILIAR - DEMO_WIZARDRY_START] =
+    [demo_wizardry_familiar - demo_wizardry_start] =
         {"familiar",        TYPE_BYTE},
-    [DEMO_WIZARDRY_FIRE - DEMO_WIZARDRY_START] =
+    [demo_wizardry_fire - demo_wizardry_start] =
         {"fire",            TYPE_RATIONAL}
 };
 
-const Entry DemoSorcery[DEMO_SORCERY_END - DEMO_SORCERY_START] = {
-    [DEMO_SORCERY_DIFFICULTY - DEMO_SORCERY_START] =
+const Entry DemoSorcery[demo_sorcery_end - demo_sorcery_start] = {
+    [demo_sorcery_difficulty - demo_sorcery_start] =
         {"difficulty",      TYPE_INT64},
-    [DEMO_SORCERY_LIGHT - DEMO_SORCERY_START] =
+    [demo_sorcery_light - demo_sorcery_start] =
         {"light",           TYPE_BYTE}
 };
 
-const Entry DemoMagic[DEMO_MAGIC_END - DEMO_MAGIC_START] = {
-    [DEMO_MAGIC_CARD_TRICK - DEMO_MAGIC_START] =
+const Entry DemoMagic[demo_magic_end - demo_magic_start] = {
+    [demo_magic_card_trick - demo_magic_start] =
         {"cardTrick",       TYPE_DOUBLE},
-    [DEMO_MAGIC_LEVITATION - DEMO_MAGIC_START] =
+    [demo_magic_levitation - demo_magic_start] =
         {"levitation",      TYPE_FLOAT}
 };
 
 // Array of all sections
 const Section DemoSections[DEMO_SECTION_COUNT] = {
     [DEMO_WIZARDRY] = { "demo.wizardry",
-                        DEMO_WIZARDRY_START,
-                        DEMO_WIZARDRY_END,
+                        demo_wizardry_start,
+                        demo_wizardry_end,
                         DemoWizardry },
     [DEMO_SORCERY]  = { "demo.sorcery",
-                        DEMO_SORCERY_START,
-                        DEMO_SORCERY_END,
+                        demo_sorcery_start,
+                        demo_sorcery_end,
                         DemoSorcery },
     [DEMO_MAGIC]    = { "demo.magic",
-                        DEMO_MAGIC_START,
-                        DEMO_MAGIC_END,
+                        demo_magic_start,
+                        demo_magic_end,
                         DemoMagic }
 };
 
 // Get a static handle to a specific vendor tag section
 const Section* getSection(uint32_t tag)
 {
-    uint32_t section = (tag - VENDOR_SECTION_START) >> 16;
+    uint32_t section = (tag - vendor_section_start) >> 16;
 
-    if (tag < VENDOR_SECTION_START) {
+    if (tag < vendor_section_start) {
         ALOGE("%s: Tag 0x%x before vendor section", __func__, tag);
         return NULL;
     }
diff --git a/modules/camera/VendorTags.h b/modules/camera/VendorTags.h
index 9af9f7d..ecf777e 100644
--- a/modules/camera/VendorTags.h
+++ b/modules/camera/VendorTags.h
@@ -49,29 +49,28 @@
     DEMO_SECTION_COUNT
 };
 
+const uint32_t vendor_section_start = VENDOR_SECTION_START;
+
 // Each section starts at increments of 0x1_0000
-enum {
-    DEMO_WIZARDRY_START = (DEMO_WIZARDRY + VENDOR_SECTION) << 16,
-    DEMO_SORCERY_START  = (DEMO_SORCERY  + VENDOR_SECTION) << 16,
-    DEMO_MAGIC_START    = (DEMO_MAGIC    + VENDOR_SECTION) << 16,
-};
+const uint32_t demo_wizardry_start = (DEMO_WIZARDRY + VENDOR_SECTION) << 16;
+const uint32_t demo_sorcery_start  = (DEMO_SORCERY  + VENDOR_SECTION) << 16;
+const uint32_t demo_magic_start    = (DEMO_MAGIC    + VENDOR_SECTION) << 16;
 
 // Vendor Tag values, start value begins each section
-enum {
-    DEMO_WIZARDRY_DIMENSION_SIZE = DEMO_WIZARDRY_START,
-    DEMO_WIZARDRY_DIMENSIONS,
-    DEMO_WIZARDRY_FAMILIAR,
-    DEMO_WIZARDRY_FIRE,
-    DEMO_WIZARDRY_END,
+const uint32_t demo_wizardry_dimension_size = demo_wizardry_start;
+const uint32_t demo_wizardry_dimensions = demo_wizardry_start + 1;
+const uint32_t demo_wizardry_familiar = demo_wizardry_start + 2;
+const uint32_t demo_wizardry_fire = demo_wizardry_start + 3;
+const uint32_t demo_wizardry_end = demo_wizardry_start + 4;
 
-    DEMO_SORCERY_DIFFICULTY = DEMO_SORCERY_START,
-    DEMO_SORCERY_LIGHT,
-    DEMO_SORCERY_END,
+const uint32_t demo_sorcery_difficulty = demo_sorcery_start;
+const uint32_t demo_sorcery_light = demo_sorcery_start + 1;
+const uint32_t demo_sorcery_end = demo_sorcery_start + 2;
 
-    DEMO_MAGIC_CARD_TRICK = DEMO_MAGIC_START,
-    DEMO_MAGIC_LEVITATION,
-    DEMO_MAGIC_END,
-};
+const uint32_t demo_magic_card_trick = demo_magic_start;
+const uint32_t demo_magic_levitation = demo_magic_start + 1;
+const uint32_t demo_magic_end = demo_magic_start + 2;
+
 } // namespace default_camera_hal
 
 #endif // VENDOR_TAGS_H_
