Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@stuvel.eu>2018-04-05 17:27:15 +0300
committerSybren A. Stüvel <sybren@stuvel.eu>2018-04-05 17:50:23 +0300
commitb0a767b85b0acacc40a414dd3f961b206a6b22f0 (patch)
treed26a65ede1ec7d0e20ec45838af8a3a78586e271 /source/blender/imbuf/intern/metadata.c
parentf0f6c96a9204419c429c38915d9340d092b570c4 (diff)
IMB_metadata improvements
- Metadata handling is now separate from `ImBuf *`, allowing it to be used with a generic `IDProperty *`. - Merged `IMB_metadata_add_field()` and `IMB_metadata_change_field()` into a more robust `IMB_metadata_set_field()`. This new function doesn't return any status (it now always succeeds, and the previously existing return value was never checked anyway). - Removed `IMB_metadata_del_field()` as it was never actually used anywhere. - Use `IMB_metadata_ensure()` instead of having `IMB_metadata_set_field()` create the containing `IDProperty` for you. - Deduplicated function declarations, moved `intern/IMB_metadata.h` out of `intern/`. Note that this does mean that we have some extra `#include "IMB_metadata.h"` lines now, as the metadata functions are no longer declared in `IMB_imbuf.h`. - Deduplicated function declarations, all metadata-related declarations are now in imbuf/IMB_metadata.h. Part of: https://developer.blender.org/D2273 Reviewed by: @campbellbarton
Diffstat (limited to 'source/blender/imbuf/intern/metadata.c')
-rw-r--r--source/blender/imbuf/intern/metadata.c90
1 files changed, 31 insertions, 59 deletions
diff --git a/source/blender/imbuf/intern/metadata.c b/source/blender/imbuf/intern/metadata.c
index da39967a4fe..ef103f7afcf 100644
--- a/source/blender/imbuf/intern/metadata.c
+++ b/source/blender/imbuf/intern/metadata.c
@@ -45,97 +45,69 @@
#include "IMB_metadata.h"
+#define METADATA_MAX_VALUE_LENGTH 1024
-void IMB_metadata_free(struct ImBuf *img)
+void IMB_metadata_ensure(struct IDProperty **metadata)
{
- if (!img)
+ if (*metadata != NULL) {
return;
- if (!img->metadata) {
+ }
+
+ IDPropertyTemplate val;
+ *metadata = IDP_New(IDP_GROUP, &val, "metadata");
+}
+
+void IMB_metadata_free(struct IDProperty *metadata)
+{
+ if (metadata == NULL) {
return;
}
- IDP_FreeProperty(img->metadata);
- MEM_freeN(img->metadata);
+ IDP_FreeProperty(metadata);
+ MEM_freeN(metadata);
}
-bool IMB_metadata_get_field(struct ImBuf *img, const char *key, char *field, const size_t len)
+bool IMB_metadata_get_field(struct IDProperty *metadata, const char *key, char *field, const size_t len)
{
IDProperty *prop;
- bool retval = false;
-
- if (!img)
- return false;
- if (!img->metadata)
+ if (metadata == NULL) {
return false;
+ }
- prop = IDP_GetPropertyFromGroup(img->metadata, key);
+ prop = IDP_GetPropertyFromGroup(metadata, key);
if (prop && prop->type == IDP_STRING) {
BLI_strncpy(field, IDP_String(prop), len);
- retval = true;
+ return true;
}
- return retval;
+ return false;
}
void IMB_metadata_copy(struct ImBuf *dimb, struct ImBuf *simb)
{
BLI_assert(dimb != simb);
if (simb->metadata) {
- IMB_metadata_free(dimb);
+ IMB_metadata_free(dimb->metadata);
dimb->metadata = IDP_CopyProperty(simb->metadata);
}
}
-bool IMB_metadata_add_field(struct ImBuf *img, const char *key, const char *value)
+void IMB_metadata_set_field(struct IDProperty *metadata, const char *key, const char *value)
{
- IDProperty *prop;
-
- if (!img)
- return false;
+ BLI_assert(metadata);
+ IDProperty *prop = IDP_GetPropertyFromGroup(metadata, key);
- if (!img->metadata) {
- IDPropertyTemplate val;
- img->metadata = IDP_New(IDP_GROUP, &val, "metadata");
+ if (prop != NULL && prop->type != IDP_STRING) {
+ IDP_FreeFromGroup(metadata, prop);
+ prop = NULL;
}
- prop = IDP_NewString(value, key, 512);
- return IDP_AddToGroup(img->metadata, prop);
-}
-
-bool IMB_metadata_del_field(struct ImBuf *img, const char *key)
-{
- IDProperty *prop;
-
- if ((!img) || (!img->metadata))
- return false;
-
- prop = IDP_GetPropertyFromGroup(img->metadata, key);
-
- if (prop) {
- IDP_FreeFromGroup(img->metadata, prop);
+ if (prop == NULL) {
+ prop = IDP_NewString(value, key, METADATA_MAX_VALUE_LENGTH);
+ IDP_AddToGroup(metadata, prop);
}
- return false;
-}
-
-bool IMB_metadata_change_field(struct ImBuf *img, const char *key, const char *field)
-{
- IDProperty *prop;
- if (!img)
- return false;
-
- prop = (img->metadata) ? IDP_GetPropertyFromGroup(img->metadata, key) : NULL;
-
- if (!prop) {
- return (IMB_metadata_add_field(img, key, field));
- }
- else if (prop->type == IDP_STRING) {
- IDP_AssignString(prop, field, 1024);
- return true;
- }
- else {
- return false;
- }
+ IDP_AssignString(prop, value, METADATA_MAX_VALUE_LENGTH);
}