Camera: Add indented metadata dump

Bug: 6243944
Change-Id: Ib769ae2d40b9c4bfa456c812fd7ee2e426fd86df
diff --git a/camera/src/camera_metadata.c b/camera/src/camera_metadata.c
index ee00ee6..afbaac5 100644
--- a/camera/src/camera_metadata.c
+++ b/camera/src/camera_metadata.c
@@ -597,23 +597,31 @@
     return OK;
 }
 
-static void print_data(int fd, const uint8_t *data_ptr, int type, int count);
+static void print_data(int fd, const uint8_t *data_ptr, int type, int count,
+        int indentation);
 
 void dump_camera_metadata(const camera_metadata_t *metadata,
         int fd,
         int verbosity) {
+    dump_indented_camera_metadata(metadata, fd, verbosity, 0);
+}
+
+void dump_indented_camera_metadata(const camera_metadata_t *metadata,
+        int fd,
+        int verbosity,
+        int indentation) {
     if (metadata == NULL) {
         ALOGE("%s: Metadata is null.", __FUNCTION__);
         return;
     }
     unsigned int i;
     fdprintf(fd,
-            "Dumping camera metadata array. %d entries, "
-            "%d bytes of extra data.\n",
-            metadata->entry_count, metadata->data_count);
-    fdprintf(fd, "  (%d entries and %d bytes data reserved)\n",
-            metadata->entry_capacity, metadata->data_capacity);
-    fdprintf(fd, "  Version: %d, Flags: %08x\n",
+            "%*sDumping camera metadata array. %d / %d entries, "
+            "%d / %d bytes of extra data.\n", indentation, "",
+            metadata->entry_count, metadata->entry_capacity,
+            metadata->data_count, metadata->data_capacity);
+    fdprintf(fd, "%*sVersion: %d, Flags: %08x\n",
+            indentation + 2, "",
             metadata->version, metadata->flags);
     for (i=0; i < metadata->entry_count; i++) {
         camera_metadata_buffer_entry_t *entry = metadata->entries + i;
@@ -633,7 +641,8 @@
         } else {
             type_name = camera_metadata_type_names[entry->type];
         }
-        fdprintf(fd, "Tag: %s.%s (%05x): %s[%d]\n",
+        fdprintf(fd, "%*s%s.%s (%05x): %s[%d]\n",
+             indentation + 2, "",
              tag_section,
              tag_name,
              entry->tag,
@@ -661,11 +670,12 @@
         int count = entry->count;
         if (verbosity < 2 && count > 16) count = 16;
 
-        print_data(fd, data_ptr, entry->type, count);
+        print_data(fd, data_ptr, entry->type, count, indentation);
     }
 }
 
-static void print_data(int fd, const uint8_t *data_ptr, int type, int count) {
+static void print_data(int fd, const uint8_t *data_ptr,
+        int type, int count, int indentation) {
     static int values_per_line[NUM_TYPES] = {
         [TYPE_BYTE]     = 16,
         [TYPE_INT32]    = 4,
@@ -682,7 +692,7 @@
     int index = 0;
     int j, k;
     for (j = 0; j < lines; j++) {
-        fdprintf(fd, " [");
+        fdprintf(fd, "%*s[", indentation + 4, "");
         for (k = 0;
              k < values_per_line[type] && count > 0;
              k++, count--, index += type_size) {