2012-08-27 19:36:59 +02:00
|
|
|
#ifndef _TEX_COMP_H_
|
|
|
|
#define _TEX_COMP_H_
|
|
|
|
|
2012-08-28 00:34:37 +02:00
|
|
|
#include "CompressedImage.h"
|
|
|
|
|
2012-09-21 18:39:09 +02:00
|
|
|
// Forward declarations
|
|
|
|
class ImageFile;
|
|
|
|
class CompressedImage;
|
|
|
|
|
2012-08-28 00:34:37 +02:00
|
|
|
struct SCompressionSettings {
|
|
|
|
SCompressionSettings(); // defaults
|
2012-09-21 18:39:09 +02:00
|
|
|
|
|
|
|
// The compression format for the image.
|
2012-08-28 00:34:37 +02:00
|
|
|
ECompressionFormat format;
|
2012-09-21 18:39:09 +02:00
|
|
|
|
|
|
|
// The flag that requests us to use SIMD, if it is available
|
2012-08-28 00:34:37 +02:00
|
|
|
bool bUseSIMD;
|
2012-09-21 18:39:09 +02:00
|
|
|
|
|
|
|
// The number of threads to spawn in order to process the data
|
2012-08-28 00:34:37 +02:00
|
|
|
int iNumThreads;
|
2012-09-21 18:39:09 +02:00
|
|
|
|
|
|
|
// Some compression formats take a measurement of quality when
|
|
|
|
// compressing an image. If the format supports it, this value
|
|
|
|
// will be used for quality purposes.
|
2012-08-30 23:46:34 +02:00
|
|
|
int iQuality;
|
2012-09-21 18:39:09 +02:00
|
|
|
|
|
|
|
// The number of compressions to perform. The program will compress
|
|
|
|
// the image this many times, and then take the average of the timing.
|
2012-09-15 16:29:36 +02:00
|
|
|
int iNumCompressions;
|
2012-09-21 18:39:09 +02:00
|
|
|
|
|
|
|
// This setting measures the number of blocks that a thread
|
|
|
|
// will process at any given time. If this value is zero,
|
|
|
|
// which is the default, the work will be divided by the
|
|
|
|
// number of threads, and each thread will do it's job and
|
|
|
|
// exit.
|
|
|
|
int iJobSize;
|
2012-08-28 00:34:37 +02:00
|
|
|
};
|
|
|
|
|
2012-09-21 18:39:09 +02:00
|
|
|
extern bool CompressImageData(
|
|
|
|
const unsigned char *data,
|
|
|
|
const unsigned int dataSz,
|
|
|
|
unsigned char *cmpData,
|
|
|
|
const unsigned int cmpDataSz,
|
2012-08-28 00:34:37 +02:00
|
|
|
const SCompressionSettings &settings
|
|
|
|
);
|
|
|
|
|
2012-09-21 18:39:09 +02:00
|
|
|
// A compression function format. It takes the raw data and image dimensions and
|
|
|
|
// returns the compressed image data into outData. It is assumed that there is
|
|
|
|
// enough space allocated for outData to store the compressed data. Allocation
|
|
|
|
// is dependent on the compression format.
|
2012-08-28 00:34:37 +02:00
|
|
|
typedef void (* CompressionFunc)(
|
2012-09-21 18:39:09 +02:00
|
|
|
const unsigned char *inData, // Raw image data
|
|
|
|
unsigned char *outData, // Buffer to store compressed data.
|
|
|
|
unsigned int width, // Image width
|
|
|
|
unsigned int height // Image height
|
2012-08-28 00:34:37 +02:00
|
|
|
);
|
|
|
|
|
2012-09-21 18:39:09 +02:00
|
|
|
// This function computes the Peak Signal to Noise Ratio between a
|
|
|
|
// compressed image and a raw image.
|
|
|
|
extern double ComputePSNR(const CompressedImage &ci, const ImageFile &file);
|
2012-09-19 01:00:20 +02:00
|
|
|
|
2012-08-27 19:36:59 +02:00
|
|
|
#endif //_TEX_COMP_H_
|