// Remove an existing EXIF entry from |exifData| if it exists. This is useful // when replacing existing data, it's easier to just remove the data and // re-allocate it than to adjust the amount of allocated data. static void removeExistingEntry(ExifData* exifData, ExifIfd ifd, int tag) { ExifEntry* entry = exif_content_get_entry(exifData->ifd[ifd], static_cast<ExifTag>(tag)); if (entry) { exif_content_remove_entry(exifData->ifd[ifd], entry); } }
static void remove_not_recorded (ExifEntry *e, void *UNUSED(data)) { ExifIfd ifd = exif_entry_get_ifd(e) ; ExifContent *c = e->parent; ExifDataType dt = exif_data_get_data_type (c->parent); ExifTag t = e->tag; if (exif_tag_get_support_level_in_ifd (t, ifd, dt) == EXIF_SUPPORT_LEVEL_NOT_RECORDED) { exif_log (c->priv->log, EXIF_LOG_CODE_DEBUG, "exif-content", "Tag 0x%04x is not recorded in IFD '%s' and has therefore been " "removed.", t, exif_ifd_get_name (ifd)); exif_content_remove_entry (c, e); } }
void exif_content_fix (ExifContent *c) { ExifIfd ifd = exif_content_get_ifd (c); ExifDataType dt; ExifTag t; ExifEntry *e; if (!c) return; dt = exif_data_get_data_type (c->parent); /* First of all, fix all existing entries. */ exif_content_foreach_entry (c, fix_func, NULL); /* * Then check for existing tags that are not allowed and for * non-existing mandatory tags. */ for (t = 0; t <= 0xffff; t++) { switch (exif_tag_get_support_level_in_ifd (t, ifd, dt)) { case EXIF_SUPPORT_LEVEL_MANDATORY: if (exif_content_get_entry (c, t)) break; exif_log (c->priv->log, EXIF_LOG_CODE_DEBUG, "exif-content", "Tag '%s' is mandatory in IFD '%s' and has therefore been added.", exif_tag_get_name_in_ifd (t, ifd), exif_ifd_get_name (ifd)); e = exif_entry_new (); exif_content_add_entry (c, e); exif_entry_initialize (e, t); exif_entry_unref (e); break; case EXIF_SUPPORT_LEVEL_NOT_RECORDED: e = exif_content_get_entry (c, t); if (!e) break; exif_log (c->priv->log, EXIF_LOG_CODE_DEBUG, "exif-content", "Tag '%s' is not recoreded in IFD '%s' and has therefore been " "removed.", exif_tag_get_name_in_ifd (t, ifd), exif_ifd_get_name (ifd)); exif_content_remove_entry (c, e); break; case EXIF_SUPPORT_LEVEL_OPTIONAL: default: break; } } }
static void * vips_exif_exif_remove( ExifEntry *entry, VipsExifRemove *ve ) { #ifdef DEBUG { const char *tag_name; char vips_name_txt[256]; VipsBuf vips_name = VIPS_BUF_STATIC( vips_name_txt ); tag_name = vips_exif_entry_get_name( entry ); vips_buf_appendf( &vips_name, "exif-ifd%d-%s", exif_entry_get_ifd( entry ), tag_name ); printf( "vips_exif_exif_remove: %s\n", vips_buf_all( &vips_name ) ); } #endif /*DEBUG*/ exif_content_remove_entry( ve->content, entry ); return( NULL ); }