Copy NCLX color profile. (#98)

* Copy nclx to a parent image.

* Check the profile format

* Use pointer to avoid copy

* Check that target image has no profile.
diff --git a/src/read.c b/src/read.c
index 1e1aa5e..70a6373 100644
--- a/src/read.c
+++ b/src/read.c
@@ -550,6 +550,9 @@
     unsigned int tileHeight = firstTile->image->height;
     unsigned int tileDepth = firstTile->image->depth;
     avifPixelFormat tileFormat = firstTile->image->yuvFormat;
+
+    avifProfileFormat tileProfile = firstTile->image->profileFormat;
+    avifNclxColorProfile * tileNCLX = &firstTile->image->nclx;
     avifRange tileRange = firstTile->image->yuvRange;
     avifBool tileUVPresent = (firstTile->image->yuvPlanes[AVIF_CHAN_U] && firstTile->image->yuvPlanes[AVIF_CHAN_V]) ? AVIF_TRUE
                                                                                                                     : AVIF_FALSE;
@@ -558,7 +561,11 @@
         avifTile * tile = &data->tiles.tile[firstTileIndex + i];
         avifBool uvPresent = (tile->image->yuvPlanes[AVIF_CHAN_U] && tile->image->yuvPlanes[AVIF_CHAN_V]) ? AVIF_TRUE : AVIF_FALSE;
         if ((tile->image->width != tileWidth) || (tile->image->height != tileHeight) || (tile->image->depth != tileDepth) ||
-            (tile->image->yuvFormat != tileFormat) || (tile->image->yuvRange != tileRange) || (uvPresent != tileUVPresent)) {
+            (tile->image->yuvFormat != tileFormat) || (tile->image->yuvRange != tileRange) || (uvPresent != tileUVPresent) ||
+            ((tileProfile == AVIF_PROFILE_FORMAT_NCLX) &&
+             ((tile->image->profileFormat != tileProfile) ||
+              (tile->image->nclx.colourPrimaries != tileNCLX->colourPrimaries) || (tile->image->nclx.transferCharacteristics != tileNCLX->transferCharacteristics) ||
+              (tile->image->nclx.matrixCoefficients != tileNCLX->matrixCoefficients) || (tile->image->nclx.fullRangeFlag != tileNCLX->fullRangeFlag)))) {
             return AVIF_FALSE;
         }
     }
@@ -576,6 +583,9 @@
         dstImage->depth = tileDepth;
         dstImage->yuvFormat = tileFormat;
         dstImage->yuvRange = tileRange;
+        if(dstImage->profileFormat == AVIF_PROFILE_FORMAT_NONE && tileProfile == AVIF_PROFILE_FORMAT_NCLX) {
+          avifImageSetProfileNCLX(dstImage, tileNCLX);
+        }
     }
 
     avifImageAllocatePlanes(dstImage, alpha ? AVIF_PLANES_A : AVIF_PLANES_YUV);
@@ -2126,6 +2136,10 @@
             decoder->image->width = srcColor->width;
             decoder->image->height = srcColor->height;
             decoder->image->depth = srcColor->depth;
+
+            if(decoder->image->profileFormat == AVIF_PROFILE_FORMAT_NONE && srcColor->profileFormat == AVIF_PROFILE_FORMAT_NCLX) {
+              avifImageSetProfileNCLX(decoder->image, &srcColor->nclx);
+            }
         }
 
         avifImageStealPlanes(decoder->image, srcColor, AVIF_PLANES_YUV);