You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libkdcraw/libkdcraw/libraw/libraw/libraw.h

234 lines
8.3 KiB

/*
* File: libraw.h
* Copyright 2008-2009 Alex Tutubalin <lexa@lexa.ru>
* Created: Sat Mar 8, 2008
*
* LibRaw C++ interface
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
#ifndef _LIBRAW_CLASS_H
#define _LIBRAW_CLASS_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <limits.h>
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#include "libraw_datastream.h"
#include "libraw_types.h"
#include "libraw_const.h"
#include "libraw_internal.h"
#include "libraw_alloc.h"
//#define DCRAW_VERBOSE
#ifdef __cplusplus
extern "C"
{
#endif
DllDef const char *libraw_strerror(int errorcode);
DllDef const char *libraw_strprogress(enum LibRaw_progress);
// LibRaw C API
DllDef libraw_data_t *libraw_init(unsigned int flags);
DllDef int libraw_open_file(libraw_data_t*, const char *);
DllDef int libraw_open_buffer(libraw_data_t*, void * buffer, size_t size);
DllDef int libraw_unpack(libraw_data_t*);
DllDef int libraw_unpack_thumb(libraw_data_t*);
DllDef void libraw_recycle(libraw_data_t*);
DllDef void libraw_close(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();
DllDef void libraw_set_memerror_handler(libraw_data_t*, memory_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 int libraw_add_masked_borders_to_bitmap(libraw_data_t* lr);
DllDef const char * libraw_unpack_function_name(libraw_data_t* lr);
DllDef int libraw_rotate_fuji_raw(libraw_data_t* lr);
// DCRAW compatibility
DllDef int libraw_adjust_sizes_info_only(libraw_data_t*);
DllDef int libraw_dcraw_document_mode_processing(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* dcraw_make_mem_image(libraw_data_t* lr, int *errc);
DllDef libraw_processed_image_t* dcraw_make_mem_thumb(libraw_data_t* lr, int *errc);
#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);
int open_buffer(void *buffer, size_t size);
int open_datastream(LibRaw_abstract_datastream *);
int unpack(void);
int unpack_thumb(void);
int adjust_sizes_info_only(void);
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() { return LIBRAW_VERSION_STR;}
static int versionNumber() { return LIBRAW_VERSION; }
static const char** cameraList();
static int cameraCount();
static const char* strprogress(enum LibRaw_progress);
static const char* strerror(int p) { return libraw_strerror(p);}
// dcraw emulation
int dcraw_document_mode_processing();
int dcraw_ppm_tiff_writer(const char *filename);
int dcraw_thumb_writer(const char *fname);
int dcraw_process(void);
// memory writers
libraw_processed_image_t* dcraw_make_mem_image(int *errcode=NULL);
libraw_processed_image_t* dcraw_make_mem_thumb(int *errcode=NULL);
// free all internal data structures
void recycle();
~LibRaw(void) { recycle(); delete tls; }
int FC(int row,int col) { return (imgdata.idata.filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3);}
int fc (int row, int col);
int add_masked_borders_to_bitmap();
const char *unpack_function_name();
int rotate_fuji_raw();
private:
void* malloc(size_t t);
void* calloc(size_t n,size_t t);
void free(void *p);
void merror (void *ptr, const char *where);
void derror();
// data
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)(FILE *),
(LibRaw:: *write_fun)(FILE *);
void (LibRaw:: *load_raw)(),
(LibRaw:: *thumb_load_raw)();
void kodak_thumb_loader();
void write_thumb_ppm_tiff(FILE *); // kodak
void foveon_thumb_loader (void); //Sigma
// moved from implementation level to private: visibility
void init_masked_ptrs();
ushort *get_masked_pointer(int row, int col);
int own_filtering_supported(){ return 0;}
void identify();
void write_ppm_tiff (FILE *ofp);
void convert_to_rgb();
void kodak_ycbcr_load_raw();
void remove_zeroes();
#ifndef NO_LCMS
void apply_profile(char*,char*);
#endif
// Iterpolators
void pre_interpolate();
void border_interpolate (int border);
void lin_interpolate();
void vng_interpolate();
void ppg_interpolate();
void ahd_interpolate();
// Image filters
void bad_pixels(char*);
void subtract(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 fuji_rotate();
void stretch();
// Thmbnail functions
void foveon_thumb (FILE *tfp);
void jpeg_thumb_writer (FILE *tfp,char *thumb,int thumb_length);
void jpeg_thumb (FILE *tfp);
void ppm_thumb (FILE *tfp);
void layer_thumb (FILE *tfp);
void rollei_thumb (FILE *tfp);
void kodak_thumb_load_raw();
// utility for cut'n'pasted code
void foveon_decoder (unsigned size, unsigned code);
unsigned get4();
int flip_index (int row, int col);
void gamma_lut(ushort lut[0x10000]);
// == internal functions
#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