Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibRawLite/src/libraw_datastream.cpp view on Meta::CPAN
3. LibRaw Software License 27032010
(See file LICENSE.LibRaw.pdf provided in LibRaw distribution archive for details).
*/
#ifdef WIN32
#ifdef __MINGW32__
#define _WIN32_WINNT 0x0500
#include <stdexcept>
#endif
#endif
#define LIBRAW_LIBRARY_BUILD
#include "libraw/libraw_types.h"
#include "libraw/libraw.h"
#include "libraw/libraw_datastream.h"
#include <sys/stat.h>
#ifdef USE_JASPER
#include <jasper/jasper.h> /* Decode RED camera movies */
#else
#define NO_JASPER
#endif
#ifdef USE_JPEG
#include <jpeglib.h>
#else
#define NO_JPEG
#endif
int LibRaw_abstract_datastream::tempbuffer_open(void *buf, size_t size)
{
if(substream) return EBUSY;
substream = new LibRaw_buffer_datastream(buf,size);
return substream?0:EINVAL;
}
void LibRaw_abstract_datastream::tempbuffer_close()
{
if(substream) delete substream;
substream = NULL;
}
// == LibRaw_file_datastream ==
LibRaw_file_datastream::~LibRaw_file_datastream()
{
if(jas_file) fclose(jas_file);
}
LibRaw_file_datastream::LibRaw_file_datastream(const char *fname)
:filename(fname)
#ifdef WIN32
,wfilename()
#endif
,jas_file(NULL),_fsize(0)
{
if (filename.size()>0)
{
#ifndef WIN32
struct stat st;
if(!stat(filename.c_str(),&st))
_fsize = st.st_size;
#else
struct _stati64 st;
if(!_stati64(filename.c_str(),&st))
_fsize = st.st_size;
#endif
std::auto_ptr<std::filebuf> buf(new std::filebuf());
buf->open(filename.c_str(), std::ios_base::in | std::ios_base::binary);
if (buf->is_open()) {
f = buf;
}
}
}
#if defined(_WIN32) && !defined(__MINGW32__) && defined(_MSC_VER) && (_MSC_VER > 1310)
LibRaw_file_datastream::LibRaw_file_datastream(const wchar_t *fname) : filename(),wfilename(fname),jas_file(NULL),_fsize(0)
{
if (wfilename.size()>0)
{
struct _stati64 st;
if(!_wstati64(wfilename.c_str(),&st))
_fsize = st.st_size;
std::auto_ptr<std::filebuf> buf(new std::filebuf());
buf->open(wfilename.c_str(), std::ios_base::in | std::ios_base::binary);
if (buf->is_open()) {
f = buf;
}
}
}
const wchar_t *LibRaw_file_datastream::wfname()
{
return wfilename.size()>0?wfilename.c_str():NULL;
}
#endif
int LibRaw_file_datastream::valid()
{
return f.get() ? 1 : 0;
}
#define LR_STREAM_CHK() do {if(!f.get()) throw LIBRAW_EXCEPTION_IO_EOF;}while(0)
int LibRaw_file_datastream::read(void * ptr,size_t size, size_t nmemb)
{
if(substream) return substream->read(ptr,size,nmemb);
/* Visual Studio 2008 marks sgetn as insecure, but VS2010 does not. */
#if defined(WIN32SECURECALLS) && (_MSC_VER < 1600)
LR_STREAM_CHK(); return int(f->_Sgetn_s(static_cast<char*>(ptr), nmemb * size,nmemb * size) / (size>0?size:1));
#else
LR_STREAM_CHK(); return int(f->sgetn(static_cast<char*>(ptr), std::streamsize(nmemb * size)) / (size>0?size:1));
#endif
}
int LibRaw_file_datastream::eof()
{
if(substream) return substream->eof();
LR_STREAM_CHK(); return f->sgetc() == EOF;
}
src/Source/LibRawLite/src/libraw_datastream.cpp view on Meta::CPAN
while(streampos<streamsize)
{
streampos++;
xcnt++;
if(buf[streampos] == 0
|| buf[streampos]==' '
|| buf[streampos]=='\t'
|| buf[streampos]=='\n'
|| xcnt>24)
break;
}
}
return scanf_res;
}
int LibRaw_buffer_datastream::eof()
{
if(substream) return substream->eof();
return streampos >= streamsize;
}
int LibRaw_buffer_datastream::valid()
{
return buf?1:0;
}
void * LibRaw_buffer_datastream::make_jas_stream()
{
#ifdef NO_JASPER
return NULL;
#else
return jas_stream_memopen((char*)buf+streampos,streamsize-streampos);
#endif
}
int LibRaw_buffer_datastream::jpeg_src(void *jpegdata)
{
#if defined(NO_JPEG) || !defined (USE_JPEG8)
return -1;
#else
j_decompress_ptr cinfo = (j_decompress_ptr) jpegdata;
jpeg_mem_src(cinfo,(unsigned char*)buf+streampos,streamsize-streampos);
return 0;
#endif
}
//int LibRaw_buffer_datastream
// == LibRaw_bigfile_datastream
LibRaw_bigfile_datastream::LibRaw_bigfile_datastream(const char *fname): filename(fname)
#ifdef WIN32
,wfilename()
#endif
{
if(filename.size()>0)
{
#ifndef WIN32
struct stat st;
if(!stat(filename.c_str(),&st))
_fsize = st.st_size;
#else
struct _stati64 st;
if(!_stati64(filename.c_str(),&st))
_fsize = st.st_size;
#endif
#ifndef WIN32SECURECALLS
f = fopen(fname,"rb");
#else
if(fopen_s(&f,fname,"rb"))
f = 0;
#endif
}
else
{filename=std::string();f=0;}
sav=0;
}
#if defined(_WIN32) && !defined(__MINGW32__) && defined(_MSC_VER) && (_MSC_VER > 1310)
LibRaw_bigfile_datastream::LibRaw_bigfile_datastream(const wchar_t *fname) : filename(),wfilename(fname)
{
if(wfilename.size()>0)
{
struct _stati64 st;
if(!_wstati64(wfilename.c_str(),&st))
_fsize = st.st_size;
#ifndef WIN32SECURECALLS
f = _wfopen(wfilename.c_str(),L"rb");
#else
if(_wfopen_s(&f,fname,L"rb"))
f = 0;
#endif
}
else
{
wfilename=std::wstring();
f=0;
}
sav=0;
}
const wchar_t *LibRaw_bigfile_datastream::wfname()
{
return wfilename.size()>0?wfilename.c_str():NULL;
}
#endif
LibRaw_bigfile_datastream::~LibRaw_bigfile_datastream() {if(f)fclose(f); if(sav)fclose(sav);}
int LibRaw_bigfile_datastream::valid() { return f?1:0;}
#define LR_BF_CHK() do {if(!f) throw LIBRAW_EXCEPTION_IO_EOF;}while(0)
int LibRaw_bigfile_datastream::read(void * ptr,size_t size, size_t nmemb)
{
LR_BF_CHK();
return substream?substream->read(ptr,size,nmemb):int(fread(ptr,size,nmemb,f));
}
int LibRaw_bigfile_datastream::eof()
{
( run in 1.304 second using v1.01-cache-2.11-cpan-5735350b133 )