c2140e120132e3309b0a6afa856c8f4980a2c7d2
[blender.git] / source / blender / imbuf / intern / filetype.c
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * Contributor(s): Blender Foundation, 2010.
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include "IMB_imbuf.h"
26 #include "IMB_imbuf_types.h"
27 #include "IMB_filetype.h"
28
29 #ifdef WITH_OPENEXR
30 #include "openexr/openexr_api.h"
31 #endif
32
33 #ifdef WITH_DDS
34 #include "dds/dds_api.h"
35 #endif
36
37 #ifdef WITH_QUICKTIME
38 #include "quicktime_import.h"
39 #endif
40
41 #include "imbuf.h"
42
43 static int imb_ftype_default(ImFileType *type, ImBuf *ibuf) { return (ibuf->ftype & type->filetype); }
44 #if defined(__APPLE__) && defined(IMBUF_COCOA)
45 static int imb_ftype_cocoa(ImFileType *type, ImBuf *ibuf) { return (ibuf->ftype & TIF); }
46 #endif
47 static int imb_ftype_iris(ImFileType *type, ImBuf *ibuf) { return (ibuf->ftype == IMAGIC); }
48 #ifdef WITH_QUICKTIME
49 static int imb_ftype_quicktime(ImFileType *type, ImBuf *ibuf) { return 0; } // XXX
50 #endif
51
52 #ifdef WITH_QUICKTIME
53 void quicktime_init(void);
54 void quicktime_exit(void);
55 #endif
56
57 ImFileType IMB_FILE_TYPES[]= {
58         {NULL, NULL, imb_is_a_iris, imb_ftype_iris, imb_loadiris, imb_saveiris, NULL, 0, IMAGIC},
59         {NULL, NULL, imb_is_a_jpeg, imb_ftype_default, imb_load_jpeg, imb_savejpeg, NULL, 0, JPG},
60         {NULL, NULL, imb_is_a_png, imb_ftype_default, imb_loadpng, imb_savepng, NULL, 0, PNG},
61         {NULL, NULL, imb_is_a_bmp, imb_ftype_default, imb_bmp_decode, imb_savebmp, NULL, 0, BMP},
62         {NULL, NULL, imb_is_a_targa, imb_ftype_default, imb_loadtarga, imb_savetarga, NULL, 0, TGA},
63         {NULL, NULL, imb_is_dpx, imb_ftype_default, imb_loaddpx, imb_save_dpx, NULL, IM_FTYPE_FLOAT, DPX},
64         {NULL, NULL, imb_is_cineon, imb_ftype_default, imb_loadcineon, imb_savecineon, NULL, IM_FTYPE_FLOAT, CINEON},
65 #ifdef WITH_TIFF
66         {imb_inittiff, NULL, imb_is_a_tiff, imb_ftype_default, imb_loadtiff, imb_savetiff, imb_loadtiletiff, 0, TIF},
67 #elif defined(__APPLE__) && defined(IMBUF_COCOA)
68         {NULL, NULL, imb_is_a_cocoa, imb_ftype_cocoa, imb_imb_cocoaLoadImage, imb_savecocoa, NULL, 0, TIF},
69 #endif
70         {NULL, NULL, imb_is_a_hdr, imb_ftype_default, imb_loadhdr, imb_savehdr, NULL, IM_FTYPE_FLOAT, RADHDR},
71 #ifdef WITH_OPENEXR
72         {NULL, NULL, imb_is_a_openexr, imb_ftype_default, imb_load_openexr, imb_save_openexr, NULL, IM_FTYPE_FLOAT, OPENEXR},
73 #endif
74 #ifdef WITH_OPENJPEG
75         {NULL, NULL, imb_is_a_jp2, imb_ftype_default, imb_jp2_decode, imb_savejp2, NULL, IM_FTYPE_FLOAT, JP2},
76 #endif
77 #ifdef WITH_DDS
78         {NULL, NULL, imb_is_a_dds, imb_ftype_default, imb_load_dds, NULL, NULL, 0, DDS},
79 #endif
80 #ifdef WITH_QUICKTIME
81         {quicktime_init, quicktime_exit, imb_is_a_quicktime, imb_ftype_quicktime, imb_quicktime_decode, NULL, NULL, 0, QUICKTIME},
82 #endif  
83         {NULL, NULL, NULL, NULL, NULL, NULL, 0}};
84         
85 void imb_filetypes_init(void)
86 {
87         ImFileType *type;
88
89         for(type=IMB_FILE_TYPES; type->is_a; type++)
90                 if(type->init)
91                         type->init();
92 }
93
94 void imb_filetypes_exit(void)
95 {
96         ImFileType *type;
97
98         for(type=IMB_FILE_TYPES; type->is_a; type++)
99                 if(type->exit)
100                         type->exit();
101 }
102