void RawInput::read_tiff_metadata (const std::string &filename) { // Many of these raw formats look just like TIFF files, and we can use // that to extract a bunch of extra Exif metadata and thumbnail. ImageInput *in = ImageInput::create ("tiff"); if (! in) { (void) OIIO::geterror(); // eat the error return; } ImageSpec newspec; bool ok = in->open (filename, newspec); if (ok) { // Transfer "Exif:" metadata to the raw spec. for (ParamValueList::const_iterator p = newspec.extra_attribs.begin(); p != newspec.extra_attribs.end(); ++p) { if (Strutil::istarts_with (p->name().c_str(), "Exif:")) { m_spec.attribute (p->name().c_str(), p->type(), p->data()); } } } in->close (); delete in; }
static void gather_xmp_attribs(const ImageSpec& spec, std::vector<std::pair<const XMPtag*, std::string>>& list) { // Loop over all params... for (ParamValueList::const_iterator p = spec.extra_attribs.begin(); p != spec.extra_attribs.end(); ++p) { // For this param, see if there's a table entry with a matching // name, where the xmp name is in the right category. const XMPtag* tag = xmp_tagmap_ref().find(p->name()); if (tag) { if (!Strutil::iequals(p->name(), tag->oiioname)) continue; // Name doesn't match if (tag->special & Suppress) { break; // Purposely suppressing } std::string s = stringize(p, *tag); if (s.size()) { list.emplace_back(tag, s); //std::cerr << " " << tag->xmpname << " = " << s << "\n"; } } } }