#include "media_metadata.h"
std::string generation_xmp(const std::string& info) {
std::string escaped;
for (char c : info) {
switch (c) {
case '&':
escaped += "&";
break;
case '<':
escaped += "<";
break;
case '>':
escaped += ">";
break;
case '"':
escaped += """;
break;
case '\'':
escaped += "'";
break;
default:
escaped += c;
break;
}
}
return ""
""
"" +
escaped + "";
}
bool embed_jpeg_metadata(std::vector& image, const std::string& parameters) {
if (parameters.empty())
return true;
const char label[] = "parameters";
const size_t overhead = sizeof(label) + 1;
if (image.size() < 2 || parameters.size() > 65533 - overhead)
return false;
const size_t length = overhead + parameters.size() + 2;
std::vector segment = {0xff, 0xfe, static_cast(length >> 8), static_cast(length)};
segment.insert(segment.end(), label, label + sizeof(label));
segment.insert(segment.end(), parameters.begin(), parameters.end());
segment.push_back(0);
image.insert(image.begin() + 2, segment.begin(), segment.end());
return true;
}