X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fdcraw.h;h=3a12493236be862390313e07de195cbfa8e0d598;hp=d739dfc0f2f82a2d332f9a06e73481b91f1f67b5;hb=502b6f3b6fd04f6b01c6d70dcb81aa304dd0db1c;hpb=24db15d85f2e4c986ff91f992e815747c55948f3 diff --git a/cinelerra-5.1/cinelerra/dcraw.h b/cinelerra-5.1/cinelerra/dcraw.h index d739dfc0..3a124932 100644 --- a/cinelerra-5.1/cinelerra/dcraw.h +++ b/cinelerra-5.1/cinelerra/dcraw.h @@ -1,188 +1,295 @@ - /* CINELERRA dcraw.c */ -static int CLASS fcol(int row,int col); + +#include +#include +#include + +class DCRaw_data; +class DCRaw; + +#define CLASS DCRaw:: + +#if !defined(uchar) +#define uchar unsigned char +#endif +#if !defined(ushort) +#define ushort unsigned short +#endif + +struct jhead; +struct tiff_tag; +struct tiff_hdr; + +class DCRaw_data { +// ZEROd by DCRaw reset +public: + FILE *ifp, *ofp; + short order; + const char *ifname; + char *meta_data, xtrans[6][6], xtrans_abs[6][6]; + char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; + float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len; + time_t timestamp; + off_t strip_offset, data_offset; + off_t thumb_offset, meta_offset, profile_offset; + unsigned shot_order, kodak_cbpp, exif_cfa, unique_id; + unsigned thumb_length, meta_length, profile_length; + unsigned thumb_misc, *oprof, fuji_layout; + unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; + unsigned black, maximum, mix_green, raw_color, zero_is_bad; + unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; + unsigned tile_width, tile_length, gpsdata[32], load_flags; + unsigned flip, tiff_flip, filters, colors; + ushort raw_height, raw_width, height, width, top_margin, left_margin; + ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; + ushort *raw_image, (*image)[4], cblack[4102]; + ushort white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4]; + + unsigned shot_select, multi_out; + double pixel_aspect, aber[4], gamm[6]; + float bright, user_mul[4], threshold; + int mask[8][4]; + int half_size, four_color_rgb, document_mode, highlight; + int verbose, use_auto_wb, use_camera_wb, use_camera_matrix; + int output_color, output_bps, output_tiff, med_passes; + int no_auto_bright; + unsigned greybox[4]; + float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; + int histogram[4][0x2000]; + void (CLASS *write_thumb)(), (CLASS *write_fun)(); + void (CLASS *load_raw)(), (CLASS *thumb_load_raw)(); + jmp_buf failure; + + struct decode { + struct decode *branch[2]; + int leaf; + } first_decode[2048], /* *second_decode, CINELERRA */ *free_decode; + + struct tiff_ifd { + int width, height, bps, comp, phint, offset, flip, samples, bytes; + int tile_width, tile_length; + float shutter; + } tiff_ifd[10]; + + struct ph1 { + int format, key_off, tag_21a; + int black, split_col, black_col, split_row, black_row; + float tag_210; + } ph1; + +// local static data + unsigned gbh_bitbuf; + int gbh_vbits, gbh_reset; + uint64_t ph1_bitbuf; + int ph1_vbits; + float ljpeg_cs[106]; + unsigned sony_pad[128], sony_p; + unsigned fov_huff[1024]; + float clb_cbrt[0x10000], clb_xyz_cam[3][4]; + uchar pana_buf[0x4000]; int pana_vbits; +// const static data + static const double xyz_rgb[3][3]; + static const float d65_white[3]; + +}; + +class DCRaw : public DCRaw_data { +private: + int fcol(int row,int col); #if 0 -static char *my_memmem(char *haystack,size_t haystacklen,char *needle,size_t needlelen); -static char *my_strcasestr(char *haystack,const char *needle); + char *my_memmem(char *haystack,size_t haystacklen,char *needle,size_t needlelen); + char *my_strcasestr(char *haystack,const char *needle); #endif -static void CLASS merror(void *ptr,const char *where); -static void CLASS derror(void); -static ushort CLASS sget2(uchar *s); -static ushort CLASS get2(void); -static unsigned CLASS sget4(uchar *s); -static unsigned CLASS get4(void); -static unsigned CLASS getint(int type); -static float CLASS int_to_float(int i); -static double CLASS getreal(int type); -static void CLASS read_shorts(ushort *pixel,int count); -static void CLASS cubic_spline(const int *x_,const int *y_,const int len); -static void CLASS canon_600_fixed_wb(int temp); -static int CLASS canon_600_color(int ratio[2],int mar); -static void CLASS canon_600_auto_wb(void); -static void CLASS canon_600_coeff(void); -static void CLASS canon_600_load_raw(void); -static void CLASS canon_600_correct(void); -static int CLASS canon_s2is(void); -static unsigned CLASS getbithuff(int nbits,ushort *huff); -static ushort *CLASS make_decoder_ref(const uchar **source); -static ushort *CLASS make_decoder(const uchar *source); -static void CLASS crw_init_tables(unsigned table,ushort *huff[2]); -static int CLASS canon_has_lowbits(void); -static void CLASS canon_load_raw(void); -static int CLASS ljpeg_start(struct jhead *jh,int info_only); -static void CLASS ljpeg_end(struct jhead *jh); -static int CLASS ljpeg_diff(ushort *huff); -static ushort *CLASS ljpeg_row(int jrow,struct jhead *jh); -static void CLASS lossless_jpeg_load_raw(void); -static void CLASS canon_sraw_load_raw(void); -static void CLASS adobe_copy_pixel(unsigned row,unsigned col,ushort **rp); -static void CLASS ljpeg_idct(struct jhead *jh); -static void CLASS lossless_dng_load_raw(void); -static void CLASS packed_dng_load_raw(void); -static void CLASS pentax_load_raw(void); -static void CLASS nikon_load_raw(void); -static void CLASS nikon_yuv_load_raw(void); -static int CLASS nikon_e995(void); -static int CLASS nikon_e2100(void); -static void CLASS nikon_3700(void); -static int CLASS minolta_z2(void); -static void CLASS ppm_thumb(void); -static void CLASS ppm16_thumb(void); -static void CLASS layer_thumb(void); -static void CLASS rollei_thumb(void); -static void CLASS rollei_load_raw(void); -static int CLASS raw(unsigned row,unsigned col); -static void CLASS phase_one_flat_field(int is_float,int nc); -static void CLASS phase_one_correct(void); -static void CLASS phase_one_load_raw(void); -static unsigned CLASS ph1_bithuff(int nbits,ushort *huff); -static void CLASS phase_one_load_raw_c(void); -static void CLASS hasselblad_load_raw(void); -static void CLASS leaf_hdr_load_raw(void); -static void CLASS unpacked_load_raw(void); -static void CLASS sinar_4shot_load_raw(void); -static void CLASS imacon_full_load_raw(void); -static void CLASS packed_load_raw(void); -static void CLASS nokia_load_raw(void); -static void CLASS canon_rmf_load_raw(void); -static unsigned CLASS pana_bits(int nbits); -static void CLASS panasonic_load_raw(void); -static void CLASS olympus_load_raw(void); -static void CLASS minolta_rd175_load_raw(void); -static void CLASS quicktake_100_load_raw(void); -static void CLASS kodak_radc_load_raw(void); -static void CLASS kodak_jpeg_load_raw(void); -static void CLASS lossy_dng_load_raw(void); + void merror(void *ptr,const char *where); + void derror(void); + ushort sget2(uchar *s); + ushort get2(void); + unsigned sget4(uchar *s); + unsigned get4(void); + unsigned getint(int type); + float int_to_float(int i); + double getreal(int type); + void read_shorts(ushort *pixel,int count); + void cubic_spline(const int *x_,const int *y_,const int len); + void canon_600_fixed_wb(int temp); + int canon_600_color(int ratio[2],int mar); + void canon_600_auto_wb(void); + void canon_600_coeff(void); + void canon_600_load_raw(void); + void canon_600_correct(void); + int canon_s2is(void); + unsigned getbithuff(int nbits,ushort *huff); + ushort *make_decoder_ref(const uchar **source); + ushort *make_decoder(const uchar *source); + void crw_init_tables(unsigned table,ushort *huff[2]); + int canon_has_lowbits(void); + void canon_load_raw(void); + int ljpeg_start(struct jhead *jh,int info_only); + void ljpeg_end(struct jhead *jh); + int ljpeg_diff(ushort *huff); + ushort *ljpeg_row(int jrow,struct jhead *jh); + void lossless_jpeg_load_raw(void); + void canon_sraw_load_raw(void); + void adobe_copy_pixel(unsigned row,unsigned col,ushort **rp); + void ljpeg_idct(struct jhead *jh); + void lossless_dng_load_raw(void); + void packed_dng_load_raw(void); + void pentax_load_raw(void); + void nikon_load_raw(void); + void nikon_yuv_load_raw(void); + int nikon_e995(void); + int nikon_e2100(void); + void nikon_3700(void); + int minolta_z2(void); + void ppm_thumb(void); + void ppm16_thumb(void); + void layer_thumb(void); + void rollei_thumb(void); + void rollei_load_raw(void); + int raw(unsigned row,unsigned col); + void phase_one_flat_field(int is_float,int nc); + void phase_one_correct(void); + void phase_one_load_raw(void); + unsigned ph1_bithuff(int nbits,ushort *huff); + void phase_one_load_raw_c(void); + void hasselblad_load_raw(void); + void leaf_hdr_load_raw(void); + void unpacked_load_raw(void); + void sinar_4shot_load_raw(void); + void imacon_full_load_raw(void); + void packed_load_raw(void); + void nokia_load_raw(void); + void canon_rmf_load_raw(void); + unsigned pana_bits(int nbits); + void panasonic_load_raw(void); + void olympus_load_raw(void); + void canon_crx_load_raw(); + void fuji_xtrans_load_raw(); + void minolta_rd175_load_raw(void); + void quicktake_100_load_raw(void); + void kodak_radc_load_raw(void); + void kodak_jpeg_load_raw(void); + void lossy_dng_load_raw(void); #ifndef NO_JPEG -static int boolean fill_input_buffer(j_decompress_ptr cinfo); + boolean fill_input_buffer(j_decompress_ptr cinfo); #endif -static void CLASS kodak_jpeg_load_raw(void); -static void CLASS lossy_dng_load_raw(void); -static void CLASS kodak_dc120_load_raw(void); -static void CLASS eight_bit_load_raw(void); -static void CLASS kodak_c330_load_raw(void); -static void CLASS kodak_c603_load_raw(void); -static void CLASS kodak_262_load_raw(void); -static int CLASS kodak_65000_decode(short *out,int bsize); -static void CLASS kodak_65000_load_raw(void); -static void CLASS kodak_ycbcr_load_raw(void); -static void CLASS kodak_rgb_load_raw(void); -static void CLASS kodak_thumb_load_raw(void); -static void CLASS sony_decrypt(unsigned *data,int len,int start,int key); -static void CLASS sony_load_raw(void); -static void CLASS sony_arw_load_raw(void); -static void CLASS sony_arw2_load_raw(void); -static void CLASS samsung_load_raw(void); -static void CLASS samsung2_load_raw(void); -static void CLASS samsung3_load_raw(void); -static void CLASS smal_decode_segment(unsigned seg[2][2],int holes); -static void CLASS smal_v6_load_raw(void); -static int CLASS median4(int *p); -static void CLASS fill_holes(int holes); -static void CLASS smal_v9_load_raw(void); -static void CLASS redcine_load_raw(void); -static void CLASS foveon_decoder(unsigned size,unsigned code); -static void CLASS foveon_thumb(void); -static void CLASS foveon_sd_load_raw(void); -static void CLASS foveon_huff(ushort *huff); -static void CLASS foveon_dp_load_raw(void); -static void CLASS foveon_load_camf(void); -static const char *CLASS foveon_camf_param(const char *block,const char *param); -static void *CLASS foveon_camf_matrix(unsigned dim[3],const char *name); -static int CLASS foveon_fixed(void *ptr,int size,const char *name); -static float CLASS foveon_avg(short *pix,int range[2],float cfilt); -static short *CLASS foveon_make_curve(double max,double mul,double filt); -static void CLASS foveon_make_curves(short **curvep,float dq[3],float div[3],float filt); -static int CLASS foveon_apply_curve(short *curve,int i); -static void CLASS foveon_interpolate(void); -static void CLASS crop_masked_pixels(void); -static void CLASS remove_zeroes(void); -static void CLASS bad_pixels(const char *cfname); -static void CLASS subtract(const char *fname); -static void CLASS gamma_curve(double pwr,double ts,int mode,int imax); -static void CLASS pseudoinverse (double (*in)[3],double (*out)[3],int size); -static void CLASS cam_xyz_coeff(float rgb_cam[3][4],double cam_xyz[4][3]); + void kodak_dc120_load_raw(void); + void eight_bit_load_raw(void); + void kodak_c330_load_raw(void); + void kodak_c603_load_raw(void); + void kodak_262_load_raw(void); + int kodak_65000_decode(short *out,int bsize); + void kodak_65000_load_raw(void); + void kodak_ycbcr_load_raw(void); + void kodak_rgb_load_raw(void); + void kodak_thumb_load_raw(void); + void sony_decrypt(unsigned *data,int len,int start,int key); + void sony_load_raw(void); + void sony_arw_load_raw(void); + void sony_arw2_load_raw(void); + void samsung_load_raw(void); + void samsung2_load_raw(void); + void samsung3_load_raw(void); + void smal_decode_segment(unsigned seg[2][2],int holes); + void smal_v6_load_raw(void); + int median4(int *p); + void fill_holes(int holes); + void smal_v9_load_raw(void); + void redcine_load_raw(void); + void foveon_decoder(unsigned size,unsigned code); + void foveon_thumb(void); + void foveon_sd_load_raw(void); + void foveon_huff(ushort *huff); + void foveon_dp_load_raw(void); + void foveon_load_camf(void); + const char *foveon_camf_param(const char *block,const char *param); + void *foveon_camf_matrix(unsigned dim[3],const char *name); + int foveon_fixed(void *ptr,int size,const char *name); + float foveon_avg(short *pix,int range[2],float cfilt); + short *foveon_make_curve(double max,double mul,double filt); + void foveon_make_curves(short **curvep,float dq[3],float div[3],float filt); + int foveon_apply_curve(short *curve,int i); + void foveon_interpolate(void); + void crop_masked_pixels(void); + void remove_zeroes(void); + void bad_pixels(const char *cfname); + void subtract(const char *fname); + void gamma_curve(double pwr,double ts,int mode,int imax); + void pseudoinverse (double (*in)[3],double (*out)[3],int size); + void cam_xyz_coeff(float rgb_cam[3][4],double cam_xyz[4][3]); #ifdef COLORCHECK -static void CLASS colorcheck(void); + void colorcheck(void); #endif -static void CLASS hat_transform(float *temp,float *base,int st,int size,int sc); -static void CLASS wavelet_denoise(void); -static void CLASS scale_colors(void); -static void CLASS pre_interpolate(void); -static void CLASS border_interpolate(int border); -static void CLASS lin_interpolate(void); -static void CLASS vng_interpolate(void); -static void CLASS ppg_interpolate(void); -static void CLASS cielab(ushort rgb[3],short lab[3]); -static void CLASS xtrans_interpolate(int passes); -static void CLASS ahd_interpolate(void); -static void CLASS median_filter(void); -static void CLASS blend_highlights(void); -static void CLASS recover_highlights(void); -static void CLASS tiff_get(unsigned base,unsigned *tag,unsigned *type,unsigned *len,unsigned *save); -static void CLASS parse_thumb_note(int base,unsigned toff,unsigned tlen); -static void CLASS parse_makernote(int base,int uptag); -static void CLASS get_timestamp(int reversed); -static void CLASS parse_exif(int base); -static void CLASS parse_gps(int base); -static void CLASS romm_coeff(float romm_cam[3][3]); -static void CLASS parse_mos(int offset); -static void CLASS linear_table(unsigned len); -static void CLASS parse_kodak_ifd(int base); -static int CLASS parse_tiff_ifd(int base); -static int CLASS parse_tiff(int base); -static void CLASS apply_tiff(void); -static void CLASS parse_minolta(int base); -static void CLASS parse_external_jpeg(void); -static void CLASS ciff_block_1030(void); -static void CLASS parse_ciff(int offset,int length,int depth); -static void CLASS parse_rollei(void); -static void CLASS parse_sinar_ia(void); -static void CLASS parse_phase_one(int base); -static void CLASS parse_fuji(int offset); -static int CLASS parse_jpeg(int offset); -static void CLASS parse_riff(void); -static void CLASS parse_qt(int end); -static void CLASS parse_smal(int offset,int fsize); -static void CLASS parse_cine(void); -static void CLASS parse_redcine(void); -static char *CLASS foveon_gets(int offset,char *str,int len); -static void CLASS parse_foveon(void); -static void CLASS adobe_coeff(const char *make,const char *model); -static void CLASS simple_coeff(int index); -static short CLASS guess_byte_order(int words); -static float CLASS find_green(int bps,int bite,int off0,int off1); -static void CLASS identify(void); + void hat_transform(float *temp,float *base,int st,int size,int sc); + void wavelet_denoise(void); + void scale_colors(void); + void pre_interpolate(void); + void border_interpolate(int border); + void lin_interpolate(void); + void vng_interpolate(void); + void ppg_interpolate(void); + void cielab(ushort rgb[3],short lab[3]); + void xtrans_interpolate(int passes); + void ahd_interpolate(void); + void median_filter(void); + void blend_highlights(void); + void recover_highlights(void); + void tiff_get(unsigned base,unsigned *tag,unsigned *type,unsigned *len,unsigned *save); + void parse_thumb_note(int base,unsigned toff,unsigned tlen); + void parse_makernote(int base,int uptag); + void get_timestamp(int reversed); + void parse_exif(int base); + void parse_gps(int base); + void romm_coeff(float romm_cam[3][3]); + void parse_mos(int offset); + void linear_table(unsigned len); + void parse_kodak_ifd(int base); + int parse_tiff_ifd(int base); + int parse_tiff(int base); + void apply_tiff(void); + void parse_minolta(int base); + void parse_external_jpeg(void); + void ciff_block_1030(void); + void parse_ciff(int offset,int length,int depth); + void parse_rollei(void); + void parse_sinar_ia(void); + void parse_phase_one(int base); + void parse_fuji(int offset); + int parse_jpeg(int offset); + void parse_riff(void); + void parse_crx(int end); + void parse_qt(int end); + void parse_smal(int offset,int fsize); + void parse_cine(void); + void parse_redcine(void); + char *foveon_gets(int offset,char *str,int len); + void parse_foveon(void); + void adobe_coeff(const char *make,const char *model); + void simple_coeff(int index); + short guess_byte_order(int words); + float find_green(int bps,int bite,int off0,int off1); + void identify(void); #ifndef NO_LCMS -static void CLASS apply_profile(const char *input,const char *output); + void apply_profile(const char *input,const char *output); #endif -static void CLASS convert_to_rgb(void); -static void CLASS fuji_rotate(void); -static void CLASS stretch(void); -static int CLASS flip_index(int row, int col); -static void CLASS tiff_set(struct tiff_hdr *th,ushort *ntag,ushort tag,ushort type,int count,int val); -static void CLASS tiff_head(struct tiff_hdr *th,int full); -static void CLASS jpeg_thumb(void); -static void CLASS write_ppm_tiff(void); -static void CLASS write_cinelerra(FILE *ofp); + void convert_to_rgb(void); + void fuji_rotate(void); + void stretch(void); + int flip_index(int row, int col); + void tiff_set(struct tiff_hdr *th,ushort *ntag,ushort tag,ushort type,int count,int val); + void tiff_head(struct tiff_hdr *th,int full); + void jpeg_thumb(void); + void write_ppm_tiff(void); + void write_cinelerra(void); + void reset(); +public: + DCRaw(); + ~DCRaw(); +// CINELERRA + char info[1024]; + float **data; + int alpha; + float matrix[9]; + int main(int argc, const char **argv); +};