diff --git a/src/camera/drivers/hw_accel/gdc/task.cc b/src/camera/drivers/hw_accel/gdc/task.cc
index 85eb3d6..65e3c3d 100644
--- a/src/camera/drivers/hw_accel/gdc/task.cc
+++ b/src/camera/drivers/hw_accel/gdc/task.cc
@@ -14,6 +14,16 @@
 
 namespace gdc {
 
+// Validates the buffer collection.
+static bool IsBufferCollectionValid(
+    const buffer_collection_info_t* buffer_collection) {
+  return !(buffer_collection == nullptr ||
+           buffer_collection->buffer_count == 0 ||
+           buffer_collection->buffer_count > countof(buffer_collection->vmos) ||
+           buffer_collection->format.image.pixel_format.type !=
+               fuchsia_sysmem_PixelFormatType_NV12);
+}
+
 zx_status_t Task::GetInputBufferPhysAddr(uint32_t input_buffer_index,
                                          zx_paddr_t* out) const {
   if (input_buffer_index >= input_buffers_.size() || out == nullptr) {
@@ -24,6 +34,15 @@
   return ZX_OK;
 }
 
+zx_status_t Task::GetInputBufferPhysSize(uint32_t input_buffer_index,
+                                         uint64_t* out) const {
+  if (input_buffer_index >= input_buffers_.size() || out == nullptr) {
+    return ZX_ERR_INVALID_ARGS;
+  }
+  *out = input_buffers_[input_buffer_index].region(0).size;
+  return ZX_OK;
+}
+
 zx_status_t Task::InitBuffers(
     const buffer_collection_info_t* input_buffer_collection,
     const buffer_collection_info_t* output_buffer_collection,
@@ -103,18 +122,6 @@
   return status;
 }
 
-// Validates the buffer collection.
-bool Task::IsBufferCollectionValid(
-    const buffer_collection_info_t* buffer_collection) const {
-  if (buffer_collection == nullptr || buffer_collection->buffer_count == 0 ||
-      buffer_collection->buffer_count > countof(buffer_collection->vmos) ||
-      buffer_collection->format.image.pixel_format.type !=
-          fuchsia_sysmem_PixelFormatType_NV12) {
-    return false;
-  }
-  return true;
-}
-
 // static
 zx_status_t Task::Create(
     const buffer_collection_info_t* input_buffer_collection,
@@ -135,8 +142,11 @@
       input_buffer_collection, output_buffer_collection, config_vmo, bti);
   if (status != ZX_OK) {
     FX_LOG(ERROR, "%s: InitBuffers Failed\n", __func__);
+    return status;
   }
 
+  task->input_format_ = input_buffer_collection->format.image;
+  task->output_format_ = output_buffer_collection->format.image;
   task->callback_ = callback;
 
   *out = std::move(task);
diff --git a/src/camera/drivers/hw_accel/gdc/task.h b/src/camera/drivers/hw_accel/gdc/task.h
index b58abb1..4c3b10c 100644
--- a/src/camera/drivers/hw_accel/gdc/task.h
+++ b/src/camera/drivers/hw_accel/gdc/task.h
@@ -27,6 +27,11 @@
     return config_vmo_pinned_.region(0).phys_addr;
   }
 
+  // Returns the physical address for the config VMO.
+  uint64_t GetConigVmoPhysSize() const {
+    return config_vmo_pinned_.region(0).size;
+  }
+
   // Returns the physical address for the input buffer.
   // |input_buffer_index| : Index of the input buffer for which the address is
   // requested. |out| : Returns the physical address if the index provided is
@@ -34,6 +39,13 @@
   zx_status_t GetInputBufferPhysAddr(uint32_t input_buffer_index,
                                      zx_paddr_t* out) const;
 
+  // Returns the size of the input buffer.
+  // |input_buffer_index| : Index of the input buffer for which the address is
+  // requested. |out| : Returns the size if the index provided is
+  // valid.
+  zx_status_t GetInputBufferPhysSize(uint32_t input_buffer_index,
+                                     uint64_t* out) const;
+
   // Validates input buffer index.
   bool IsInputBufferIndexValid(uint32_t input_buffer_index) const {
     return input_buffer_index < input_buffers_.size();
@@ -44,6 +56,8 @@
     return output_buffers_.LockBufferForWrite();
   }
 
+  image_format_t input_format() { return input_format_; }
+  image_format_t output_format() { return output_format_; }
   const gdc_callback_t* callback() { return callback_; }
 
   // Static function to create a task object.
@@ -67,12 +81,11 @@
       const buffer_collection_info_t* output_buffer_collection,
       const zx::vmo& config_vmo, const zx::bti& bti);
 
-  bool IsBufferCollectionValid(
-      const buffer_collection_info_t* buffer_collection) const;
-
   fzl::PinnedVmo config_vmo_pinned_;
   fzl::VmoPool output_buffers_;
   fbl::Array<fzl::PinnedVmo> input_buffers_;
+  image_format_t input_format_;
+  image_format_t output_format_;
   const gdc_callback_t* callback_;
 };
 }  // namespace gdc
diff --git a/zircon/system/banjo/zircon.device.sysmem/sysmem.banjo b/zircon/system/banjo/zircon.device.sysmem/sysmem.banjo
index 8bbb6fe..dae8ee1 100644
--- a/zircon/system/banjo/zircon.device.sysmem/sysmem.banjo
+++ b/zircon/system/banjo/zircon.device.sysmem/sysmem.banjo
@@ -8,3 +8,6 @@
 
 struct BufferCollectionInfo {
 };
+
+struct ImageFormat {
+};
\ No newline at end of file
diff --git a/zircon/system/public/zircon/device/sysmem.h b/zircon/system/public/zircon/device/sysmem.h
index 7d96b0f..b5a303f 100644
--- a/zircon/system/public/zircon/device/sysmem.h
+++ b/zircon/system/public/zircon/device/sysmem.h
@@ -22,5 +22,6 @@
 // TODO(ZX-2677): Deleting this file is blocked by banjo being able to consume
 // code generated by fidl.
 typedef fuchsia_sysmem_BufferCollectionInfo buffer_collection_info_t;
+typedef fuchsia_sysmem_ImageFormat image_format_t;
 
-#endif  // SYSROOT_ZIRCON_DEVICE_SYSMEM_H_
+#endif // SYSROOT_ZIRCON_DEVICE_SYSMEM_H_
