Blender  V3.3
filetype.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <stddef.h>
8 
9 #include "BLI_utildefines.h"
10 
11 #include "IMB_filetype.h"
12 #include "IMB_imbuf.h"
13 #include "IMB_imbuf_types.h"
14 
15 #include "IMB_colormanagement.h"
16 
17 #ifdef WITH_OPENIMAGEIO
18 # include "oiio/openimageio_api.h"
19 #endif
20 
21 #ifdef WITH_OPENEXR
22 # include "openexr/openexr_api.h"
23 #endif
24 
25 #ifdef WITH_DDS
26 # include "dds/dds_api.h"
27 #endif
28 
30  {
31  .init = NULL,
32  .exit = NULL,
33  .is_a = imb_is_a_jpeg,
34  .load = imb_load_jpeg,
35  .load_filepath = NULL,
36  .load_filepath_thumbnail = imb_thumbnail_jpeg,
37  .save = imb_savejpeg,
38  .load_tile = NULL,
39  .flag = 0,
40  .filetype = IMB_FTYPE_JPG,
41  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
42  },
43  {
44  .init = NULL,
45  .exit = NULL,
46  .is_a = imb_is_a_png,
47  .load = imb_loadpng,
48  .load_filepath = NULL,
49  .load_filepath_thumbnail = NULL,
50  .save = imb_savepng,
51  .load_tile = NULL,
52  .flag = 0,
53  .filetype = IMB_FTYPE_PNG,
54  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
55  },
56  {
57  .init = NULL,
58  .exit = NULL,
59  .is_a = imb_is_a_bmp,
60  .load = imb_bmp_decode,
61  .load_filepath = NULL,
62  .load_filepath_thumbnail = NULL,
63  .save = imb_savebmp,
64  .load_tile = NULL,
65  .flag = 0,
66  .filetype = IMB_FTYPE_BMP,
67  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
68  },
69  {
70  .init = NULL,
71  .exit = NULL,
72  .is_a = imb_is_a_targa,
73  .load = imb_loadtarga,
74  .load_filepath = NULL,
75  .load_filepath_thumbnail = NULL,
76  .save = imb_savetarga,
77  .load_tile = NULL,
78  .flag = 0,
79  .filetype = IMB_FTYPE_TGA,
80  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
81  },
82  {
83  .init = NULL,
84  .exit = NULL,
85  .is_a = imb_is_a_iris,
86  .load = imb_loadiris,
87  .load_filepath = NULL,
88  .load_filepath_thumbnail = NULL,
89  .save = imb_saveiris,
90  .load_tile = NULL,
91  .flag = 0,
92  .filetype = IMB_FTYPE_IMAGIC,
93  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
94  },
95 #ifdef WITH_CINEON
96  {
97  .init = NULL,
98  .exit = NULL,
99  .is_a = imb_is_a_dpx,
100  .load = imb_load_dpx,
101  .load_filepath = NULL,
102  .load_filepath_thumbnail = NULL,
103  .save = imb_save_dpx,
104  .load_tile = NULL,
105  .flag = IM_FTYPE_FLOAT,
106  .filetype = IMB_FTYPE_DPX,
107  .default_save_role = COLOR_ROLE_DEFAULT_FLOAT,
108  },
109  {
110  .init = NULL,
111  .exit = NULL,
112  .is_a = imb_is_a_cineon,
113  .load = imb_load_cineon,
114  .load_filepath = NULL,
115  .load_filepath_thumbnail = NULL,
116  .save = imb_save_cineon,
117  .load_tile = NULL,
118  .flag = IM_FTYPE_FLOAT,
119  .filetype = IMB_FTYPE_CINEON,
120  .default_save_role = COLOR_ROLE_DEFAULT_FLOAT,
121  },
122 #endif
123 #ifdef WITH_TIFF
124  {
125  .init = imb_inittiff,
126  .exit = NULL,
127  .is_a = imb_is_a_tiff,
128  .load = imb_loadtiff,
129  .load_filepath = NULL,
130  .load_filepath_thumbnail = NULL,
131  .save = imb_savetiff,
132  .load_tile = imb_loadtiletiff,
133  .flag = 0,
134  .filetype = IMB_FTYPE_TIF,
135  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
136  },
137 #endif
138 #ifdef WITH_HDR
139  {
140  .init = NULL,
141  .exit = NULL,
142  .is_a = imb_is_a_hdr,
143  .load = imb_loadhdr,
144  .load_filepath = NULL,
145  .load_filepath_thumbnail = NULL,
146  .save = imb_savehdr,
147  .load_tile = NULL,
148  .flag = IM_FTYPE_FLOAT,
149  .filetype = IMB_FTYPE_RADHDR,
150  .default_save_role = COLOR_ROLE_DEFAULT_FLOAT,
151  },
152 #endif
153 #ifdef WITH_OPENEXR
154  {
155  .init = imb_initopenexr,
156  .exit = imb_exitopenexr,
157  .is_a = imb_is_a_openexr,
158  .load = imb_load_openexr,
159  .load_filepath = NULL,
160  .load_filepath_thumbnail = imb_load_filepath_thumbnail_openexr,
161  .save = imb_save_openexr,
162  .load_tile = NULL,
163  .flag = IM_FTYPE_FLOAT,
164  .filetype = IMB_FTYPE_OPENEXR,
165  .default_save_role = COLOR_ROLE_DEFAULT_FLOAT,
166  },
167 #endif
168 #ifdef WITH_OPENJPEG
169  {
170  .init = NULL,
171  .exit = NULL,
172  .is_a = imb_is_a_jp2,
173  .load = imb_load_jp2,
174  .load_filepath = NULL,
175  .load_filepath_thumbnail = NULL,
176  .save = imb_save_jp2,
177  .load_tile = NULL,
178  .flag = IM_FTYPE_FLOAT,
179  .filetype = IMB_FTYPE_JP2,
180  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
181  },
182 #endif
183 #ifdef WITH_DDS
184  {
185  .init = NULL,
186  .exit = NULL,
187  .is_a = imb_is_a_dds,
188  .load = imb_load_dds,
189  .load_filepath = NULL,
190  .load_filepath_thumbnail = NULL,
191  .save = NULL,
192  .load_tile = NULL,
193  .flag = 0,
194  .filetype = IMB_FTYPE_DDS,
195  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
196  },
197 #endif
198 #ifdef WITH_OPENIMAGEIO
199  {
200  .init = NULL,
201  .exit = NULL,
202  .is_a = imb_is_a_photoshop,
203  .load = NULL,
204  .load_filepath = imb_load_photoshop,
205  .load_filepath_thumbnail = NULL,
206  .save = NULL,
207  .load_tile = NULL,
208  .flag = IM_FTYPE_FLOAT,
209  .filetype = IMB_FTYPE_PSD,
210  .default_save_role = COLOR_ROLE_DEFAULT_FLOAT,
211  },
212 #endif
213 #ifdef WITH_WEBP
214  {
215  .init = NULL,
216  .exit = NULL,
217  .is_a = imb_is_a_webp,
218  .load = imb_loadwebp,
219  .load_filepath = NULL,
220  .load_filepath_thumbnail = NULL,
221  .save = imb_savewebp,
222  .load_tile = NULL,
223  .flag = 0,
224  .filetype = IMB_FTYPE_WEBP,
225  .default_save_role = COLOR_ROLE_DEFAULT_BYTE,
226  },
227 #endif
228  {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0},
229 };
230 
232 
234 {
236  if (ftype == type->filetype) {
237  return type;
238  }
239  }
240  return NULL;
241 }
242 
244 {
245  return IMB_file_type_from_ftype(ibuf->ftype);
246 }
247 
249 {
250  const ImFileType *type;
251 
253  if (type->init) {
254  type->init();
255  }
256  }
257 }
258 
260 {
261  const ImFileType *type;
262 
264  if (type->exit) {
265  type->exit();
266  }
267  }
268 }
#define ARRAY_SIZE(arr)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
@ COLOR_ROLE_DEFAULT_FLOAT
@ COLOR_ROLE_DEFAULT_BYTE
#define IM_FTYPE_FLOAT
Definition: IMB_filetype.h:17
bool imb_save_jp2(struct ImBuf *ibuf, const char *filepath, int flags)
Definition: jp2.c:1187
void imb_inittiff(void)
Definition: tiff.c:535
bool imb_saveiris(struct ImBuf *ibuf, const char *filepath, int flags)
Definition: iris.c:961
bool imb_is_a_tiff(const unsigned char *buf, size_t size)
Definition: tiff.c:306
struct ImBuf * imb_load_jpeg(const unsigned char *buffer, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: jpeg.c:448
bool imb_savepng(struct ImBuf *ibuf, const char *filepath, int flags)
Definition: png.c:110
bool imb_savejpeg(struct ImBuf *ibuf, const char *filepath, int flags)
Definition: jpeg.c:752
struct ImBuf * imb_loadhdr(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: radiance_hdr.c:197
bool imb_is_a_hdr(const unsigned char *buf, size_t size)
Definition: radiance_hdr.c:179
struct ImBuf * imb_loadpng(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: png.c:524
struct ImBuf * imb_load_jp2(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: jp2.c:303
struct ImBuf * imb_loadwebp(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: webp.c:31
struct ImBuf * imb_loadtiff(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: tiff.c:542
struct ImBuf * imb_loadiris(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: iris.c:238
bool imb_savehdr(struct ImBuf *ibuf, const char *filepath, int flags)
Definition: radiance_hdr.c:409
bool imb_is_a_jp2(const unsigned char *buf, size_t size)
Definition: jp2.c:71
bool imb_is_a_iris(const unsigned char *mem, size_t size)
Definition: iris.c:230
bool imb_savetarga(struct ImBuf *ibuf, const char *filepath, int flags)
bool imb_is_a_png(const unsigned char *mem, size_t size)
Definition: png.c:48
bool imb_savetiff(struct ImBuf *ibuf, const char *filepath, int flags)
Definition: tiff.c:724
bool imb_is_a_targa(const unsigned char *buf, size_t size)
Definition: targa.c:400
bool imb_is_a_webp(const unsigned char *buf, size_t size)
Definition: webp.c:23
struct ImBuf * imb_thumbnail_jpeg(const char *filepath, int flags, size_t max_thumb_size, char colorspace[IM_MAX_SPACE], size_t *r_width, size_t *r_height)
Definition: jpeg.c:489
bool imb_savewebp(struct ImBuf *ibuf, const char *name, int flags)
bool imb_is_a_jpeg(const unsigned char *mem, size_t size)
Definition: jpeg.c:51
void imb_loadtiletiff(struct ImBuf *ibuf, const unsigned char *mem, size_t size, int tx, int ty, unsigned int *rect)
Definition: tiff.c:667
struct ImBuf * imb_loadtarga(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: targa.c:612
Contains defines and structs used throughout the imbuf module.
bool imb_savebmp(ImBuf *ibuf, const char *filepath, int UNUSED(flags))
Definition: bmp.c:293
ImBuf * imb_bmp_decode(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: bmp.c:105
bool imb_is_a_bmp(const uchar *buf, size_t size)
Definition: bmp.c:93
bool imb_save_dpx(struct ImBuf *buf, const char *filepath, int flags)
Definition: cineon_dpx.c:192
ImBuf * imb_load_dpx(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: cineon_dpx.c:202
bool imb_is_a_cineon(const unsigned char *buf, size_t size)
Definition: cineon_dpx.c:176
bool imb_is_a_dpx(const unsigned char *buf, size_t size)
Definition: cineon_dpx.c:197
bool imb_save_cineon(struct ImBuf *buf, const char *filepath, int flags)
Definition: cineon_dpx.c:171
ImBuf * imb_load_cineon(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: cineon_dpx.c:181
bool imb_is_a_dds(const unsigned char *mem, const size_t size)
Definition: dds_api.cpp:61
struct ImBuf * imb_load_dds(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition: dds_api.cpp:78
const ImFileType * IMB_file_type_from_ftype(int ftype)
Definition: filetype.c:233
const ImFileType IMB_FILE_TYPES[]
Definition: filetype.c:29
void imb_filetypes_init(void)
Definition: filetype.c:248
const ImFileType * IMB_file_type_from_ibuf(const ImBuf *ibuf)
Definition: filetype.c:243
void imb_filetypes_exit(void)
Definition: filetype.c:259
const ImFileType * IMB_FILE_TYPES_LAST
Definition: filetype.c:231
@ IMB_FTYPE_BMP
@ IMB_FTYPE_IMAGIC
@ IMB_FTYPE_JPG
@ IMB_FTYPE_TGA
@ IMB_FTYPE_OPENEXR
@ IMB_FTYPE_PNG
struct ImBuf * imb_load_openexr(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
void imb_initopenexr(void)
bool imb_is_a_openexr(const unsigned char *mem, const size_t size)
struct ImBuf * imb_load_filepath_thumbnail_openexr(const char *filepath, const int UNUSED(flags), const size_t max_thumb_size, char colorspace[], size_t *r_width, size_t *r_height)
bool imb_save_openexr(struct ImBuf *ibuf, const char *name, int flags)
void imb_exitopenexr(void)
struct ImBuf * imb_load_photoshop(const char *filename, int flags, char colorspace[IM_MAX_SPACE])
bool imb_is_a_photoshop(const unsigned char *mem, size_t size)
enum eImbFileType ftype
void(* init)(void)
Definition: IMB_filetype.h:21