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