Fix avifImageCopyAndPad()

Other fields than width, height, depth and yuvFormat were not properly
propagated to padded cells.
Add regression test.
diff --git a/src/write.c b/src/write.c
index 0a7e1ea..8b33b0c 100644
--- a/src/write.c
+++ b/src/write.c
@@ -771,7 +771,14 @@
 // Same as avifImageCopy() but pads the dstImage with border pixel values to reach dstWidth and dstHeight.
 static avifImage * avifImageCopyAndPad(const avifImage * srcImage, uint32_t dstWidth, uint32_t dstHeight)
 {
-    avifImage * dstImage = avifImageCreate(dstWidth, dstHeight, srcImage->depth, srcImage->yuvFormat);
+    avifImage * dstImage = avifImageCreateEmpty();
+    // Copy all fields but do not allocate.
+    if (avifImageCopy(dstImage, srcImage, (avifPlanesFlag)0) != AVIF_RESULT_OK) {
+        avifImageDestroy(dstImage);
+        return NULL;
+    }
+    dstImage->width = dstWidth;
+    dstImage->height = dstHeight;
 
     if (srcImage->yuvPlanes[AVIF_CHAN_Y]) {
         const avifResult allocationResult = avifImageAllocatePlanes(dstImage, AVIF_PLANES_YUV);
diff --git a/tests/gtest/avifgridapitest.cc b/tests/gtest/avifgridapitest.cc
index 3cc4f82..705382e 100644
--- a/tests/gtest/avifgridapitest.cc
+++ b/tests/gtest/avifgridapitest.cc
@@ -241,5 +241,51 @@
             AVIF_RESULT_INVALID_IMAGE_GRID);
 }
 
+//------------------------------------------------------------------------------
+
+TEST(GridApiTest, SameMatrixCoefficients) {
+  testutil::AvifImagePtr cell_0 = testutil::CreateImage(
+      64, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+  testutil::AvifImagePtr cell_1 = testutil::CreateImage(
+      1, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+
+  // All input cells have the same non-default properties.
+  cell_0->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
+  cell_1->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
+
+  testutil::AvifEncoderPtr encoder(avifEncoderCreate(), avifEncoderDestroy);
+  ASSERT_NE(encoder, nullptr);
+  encoder->speed = AVIF_SPEED_FASTEST;
+  const avifImage* cell_image_ptrs[2] = {cell_0.get(), cell_1.get()};
+  ASSERT_EQ(
+      avifEncoderAddImageGrid(encoder.get(), /*gridCols=*/2, /*gridRows=*/1,
+                              cell_image_ptrs, AVIF_ADD_IMAGE_FLAG_SINGLE),
+      AVIF_RESULT_OK);
+  testutil::AvifRwData encoded_avif;
+  ASSERT_EQ(avifEncoderFinish(encoder.get(), &encoded_avif), AVIF_RESULT_OK);
+  ASSERT_NE(testutil::Decode(encoded_avif.data, encoded_avif.size), nullptr);
+}
+
+TEST(GridApiTest, DifferentMatrixCoefficients) {
+  testutil::AvifImagePtr cell_0 = testutil::CreateImage(
+      64, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+  testutil::AvifImagePtr cell_1 = testutil::CreateImage(
+      1, 64, /*depth=*/8, AVIF_PIXEL_FORMAT_YUV444, AVIF_PLANES_ALL);
+
+  // Some input cells have different properties.
+  cell_0->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
+  cell_1->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_UNSPECIFIED;
+
+  testutil::AvifEncoderPtr encoder(avifEncoderCreate(), avifEncoderDestroy);
+  ASSERT_NE(encoder, nullptr);
+  encoder->speed = AVIF_SPEED_FASTEST;
+  // Encoding should fail.
+  const avifImage* cell_image_ptrs[2] = {cell_0.get(), cell_1.get()};
+  ASSERT_EQ(
+      avifEncoderAddImageGrid(encoder.get(), /*gridCols=*/2, /*gridRows=*/1,
+                              cell_image_ptrs, AVIF_ADD_IMAGE_FLAG_SINGLE),
+      AVIF_RESULT_INVALID_IMAGE_GRID);
+}
+
 }  // namespace
 }  // namespace libavif