📄 wavelet.h
字号:
#ifndef WAVELET_H
#define WAVELET_H
#include "wave.h"
#include "buffers.h"
#include <crblib/arithc.h>
typedef struct Wavelet Wavelet;
typedef struct SubBand SubBand;
struct SubBand
{
int width,height,stride,level;
void * band;
subBandType type;
Wavelet * wavelet;
float quantizer;
void *lastBand1,*lastBand2;
};
typedef struct
{
float * fplane; //maybe malloced
uint * iplane; //input
SubBand LL;
SubBand * bands[3];
} SubBandTree;
struct Wavelet
{
// parameters that must be sent:
float quantizer;
int width,height;
// derived values:
int dpcmLoss;
int levels;
float untransformedMSE[4];
ubyte *compPtr,*compAlloc;
int compLen;
arithInfo * ari;
SubBandTree trees[3];
RowBuffer * CodeBuffer[3];
RowBuffer * TransBufL,*TransBufH;
bool speculative;
int uses;
};
#define unpacksigns( v ) (( (v) & 1 ) ? ( - (int)((v)>>1) ) : (int)((v)>>1) )
#define packsigns( v ) (( (v) < 0 ) ? ( ((-(v))<<1) | 1 ) : ((v)<<1) )
#define CODEBUFFER_ROWS (3)
Wavelet * Wavelet_Create(void * planes[3],int width,int height);
void Wavelet_Destroy(Wavelet *w);
void Wavelet_Transform(Wavelet *w);
void Wavelet_Quantize(Wavelet *w,float q);
void Wavelet_UnTransformAndQuantize(Wavelet *w);
uint Wavelet_CompLen(Wavelet *w);
void Wavelet_WritePacketsToBuf(Wavelet *w,ubyte *buf);
void Wavelet_CodeToPackets(Wavelet *w);
void Wavelet_DecodeFromBuf(Wavelet *w,ubyte *buf,float q);
float SubBand_TotalUntransformScale(SubBand *sb,int levels);
void SubBand_Quantize(SubBand *sb,bool forward);
void SubBand_MakeLastBands(SubBand *sb);
void Wavelet_SetupQuantizers(Wavelet *w,float baseQ);
#endif // WAVELET_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -