Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibRawLite/src/libraw_cxx.cpp view on Meta::CPAN
ID.input->seek(ID.profile_offset,SEEK_SET);
ID.input->read(C.profile,C.profile_length,1);
}
SET_PROC_FLAG(LIBRAW_PROGRESS_IDENTIFY);
}
catch ( LibRaw_exceptions err) {
EXCEPTION_HANDLER(err);
}
catch (std::exception ee) {
EXCEPTION_HANDLER(LIBRAW_EXCEPTION_IO_CORRUPT);
}
if(P1.raw_count < 1)
return LIBRAW_FILE_UNSUPPORTED;
write_fun = &LibRaw::write_ppm_tiff;
if (load_raw == &LibRaw::kodak_ycbcr_load_raw)
{
S.height += S.height & 1;
S.width += S.width & 1;
}
IO.shrink = P1.filters && (O.half_size ||
((O.threshold || O.aber[0] != 1 || O.aber[2] != 1) ));
S.iheight = (S.height + IO.shrink) >> IO.shrink;
S.iwidth = (S.width + IO.shrink) >> IO.shrink;
// Save color,sizes and internal data into raw_image fields
memmove(&imgdata.rawdata.color,&imgdata.color,sizeof(imgdata.color));
memmove(&imgdata.rawdata.sizes,&imgdata.sizes,sizeof(imgdata.sizes));
memmove(&imgdata.rawdata.iparams,&imgdata.idata,sizeof(imgdata.idata));
memmove(&imgdata.rawdata.ioparams,&libraw_internal_data.internal_output_params,sizeof(libraw_internal_data.internal_output_params));
SET_PROC_FLAG(LIBRAW_PROGRESS_SIZE_ADJUST);
return LIBRAW_SUCCESS;
}
#ifdef USE_RAWSPEED
void LibRaw::fix_after_rawspeed(int bl)
{
if (load_raw == &LibRaw::lossy_dng_load_raw)
C.maximum = 0xffff;
else if (load_raw == &LibRaw::sony_load_raw)
C.maximum = 0x3ff0;
}
#else
void LibRaw::fix_after_rawspeed(int)
{
}
#endif
void LibRaw::clearCancelFlag()
{
#ifdef WIN32
InterlockedExchange(&_exitflag, 0);
#else
__sync_fetch_and_and(&_exitflag, 0);
#endif
#ifdef RAWSPEED_FASTEXIT
if (_rawspeed_decoder)
{
RawDecoder *d = static_cast<RawDecoder*>(_rawspeed_decoder);
d->resumeProcessing();
}
#endif
}
void LibRaw::setCancelFlag()
{
#ifdef WIN32
InterlockedExchange(&_exitflag,1);
#else
__sync_fetch_and_add(&_exitflag,1);
#endif
#ifdef RAWSPEED_FASTEXIT
if(_rawspeed_decoder)
{
RawDecoder *d = static_cast<RawDecoder*>(_rawspeed_decoder);
d->cancelProcessing();
}
#endif
}
void LibRaw::checkCancel()
{
#ifdef WIN32
if(InterlockedExchange(&_exitflag,0))
throw LIBRAW_EXCEPTION_CANCELLED_BY_CALLBACK;
#else
if( __sync_fetch_and_and(&_exitflag,0))
throw LIBRAW_EXCEPTION_CANCELLED_BY_CALLBACK;
#endif
}
int LibRaw::unpack(void)
{
CHECK_ORDER_HIGH(LIBRAW_PROGRESS_LOAD_RAW);
CHECK_ORDER_LOW(LIBRAW_PROGRESS_IDENTIFY);
try {
if(!libraw_internal_data.internal_data.input)
return LIBRAW_INPUT_CLOSED;
RUN_CALLBACK(LIBRAW_PROGRESS_LOAD_RAW,0,2);
if (O.shot_select >= P1.raw_count)
return LIBRAW_REQUEST_FOR_NONEXISTENT_IMAGE;
if(!load_raw)
return LIBRAW_UNSPECIFIED_ERROR;
// already allocated ?
if(imgdata.image)
{
free(imgdata.image);
imgdata.image = 0;
}
if(imgdata.rawdata.raw_alloc)
{
free(imgdata.rawdata.raw_alloc);
imgdata.rawdata.raw_alloc = 0;
}
if (libraw_internal_data.unpacker_data.meta_length)
{
libraw_internal_data.internal_data.meta_data =
(char *) malloc (libraw_internal_data.unpacker_data.meta_length);
merror (libraw_internal_data.internal_data.meta_data, "LibRaw::unpack()");
}
libraw_decoder_info_t decoder_info;
get_decoder_info(&decoder_info);
int save_iwidth = S.iwidth, save_iheight = S.iheight, save_shrink = IO.shrink;
int rwidth = S.raw_width, rheight = S.raw_height;
if( !IO.fuji_width)
{
// adjust non-Fuji allocation
if(rwidth < S.width + S.left_margin)
rwidth = S.width + S.left_margin;
if(rheight < S.height + S.top_margin)
rheight = S.height + S.top_margin;
}
imgdata.rawdata.raw_image = 0;
imgdata.rawdata.color4_image = 0;
imgdata.rawdata.color3_image = 0;
#ifdef USE_RAWSPEED
( run in 0.344 second using v1.01-cache-2.11-cpan-9bca49b1385 )