1 /* CINELERRA dcraw.c */
13 #define uchar unsigned char
16 #define ushort unsigned short
24 // ZEROd by DCRaw reset
29 char *meta_data, xtrans[6][6], xtrans_abs[6][6];
30 char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64];
31 float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len;
33 off_t strip_offset, data_offset;
34 off_t thumb_offset, meta_offset, profile_offset;
35 unsigned shot_order, kodak_cbpp, exif_cfa, unique_id;
36 unsigned thumb_length, meta_length, profile_length;
37 unsigned thumb_misc, *oprof, fuji_layout;
38 unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress;
39 unsigned black, maximum, mix_green, raw_color, zero_is_bad;
40 unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error;
41 unsigned tile_width, tile_length, gpsdata[32], load_flags;
42 unsigned flip, tiff_flip, filters, colors;
43 ushort raw_height, raw_width, height, width, top_margin, left_margin;
44 ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height;
45 ushort *raw_image, (*image)[4], cblack[4102];
46 ushort white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4];
48 unsigned shot_select, multi_out;
49 double pixel_aspect, aber[4], gamm[6];
50 float bright, user_mul[4], threshold;
52 int half_size, four_color_rgb, document_mode, highlight;
53 int verbose, use_auto_wb, use_camera_wb, use_camera_matrix;
54 int output_color, output_bps, output_tiff, med_passes;
57 float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];
58 int histogram[4][0x2000];
59 void (CLASS *write_thumb)(), (CLASS *write_fun)();
60 void (CLASS *load_raw)(), (CLASS *thumb_load_raw)();
64 struct decode *branch[2];
66 } first_decode[2048], /* *second_decode, CINELERRA */ *free_decode;
69 int width, height, bps, comp, phint, offset, flip, samples, bytes;
70 int tile_width, tile_length;
75 int format, key_off, tag_21a;
76 int black, split_col, black_col, split_row, black_row;
82 int gbh_vbits, gbh_reset;
86 unsigned sony_pad[128], sony_p;
87 unsigned fov_huff[1024];
88 float clb_cbrt[0x10000], clb_xyz_cam[3][4];
89 uchar pana_buf[0x4000]; int pana_vbits;
92 class DCRaw : public DCRaw_data {
94 int fcol(int row,int col);
96 char *my_memmem(char *haystack,size_t haystacklen,char *needle,size_t needlelen);
97 char *my_strcasestr(char *haystack,const char *needle);
99 void merror(void *ptr,const char *where);
101 ushort sget2(uchar *s);
103 unsigned sget4(uchar *s);
105 unsigned getint(int type);
106 float int_to_float(int i);
107 double getreal(int type);
108 void read_shorts(ushort *pixel,int count);
109 void cubic_spline(const int *x_,const int *y_,const int len);
110 void canon_600_fixed_wb(int temp);
111 int canon_600_color(int ratio[2],int mar);
112 void canon_600_auto_wb(void);
113 void canon_600_coeff(void);
114 void canon_600_load_raw(void);
115 void canon_600_correct(void);
116 int canon_s2is(void);
117 unsigned getbithuff(int nbits,ushort *huff);
118 ushort *make_decoder_ref(const uchar **source);
119 ushort *make_decoder(const uchar *source);
120 void crw_init_tables(unsigned table,ushort *huff[2]);
121 int canon_has_lowbits(void);
122 void canon_load_raw(void);
123 int ljpeg_start(struct jhead *jh,int info_only);
124 void ljpeg_end(struct jhead *jh);
125 int ljpeg_diff(ushort *huff);
126 ushort *ljpeg_row(int jrow,struct jhead *jh);
127 void lossless_jpeg_load_raw(void);
128 void canon_sraw_load_raw(void);
129 void adobe_copy_pixel(unsigned row,unsigned col,ushort **rp);
130 void ljpeg_idct(struct jhead *jh);
131 void lossless_dng_load_raw(void);
132 void packed_dng_load_raw(void);
133 void pentax_load_raw(void);
134 void nikon_load_raw(void);
135 void nikon_yuv_load_raw(void);
136 int nikon_e995(void);
137 int nikon_e2100(void);
138 void nikon_3700(void);
139 int minolta_z2(void);
140 void ppm_thumb(void);
141 void ppm16_thumb(void);
142 void layer_thumb(void);
143 void rollei_thumb(void);
144 void rollei_load_raw(void);
145 int raw(unsigned row,unsigned col);
146 void phase_one_flat_field(int is_float,int nc);
147 void phase_one_correct(void);
148 void phase_one_load_raw(void);
149 unsigned ph1_bithuff(int nbits,ushort *huff);
150 void phase_one_load_raw_c(void);
151 void hasselblad_load_raw(void);
152 void leaf_hdr_load_raw(void);
153 void unpacked_load_raw(void);
154 void sinar_4shot_load_raw(void);
155 void imacon_full_load_raw(void);
156 void packed_load_raw(void);
157 void nokia_load_raw(void);
158 void canon_rmf_load_raw(void);
159 unsigned pana_bits(int nbits);
160 void panasonic_load_raw(void);
161 void olympus_load_raw(void);
162 void minolta_rd175_load_raw(void);
163 void quicktake_100_load_raw(void);
164 void kodak_radc_load_raw(void);
165 void kodak_jpeg_load_raw(void);
166 void lossy_dng_load_raw(void);
168 boolean fill_input_buffer(j_decompress_ptr cinfo);
170 void kodak_dc120_load_raw(void);
171 void eight_bit_load_raw(void);
172 void kodak_c330_load_raw(void);
173 void kodak_c603_load_raw(void);
174 void kodak_262_load_raw(void);
175 int kodak_65000_decode(short *out,int bsize);
176 void kodak_65000_load_raw(void);
177 void kodak_ycbcr_load_raw(void);
178 void kodak_rgb_load_raw(void);
179 void kodak_thumb_load_raw(void);
180 void sony_decrypt(unsigned *data,int len,int start,int key);
181 void sony_load_raw(void);
182 void sony_arw_load_raw(void);
183 void sony_arw2_load_raw(void);
184 void samsung_load_raw(void);
185 void samsung2_load_raw(void);
186 void samsung3_load_raw(void);
187 void smal_decode_segment(unsigned seg[2][2],int holes);
188 void smal_v6_load_raw(void);
190 void fill_holes(int holes);
191 void smal_v9_load_raw(void);
192 void redcine_load_raw(void);
193 void foveon_decoder(unsigned size,unsigned code);
194 void foveon_thumb(void);
195 void foveon_sd_load_raw(void);
196 void foveon_huff(ushort *huff);
197 void foveon_dp_load_raw(void);
198 void foveon_load_camf(void);
199 const char *foveon_camf_param(const char *block,const char *param);
200 void *foveon_camf_matrix(unsigned dim[3],const char *name);
201 int foveon_fixed(void *ptr,int size,const char *name);
202 float foveon_avg(short *pix,int range[2],float cfilt);
203 short *foveon_make_curve(double max,double mul,double filt);
204 void foveon_make_curves(short **curvep,float dq[3],float div[3],float filt);
205 int foveon_apply_curve(short *curve,int i);
206 void foveon_interpolate(void);
207 void crop_masked_pixels(void);
208 void remove_zeroes(void);
209 void bad_pixels(const char *cfname);
210 void subtract(const char *fname);
211 void gamma_curve(double pwr,double ts,int mode,int imax);
212 void pseudoinverse (double (*in)[3],double (*out)[3],int size);
213 void cam_xyz_coeff(float rgb_cam[3][4],double cam_xyz[4][3]);
215 void colorcheck(void);
217 void hat_transform(float *temp,float *base,int st,int size,int sc);
218 void wavelet_denoise(void);
219 void scale_colors(void);
220 void pre_interpolate(void);
221 void border_interpolate(int border);
222 void lin_interpolate(void);
223 void vng_interpolate(void);
224 void ppg_interpolate(void);
225 void cielab(ushort rgb[3],short lab[3]);
226 void xtrans_interpolate(int passes);
227 void ahd_interpolate(void);
228 void median_filter(void);
229 void blend_highlights(void);
230 void recover_highlights(void);
231 void tiff_get(unsigned base,unsigned *tag,unsigned *type,unsigned *len,unsigned *save);
232 void parse_thumb_note(int base,unsigned toff,unsigned tlen);
233 void parse_makernote(int base,int uptag);
234 void get_timestamp(int reversed);
235 void parse_exif(int base);
236 void parse_gps(int base);
237 void romm_coeff(float romm_cam[3][3]);
238 void parse_mos(int offset);
239 void linear_table(unsigned len);
240 void parse_kodak_ifd(int base);
241 int parse_tiff_ifd(int base);
242 int parse_tiff(int base);
243 void apply_tiff(void);
244 void parse_minolta(int base);
245 void parse_external_jpeg(void);
246 void ciff_block_1030(void);
247 void parse_ciff(int offset,int length,int depth);
248 void parse_rollei(void);
249 void parse_sinar_ia(void);
250 void parse_phase_one(int base);
251 void parse_fuji(int offset);
252 int parse_jpeg(int offset);
253 void parse_riff(void);
254 void parse_qt(int end);
255 void parse_smal(int offset,int fsize);
256 void parse_cine(void);
257 void parse_redcine(void);
258 char *foveon_gets(int offset,char *str,int len);
259 void parse_foveon(void);
260 void adobe_coeff(const char *make,const char *model);
261 void simple_coeff(int index);
262 short guess_byte_order(int words);
263 float find_green(int bps,int bite,int off0,int off1);
266 void apply_profile(const char *input,const char *output);
268 void convert_to_rgb(void);
269 void fuji_rotate(void);
271 int flip_index(int row, int col);
272 void tiff_set(struct tiff_hdr *th,ushort *ntag,ushort tag,ushort type,int count,int val);
273 void tiff_head(struct tiff_hdr *th,int full);
274 void jpeg_thumb(void);
275 void write_ppm_tiff(void);
276 void write_cinelerra(void);
279 const double xyz_rgb[3][3] = { /* XYZ from RGB */
280 { 0.412453, 0.357580, 0.180423 },
281 { 0.212671, 0.715160, 0.072169 },
282 { 0.019334, 0.119193, 0.950227 } };
283 const float d65_white[3] = { 0.950456, 1, 1.088754 };
293 int main(int argc, const char **argv);