| 786 | } |
| 787 | |
| 788 | static avifResult avifEncoderWriteTransformativeProperties(avifRWStream * dedupStream, |
| 789 | avifRWStream * outputStream, |
| 790 | const avifImage * imageMetadata, |
| 791 | avifItemPropertyAssociationArray * associations, |
| 792 | avifItemPropertyDedup * dedup) |
| 793 | { |
| 794 | if (imageMetadata->transformFlags & AVIF_TRANSFORM_CLAP) { |
| 795 | if (dedup) { |
| 796 | avifItemPropertyDedupStart(dedup); |
| 797 | } |
| 798 | avifBoxMarker clap; |
| 799 | AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "clap", AVIF_BOX_SIZE_TBD, &clap)); |
| 800 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.widthN)); // unsigned int(32) cleanApertureWidthN; |
| 801 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.widthD)); // unsigned int(32) cleanApertureWidthD; |
| 802 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.heightN)); // unsigned int(32) cleanApertureHeightN; |
| 803 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.heightD)); // unsigned int(32) cleanApertureHeightD; |
| 804 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.horizOffN)); // unsigned int(32) horizOffN; |
| 805 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.horizOffD)); // unsigned int(32) horizOffD; |
| 806 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.vertOffN)); // unsigned int(32) vertOffN; |
| 807 | AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.vertOffD)); // unsigned int(32) vertOffD; |
| 808 | AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, clap)); |
| 809 | if (dedup) { |
| 810 | AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE)); |
| 811 | } |
| 812 | } |
| 813 | if (imageMetadata->transformFlags & AVIF_TRANSFORM_IROT) { |
| 814 | if (dedup) { |
| 815 | avifItemPropertyDedupStart(dedup); |
| 816 | } |
| 817 | avifBoxMarker irot; |
| 818 | AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "irot", AVIF_BOX_SIZE_TBD, &irot)); |
| 819 | AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/6)); // unsigned int (6) reserved = 0; |
| 820 | AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, imageMetadata->irot.angle & 0x3, /*bitCount=*/2)); // unsigned int (2) angle; |
| 821 | AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, irot)); |
| 822 | if (dedup) { |
| 823 | AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE)); |
| 824 | } |
| 825 | } |
| 826 | if (imageMetadata->transformFlags & AVIF_TRANSFORM_IMIR) { |
| 827 | if (dedup) { |
| 828 | avifItemPropertyDedupStart(dedup); |
| 829 | } |
| 830 | avifBoxMarker imir; |
| 831 | AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "imir", AVIF_BOX_SIZE_TBD, &imir)); |
| 832 | AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/7)); // unsigned int(7) reserved = 0; |
| 833 | AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, imageMetadata->imir.axis ? 1 : 0, /*bitCount=*/1)); // unsigned int(1) axis; |
| 834 | AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, imir)); |
| 835 | if (dedup) { |
| 836 | AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE)); |
| 837 | } |
| 838 | } |
| 839 | return AVIF_RESULT_OK; |
| 840 | } |
| 841 | |
| 842 | static avifResult avifRWStreamWriteHandlerBox(avifRWStream * s, const char handlerType[4]) |
| 843 | { |
no test coverage detected