Switch framebuffer ptr to const reference.

Change-Id: I7fc1ceb3f88659979defd6d9541fea89af7207d6
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/125790
Commit-Queue: Chris Mumford <cmumford@google.com>
Reviewed-by: Anthony DiGirolamo <tonymd@google.com>
diff --git a/pw_display_driver/public/pw_display_driver/display_driver.h b/pw_display_driver/public/pw_display_driver/display_driver.h
index 15bc575..7e87964 100644
--- a/pw_display_driver/public/pw_display_driver/display_driver.h
+++ b/pw_display_driver/public/pw_display_driver/display_driver.h
@@ -18,8 +18,7 @@
 #include "pw_framebuffer/rgb565.h"
 #include "pw_status/status.h"
 
-namespace pw {
-namespace display_driver {
+namespace pw::display_driver {
 
 // This interface defines a software display driver. This is the software
 // component responsible for *all* communications with a display controller.
@@ -34,8 +33,8 @@
 
   // Send all pixels in the supplied |framebuffer| to the display controller
   // for display.
-  virtual Status Update(pw::framebuffer::FramebufferRgb565* framebuffer) = 0;
+  virtual Status Update(
+      const pw::framebuffer::FramebufferRgb565& framebuffer) = 0;
 };
 
-}  // namespace display_driver
-}  // namespace pw
+}  // namespace pw::display_driver
diff --git a/pw_display_driver_ili9341/display_driver.cc b/pw_display_driver_ili9341/display_driver.cc
index cfb38b6..3ac0f1f 100644
--- a/pw_display_driver_ili9341/display_driver.cc
+++ b/pw_display_driver_ili9341/display_driver.cc
@@ -20,6 +20,7 @@
 
 using pw::color::color_rgb565_t;
 using pw::digital_io::State;
+using pw::framebuffer::FramebufferRgb565;
 using pw::spi::ChipSelectBehavior;
 using pw::spi::Device;
 
@@ -280,11 +281,10 @@
   return OkStatus();
 }
 
