Images: don't (un)premultipy non-color data
[blender.git] / source / blender / imbuf / IMB_metadata.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2005 Blender Foundation
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup imbuf
22  */
23
24 #ifndef __IMB_METADATA_H__
25 #define __IMB_METADATA_H__
26
27 struct IDProperty;
28 struct ImBuf;
29 struct anim;
30
31 /** The metadata is a list of key/value pairs (both char *) that can me
32  * saved in the header of several image formats.
33  * Apart from some common keys like
34  * 'Software' and 'Description' (png standard) we'll use keys within the
35  * Blender namespace, so should be called 'Blender::StampInfo' or 'Blender::FrameNum'
36  * etc...
37  *
38  * The keys & values are stored in ID properties, in the group "metadata".
39  */
40
41 /** Ensure that the metadata property is a valid IDProperty object.
42  * This is a no-op when *metadata != NULL.
43  */
44 void IMB_metadata_ensure(struct IDProperty **metadata);
45 void IMB_metadata_free(struct IDProperty *metadata);
46
47 /** Read the field from the image info into the field.
48  * \param metadata: the IDProperty that contains the metadata
49  * \param key: the key of the field
50  * \param value: the data in the field, first one found with key is returned,
51  *                 memory has to be allocated by user.
52  * \param len: length of value buffer allocated by user.
53  * \return    - 1 (true) if metadata is present and value for the key found, 0 (false) otherwise
54  */
55 bool IMB_metadata_get_field(struct IDProperty *metadata,
56                             const char *key,
57                             char *value,
58                             const size_t len);
59
60 /** Set user data in the metadata.
61  * If the field already exists its value is overwritten, otherwise the field
62  * will be added with the given value.
63  * \param metadata: the IDProperty that contains the metadata
64  * \param key: the key of the field
65  * \param value: the data to be written to the field. zero terminated string
66  */
67 void IMB_metadata_set_field(struct IDProperty *metadata, const char *key, const char *value);
68
69 void IMB_metadata_copy(struct ImBuf *dimb, struct ImBuf *simb);
70 struct IDProperty *IMB_anim_load_metadata(struct anim *anim);
71
72 /* Invoke callback for every value stored in the metadata. */
73 typedef void (*IMBMetadataForeachCb)(const char *field, const char *value, void *userdata);
74 void IMB_metadata_foreach(struct ImBuf *ibuf, IMBMetadataForeachCb callback, void *userdata);
75
76 #endif /* __IMB_METADATA_H__ */