Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TCACHEDLEVEL_INCLUDED
Toshihiro Shimizu 890ddd
#define TCACHEDLEVEL_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
   PER ORA SI PUO' USARE LA CACHE SOLO CON WINDOWS
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#include <windows.h></windows.h>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tfilepath.h"
Toshihiro Shimizu 890ddd
#include "traster.h"
Toshihiro Shimizu 890ddd
#include "tthread.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TRASTERIMAGE_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// forward declaration
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TRawDataCodec;
Toshihiro Shimizu 890ddd
class TRasterCodec;
Toshihiro Shimizu 890ddd
class TCachePersist;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
class TCache {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  TCache();
Toshihiro Shimizu 890ddd
  virtual ~TCache();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  bool isCached(int frame) const  = 0;
Toshihiro Shimizu 890ddd
  bool isCached(int starFrame, int endFrame) const  = 0; // estremi compresi
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  virtual void putRaster(int frame, const TRasterP &ras) = 0;
Toshihiro Shimizu 890ddd
  
Toshihiro Shimizu 890ddd
  virtual void getRaster(int frame, TRaster32P  &ras) const
Toshihiro Shimizu 890ddd
    { getRaster(frame, TRasterP(ras)); }
Toshihiro Shimizu 890ddd
  virtual void getRaster(int frame, TRaster64P  &ras) const
Toshihiro Shimizu 890ddd
    { getRaster(frame, TRasterP(ras)); }
Toshihiro Shimizu 890ddd
  virtual void getRaster(int frame, TRasterYUV422P &ras) const
Toshihiro Shimizu 890ddd
    { getRaster(frame, TRasterP(ras)); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void invalidateAll() = 0;
Toshihiro Shimizu 890ddd
  void invalidate(int starFrame, int endFrame) = 0; // estremi compresi
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
  virtual void getRaster(int frame, TRasterP &ras) const = 0;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TRamCache : public TCache {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TRamCache();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TDiskCache : public TCache {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TDiskCache();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TDiskCache::putRaster(int frame, const TRsterP &ras)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TDiskCache::getRaster(
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TRAMUncompressedCache : public TRamCache {
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TRAMLzoCache : public TRamCache {
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TDiskUncompressedCache : public TDiskCache {
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TDiskYUV422Cache : public TDiskCache {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TDiskYUV422Cache();
Toshihiro Shimizu 890ddd
  ~TDiskYUV422Cache();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void putRaster(int frame, const TRasterP &ras);
Toshihiro Shimizu 890ddd
  void getRaster(int frame, TRasterYUV422P &ras) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TRAMUncompressedCache::getRaster(int frame, TRasterP &ras) 
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
TRaster32P ras32(ras.getSize());
Toshihiro Shimizu 890ddd
getRaster(frame, ras32);
Toshihiro Shimizu 890ddd
convert(ras, ras32);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TRAMUncompressedCache::getRaster(int frame, TRaster32P  &ras) const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
//....
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TRasterCache
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TRasterCache(TCachePersist *cp);
Toshihiro Shimizu 890ddd
	virtual ~TRasterCache();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setMode(const TDimension &size, int bpp);
Toshihiro Shimizu 890ddd
	void getMode(TDimension &size, int &bpp) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TRasterP getRaster(int frame) const;
Toshihiro Shimizu 890ddd
	bool getBuffer(int frame, UCHAR *&buffer, int &wrap, int &bpp, TDimension &rasDim) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool getRaster(int frame, TRaster32P &ras) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void putRaster(int frame, const TRasterP &ras);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	UCHAR *getRawData(int frame, TINT32 &size, int &lx, int &ly) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isFrameCached(int frame) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void invalidate();
Toshihiro Shimizu 890ddd
	void invalidate(int startFrame, int endFrame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void enablePrefetch(bool newState);
Toshihiro Shimizu 890ddd
	bool isPrefetchEnabled() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TUINT64 getUsedSpace();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	//  virtual TRasterP doGetRaster(int frame) = 0;
Toshihiro Shimizu 890ddd
	//  virtual void doPutRaster(int frame, const TRasterP &ras) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	class Data;
Toshihiro Shimizu 890ddd
	Data *m_data;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TCachePersist
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TCachePersist(TRasterCodec *codec) : m_codec(codec) {}
Toshihiro Shimizu 890ddd
	virtual ~TCachePersist() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void setFrameSize(int lx, int ly, int bpp) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual TRasterP doGetRaster(int frame) = 0;
Toshihiro Shimizu 890ddd
	virtual bool doGetRaster(int frame, TRaster32P &ras) const = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual bool doPutRaster(int frame, const TRasterP &ras) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void onInvalidate() = 0;
Toshihiro Shimizu 890ddd
	virtual void onInvalidate(int startFrame, int endFrame) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual UCHAR *getRawData(int frame, TINT32 &size, int &lx, int &ly) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual TUINT64 getUsedSpace() = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//private:
Toshihiro Shimizu 890ddd
	TRasterCodec *m_codec;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TRamCachePersist : public TCachePersist
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TRamCachePersist(TRasterCodec *codec);
Toshihiro Shimizu 890ddd
	~TRamCachePersist();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setFrameSize(int lx, int ly, int bpp) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void onInvalidate();
Toshihiro Shimizu 890ddd
	void onInvalidate(int startFrame, int endFrame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	UCHAR *getRawData(int frame, TINT32 &size, int &lx, int &ly);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TUINT64 getUsedSpace();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	TRasterP doGetRaster(int frame);
Toshihiro Shimizu 890ddd
	bool doGetRaster(int frame, TRaster32P &ras) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool doPutRaster(int frame, const TRasterP &ras);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	class Imp;
Toshihiro Shimizu 890ddd
	Imp *m_imp;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TDiskCachePersist : public TCachePersist
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TDiskCachePersist(TRasterCodec *codec, const TFilePath &fullpath);
Toshihiro Shimizu 890ddd
	~TDiskCachePersist();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setFrameSize(int lx, int ly, int bpp);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void onInvalidate();
Toshihiro Shimizu 890ddd
	void onInvalidate(int startFrame, int endFrame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	UCHAR *getRawData(int frame, TINT32 &size, int &lx, int &ly);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TUINT64 getUsedSpace();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	TRasterP doGetRaster(int frame);
Toshihiro Shimizu 890ddd
	bool doGetRaster(int frame, TRaster32P &ras) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool doPutRaster(int frame, const TRasterP &ras);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	class Imp;
Toshihiro Shimizu 890ddd
	Imp *m_imp;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
// TDiskCachePersist2 usa il Direct File I/O (acceso al disco non bufferizzato)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TDiskCachePersist2 : public TCachePersist
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TDiskCachePersist2(TRasterCodec *codec, const TFilePath &fullpath);
Toshihiro Shimizu 890ddd
	~TDiskCachePersist2();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setFrameSize(int lx, int ly, int bpp);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void onInvalidate();
Toshihiro Shimizu 890ddd
	void onInvalidate(int startFrame, int endFrame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	UCHAR *getRawData(int frame, TINT32 &size, int &lx, int &ly);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TUINT64 getUsedSpace();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	TRasterP doGetRaster(int frame);
Toshihiro Shimizu 890ddd
	bool doGetRaster(int frame, TRaster32P &ras) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool doPutRaster(int frame, const TRasterP &ras);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	class Imp;
Toshihiro Shimizu 890ddd
	Imp *m_imp;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TCompressedLevel
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TCompressedLevel(const TFilePath &fullpath);
Toshihiro Shimizu 890ddd
	~TCompressedLevel();
Toshihiro Shimizu 890ddd
	void setSize(TDimension d);
Toshihiro Shimizu 890ddd
	void putImage(int frame, const TRaster32P &ras);
Toshihiro Shimizu 890ddd
	TRaster32P getImage(int frame);
Toshihiro Shimizu 890ddd
	void invalidate(int frame);
Toshihiro Shimizu 890ddd
	void invalidateAll();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	TCompressedLevel(); //not implemented
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TFilePath m_fullpath;
Toshihiro Shimizu 890ddd
	TRawDataCodec *m_codec;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int m_viewFrameMin,
Toshihiro Shimizu 890ddd
		m_viewFrameMax;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
	HANDLE m_hFile, m_hMap;
Toshihiro Shimizu 890ddd
	LPVOID m_fileMapAddress;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int m_xSize, m_ySize;
Toshihiro Shimizu 890ddd
	int m_frameSize;
Toshihiro Shimizu 890ddd
	SYSTEM_INFO m_systemInfo;
Toshihiro Shimizu 890ddd
	__int64 m_mapOffset;
Toshihiro Shimizu 890ddd
	static DWORD m_maxViewSize;
Toshihiro Shimizu 890ddd
	static DWORD m_maxFileSize;
Toshihiro Shimizu 890ddd
	static DWORD m_reallocFileSize;
Toshihiro Shimizu 890ddd
	//-------
Toshihiro Shimizu 890ddd
	HANDLE initFile(const TFilePath &fname);
Toshihiro Shimizu 890ddd
	HANDLE mapFile(HANDLE hFile, ULONGLONG size);
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static TThread::Mutex m_mutex;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setCurrentView(int frame, bool force = false);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif