From 58922106f0da361373cdc6683092822aa0240963 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Mon, 19 May 2025 17:05:45 +0200 Subject: [PATCH] Cleanup exif/xmp metadata handling --- openVulkanoCpp/AR/ArRecorder.cpp | 47 ++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/openVulkanoCpp/AR/ArRecorder.cpp b/openVulkanoCpp/AR/ArRecorder.cpp index fa6b501..32a0bdb 100644 --- a/openVulkanoCpp/AR/ArRecorder.cpp +++ b/openVulkanoCpp/AR/ArRecorder.cpp @@ -44,6 +44,31 @@ namespace OpenVulkano::AR { return fmt::format("{:07d}.{}", frameId, fileExtension); } + + std::string MakeXmpTag(ArFrame* arFrame) + { + Image::XmpBuilder xmpBuilder; + xmpBuilder.SetPose(arFrame->GetPose()); + xmpBuilder.SetCreateDateNow(); + xmpBuilder.SetExposureTime(arFrame->GetExposureTime()); + xmpBuilder.SetFocalLength(arFrame->GetFocalLength()); + xmpBuilder.SetCameraIntrinsic(arFrame->GetCameraIntrinsic()); + return xmpBuilder.Finalize(); + } + + std::vector MakeExifTag(ArFrame* arFrame) + { + Image::ExifBuilder exifBuilder; + exifBuilder.model = arFrame->GetLensModel(); + exifBuilder.exposureTime = Image::RationalValue(1, 1.0f / arFrame->GetExposureTime()); + exifBuilder.SetOrientation(atan2f(arFrame->GetCameraTransformation()[0][1], arFrame->GetCameraTransformation()[1][1])); + exifBuilder.dateTaken = exifBuilder.GetCurrentTimestamp(); + exifBuilder.make = arFrame->GetArSession()->GetArType().GetVendorName(); + exifBuilder.SetResolution(); + exifBuilder.fNumber = arFrame->GetFNumber(); + exifBuilder.focalLength = arFrame->GetFocalLength(); + return exifBuilder.Build(); + } } ArRecorder::ArRecorder(ArSession* session) @@ -111,28 +136,10 @@ namespace OpenVulkano::AR colorWriter->AddFile(fileName.c_str(), outBuffer, size); if (path) [[unlikely]] { - /*std::ofstream outFile(*path, std::ios::binary); - outFile.write(reinterpret_cast(outBuffer), size); - outFile.close();*/ - Image::ExifBuilder exifBuilder; - exifBuilder.model = arFrame->GetLensModel(); - exifBuilder.exposureTime = Image::RationalValue(1, 1.0f / arFrame->GetExposureTime()); - exifBuilder.SetOrientation(atan2f(arFrame->GetCameraTransformation()[0][1], arFrame->GetCameraTransformation()[1][1])); - exifBuilder.dateTaken = exifBuilder.GetCurrentTimestamp(); - exifBuilder.make = arFrame->GetArSession()->GetArType().GetVendorName(); - exifBuilder.SetResolution(); - exifBuilder.fNumber = arFrame->GetFNumber(); - exifBuilder.focalLength = arFrame->GetFocalLength(); - auto exif = exifBuilder.Build(); - Image::XmpBuilder xmpBuilder; - xmpBuilder.SetPose(arFrame->GetPose()); - xmpBuilder.SetCreateDateNow(); - xmpBuilder.SetExposureTime(arFrame->GetExposureTime()); - xmpBuilder.SetFocalLength(arFrame->GetFocalLength()); - xmpBuilder.SetCameraIntrinsic(arFrame->GetCameraIntrinsic()); + auto exif = MakeExifTag(arFrame); JpegWithTagsWriter writer(*path); writer.WriteExifTag(exif); - writer.WriteXmpTag(xmpBuilder.Finalize()); + writer.WriteXmpTag(MakeXmpTag(arFrame)); writer.WriteImageData({ outBuffer, size }); } }