Blender V4.3
filetype.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstddef>
10
11#include "BLI_utildefines.h"
12
14#include "IMB_filetype.hh"
15#include "IMB_imbuf.hh"
16#include "IMB_imbuf_types.hh"
17
19
20#ifdef WITH_OPENEXR
21# include "openexr/openexr_api.h"
22#endif
23
25 {
26 /*init*/ nullptr,
27 /*exit*/ nullptr,
28 /*is_a*/ imb_is_a_jpeg,
29 /*load*/ imb_load_jpeg,
30 /*load_filepath*/ nullptr,
31 /*load_filepath_thumbnail*/ imb_thumbnail_jpeg,
32 /*save*/ imb_savejpeg,
33 /*flag*/ 0,
34 /*filetype*/ IMB_FTYPE_JPG,
35 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
36 },
37 {
38 /*init*/ nullptr,
39 /*exit*/ nullptr,
40 /*is_a*/ imb_is_a_png,
41 /*load*/ imb_load_png,
42 /*load_filepath*/ nullptr,
43 /*load_filepath_thumbnail*/ nullptr,
44 /*save*/ imb_save_png,
45 /*flag*/ 0,
46 /*filetype*/ IMB_FTYPE_PNG,
47 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
48 },
49 {
50 /*init*/ nullptr,
51 /*exit*/ nullptr,
52 /*is_a*/ imb_is_a_bmp,
53 /*load*/ imb_load_bmp,
54 /*load_filepath*/ nullptr,
55 /*load_filepath_thumbnail*/ nullptr,
56 /*save*/ imb_save_bmp,
57 /*flag*/ 0,
58 /*filetype*/ IMB_FTYPE_BMP,
59 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
60 },
61 {
62 /*init*/ nullptr,
63 /*exit*/ nullptr,
64 /*is_a*/ imb_is_a_tga,
65 /*load*/ imb_load_tga,
66 /*load_filepath*/ nullptr,
67 /*load_filepath_thumbnail*/ nullptr,
68 /*save*/ imb_save_tga,
69 /*flag*/ 0,
70 /*filetype*/ IMB_FTYPE_TGA,
71 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
72 },
73 {
74 /*init*/ nullptr,
75 /*exit*/ nullptr,
76 /*is_a*/ imb_is_a_iris,
77 /*load*/ imb_loadiris,
78 /*load_filepath*/ nullptr,
79 /*load_filepath_thumbnail*/ nullptr,
80 /*save*/ imb_saveiris,
81 /*flag*/ 0,
82 /*filetype*/ IMB_FTYPE_IMAGIC,
83 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
84 },
85#ifdef WITH_CINEON
86 {
87 /*init*/ nullptr,
88 /*exit*/ nullptr,
89 /*is_a*/ imb_is_a_dpx,
90 /*load*/ imb_load_dpx,
91 /*load_filepath*/ nullptr,
92 /*load_filepath_thumbnail*/ nullptr,
93 /*save*/ imb_save_dpx,
94 /*flag*/ IM_FTYPE_FLOAT,
95 /*filetype*/ IMB_FTYPE_DPX,
96 /*default_save_role*/ COLOR_ROLE_DEFAULT_FLOAT,
97 },
98 {
99 /*init*/ nullptr,
100 /*exit*/ nullptr,
101 /*is_a*/ imb_is_a_cineon,
102 /*load*/ imb_load_cineon,
103 /*load_filepath*/ nullptr,
104 /*load_filepath_thumbnail*/ nullptr,
105 /*save*/ imb_save_cineon,
106 /*flag*/ IM_FTYPE_FLOAT,
107 /*filetype*/ IMB_FTYPE_CINEON,
108 /*default_save_role*/ COLOR_ROLE_DEFAULT_FLOAT,
109 },
110#endif
111 {
112 /*init*/ nullptr,
113 /*exit*/ nullptr,
114 /*is_a*/ imb_is_a_tiff,
115 /*load*/ imb_load_tiff,
116 /*load_filepath*/ nullptr,
117 /*load_filepath_thumbnail*/ nullptr,
118 /*save*/ imb_save_tiff,
119 /*flag*/ 0,
120 /*filetype*/ IMB_FTYPE_TIF,
121 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
122 },
123 {
124 /*init*/ nullptr,
125 /*exit*/ nullptr,
126 /*is_a*/ imb_is_a_hdr,
127 /*load*/ imb_load_hdr,
128 /*load_filepath*/ nullptr,
129 /*load_filepath_thumbnail*/ nullptr,
130 /*save*/ imb_save_hdr,
131 /*flag*/ IM_FTYPE_FLOAT,
132 /*filetype*/ IMB_FTYPE_RADHDR,
133 /*default_save_role*/ COLOR_ROLE_DEFAULT_FLOAT,
134 },
135#ifdef WITH_OPENEXR
136 {
137 /*init*/ imb_initopenexr,
138 /*exit*/ imb_exitopenexr,
139 /*is_a*/ imb_is_a_openexr,
140 /*load*/ imb_load_openexr,
141 /*load_filepath*/ nullptr,
142 /*load_filepath_thumbnail*/ imb_load_filepath_thumbnail_openexr,
143 /*save*/ imb_save_openexr,
144 /*flag*/ IM_FTYPE_FLOAT,
145 /*filetype*/ IMB_FTYPE_OPENEXR,
146 /*default_save_role*/ COLOR_ROLE_DEFAULT_FLOAT,
147 },
148#endif
149#ifdef WITH_OPENJPEG
150 {
151 /*init*/ nullptr,
152 /*exit*/ nullptr,
153 /*is_a*/ imb_is_a_jp2,
154 /*load*/ imb_load_jp2,
155 /*load_filepath*/ nullptr,
156 /*load_filepath_thumbnail*/ nullptr,
157 /*save*/ imb_save_jp2,
158 /*flag*/ IM_FTYPE_FLOAT,
159 /*filetype*/ IMB_FTYPE_JP2,
160 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
161 },
162#endif
163 {
164 /*init*/ imb_init_dds,
165 /*exit*/ nullptr,
166 /*is_a*/ imb_is_a_dds,
167 /*load*/ imb_load_dds,
168 /*load_filepath*/ nullptr,
169 /*load_filepath_thumbnail*/ nullptr,
170 /*save*/ nullptr,
171 /*flag*/ 0,
172 /*filetype*/ IMB_FTYPE_DDS,
173 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
174 },
175 {
176 /*init*/ nullptr,
177 /*exit*/ nullptr,
178 /*is_a*/ imb_is_a_psd,
179 /*load*/ imb_load_psd,
180 /*load_filepath*/ nullptr,
181 /*load_filepath_thumbnail*/ nullptr,
182 /*save*/ nullptr,
183 /*flag*/ IM_FTYPE_FLOAT,
184 /*filetype*/ IMB_FTYPE_PSD,
185 /*default_save_role*/ COLOR_ROLE_DEFAULT_FLOAT,
186 },
187#ifdef WITH_WEBP
188 {
189 /*init*/ nullptr,
190 /*exit*/ nullptr,
191 /*is_a*/ imb_is_a_webp,
192 /*load*/ imb_loadwebp,
193 /*load_filepath*/ nullptr,
194 /*load_filepath_thumbnail*/ imb_load_filepath_thumbnail_webp,
195 /*save*/ imb_savewebp,
196 /*flag*/ 0,
197 /*filetype*/ IMB_FTYPE_WEBP,
198 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
199 },
200#endif
201 {
202 /* Only implementing thumbnailing for SVG file type to support specialized importers.
203 * General file loading, if wanted, would require a better library and would have to
204 * support features like user-specified resolution. */
205
206 /*init*/ nullptr,
207 /*exit*/ nullptr,
208 /*is_a*/ nullptr,
209 /*load*/ nullptr,
210 /*load_filepath*/ nullptr,
211 /*load_filepath_thumbnail*/ imb_load_filepath_thumbnail_svg,
212 /*save*/ nullptr,
213 /*flag*/ 0,
214 /*filetype*/ IMB_FTYPE_NONE,
215 /*default_save_role*/ COLOR_ROLE_DEFAULT_BYTE,
216 },
217 {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 0, 0, 0},
218};
219
221
223{
224 for (const ImFileType *type = IMB_FILE_TYPES; type < IMB_FILE_TYPES_LAST; type++) {
225 if (ftype == type->filetype) {
226 return type;
227 }
228 }
229 return nullptr;
230}
231
233{
234 return IMB_file_type_from_ftype(ibuf->ftype);
235}
236
238{
239 const ImFileType *type;
240
241 OIIO_init();
242
243 for (type = IMB_FILE_TYPES; type < IMB_FILE_TYPES_LAST; type++) {
244 if (type->init) {
245 type->init();
246 }
247 }
248}
249
251{
252 const ImFileType *type;
253
254 for (type = IMB_FILE_TYPES; type < IMB_FILE_TYPES_LAST; type++) {
255 if (type->exit) {
256 type->exit();
257 }
258 }
259}
#define ARRAY_SIZE(arr)
@ COLOR_ROLE_DEFAULT_FLOAT
@ COLOR_ROLE_DEFAULT_BYTE
ImBuf * imb_load_jp2(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition jp2.cc:302
#define IM_FTYPE_FLOAT
ImBuf * imb_loadwebp(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition webp.cc:41
bool imb_savejpeg(ImBuf *ibuf, const char *filepath, int flags)
Definition jpeg.cc:746
ImBuf * imb_load_filepath_thumbnail_webp(const char *filepath, const int flags, const size_t max_thumb_size, char colorspace[], size_t *r_width, size_t *r_height)
Definition webp.cc:78
bool imb_savewebp(ImBuf *ibuf, const char *filepath, int flags)
Definition webp.cc:161
bool imb_is_a_jp2(const unsigned char *buf, size_t size)
Definition jp2.cc:71
bool imb_saveiris(ImBuf *ibuf, const char *filepath, int flags)
Definition iris.cc:931
ImBuf * imb_load_jpeg(const unsigned char *buffer, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition jpeg.cc:441
bool imb_is_a_iris(const unsigned char *mem, size_t size)
Definition iris.cc:207
bool imb_save_jp2(ImBuf *ibuf, const char *filepath, int flags)
Definition jp2.cc:1183
bool imb_is_a_webp(const unsigned char *buf, size_t size)
Definition webp.cc:33
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.cc:479
bool imb_is_a_jpeg(const unsigned char *mem, size_t size)
Definition jpeg.cc:49
ImBuf * imb_loadiris(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition iris.cc:215
@ IMB_FTYPE_PSD
@ IMB_FTYPE_BMP
@ IMB_FTYPE_IMAGIC
@ IMB_FTYPE_JPG
@ IMB_FTYPE_TGA
@ IMB_FTYPE_RADHDR
@ IMB_FTYPE_TIF
@ IMB_FTYPE_DDS
@ IMB_FTYPE_OPENEXR
@ IMB_FTYPE_NONE
@ IMB_FTYPE_PNG
Contains defines and structs used throughout the imbuf module.
bool imb_save_cineon(ImBuf *buf, const char *filepath, int flags)
bool imb_is_a_cineon(const uchar *buf, size_t size)
ImBuf * imb_load_cineon(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
const ImFileType * IMB_file_type_from_ftype(int ftype)
Definition filetype.cc:222
void imb_filetypes_init()
Definition filetype.cc:237
const ImFileType * IMB_file_type_from_ibuf(const ImBuf *ibuf)
Definition filetype.cc:232
const ImFileType IMB_FILE_TYPES[]
Definition filetype.cc:24
void imb_filetypes_exit()
Definition filetype.cc:250
const ImFileType * IMB_FILE_TYPES_LAST
Definition filetype.cc:220
bool imb_is_a_bmp(const uchar *mem, size_t size)
Definition format_bmp.cc:17
ImBuf * imb_load_bmp(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition format_bmp.cc:22
bool imb_save_bmp(ImBuf *ibuf, const char *filepath, int flags)
Definition format_bmp.cc:33
ImBuf * imb_load_dds(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition format_dds.cc:52
void imb_init_dds()
Definition format_dds.cc:34
bool imb_is_a_dds(const uchar *buf, size_t size)
Definition format_dds.cc:47
bool imb_is_a_dpx(const uchar *mem, size_t size)
Definition format_dpx.cc:18
bool imb_save_dpx(ImBuf *ibuf, const char *filepath, int flags)
Definition format_dpx.cc:41
ImBuf * imb_load_dpx(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition format_dpx.cc:23
ImBuf * imb_load_hdr(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition format_hdr.cc:22
bool imb_save_hdr(ImBuf *ibuf, const char *filepath, int flags)
Definition format_hdr.cc:44
bool imb_is_a_hdr(const uchar *mem, size_t size)
Definition format_hdr.cc:17
ImBuf * imb_load_png(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition format_png.cc:23
bool imb_is_a_png(const uchar *mem, size_t size)
Definition format_png.cc:18
bool imb_save_png(ImBuf *ibuf, const char *filepath, int flags)
Definition format_png.cc:43
bool imb_is_a_psd(const uchar *mem, size_t size)
Definition format_psd.cc:18
ImBuf * imb_load_psd(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
Definition format_psd.cc:23
ImBuf * imb_load_filepath_thumbnail_svg(const char *filepath, const int, const size_t max_thumb_size, char colorspace[], size_t *r_width, size_t *r_height)
Definition format_svg.cc:19
bool imb_is_a_tga(const uchar *mem, size_t size)
bool imb_save_tga(ImBuf *ibuf, const char *filepath, int flags)
ImBuf * imb_load_tga(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
bool imb_is_a_tiff(const uchar *mem, size_t size)
ImBuf * imb_load_tiff(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
bool imb_save_tiff(ImBuf *ibuf, const char *filepath, int flags)
ImBuf * imb_load_filepath_thumbnail_openexr(const char *filepath, const int, const size_t max_thumb_size, char colorspace[], size_t *r_width, size_t *r_height)
ImBuf * imb_load_openexr(const uchar *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
void imb_initopenexr()
void imb_exitopenexr()
bool imb_save_openexr(ImBuf *ibuf, const char *filepath, int flags)
bool imb_is_a_openexr(const uchar *mem, const size_t size)
OIIO_NAMESPACE_USING void OIIO_init()
enum eImbFileType ftype
void(* exit)()