Cleanup exif/xmp metadata handling
This commit is contained in:
@@ -44,6 +44,31 @@ namespace OpenVulkano::AR
|
|||||||
{
|
{
|
||||||
return fmt::format("{:07d}.{}", frameId, fileExtension);
|
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<uint8_t> 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)
|
ArRecorder::ArRecorder(ArSession* session)
|
||||||
@@ -111,28 +136,10 @@ namespace OpenVulkano::AR
|
|||||||
colorWriter->AddFile(fileName.c_str(), outBuffer, size);
|
colorWriter->AddFile(fileName.c_str(), outBuffer, size);
|
||||||
if (path) [[unlikely]]
|
if (path) [[unlikely]]
|
||||||
{
|
{
|
||||||
/*std::ofstream outFile(*path, std::ios::binary);
|
auto exif = MakeExifTag(arFrame);
|
||||||
outFile.write(reinterpret_cast<const char*>(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());
|
|
||||||
JpegWithTagsWriter writer(*path);
|
JpegWithTagsWriter writer(*path);
|
||||||
writer.WriteExifTag(exif);
|
writer.WriteExifTag(exif);
|
||||||
writer.WriteXmpTag(xmpBuilder.Finalize());
|
writer.WriteXmpTag(MakeXmpTag(arFrame));
|
||||||
writer.WriteImageData({ outBuffer, size });
|
writer.WriteImageData({ outBuffer, size });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user