Problem with precompiled libraw 0.14.7
// typedefinition: somewhere in another h file: typedef libraw_data_t * (*libraw_init_dll_def)(int v); typedef void (*libraw_set_progress_handler_dll_def)(libraw_data_t*,progress_callback cb,void *datap); typedef int (*libraw_open_file_dll_def)(libraw_data_t*, const char *); typedef int (*libraw_adjust_sizes_info_only_dll_def)(libraw_data_t*); typedef void (*libraw_close_dll_def)(libraw_data_t*); typedef int (*libraw_unpack_dll_def)(libraw_data_t*); typedef int (*libraw_dcraw_process_dll_def)(libraw_data_t* lr); typedef libraw_processed_image_t* (*libraw_dcraw_make_mem_image_dll_def)(libraw_data_t* lr, int *errc); typedef void (*libraw_dcraw_clear_mem_dll_def)(libraw_processed_image_t*); typedef void (*libraw_recycle_dll_def)(libraw_data_t*); typedef void (*libraw_set_progress_handler_dll_def)(libraw_data_t*,progress_callback cb,void *datap); typedef const char* (*libraw_version_dll_def)(); typedef libraw_processed_image_t* (*libraw_dcraw_make_mem_thumb_dll_def)(libraw_data_t* lr, int *errc); typedef int (*libraw_unpack_thumb_dll_def)(libraw_data_t*); // *********************************************************************************************************************** // function pointers declaration from GetProcAddress: libraw_data_t * libraw_init_dll (int v); void libraw_set_progress_handler(libraw_data_t*,progress_callback cb,void *datap); int libraw_open_file(libraw_data_t*, const char *filename); int libraw_adjust_sizes_info_only(libraw_data_t *ptr); void libraw_close(libraw_data_t *ptr); int libraw_unpack(libraw_data_t *ptr); int libraw_dcraw_process(libraw_data_t* lr); libraw_processed_image_t* libraw_dcraw_make_mem_image(libraw_data_t* lr, int *errc); void libraw_dcraw_clear_mem(libraw_processed_image_t*); void libraw_recycle(libraw_data_t *ptr); const char* libraw_version(); libraw_processed_image_t* libraw_dcraw_make_mem_thumb(libraw_data_t* lr, int *errc); int libraw_unpack_thumb(libraw_data_t *ptr); // *********************************************************************************************************************** // function pointers libraw_init_dll_def libraw_init_ptr = 0; libraw_set_progress_handler_dll_def libraw_set_progress_handler_ptr = 0; libraw_open_file_dll_def libraw_open_file_ptr = 0; libraw_adjust_sizes_info_only_dll_def libraw_adjust_sizes_info_only_ptr = 0; libraw_close_dll_def libraw_close_ptr = 0; libraw_unpack_dll_def libraw_unpack_ptr = 0; libraw_dcraw_process_dll_def libraw_dcraw_process_ptr = 0; libraw_dcraw_make_mem_image_dll_def libraw_dcraw_make_mem_image_ptr = 0; libraw_dcraw_clear_mem_dll_def libraw_dcraw_clear_mem_ptr = 0; libraw_recycle_dll_def libraw_recycle_ptr = 0; libraw_version_dll_def libraw_version_ptr = 0; libraw_dcraw_make_mem_thumb_dll_def libraw_dcraw_make_mem_thumb_ptr = 0; libraw_unpack_thumb_dll_def libraw_unpack_thumb_ptr = 0; // *********************************************************************************************************************** // somewhere in my init function HMODULE hInstDLL = LoadLibrary ("libraw.dll"); if (hInstDLL) { libraw_init_ptr = (libraw_init_dll_def) GetProcAddress (hInstDLL, "libraw_init"); libraw_set_progress_handler_ptr = (libraw_set_progress_handler_dll_def) GetProcAddress (hInstDLL, "libraw_set_progress_handler"); libraw_open_file_ptr = (libraw_open_file_dll_def) GetProcAddress (hInstDLL, "libraw_open_file"); libraw_adjust_sizes_info_only_ptr = (libraw_adjust_sizes_info_only_dll_def) GetProcAddress (hInstDLL, "libraw_adjust_sizes_info_only"); libraw_close_ptr = (libraw_close_dll_def) GetProcAddress (hInstDLL, "libraw_close"); libraw_unpack_ptr = (libraw_unpack_dll_def) GetProcAddress (hInstDLL, "libraw_unpack"); libraw_dcraw_process_ptr = (libraw_dcraw_process_dll_def) GetProcAddress (hInstDLL, "libraw_dcraw_process"); libraw_dcraw_make_mem_image_ptr = (libraw_dcraw_make_mem_image_dll_def) GetProcAddress (hInstDLL, "libraw_dcraw_make_mem_image"); libraw_dcraw_clear_mem_ptr = (libraw_dcraw_clear_mem_dll_def) GetProcAddress (hInstDLL, "libraw_dcraw_clear_mem"); libraw_recycle_ptr = (libraw_recycle_dll_def) GetProcAddress (hInstDLL, "libraw_recycle"); libraw_version_ptr = (libraw_version_dll_def) GetProcAddress (hInstDLL, "libraw_version"); libraw_dcraw_make_mem_thumb_ptr = (libraw_dcraw_make_mem_thumb_dll_def) GetProcAddress (hInstDLL, "libraw_dcraw_make_mem_thumb"); libraw_unpack_thumb_ptr = (libraw_unpack_thumb_dll_def) GetProcAddress (hInstDLL, "libraw_unpack_thumb"); } // *********************************************************************************************************************** // use C code only libraw_data_t *ptr = (libraw_data_t*) libraw_init_ptr (0); if (ptr) { ret = libraw_open_file_ptr (ptr, pfilename); if (ret == LIBRAW_SUCCESS) { ret = libraw_unpack_thumb_ptr (ptr); if (ret == LIBRAW_SUCCESS) { libraw_processed_image_t *thumb = libraw_dcraw_make_mem_thumb_ptr (ptr, &ret); // thumb data is decoded correctly if (thumb && ret == LIBRAW_SUCCESS) { ret = libraw_adjust_sizes_info_only_ptr (ptr); if (ret == LIBRAW_SUCCESS) { // ptr->idata.make; decoded correctly // ptr->idata.model; decoded correctly // ptr->sizes.width; decoded correctly // ptr->sizes.height; decoded correctly /* iso_speed should be 80 shutter should be 1/1600.0 sec aperture should be f/3.3 focal_len should be 19.2 mm but I get the following values: iso_speed is 0 !! (why?) shutter is 80 aperture is 1/1600.0 sec focal_len is f/3.3 */ libraw_dcraw_clear_mem_ptr (thumb); } // if (ret == LIBRAW_SUCCESS -> libraw_adjust_sizes_info_only } // if (thumb) } // if (ret == LIBRAW_SUCCESS -> libraw_unpack_thumb } // if (ret == LIBRAW_SUCCESS) if (ptr) libraw_close_ptr (ptr); ptr = 0; } // if ptr
I have compiled with Microsoft Visual C++ 6.0 including the latest service packs and SDK 2003 includes+libs.
Everything works fine but iso_speed is _always_ 0.
I have tried it with code alignment of 4, 8 and even 16 bytes. iso_speed is still 0.
(There is no possibility to use another compiler or compile libraw by myself).
Please help :-)
Recent comments