| 924 | } |
| 925 | |
| 926 | static avifResult avifWriteGridPayload(avifRWData * data, uint32_t gridCols, uint32_t gridRows, uint32_t gridWidth, uint32_t gridHeight) |
| 927 | { |
| 928 | // ISO/IEC 23008-12 6.6.2.3.2 |
| 929 | // aligned(8) class ImageGrid { |
| 930 | // unsigned int(8) version = 0; |
| 931 | // unsigned int(8) flags; |
| 932 | // FieldLength = ((flags & 1) + 1) * 16; |
| 933 | // unsigned int(8) rows_minus_one; |
| 934 | // unsigned int(8) columns_minus_one; |
| 935 | // unsigned int(FieldLength) output_width; |
| 936 | // unsigned int(FieldLength) output_height; |
| 937 | // } |
| 938 | |
| 939 | uint8_t gridFlags = ((gridWidth > 65535) || (gridHeight > 65535)) ? 1 : 0; |
| 940 | |
| 941 | avifRWStream s; |
| 942 | avifRWStreamStart(&s, data); |
| 943 | AVIF_CHECKRES(avifRWStreamWriteU8(&s, 0)); // unsigned int(8) version = 0; |
| 944 | AVIF_CHECKRES(avifRWStreamWriteU8(&s, gridFlags)); // unsigned int(8) flags; |
| 945 | AVIF_CHECKRES(avifRWStreamWriteU8(&s, (uint8_t)(gridRows - 1))); // unsigned int(8) rows_minus_one; |
| 946 | AVIF_CHECKRES(avifRWStreamWriteU8(&s, (uint8_t)(gridCols - 1))); // unsigned int(8) columns_minus_one; |
| 947 | if (gridFlags & 1) { |
| 948 | AVIF_CHECKRES(avifRWStreamWriteU32(&s, gridWidth)); // unsigned int(FieldLength) output_width; |
| 949 | AVIF_CHECKRES(avifRWStreamWriteU32(&s, gridHeight)); // unsigned int(FieldLength) output_height; |
| 950 | } else { |
| 951 | uint16_t tmpWidth = (uint16_t)gridWidth; |
| 952 | uint16_t tmpHeight = (uint16_t)gridHeight; |
| 953 | AVIF_CHECKRES(avifRWStreamWriteU16(&s, tmpWidth)); // unsigned int(FieldLength) output_width; |
| 954 | AVIF_CHECKRES(avifRWStreamWriteU16(&s, tmpHeight)); // unsigned int(FieldLength) output_height; |
| 955 | } |
| 956 | avifRWStreamFinishWrite(&s); |
| 957 | return AVIF_RESULT_OK; |
| 958 | } |
| 959 | |
| 960 | static avifBool avifGainMapIdenticalChannels(const avifGainMap * gainMap) |
| 961 | { |
no test coverage detected