| 1110 | } |
| 1111 | |
| 1112 | static avifResult avifEncoderDataCreateExifItem(avifEncoderData * data, const avifRWData * exif) |
| 1113 | { |
| 1114 | size_t exifTiffHeaderOffset; |
| 1115 | const avifResult result = avifGetExifTiffHeaderOffset(exif->data, exif->size, &exifTiffHeaderOffset); |
| 1116 | if (result != AVIF_RESULT_OK) { |
| 1117 | // Couldn't find the TIFF header |
| 1118 | return result; |
| 1119 | } |
| 1120 | |
| 1121 | avifEncoderItem * exifItem = avifEncoderDataCreateItem(data, "Exif", "Exif", 5, 0); |
| 1122 | if (!exifItem) { |
| 1123 | return AVIF_RESULT_OUT_OF_MEMORY; |
| 1124 | } |
| 1125 | exifItem->irefToID = data->primaryItemID; |
| 1126 | exifItem->irefType = "cdsc"; |
| 1127 | |
| 1128 | const uint32_t offset32bit = avifHTONL((uint32_t)exifTiffHeaderOffset); |
| 1129 | AVIF_CHECKRES(avifRWDataRealloc(&exifItem->metadataPayload, sizeof(offset32bit) + exif->size)); |
| 1130 | memcpy(exifItem->metadataPayload.data, &offset32bit, sizeof(offset32bit)); |
| 1131 | memcpy(exifItem->metadataPayload.data + sizeof(offset32bit), exif->data, exif->size); |
| 1132 | return AVIF_RESULT_OK; |
| 1133 | } |
| 1134 | |
| 1135 | static avifResult avifEncoderDataCreateXMPItem(avifEncoderData * data, const avifRWData * xmp) |
| 1136 | { |
no test coverage detected