-Status DisplayDriverILI9341::Update(
-    pw::framebuffer::FramebufferRgb565* frame_buffer) {
+Status DisplayDriverILI9341::Update(const FramebufferRgb565& frame_buffer) {
   auto transaction = config_.spi_device_16_bit.StartTransaction(
       ChipSelectBehavior::kPerTransaction);
-  const uint16_t* fb_data = frame_buffer->GetFramebufferData();
+  const uint16_t* fb_data = frame_buffer.GetFramebufferData();
   Status s;
   // TODO(cmumford): Figure out why the STM32F429I cannot send the entire
   // framebuffer in a single write, but another display can.
@@ -311,16 +311,16 @@
 }
 
 Status DisplayDriverILI9341::UpdatePixelDouble(
-    pw::framebuffer::FramebufferRgb565* frame_buffer) {
+    const FramebufferRgb565& frame_buffer) {
   uint16_t temp_row[kDisplayWidth];
   auto transaction = config_.spi_device_16_bit.StartTransaction(
       ChipSelectBehavior::kPerTransaction);
-  const color_rgb565_t* const fbdata = frame_buffer->GetFramebufferData();
-  for (int y = 0; y < frame_buffer->GetHeight(); y++) {
+  const color_rgb565_t* const fbdata = frame_buffer.GetFramebufferData();
+  for (int y = 0; y < frame_buffer.GetHeight(); y++) {
     // Populate this row with each pixel repeated twice
-    for (int x = 0; x < frame_buffer->GetWidth(); x++) {
-      temp_row[x * 2] = fbdata[y * frame_buffer->GetWidth() + x];
-      temp_row[(x * 2) + 1] = fbdata[y * frame_buffer->GetWidth() + x];
+    for (int x = 0; x < frame_buffer.GetWidth(); x++) {
+      temp_row[x * 2] = fbdata[y * frame_buffer.GetWidth() + x];
+      temp_row[(x * 2) + 1] = fbdata[y * frame_buffer.GetWidth() + x];
     }
     // Send this row to the display twice.
     auto s = transaction.Write(ConstByteSpan(
diff --git a/pw_display_driver_ili9341/public/pw_display_driver_ili9341/display_driver.h b/pw_display_driver_ili9341/public/pw_display_driver_ili9341/display_driver.h
index d7998d9..0575116 100644
--- a/pw_display_driver_ili9341/public/pw_display_driver_ili9341/display_driver.h
+++ b/pw_display_driver_ili9341/public/pw_display_driver_ili9341/display_driver.h
@@ -42,8 +42,9 @@
 
   // DisplayDriver implementation:
   Status Init() override;
-  Status Update(pw::framebuffer::FramebufferRgb565* framebuffer);
-  Status UpdatePixelDouble(pw::framebuffer::FramebufferRgb565* frame_buffer);
+  Status Update(const pw::framebuffer::FramebufferRgb565& framebuffer);
+  Status UpdatePixelDouble(
+      const pw::framebuffer::FramebufferRgb565& framebuffer);
 
  private:
   enum class Mode {
diff --git a/pw_display_driver_imgui/display_driver.cc b/pw_display_driver_imgui/display_driver.cc
index ad2f529..c8c83ee 100644
--- a/pw_display_driver_imgui/display_driver.cc
+++ b/pw_display_driver_imgui/display_driver.cc
@@ -34,6 +34,7 @@
 
 using pw::color::color_rgb565_t;
 using pw::coordinates::Vec3Int;
+using pw::framebuffer::FramebufferRgb565;
 
 namespace pw::display_driver {
 
@@ -389,14 +390,13 @@
   }
 }
 
-Status DisplayDriverImgUI::Update(
-    pw::framebuffer::FramebufferRgb565* framebuffer) {
+Status DisplayDriverImgUI::Update(const FramebufferRgb565& framebuffer) {
   RecreateLcdTexture();
 
   // Copy frame_buffer into lcd_pixel_data
   for (GLuint x = 0; x < kDisplayWidth; x++) {
     for (GLuint y = 0; y < kDisplayHeight; y++) {
-      if (auto c = framebuffer->GetPixel(x, y); c.ok()) {
+      if (auto c = framebuffer.GetPixel(x, y); c.ok()) {
         _SetTexturePixel(x, y, c.value());
       }
     }
diff --git a/pw_display_driver_imgui/public/pw_display_driver_imgui/display_driver.h b/pw_display_driver_imgui/public/pw_display_driver_imgui/display_driver.h
index a8ee80f..ddcc428 100644
--- a/pw_display_driver_imgui/public/pw_display_driver_imgui/display_driver.h
+++ b/pw_display_driver_imgui/public/pw_display_driver_imgui/display_driver.h
@@ -27,7 +27,7 @@
 
   // pw::display_driver::DisplayDriver implementation:
   Status Init() override;
-  Status Update(pw::framebuffer::FramebufferRgb565* framebuffer) override;
+  Status Update(const pw::framebuffer::FramebufferRgb565& framebuffer) override;
 
  private:
   void RecreateLcdTexture();
diff --git a/pw_display_driver_null/public/pw_display_driver_null/display_driver.h b/pw_display_driver_null/public/pw_display_driver_null/display_driver.h
index 6f9d978..bad771c 100644
--- a/pw_display_driver_null/public/pw_display_driver_null/display_driver.h
+++ b/pw_display_driver_null/public/pw_display_driver_null/display_driver.h
@@ -25,7 +25,7 @@
 
   // pw::display_driver::DisplayDriver implementation:
   pw::Status Init() override { return pw::OkStatus(); }
-  pw::Status Update(pw::framebuffer::FramebufferRgb565*) override {
+  pw::Status Update(const pw::framebuffer::FramebufferRgb565&) override {
     return pw::OkStatus();
   }
 };
diff --git a/pw_display_driver_st7789/display_driver.cc b/pw_display_driver_st7789/display_driver.cc
index 4c5d297..68a577d 100644
--- a/pw_display_driver_st7789/display_driver.cc
+++ b/pw_display_driver_st7789/display_driver.cc
@@ -23,6 +23,7 @@
 
 using pw::color::color_rgb565_t;
 using pw::digital_io::State;
+using pw::framebuffer::FramebufferRgb565;
 using pw::spi::ChipSelectBehavior;
 using pw::spi::Device;
 using std::array;
@@ -178,8 +179,7 @@
   return OkStatus();
 }
 
-Status DisplayDriverST7789::Update(
-    pw::framebuffer::FramebufferRgb565* frame_buffer) {
+Status DisplayDriverST7789::Update(const FramebufferRgb565& frame_buffer) {
   // Let controller know a write is coming.
   {
     auto transaction = config_.spi_device_8_bit.StartTransaction(
@@ -190,8 +190,8 @@
   // Write the pixel data.
   auto transaction = config_.spi_device_16_bit.StartTransaction(
       ChipSelectBehavior::kPerWriteRead);
-  const uint16_t* fb_data = frame_buffer->GetFramebufferData();
-  const int num_pixels = frame_buffer->GetWidth() * frame_buffer->GetHeight();
+  const uint16_t* fb_data = frame_buffer.GetFramebufferData();
+  const int num_pixels = frame_buffer.GetWidth() * frame_buffer.GetHeight();
   return transaction.Write(
       ConstByteSpan(reinterpret_cast<const byte*>(fb_data), num_pixels));
 }
diff --git a/pw_display_driver_st7789/public/pw_display_driver_st7789/display_driver.h b/pw_display_driver_st7789/public/pw_display_driver_st7789/display_driver.h
index 49a65b9..f5824bb 100644
--- a/pw_display_driver_st7789/public/pw_display_driver_st7789/display_driver.h
+++ b/pw_display_driver_st7789/public/pw_display_driver_st7789/display_driver.h
@@ -44,7 +44,7 @@
 
   // DisplayDriver implementation:
   Status Init() override;
-  Status Update(pw::framebuffer::FramebufferRgb565* framebuffer);
+  Status Update(const pw::framebuffer::FramebufferRgb565& framebuffer) override;
 
  private:
   enum class Mode {
diff --git a/pw_graphics/pw_display/display.cc b/pw_graphics/pw_display/display.cc
index d5b0e27..881306b 100644
--- a/pw_graphics/pw_display/display.cc
+++ b/pw_graphics/pw_display/display.cc
@@ -17,7 +17,7 @@
 
 namespace pw::display {
 
-Display::Display(pw::framebuffer::FramebufferRgb565 framebuffer,
+Display::Display(FramebufferRgb565 framebuffer,
                  pw::display_driver::DisplayDriver& display_driver)
     : framebuffer_(std::move(framebuffer)), display_driver_(display_driver) {}
 
@@ -33,7 +33,7 @@
 Status Display::ReleaseFramebuffer(FramebufferRgb565 framebuffer) {
   if (!framebuffer.IsValid())
     return Status::InvalidArgument();
-  return display_driver_.Update(&framebuffer);
+  return display_driver_.Update(framebuffer);
 }
 
 }  // namespace pw::display