Alien-FreeImage

 view release on metacpan or  search on metacpan

src/Source/LibRawLite/libraw/libraw.h  view on Meta::CPAN

DllDef    void                libraw_free_image(libraw_data_t*);
    /* version helpers */
DllDef    const char*         libraw_version();
DllDef    int                 libraw_versionNumber();
    /* Camera list */
DllDef    const char**        libraw_cameraList();
DllDef    int                 libraw_cameraCount();

  /* helpers */
DllDef    void                libraw_set_memerror_handler(libraw_data_t*, memory_callback cb, void *datap);
DllDef    void                libraw_set_exifparser_handler(libraw_data_t*, exif_parser_callback cb, void *datap);
DllDef    void                libraw_set_dataerror_handler(libraw_data_t*,data_callback func,void *datap);
DllDef    void                libraw_set_progress_handler(libraw_data_t*,progress_callback cb,void *datap);
DllDef    const char *        libraw_unpack_function_name(libraw_data_t* lr);
DllDef    int                 libraw_get_decoder_info(libraw_data_t* lr,libraw_decoder_info_t* d);
DllDef    int libraw_COLOR(libraw_data_t*,int row, int col);

    /* DCRAW compatibility */
DllDef    int                 libraw_adjust_sizes_info_only(libraw_data_t*);
DllDef    int                 libraw_dcraw_ppm_tiff_writer(libraw_data_t* lr,const char *filename);
DllDef    int                 libraw_dcraw_thumb_writer(libraw_data_t* lr,const char *fname);
DllDef    int                 libraw_dcraw_process(libraw_data_t* lr);
DllDef    libraw_processed_image_t* libraw_dcraw_make_mem_image(libraw_data_t* lr, int *errc);
DllDef    libraw_processed_image_t* libraw_dcraw_make_mem_thumb(libraw_data_t* lr, int *errc);
DllDef    void libraw_dcraw_clear_mem(libraw_processed_image_t*);
#ifdef __cplusplus
}
#endif


#ifdef __cplusplus

class DllDef LibRaw
{
  public:
    libraw_data_t imgdata;
    int verbose;

    LibRaw(unsigned int flags = LIBRAW_OPTIONS_NONE);
    libraw_output_params_t*     output_params_ptr() { return &imgdata.params;}
    int                         open_file(const char *fname, INT64 max_buffered_sz=LIBRAW_USE_STREAMS_DATASTREAM_MAXSIZE);
#if defined(_WIN32) && !defined(__MINGW32__) && defined(_MSC_VER) && (_MSC_VER > 1310)
	int                         open_file(const wchar_t *fname, INT64 max_buffered_sz=LIBRAW_USE_STREAMS_DATASTREAM_MAXSIZE);
#endif
    int                         open_buffer(void *buffer, size_t size);
    virtual int                 open_datastream(LibRaw_abstract_datastream *);
	int							error_count(){return libraw_internal_data.unpacker_data.data_error;}
	void							recycle_datastream();
    int                         unpack(void);
    int                         unpack_thumb(void);

    int                         adjust_sizes_info_only(void);
    LibRaw_colormatrix_type	camera_color_type();
    int                         subtract_black();
    int                         subtract_black_internal();
    int                         raw2image();
    int                         raw2image_ex(int do_subtract_black);
    void                        raw2image_start();
    void                        free_image();
    int                         adjust_maximum();
    void		      	set_exifparser_handler( exif_parser_callback cb,void *data) {callbacks.exifparser_data = data; callbacks.exif_cb = cb; }
    void                        set_memerror_handler( memory_callback cb,void *data) {callbacks.memcb_data = data; callbacks.mem_cb = cb; }
    void                        set_dataerror_handler(data_callback func, void *data) { callbacks.datacb_data = data; callbacks.data_cb = func;}
    void                        set_progress_handler(progress_callback pcb, void *data) { callbacks.progresscb_data = data; callbacks.progress_cb = pcb;}

