Clean up image_diff_png.cpp.

- Merge anonymous namespaces, and put more code into the anonymous
  namespace.
- Initialize member variables where defined.
- Use constexpr in more places.
- s/NULL/nullptr/

Change-Id: I94ae18b46239b41cce8cda542b0f264d0d6f4601
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56730
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/testing/image_diff/image_diff_png.cpp b/testing/image_diff/image_diff_png.cpp
index 9825e28..ef9d4aa 100644
--- a/testing/image_diff/image_diff_png.cpp
+++ b/testing/image_diff/image_diff_png.cpp
@@ -101,56 +101,47 @@
   }
 }
 
-}  // namespace
-
 // Decoder
 //
 // This code is based on WebKit libpng interface (PNGImageDecoder), which is
 // in turn based on the Mozilla png decoder.
 
-namespace {
-
 // Gamma constants: We assume we're on Windows which uses a gamma of 2.2.
-const double kMaxGamma = 21474.83;  // Maximum gamma accepted by png library.
-const double kDefaultGamma = 2.2;
-const double kInverseGamma = 1.0 / kDefaultGamma;
+constexpr double kDefaultGamma = 2.2;
+
+// Maximum gamma accepted by PNG library.
+constexpr double kMaxGamma = 21474.83;
+
+constexpr double kInverseGamma = 1.0 / kDefaultGamma;
 
 class PngDecoderState {
  public:
-  // Output is a vector<unsigned char>.
-  PngDecoderState(ColorFormat ofmt, std::vector<unsigned char>* o)
-      : output_format(ofmt),
-        output_channels(0),
-        is_opaque(true),
-        output(o),
-        row_converter(nullptr),
-        width(0),
-        height(0),
-        done(false) {}
+  PngDecoderState(ColorFormat ofmt, std::vector<unsigned char>* out)
+      : output_format(ofmt), output(out) {}
 
-  ColorFormat output_format;
-  int output_channels;
+  const ColorFormat output_format;
+  int output_channels = 0;
 
   // Used during the reading of an SkBitmap. Defaults to true until we see a
   // pixel with anything other than an alpha of 255.
-  bool is_opaque;
+  bool is_opaque = true;
 
   // An intermediary buffer for decode output.
-  std::vector<unsigned char>* output;
+  std::vector<unsigned char>* const output;
 
   // Called to convert a row from the library to the correct output format.
-  // When NULL, no conversion is necessary.
+  // When null, no conversion is necessary.
   void (*row_converter)(const unsigned char* in,
                         int w,
                         unsigned char* out,
-                        bool* is_opaque);
+                        bool* is_opaque) = nullptr;
 
   // Size of the image, set in the info callback.
-  int width;
-  int height;
+  int width = 0;
+  int height = 0;
 
   // Set to true when we've found the end of the data.
-  bool done;
+  bool done = false;
 };
 
 void ConvertRGBtoRGBA(const unsigned char* rgb,
@@ -304,7 +295,7 @@
     return;
   }
 
-  unsigned char* base = NULL;
+  unsigned char* base = nullptr;
   base = &state->output->front();
 
   unsigned char* dest = &base[state->width * state->output_channels * row_num];
@@ -328,7 +319,7 @@
 class PngReadStructDestroyer {
  public:
   PngReadStructDestroyer(png_struct** ps, png_info** pi) : ps_(ps), pi_(pi) {}
-  ~PngReadStructDestroyer() { png_destroy_read_struct(ps_, pi_, NULL); }
+  ~PngReadStructDestroyer() { png_destroy_read_struct(ps_, pi_, nullptr); }
 
  private:
   png_struct** ps_;
@@ -346,30 +337,28 @@
   if (png_sig_cmp(const_cast<unsigned char*>(input), 0, 8) != 0)
     return false;
 
-  *png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+  *png_ptr =
+      png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
   if (!*png_ptr)
     return false;
 
   *info_ptr = png_create_info_struct(*png_ptr);
   if (!*info_ptr) {
-    png_destroy_read_struct(png_ptr, NULL, NULL);
+    png_destroy_read_struct(png_ptr, nullptr, nullptr);
     return false;
   }
 
   return true;
 }
 
-}  // namespace
-
-// static
 std::vector<unsigned char> Decode(const unsigned char* input,
                                   size_t input_size,
                                   ColorFormat format,
                                   int* w,
                                   int* h) {
   std::vector<unsigned char> output;
-  png_struct* png_ptr = NULL;
-  png_info* info_ptr = NULL;
+  png_struct* png_ptr = nullptr;
+  png_info* info_ptr = nullptr;
   if (!BuildPNGStruct(input, input_size, &png_ptr, &info_ptr))
     return output;
 
@@ -405,8 +394,6 @@
 // This section of the code is based on nsPNGEncoder.cpp in Mozilla
 // (Copyright 2005 Google Inc.)
 
-namespace {
-
 // Passed around as the io_ptr in the png structs so our callbacks know where
 // to write data.
 struct PngEncoderState {
@@ -518,7 +505,7 @@
 #ifdef PNG_TEXT_SUPPORTED
   CommentWriter comment_writer(comments);
 #endif
-  unsigned char* row_buffer = NULL;
+  unsigned char* row_buffer = nullptr;
 
   // Make sure to not declare any locals here -- locals in the presence
   // of setjmp() in C++ code makes gcc complain.
@@ -556,7 +543,7 @@
     // Needs conversion using a separate buffer.
     row_buffer = new unsigned char[width * output_color_components];
     for (int y = 0; y < height; y++) {
-      converter(&input[y * row_byte_width], width, row_buffer, NULL);
+      converter(&input[y * row_byte_width], width, row_buffer, nullptr);
       png_write_row(png_ptr, row_buffer);
     }
     delete[] row_buffer;
@@ -566,9 +553,6 @@
   return true;
 }
 
-}  // namespace
-
-// static
 std::vector<unsigned char> EncodeWithCompressionLevel(
     const unsigned char* input,
     ColorFormat format,
@@ -580,7 +564,7 @@
     int compression_level) {
   std::vector<unsigned char> output;
 
-  // Run to convert an input row into the output row format, NULL means no
+  // Run to convert an input row into the output row format, nullptr means no
   // conversion is necessary.
   FormatConverter converter = nullptr;
 
@@ -640,12 +624,12 @@
     return output;
 
   png_struct* png_ptr =
-      png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+      png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
   if (!png_ptr)
     return output;
   png_info* info_ptr = png_create_info_struct(png_ptr);
   if (!info_ptr) {
-    png_destroy_write_struct(&png_ptr, NULL);
+    png_destroy_write_struct(&png_ptr, nullptr);
     return output;
   }
 
@@ -661,7 +645,6 @@
   return output;
 }
 
-// static
 std::vector<unsigned char> Encode(const unsigned char* input,
                                   ColorFormat format,
                                   const int width,
@@ -674,6 +657,8 @@
                                     comments, Z_DEFAULT_COMPRESSION);
 }
 
+}  // namespace
+
 std::vector<unsigned char> DecodePNG(const unsigned char* input,
                                      size_t input_size,
                                      int* width,