Support pasp, clap, irot, imir metadata for encode/decode
Fixes: #41
diff --git a/src/write.c b/src/write.c
index 8f2fbac..5ca31df 100644
--- a/src/write.c
+++ b/src/write.c
@@ -403,6 +403,46 @@
++ipcoIndex;
ipmaPush(&ipmaColor, ipcoIndex);
+ // Write (Optional) Transformations
+ if (image->transformFlags & AVIF_TRANSFORM_PASP) {
+ avifBoxMarker pasp = avifRWStreamWriteBox(&s, "pasp", -1, 0);
+ avifRWStreamWriteU32(&s, image->pasp.hSpacing); // unsigned int(32) hSpacing;
+ avifRWStreamWriteU32(&s, image->pasp.vSpacing); // unsigned int(32) vSpacing;
+ avifRWStreamFinishBox(&s, pasp);
+ ++ipcoIndex;
+ ipmaPush(&ipmaColor, ipcoIndex);
+ }
+ if (image->transformFlags & AVIF_TRANSFORM_CLAP) {
+ avifBoxMarker clap = avifRWStreamWriteBox(&s, "clap", -1, 0);
+ avifRWStreamWriteU32(&s, image->clap.widthN); // unsigned int(32) cleanApertureWidthN;
+ avifRWStreamWriteU32(&s, image->clap.widthD); // unsigned int(32) cleanApertureWidthD;
+ avifRWStreamWriteU32(&s, image->clap.heightN); // unsigned int(32) cleanApertureHeightN;
+ avifRWStreamWriteU32(&s, image->clap.heightD); // unsigned int(32) cleanApertureHeightD;
+ avifRWStreamWriteU32(&s, image->clap.horizOffN); // unsigned int(32) horizOffN;
+ avifRWStreamWriteU32(&s, image->clap.horizOffD); // unsigned int(32) horizOffD;
+ avifRWStreamWriteU32(&s, image->clap.vertOffN); // unsigned int(32) vertOffN;
+ avifRWStreamWriteU32(&s, image->clap.vertOffD); // unsigned int(32) vertOffD;
+ avifRWStreamFinishBox(&s, clap);
+ ++ipcoIndex;
+ ipmaPush(&ipmaColor, ipcoIndex);
+ }
+ if (image->transformFlags & AVIF_TRANSFORM_IROT) {
+ avifBoxMarker irot = avifRWStreamWriteBox(&s, "irot", -1, 0);
+ uint8_t angle = image->irot.angle & 0x3;
+ avifRWStreamWrite(&s, &angle, 1); // unsigned int (6) reserved = 0; unsigned int (2) angle;
+ avifRWStreamFinishBox(&s, irot);
+ ++ipcoIndex;
+ ipmaPush(&ipmaColor, ipcoIndex);
+ }
+ if (image->transformFlags & AVIF_TRANSFORM_IMIR) {
+ avifBoxMarker imir = avifRWStreamWriteBox(&s, "imir", -1, 0);
+ uint8_t axis = image->imir.axis & 0x1;
+ avifRWStreamWrite(&s, &axis, 1); // unsigned int (7) reserved = 0; unsigned int (1) axis;
+ avifRWStreamFinishBox(&s, imir);
+ ++ipcoIndex;
+ ipmaPush(&ipmaColor, ipcoIndex);
+ }
+
if (hasAlpha) {
avifBoxMarker pixiA = avifRWStreamWriteBox(&s, "pixi", 0, 0);
avifRWStreamWriteU8(&s, 1); // unsigned int (8) num_channels;