    /* helpers */
    static const char*          version();
    static int                  versionNumber();
    static const char**         cameraList();
    static int                  cameraCount();
    static const char*          strprogress(enum LibRaw_progress);
    static const char*          strerror(int p);
    /* dcraw emulation */
    int                         dcraw_ppm_tiff_writer(const char *filename);
    int                         dcraw_thumb_writer(const char *fname);
    int                         dcraw_process(void);
    /* information calls */
    int is_fuji_rotated(){return libraw_internal_data.internal_output_params.fuji_width;}
    int is_sraw();
	int sraw_midpoint();
	int is_nikon_sraw();
	int is_coolscan_nef();
    /* memory writers */
    virtual libraw_processed_image_t*   dcraw_make_mem_image(int *errcode=NULL);  
    virtual libraw_processed_image_t*   dcraw_make_mem_thumb(int *errcode=NULL);
    static void                 dcraw_clear_mem(libraw_processed_image_t*);
    
    /* Additional calls for make_mem_image */
    void get_mem_image_format(int* width, int* height, int* colors, int* bps) const;
    int  copy_mem_image(void* scan0, int stride, int bgr);

    /* free all internal data structures */
    void         recycle(); 
    virtual ~LibRaw(void); 

    int COLOR(int row, int col) { return libraw_internal_data.internal_output_params.fuji_width? FCF(row,col):FC(row,col);}
 
    int FC(int row,int col) { return (imgdata.idata.filters >> (((row << 1 & 14) | (col & 1)) << 1) & 3);}
    int         fcol (int row, int col);
    
    const char *unpack_function_name();
    virtual int get_decoder_info(libraw_decoder_info_t* d_info);
    libraw_internal_data_t * get_internal_data_pointer(){ return &libraw_internal_data; }

    /* Debanding filter */
    int  wf_remove_banding();

  /* Phase one correction/subtractBL calls */
	/* Returns libraw error code */
  
  int phase_one_subtract_black(ushort *src, ushort *dest);
  int phase_one_correct();

  int  set_rawspeed_camerafile(char *filename);
  void setCancelFlag();
  void clearCancelFlag();
  virtual void adobe_coeff (const char *, const char *, int internal_only=0);


protected:
    void checkCancel();
	void        cam_xyz_coeff(float _rgb_cam[3][4], double cam_xyz[4][3]);
    void phase_one_allocate_tempbuffer();
    void phase_one_free_tempbuffer();
    virtual int  is_phaseone_compressed();
    /* Hotspots */
    virtual void copy_fuji_uncropped(unsigned short cblack[4], unsigned short *dmaxp);
    virtual void copy_bayer(unsigned short cblack[4], unsigned short *dmaxp);
    virtual void fuji_rotate();
    virtual void convert_to_rgb_loop(float out_cam[3][4]);
    virtual void lin_interpolate_loop(int code[16][16][32],int size);
    virtual void scale_colors_loop(float scale_mul[4]);

    int FCF(int row,int col) { 
        int rr,cc;
        if (libraw_internal_data.unpacker_data.fuji_layout) {
            rr = libraw_internal_data.internal_output_params.fuji_width - 1 - col + (row >> 1);
            cc = col + ((row+1) >> 1);
        } else {
            rr = libraw_internal_data.internal_output_params.fuji_width - 1 + row - (col >> 1);
            cc = row + ((col+1) >> 1);
        }
        return FC(rr,cc);
    }

    void adjust_bl();
    void*        malloc(size_t t);
    void*        calloc(size_t n,size_t t);
    void*        realloc(void *p, size_t s);
    void        free(void *p);
    void        merror (void *ptr, const char *where);
    void        derror();

    LibRaw_TLS  *tls;
    libraw_internal_data_t libraw_internal_data;
    decode      first_decode[2048], *second_decode, *free_decode;
    tiff_ifd_t  tiff_ifd[10];
    libraw_memmgr memmgr;
    libraw_callbacks_t callbacks;

