146 lines
5.9 KiB
C
Raw Normal View History

2020-07-31 11:31:32 +08:00
//===============================================================================
// Copyright (c) 2007-2016 Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2004-2006 ATI Technologies Inc.
//===============================================================================
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
2020-07-31 11:31:32 +08:00
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
2020-07-31 11:31:32 +08:00
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#ifndef _3DQUANT_H_INCLUDED
#define _3DQUANT_H_INCLUDED
typedef struct {
double d;
int i;
} a;
void sortProjection(double projection[MAX_ENTRIES], int order[MAX_ENTRIES], int numEntries);
void covariance(double data[][DIMENSION], int numEntries, double cov[DIMENSION][DIMENSION]);
2020-07-31 11:31:32 +08:00
void centerInPlace(double data[][DIMENSION], int numEntries, double mean[DIMENSION]);
void project(double data[][DIMENSION], int numEntries, double vector[DIMENSION], double projection[MAX_ENTRIES]);
void sortProjection(double projection[MAX_ENTRIES], int order[MAX_ENTRIES], int numEntries);
void eigenVector(double cov[DIMENSION][DIMENSION], double vector[DIMENSION]);
double partition2 (double data[][DIMENSION], int numEntries,int index[]);
double optQuantEven(
double data[MAX_ENTRIES][DIMENSION],
2020-07-31 11:31:32 +08:00
int numEntries, int numClusters, int index[MAX_ENTRIES],
double out[MAX_ENTRIES][DIMENSION],
double direction [DIMENSION],double *step
) ;
2020-07-31 11:31:32 +08:00
double totalError(double data[MAX_ENTRIES][DIMENSION],double data2[MAX_ENTRIES][DIMENSION],int numEntries);
double totalError_d(double data[MAX_ENTRIES][MAX_DIMENSION_BIG],double data2[MAX_ENTRIES][MAX_DIMENSION_BIG],int numEntries, int dimension);
/****************************************************/
/****************************************************/
//
// Trace dirven continious quntizer
2020-07-31 11:31:32 +08:00
// traceBuilder/ allTrace builder should be called once first to initilize static trace (file static)
//
// returns resulting error
//
double optQuantTrace(
double data[MAX_ENTRIES][DIMENSION], // input data
int numEntries, // number of input points above (not clear about 1, better to avoid)
int numClusters, // number of clusters on the ramp, max 8 (not clear about 1, better to avoid)
2020-07-31 11:31:32 +08:00
int index[MAX_ENTRIES], // output index, if not all points of the ramp used, 0 may not be assigned
double out[MAX_ENTRIES][DIMENSION], // resulting quantization
double direction [DIMENSION], // direction vector of the ramp (check normalization)
double *step // step size (check normalization)
);
2020-07-31 11:31:32 +08:00
double optQuantTrace_d(
double data[MAX_ENTRIES][MAX_DIMENSION_BIG], // input data
int numEntries, // number of input points above (not clear about 1, better to avoid)
int numClusters, // number of clusters on the ramp, max 8 (not clear about 1, better to avoid)
2020-07-31 11:31:32 +08:00
int index[MAX_ENTRIES], // output index, if not all points of the ramp used, 0 may not be assigned
double out[MAX_ENTRIES][MAX_DIMENSION_BIG], // resulting quantization
double direction [MAX_DIMENSION_BIG], // direction vector of the ramp (check normalization)
double *step, // step size (check normalization)
2020-07-31 11:31:32 +08:00
int dimension);
/****************************************************/
/****************************************************/
/****************************************************/
//
// ping-pong style KATC type (but for RGB x 2) trace (with fallback to quantAnD (?) driven "continius" quantizer
2020-07-31 11:31:32 +08:00
//
double optQuant2Trace(
double data[MAX_ENTRIES][DIMENSION],
2020-07-31 11:31:32 +08:00
int numEntries, int numClusters, int index_[MAX_ENTRIES],
double out_[MAX_ENTRIES][DIMENSION],
double direction [DIMENSION],double *step
);
2020-07-31 11:31:32 +08:00
void printStep (void);
/********************************************/
// continious quantizer for 16 clusters, could use bette testing
double optQuantAnD(
double data[MAX_ENTRIES][DIMENSION], // 0-255
int numEntries, int numClusters, int index[MAX_ENTRIES],
double out[MAX_ENTRIES][DIMENSION],
double direction [DIMENSION],double *step
);
2020-07-31 11:31:32 +08:00
double optQuantAnD_d(
double data[MAX_ENTRIES][MAX_DIMENSION_BIG], // 0-255
int numEntries, int numClusters, int index[MAX_ENTRIES],
double out[MAX_ENTRIES][MAX_DIMENSION_BIG],
double direction [MAX_DIMENSION_BIG],double *step,
int dimension
);
2020-07-31 11:31:32 +08:00
/********************************************/
double superQuantAnD(
double data[MAX_ENTRIES][DIMENSION],
2020-07-31 11:31:32 +08:00
int numEntries, int numClusters, int index[MAX_ENTRIES],
double out[MAX_ENTRIES][DIMENSION],
double direction [DIMENSION],double *step
);
2020-07-31 11:31:32 +08:00
int reconstructGetDirConstr (
double data[MAX_ENTRIES][DIMENSION],
double mean[DIMENSION],
int numEntries,
2020-07-31 11:31:32 +08:00
int numClusters,
int index[MAX_ENTRIES],
double direction [DIMENSION],
double *step,
double *idxmean,
int clump
);
2020-07-31 11:31:32 +08:00
// New
void Quant_Init();
void Quant_DeInit();
// Externs
extern void init_ramps(void);
2020-07-31 11:31:32 +08:00
#endif
2020-07-31 11:31:32 +08:00