    LibRaw_constants rgb_constants;

    void        (LibRaw:: *write_thumb)();
    void        (LibRaw:: *write_fun)();
    void        (LibRaw:: *load_raw)();
    void        (LibRaw:: *thumb_load_raw)();

    void        kodak_thumb_loader();
    void        write_thumb_ppm_tiff(FILE *); 
    void        x3f_thumb_loader();
#ifdef LIBRAW_DEMOSAIC_PACK_GPL2
    void        foveon_thumb_loader (void);
#endif
    
    int         own_filtering_supported(){ return 0;}
    void        identify();
    void        write_ppm_tiff ();
    void        convert_to_rgb();
    void        remove_zeroes();
    void        crop_masked_pixels();
#ifndef NO_LCMS
    void	apply_profile(const char*,const char*);
#endif
    void        pre_interpolate();
    void        border_interpolate (int border);
    void        lin_interpolate();
    void        vng_interpolate();
    void        ppg_interpolate();
    void        cielab(ushort rgb[3], short lab[3]);
    void        xtrans_interpolate(int);
    void        ahd_interpolate();
    void        dht_interpolate();
    void        aahd_interpolate();

    /* from demosaic pack */
    void        ahd_interpolate_mod();
    void        afd_interpolate_pl(int afd_passes, int clip_on);
    void        afd_noise_filter_pl();
    void	lmmse_interpolate(int gamma_apply);
    void        dcb(int iterations, int dcb_enhance);
    void        fbdd(int noiserd);
    void        vcd_interpolate(int ahd_cutoff);
    void        amaze_demosaic_RT();
    void	exp_bef(float expos, float preser);
    void        CA_correct_RT(float cared, float cablue);
    void        cfa_linedn(float linenoise);
    void        cfa_impulse_gauss(float lclean, float cclean);
    void        green_equilibrate(float thresh);
	
    /* demosaic pack end */

    void        bad_pixels(const char*);
    void        subtract(const char*);
    void        hat_transform (float *temp, float *base, int st, int size, int sc);
    void        wavelet_denoise();
    void        scale_colors();
    void        median_filter ();
    void        blend_highlights();
    void        recover_highlights();
    void        green_matching();

    void        stretch();

#ifdef LIBRAW_DEMOSAIC_PACK_GPL2
    void        foveon_thumb ();
#endif
    void        jpeg_thumb_writer (FILE *tfp,char *thumb,int thumb_length);
    void        jpeg_thumb ();
    void        ppm_thumb ();
    void        ppm16_thumb();
    void        layer_thumb ();
    void        rollei_thumb ();
    void        kodak_thumb_load_raw();

#ifdef LIBRAW_DEMOSAIC_PACK_GPL2
    void        foveon_decoder (unsigned size, unsigned code);
#endif
    unsigned    get4();

    int         flip_index (int row, int col);
    void        gamma_curve (double pwr, double ts, int mode, int imax);
    void        cubic_spline (const int *x_, const int *y_, const int len);

  /* RawSpeed data */
  void		*_rawspeed_camerameta;
  void          *_rawspeed_decoder;
  void		fix_after_rawspeed(int bl);
  /* Fast cancel flag */
  long          _exitflag;

  /* X3F data */
  void          *_x3f_data;

#ifdef LIBRAW_LIBRARY_BUILD 
#include "internal/libraw_internal_funcs.h"
#endif

};

#ifdef LIBRAW_LIBRARY_BUILD 
#define RUN_CALLBACK(stage,iter,expect)  if(callbacks.progress_cb) { \
        int rr = (*callbacks.progress_cb)(callbacks.progresscb_data,stage,iter,expect); \
        if(rr!=0) throw LIBRAW_EXCEPTION_CANCELLED_BY_CALLBACK; \
    }
#endif


#endif /* __cplusplus */


#endif /* _LIBRAW_CLASS_H */



( run in 1.159 second using v1.01-cache-2.11-cpan-63c85eba8c4 )