2020-07-31 11:31:32 +08:00
# ifndef _ASTC_ENCODE_KERNEL_H
# define _ASTC_ENCODE_KERNEL_H
/*----------------------------------------------------------------------------*/
/**
* This confidential and proprietary software may be used only as
* authorised by a licensing agreement from ARM Limited
* ( C ) COPYRIGHT 2011 - 2012 ARM Limited
* ALL RIGHTS RESERVED
*
* The entire notice above must be reproduced on all authorised
* copies and copies may only be made to the extent permitted
* by a licensing agreement from ARM Limited .
*
*/
/*----------------------------------------------------------------------------*/
//===========================================================================
// Copyright (c) 2014-2017 Advanced Micro Devices, Inc. All rights reserved.
//===========================================================================
# ifdef __OPENCL_VERSION__
// map to OpenCL definitions
typedef uchar4 auchar4 ;
typedef float3 afloat3 ;
# else
// when running kernel as cpu c++
2021-09-08 10:54:22 +08:00
# define __kernel
2020-07-31 11:31:32 +08:00
# define __global
# define __constant const
# define __local const
# include "stdio.h"
2021-09-08 10:54:22 +08:00
# include <math.h>
2020-07-31 11:31:32 +08:00
# include <algorithm> // std::max
2021-09-08 10:54:22 +08:00
struct Vec4uc {
2020-07-31 11:31:32 +08:00
Vec4uc ( ) { } ;
Vec4uc ( unsigned char s ) : x ( s ) , y ( s ) , z ( s ) , w ( s ) { }
Vec4uc ( unsigned char x , unsigned char y , unsigned char z , unsigned char w ) : x ( x ) , y ( y ) , z ( z ) , w ( w ) { }
unsigned char x , y , z , w ;
2021-09-08 10:54:22 +08:00
inline Vec4uc operator * ( unsigned char s ) const {
return Vec4uc ( x * s , y * s , z * s , w * s ) ;
}
inline Vec4uc operator ^ ( const Vec4uc & a ) const {
return Vec4uc ( x ^ a . x , y ^ a . y , z ^ a . z , w ^ a . w ) ;
}
inline Vec4uc operator & ( const Vec4uc & a ) const {
return Vec4uc ( x & a . x , y & a . y , z & a . z , w & a . w ) ;
}
inline bool operator = = ( const Vec4uc & a ) const {
return ( x = = a . x & & y = = a . y & & z = = a . z & & w = = a . w ) ;
}
inline Vec4uc operator + ( const Vec4uc & a ) const {
return Vec4uc ( x + a . x , y + a . y , z + a . z , w + a . w ) ;
}
2020-07-31 11:31:32 +08:00
} ;
2021-09-08 10:54:22 +08:00
struct afloat3 {
afloat3 ( ) {
x = 0 ;
y = 0 ;
z = 0 ;
} ;
2020-07-31 11:31:32 +08:00
afloat3 ( float s ) : x ( s ) , y ( s ) , z ( s ) { }
afloat3 ( float x , float y , float z ) : x ( x ) , y ( y ) , z ( z ) { }
float x , y , z ;
2021-09-08 10:54:22 +08:00
inline afloat3 operator * ( float s ) const {
return afloat3 ( x * s , y * s , z * s ) ;
}
inline float operator * ( const afloat3 & a ) const {
return ( ( x * a . x ) + ( y * a . y ) + ( z * a . z ) ) ;
}
inline afloat3 operator + ( const afloat3 & a ) const {
return afloat3 ( x + a . x , y + a . y , z + a . z ) ;
}
inline afloat3 operator - ( const afloat3 & a ) const {
return afloat3 ( x - a . x , y - a . y , z - a . z ) ;
}
2020-07-31 11:31:32 +08:00
} ;
# endif
2021-09-08 10:54:22 +08:00
namespace ASTC_Encoder {
2020-07-31 11:31:32 +08:00
# define ENABLE_3_PARTITION_CODE
# define ENABLE_4_PARTITION_CODE
// #define USE_RA_NORMAL_ANGULAR_SCALE
// #define USE_RGB_SCALE_WITH_ALPHA
// #define USE_PERFORMM_SRGB_TRANSFORM
# define ENABLE_64Bit_Support // See definitions of coverage_bitmaps in partition_info based on uint64_cl
# ifdef ENABLE_64Bit_Support
# define COVERAGE_BITMAPS_MAX 64
# else
# define COVERAGE_BITMAPS_MAX 32
# endif
// #define ASTC_ENABLE_3D_SUPPORT : Incomplete code do not enable!
# define FLOAT_n4 1e-4f
# define FLOAT_n7 1e-7f
# define FLOAT_n10 1e-10f
# define FLOAT_n11 1e-11f
# define FLOAT_n12 1e-12f
# define FLOAT_n17 1e-17f
# define FLOAT_n18 1e-18f
# define FLOAT_n20 1e-20f
# define FLOAT_n30 1e-30f
# define FLOAT_9 1e9f
# define FLOAT_10 1e10f
# define FLOAT_15 1e15f
# define FLOAT_20 1e20f
# define FLOAT_29 1e29f
# define FLOAT_30 1e30f
# define FLOAT_34 1e34f
# define FLOAT_35 1e35f
# define FLOAT_38 1e38f
# ifndef __OPENCL_VERSION__
# include "vectypes.h"
# define __constant const
2021-09-08 10:54:22 +08:00
# define __kernel
2020-07-31 11:31:32 +08:00
# define __global
# include <stdio.h> /* printf */
# include <math.h> /* floor */
# include <algorithm> // std::max
# ifndef M_PI
# define M_PI 3.14159265358979323846264338
# endif
typedef signed char int8_t ;
typedef int int32_t ;
typedef unsigned char uint8_t ;
typedef unsigned short uint16_t ;
typedef unsigned int uint32_t ;
# ifdef ENABLE_64Bit_Support
2021-09-08 10:54:22 +08:00
typedef unsigned long long uint64_cl ; // See notes on the definition should be 64bit
2020-07-31 11:31:32 +08:00
# else
typedef unsigned int uint64_cl ;
# endif
typedef unsigned short CGU_SHORT ;
typedef unsigned int CGU_UINT ;
# else
2021-09-08 10:54:22 +08:00
typedef signed char int8_t ;
typedef int int32_t ;
typedef unsigned char uint8_t ;
typedef unsigned short uint16_t ;
typedef unsigned int uint32_t ;
2020-07-31 11:31:32 +08:00
# ifdef ENABLE_64Bit_Support
2021-09-08 10:54:22 +08:00
typedef unsigned long long uint64_cl ;
2020-07-31 11:31:32 +08:00
# else
2021-09-08 10:54:22 +08:00
typedef unsigned int uint64_cl ; //# This should be 64 bits (currently set to 32 bits!) Ref code needs to change
2020-07-31 11:31:32 +08:00
# endif
2021-09-08 10:54:22 +08:00
typedef unsigned short CGU_SHORT ;
typedef unsigned int CGU_UINT ;
2020-07-31 11:31:32 +08:00
# endif // !
// Pixel format AABBGGRR, AA = Alpha 1 Byte BB = Blue, GG = Green, RR = Red
typedef ushort4 pixel_type ;
// The compressed and encoded block of pixels.
typedef struct {
uint32_t m_bits [ 4 ] ; // 128 bits
} encoded_block ;
// block of pixels
# define MAX_NUM_PIXELS_PER_BLOCK 144 // 12x12 pixels per block max
# define BYTES_PER_DESTINATION_BLOCK 16
# define BYTEPP 4 // Pixel = RGBA
# define TEXEL_WEIGHT_SUM 16
2021-09-08 10:54:22 +08:00
# define MAX_TEXELS_PER_BLOCK 216
2020-07-31 11:31:32 +08:00
# define MAX_TEXELS_PER_BLOCK4 864 // MAX_TEXELS_PER_BLOCK * 4
# define MAX_WEIGHTS_PER_BLOCK 64
# define MAX_DECIMATION_MODES 87
# define MAX_WEIGHT_MODES 2048
# define MIN_WEIGHT_BITS_PER_BLOCK 24
# define MAX_WEIGHT_BITS_PER_BLOCK 96
# define PARTITION_BITS 10 // 10
# define PARTITION_COUNT (1 << PARTITION_BITS) // for 10 bit = 1024
# define IGNOREPARAM(param) ((void)¶m)
2021-09-08 10:54:22 +08:00
typedef enum {
2020-07-31 11:31:32 +08:00
QUANT_2 = 0 ,
QUANT_3 = 1 ,
QUANT_4 = 2 ,
QUANT_5 = 3 ,
QUANT_6 = 4 ,
QUANT_8 = 5 ,
QUANT_10 = 6 ,
QUANT_12 = 7 ,
QUANT_16 = 8 ,
QUANT_20 = 9 ,
QUANT_24 = 10 ,
QUANT_32 = 11 ,
QUANT_40 = 12 ,
QUANT_48 = 13 ,
QUANT_64 = 14 ,
QUANT_80 = 15 ,
QUANT_96 = 16 ,
QUANT_128 = 17 ,
QUANT_160 = 18 ,
QUANT_192 = 19 ,
QUANT_256 = 20
} quantization_method ;
2021-09-08 10:54:22 +08:00
typedef enum {
2020-07-31 11:31:32 +08:00
FMT_LUMINANCE = 0 ,
FMT_LUMINANCE_DELTA = 1 ,
FMT_HDR_LUMINANCE_LARGE_RANGE = 2 ,
FMT_HDR_LUMINANCE_SMALL_RANGE = 3 ,
FMT_LUMINANCE_ALPHA = 4 ,
FMT_LUMINANCE_ALPHA_DELTA = 5 ,
FMT_RGB_SCALE = 6 ,
FMT_HDR_RGB_SCALE = 7 ,
FMT_RGB = 8 ,
FMT_RGB_DELTA = 9 ,
FMT_RGB_SCALE_ALPHA = 10 ,
FMT_HDR_RGB = 11 ,
FMT_RGBA = 12 ,
FMT_RGBA_DELTA = 13 ,
FMT_HDR_RGB_LDR_ALPHA = 14 ,
FMT_HDR_RGBA = 15 ,
} endpoint_formats ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
uint8_t data [ 16 ] ;
} physical_compressed_block ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
# ifndef __OPENCL_VERSION__
Vec4uc
# else
uchar4
# endif
pixels [ MAX_NUM_PIXELS_PER_BLOCK ] ;
int xsize ;
int ysize ;
int zsize ;
int padding ;
} astc_codec_image ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float orig_data [ MAX_TEXELS_PER_BLOCK4 ] ; // original input data
float work_data [ MAX_TEXELS_PER_BLOCK4 ] ; // the data that we will compress, either linear or LNS (0..65535 in both cases)
float deriv_data [ MAX_TEXELS_PER_BLOCK4 ] ; // derivative of the conversion function used, used ot modify error weighting
uint8_t rgb_lns [ MAX_TEXELS_PER_BLOCK4 ] ; // 1 if RGB data are being trated as LNS
uint8_t alpha_lns [ MAX_TEXELS_PER_BLOCK4 ] ; // 1 if Alpha data are being trated as LNS
uint8_t nan_texel [ MAX_TEXELS_PER_BLOCK4 ] ; // 1 if the texel is a NaN-texel.
float red_min , red_max ;
float green_min , green_max ;
float blue_min , blue_max ;
float alpha_min , alpha_max ;
int grayscale ; // 1 if R=G=B for every pixel, 0 otherwise
int xpos , ypos , zpos ; // remove this when removing CPU only code in fetch_imageblock
} imageblock ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float rgb_power ;
float rgb_base_weight ;
float rgb_mean_weight ;
float rgb_stdev_weight ;
float alpha_power ;
float alpha_base_weight ;
float alpha_mean_weight ;
float alpha_stdev_weight ;
float rgb_mean_and_stdev_mixing ;
int mean_stdev_radius ;
int enable_rgb_scale_with_alpha ;
int alpha_radius ;
int ra_normal_angular_scale ;
float block_artifact_suppression ;
float rgba_weights [ 4 ] ;
float block_artifact_suppression_expanded [ MAX_TEXELS_PER_BLOCK ] ;
// parameters that deal with heuristic codec speedups
int partition_search_limit ;
float block_mode_cutoff ;
float texel_avg_error_limit ;
float partition_1_to_2_limit ;
float lowest_correlation_cutoff ;
int max_refinement_iters ;
} error_weighting_params ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
int error_block ; // 1 marks error block, 0 marks non-error-block.
int block_mode ; // 0 to 2047. Negative value marks constant-color block (-1: FP16, -2:UINT16)
int partition_count ; // 1 to 4; Zero marks a constant-color block.
int partition_index ; // 0 to 1023
int color_formats [ 4 ] ; // color format for each endpoint color pair.
int color_formats_matched ; // color format for all endpoint pairs are matched.
int color_values [ 4 ] [ 12 ] ; // quantized endpoint color pairs.
int color_quantization_level ;
uint8_t plane1_weights [ MAX_WEIGHTS_PER_BLOCK ] ; // quantized and decimated weights
uint8_t plane2_weights [ MAX_WEIGHTS_PER_BLOCK ] ;
int plane2_color_component ; // color component for the secondary plane of weights
int constant_color [ 4 ] ; // constant-color, as FP16 or UINT16. Used for constant-color blocks only.
} symbolic_compressed_block ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float4 a ;
float4 b ;
} line4 ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float3 a ;
float3 b ;
} line3 ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float2 a ;
float2 b ;
} line2 ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float3 amod ;
float3 bs ;
float3 bis ;
} processed_line3 ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float2 amod ;
float2 bs ;
float2 bis ;
} processed_line2 ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float4 amod ;
float4 bs ;
float4 bis ;
} processed_line4 ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
int partition_count ;
float4 endpt0 [ 4 ] ;
float4 endpt1 [ 4 ] ;
} endpoints ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
endpoints ep ;
float weights [ MAX_TEXELS_PER_BLOCK ] ;
float weight_error_scale [ MAX_TEXELS_PER_BLOCK ] ;
} endpoints_and_weights ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
int num_texels ;
int num_weights ;
uint8_t texel_num_weights [ MAX_TEXELS_PER_BLOCK ] ; // number of indices that go into the calculation for a texel
uint8_t texel_weights_int [ MAX_TEXELS_PER_BLOCK ] [ 4 ] ; // the weight to assign to each weight
float texel_weights_float [ MAX_TEXELS_PER_BLOCK ] [ 4 ] ; // the weight to assign to each weight
uint8_t texel_weights [ MAX_TEXELS_PER_BLOCK ] [ 4 ] ; // the weights that go into a texel calculation
uint8_t weight_num_texels [ MAX_WEIGHTS_PER_BLOCK ] ; // the number of texels that a given weight contributes to
uint8_t weight_texel [ MAX_WEIGHTS_PER_BLOCK ] [ MAX_TEXELS_PER_BLOCK ] ; // the texels that the weight contributes to
uint8_t weights_int [ MAX_WEIGHTS_PER_BLOCK ] [ MAX_TEXELS_PER_BLOCK ] ; // the weights that the weight contributes to a texel.
float weights_flt [ MAX_WEIGHTS_PER_BLOCK ] [ MAX_TEXELS_PER_BLOCK ] ; // the weights that the weight contributes to a texel.
} decimation_table ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
int8_t decimation_mode ;
int8_t quantization_mode ;
int8_t is_dual_plane ;
int8_t permit_encode ;
int8_t permit_decode ;
float percentile ;
} t_block_mode ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
int decimation_mode_count ;
int decimation_mode_samples [ MAX_DECIMATION_MODES ] ;
int decimation_mode_maxprec_1plane [ MAX_DECIMATION_MODES ] ;
int decimation_mode_maxprec_2planes [ MAX_DECIMATION_MODES ] ;
float decimation_mode_percentile [ MAX_DECIMATION_MODES ] ;
int permit_encode [ MAX_DECIMATION_MODES ] ;
decimation_table decimation_tables [ MAX_DECIMATION_MODES + 1 ] ;
t_block_mode block_modes [ MAX_WEIGHT_MODES ] ;
// for the k-means bed bitmap partitioning algorithm, we don't
// want to consider more than 64 texels; this array specifies
// which 64 texels (if that many) to consider.
int texelcount_for_bitmap_partitioning ;
int texels_for_bitmap_partitioning [ 64 ] ;
} block_size_descriptor ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
int partition_count ;
uint8_t texels_per_partition [ 4 ] ;
uint8_t partition_of_texel [ MAX_TEXELS_PER_BLOCK ] ;
uint8_t texels_of_partition [ 4 ] [ MAX_TEXELS_PER_BLOCK ] ;
uint64_cl coverage_bitmaps [ 4 ] ; // used for the purposes of k-means partition search.
} partition_info ;
__constant uint8_t color_quantization_tables [ 21 ] [ 256 ] = {
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 0 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 ,
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 21 , 21 , 21 , 21 , 21 , 21 , 21 ,
21 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
23 , 23 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 25 , 25 , 25 , 25 , 25 , 25 ,
25 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 27 , 27 , 27 , 27 , 27 , 27 ,
27 , 27 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 29 , 29 , 29 , 29 , 29 ,
29 , 29 , 29 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 31 , 31 , 31 , 31 , 31 ,
} ,
{
0 , 0 , 0 , 0 , 8 , 8 , 8 , 8 , 8 , 8 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 24 , 24 , 24 , 24 , 24 , 24 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 2 , 2 ,
2 , 2 , 2 , 2 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 18 , 18 , 18 , 18 , 18 ,
18 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 34 , 34 , 34 , 34 , 34 , 34 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 12 , 12 , 12 , 12 , 12 , 12 , 20 , 20 , 20 , 20 , 20 ,
20 , 20 , 28 , 28 , 28 , 28 , 28 , 28 , 36 , 36 , 36 , 36 , 36 , 36 , 36 , 6 ,
6 , 6 , 6 , 6 , 6 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 22 , 22 , 22 , 22 ,
22 , 22 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 38 , 38 , 38 , 38 , 38 , 38 , 38 ,
39 , 39 , 39 , 39 , 39 , 39 , 39 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 23 , 23 ,
23 , 23 , 23 , 23 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 7 , 7 , 7 , 7 , 7 ,
7 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 29 , 29 , 29 , 29 , 29 , 29 , 21 , 21 ,
21 , 21 , 21 , 21 , 21 , 13 , 13 , 13 , 13 , 13 , 13 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 35 , 35 , 35 , 35 , 35 , 35 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 19 ,
19 , 19 , 19 , 19 , 19 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 3 , 3 , 3 , 3 ,
3 , 3 , 33 , 33 , 33 , 33 , 33 , 33 , 33 , 25 , 25 , 25 , 25 , 25 , 25 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 9 , 9 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 16 , 16 , 16 , 16 , 16 , 16 , 32 , 32 , 32 , 32 , 32 , 2 , 2 ,
2 , 2 , 2 , 18 , 18 , 18 , 18 , 18 , 18 , 34 , 34 , 34 , 34 , 34 , 4 , 4 ,
4 , 4 , 4 , 4 , 20 , 20 , 20 , 20 , 20 , 36 , 36 , 36 , 36 , 36 , 6 , 6 ,
6 , 6 , 6 , 6 , 22 , 22 , 22 , 22 , 22 , 38 , 38 , 38 , 38 , 38 , 38 , 8 ,
8 , 8 , 8 , 8 , 24 , 24 , 24 , 24 , 24 , 24 , 40 , 40 , 40 , 40 , 40 , 10 ,
10 , 10 , 10 , 10 , 26 , 26 , 26 , 26 , 26 , 26 , 42 , 42 , 42 , 42 , 42 , 12 ,
12 , 12 , 12 , 12 , 12 , 28 , 28 , 28 , 28 , 28 , 44 , 44 , 44 , 44 , 44 , 14 ,
14 , 14 , 14 , 14 , 14 , 30 , 30 , 30 , 30 , 30 , 46 , 46 , 46 , 46 , 46 , 46 ,
47 , 47 , 47 , 47 , 47 , 47 , 31 , 31 , 31 , 31 , 31 , 15 , 15 , 15 , 15 , 15 ,
15 , 45 , 45 , 45 , 45 , 45 , 29 , 29 , 29 , 29 , 29 , 13 , 13 , 13 , 13 , 13 ,
13 , 43 , 43 , 43 , 43 , 43 , 27 , 27 , 27 , 27 , 27 , 27 , 11 , 11 , 11 , 11 ,
11 , 41 , 41 , 41 , 41 , 41 , 25 , 25 , 25 , 25 , 25 , 25 , 9 , 9 , 9 , 9 ,
9 , 39 , 39 , 39 , 39 , 39 , 39 , 23 , 23 , 23 , 23 , 23 , 7 , 7 , 7 , 7 ,
7 , 7 , 37 , 37 , 37 , 37 , 37 , 21 , 21 , 21 , 21 , 21 , 5 , 5 , 5 , 5 ,
5 , 5 , 35 , 35 , 35 , 35 , 35 , 19 , 19 , 19 , 19 , 19 , 19 , 3 , 3 , 3 ,
3 , 3 , 33 , 33 , 33 , 33 , 33 , 17 , 17 , 17 , 17 , 17 , 17 , 1 , 1 , 1 ,
} ,
{
0 , 0 , 0 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 ,
4 , 4 , 4 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 8 ,
8 , 8 , 8 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 12 ,
12 , 12 , 12 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 16 ,
16 , 16 , 16 , 16 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 ,
20 , 20 , 20 , 20 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 ,
24 , 24 , 24 , 24 , 25 , 25 , 25 , 25 , 26 , 26 , 26 , 26 , 27 , 27 , 27 , 27 ,
28 , 28 , 28 , 28 , 29 , 29 , 29 , 29 , 30 , 30 , 30 , 30 , 31 , 31 , 31 , 31 ,
32 , 32 , 32 , 32 , 33 , 33 , 33 , 33 , 34 , 34 , 34 , 34 , 35 , 35 , 35 , 35 ,
36 , 36 , 36 , 36 , 37 , 37 , 37 , 37 , 38 , 38 , 38 , 38 , 39 , 39 , 39 , 39 ,
40 , 40 , 40 , 40 , 41 , 41 , 41 , 41 , 42 , 42 , 42 , 42 , 43 , 43 , 43 , 43 ,
44 , 44 , 44 , 44 , 45 , 45 , 45 , 45 , 46 , 46 , 46 , 46 , 47 , 47 , 47 , 47 ,
47 , 48 , 48 , 48 , 48 , 49 , 49 , 49 , 49 , 50 , 50 , 50 , 50 , 51 , 51 , 51 ,
51 , 52 , 52 , 52 , 52 , 53 , 53 , 53 , 53 , 54 , 54 , 54 , 54 , 55 , 55 , 55 ,
55 , 56 , 56 , 56 , 56 , 57 , 57 , 57 , 57 , 58 , 58 , 58 , 58 , 59 , 59 , 59 ,
59 , 60 , 60 , 60 , 60 , 61 , 61 , 61 , 61 , 62 , 62 , 62 , 62 , 63 , 63 , 63 ,
} ,
{
0 , 0 , 16 , 16 , 16 , 32 , 32 , 32 , 48 , 48 , 48 , 48 , 64 , 64 , 64 , 2 ,
2 , 2 , 18 , 18 , 18 , 34 , 34 , 34 , 50 , 50 , 50 , 50 , 66 , 66 , 66 , 4 ,
4 , 4 , 20 , 20 , 20 , 36 , 36 , 36 , 36 , 52 , 52 , 52 , 68 , 68 , 68 , 6 ,
6 , 6 , 22 , 22 , 22 , 38 , 38 , 38 , 38 , 54 , 54 , 54 , 70 , 70 , 70 , 8 ,
8 , 8 , 24 , 24 , 24 , 24 , 40 , 40 , 40 , 56 , 56 , 56 , 72 , 72 , 72 , 10 ,
10 , 10 , 26 , 26 , 26 , 26 , 42 , 42 , 42 , 58 , 58 , 58 , 74 , 74 , 74 , 12 ,
12 , 12 , 12 , 28 , 28 , 28 , 44 , 44 , 44 , 60 , 60 , 60 , 76 , 76 , 76 , 14 ,
14 , 14 , 14 , 30 , 30 , 30 , 46 , 46 , 46 , 62 , 62 , 62 , 78 , 78 , 78 , 78 ,
79 , 79 , 79 , 79 , 63 , 63 , 63 , 47 , 47 , 47 , 31 , 31 , 31 , 15 , 15 , 15 ,
15 , 77 , 77 , 77 , 61 , 61 , 61 , 45 , 45 , 45 , 29 , 29 , 29 , 13 , 13 , 13 ,
13 , 75 , 75 , 75 , 59 , 59 , 59 , 43 , 43 , 43 , 27 , 27 , 27 , 27 , 11 , 11 ,
11 , 73 , 73 , 73 , 57 , 57 , 57 , 41 , 41 , 41 , 25 , 25 , 25 , 25 , 9 , 9 ,
9 , 71 , 71 , 71 , 55 , 55 , 55 , 39 , 39 , 39 , 39 , 23 , 23 , 23 , 7 , 7 ,
7 , 69 , 69 , 69 , 53 , 53 , 53 , 37 , 37 , 37 , 37 , 21 , 21 , 21 , 5 , 5 ,
5 , 67 , 67 , 67 , 51 , 51 , 51 , 51 , 35 , 35 , 35 , 19 , 19 , 19 , 3 , 3 ,
3 , 65 , 65 , 65 , 49 , 49 , 49 , 49 , 33 , 33 , 33 , 17 , 17 , 17 , 1 , 1 ,
} ,
{
0 , 0 , 32 , 32 , 64 , 64 , 64 , 2 , 2 , 2 , 34 , 34 , 66 , 66 , 66 , 4 ,
4 , 4 , 36 , 36 , 68 , 68 , 68 , 6 , 6 , 6 , 38 , 38 , 70 , 70 , 70 , 8 ,
8 , 8 , 40 , 40 , 40 , 72 , 72 , 10 , 10 , 10 , 42 , 42 , 42 , 74 , 74 , 12 ,
12 , 12 , 44 , 44 , 44 , 76 , 76 , 14 , 14 , 14 , 46 , 46 , 46 , 78 , 78 , 16 ,
16 , 16 , 48 , 48 , 48 , 80 , 80 , 80 , 18 , 18 , 50 , 50 , 50 , 82 , 82 , 82 ,
20 , 20 , 52 , 52 , 52 , 84 , 84 , 84 , 22 , 22 , 54 , 54 , 54 , 86 , 86 , 86 ,
24 , 24 , 56 , 56 , 56 , 88 , 88 , 88 , 26 , 26 , 58 , 58 , 58 , 90 , 90 , 90 ,
28 , 28 , 60 , 60 , 60 , 92 , 92 , 92 , 30 , 30 , 62 , 62 , 62 , 94 , 94 , 94 ,
95 , 95 , 95 , 63 , 63 , 63 , 31 , 31 , 93 , 93 , 93 , 61 , 61 , 61 , 29 , 29 ,
91 , 91 , 91 , 59 , 59 , 59 , 27 , 27 , 89 , 89 , 89 , 57 , 57 , 57 , 25 , 25 ,
87 , 87 , 87 , 55 , 55 , 55 , 23 , 23 , 85 , 85 , 85 , 53 , 53 , 53 , 21 , 21 ,
83 , 83 , 83 , 51 , 51 , 51 , 19 , 19 , 81 , 81 , 81 , 49 , 49 , 49 , 17 , 17 ,
17 , 79 , 79 , 47 , 47 , 47 , 15 , 15 , 15 , 77 , 77 , 45 , 45 , 45 , 13 , 13 ,
13 , 75 , 75 , 43 , 43 , 43 , 11 , 11 , 11 , 73 , 73 , 41 , 41 , 41 , 9 , 9 ,
9 , 71 , 71 , 71 , 39 , 39 , 7 , 7 , 7 , 69 , 69 , 69 , 37 , 37 , 5 , 5 ,
5 , 67 , 67 , 67 , 35 , 35 , 3 , 3 , 3 , 65 , 65 , 65 , 33 , 33 , 1 , 1 ,
} ,
{
0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 ,
8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 13 , 13 , 14 , 14 , 15 , 15 ,
16 , 16 , 17 , 17 , 18 , 18 , 19 , 19 , 20 , 20 , 21 , 21 , 22 , 22 , 23 , 23 ,
24 , 24 , 25 , 25 , 26 , 26 , 27 , 27 , 28 , 28 , 29 , 29 , 30 , 30 , 31 , 31 ,
32 , 32 , 33 , 33 , 34 , 34 , 35 , 35 , 36 , 36 , 37 , 37 , 38 , 38 , 39 , 39 ,
40 , 40 , 41 , 41 , 42 , 42 , 43 , 43 , 44 , 44 , 45 , 45 , 46 , 46 , 47 , 47 ,
48 , 48 , 49 , 49 , 50 , 50 , 51 , 51 , 52 , 52 , 53 , 53 , 54 , 54 , 55 , 55 ,
56 , 56 , 57 , 57 , 58 , 58 , 59 , 59 , 60 , 60 , 61 , 61 , 62 , 62 , 63 , 63 ,
64 , 64 , 65 , 65 , 66 , 66 , 67 , 67 , 68 , 68 , 69 , 69 , 70 , 70 , 71 , 71 ,
72 , 72 , 73 , 73 , 74 , 74 , 75 , 75 , 76 , 76 , 77 , 77 , 78 , 78 , 79 , 79 ,
80 , 80 , 81 , 81 , 82 , 82 , 83 , 83 , 84 , 84 , 85 , 85 , 86 , 86 , 87 , 87 ,
88 , 88 , 89 , 89 , 90 , 90 , 91 , 91 , 92 , 92 , 93 , 93 , 94 , 94 , 95 , 95 ,
96 , 96 , 97 , 97 , 98 , 98 , 99 , 99 , 100 , 100 , 101 , 101 , 102 , 102 , 103 , 103 ,
104 , 104 , 105 , 105 , 106 , 106 , 107 , 107 , 108 , 108 , 109 , 109 , 110 , 110 , 111 , 111 ,
112 , 112 , 113 , 113 , 114 , 114 , 115 , 115 , 116 , 116 , 117 , 117 , 118 , 118 , 119 , 119 ,
120 , 120 , 121 , 121 , 122 , 122 , 123 , 123 , 124 , 124 , 125 , 125 , 126 , 126 , 127 , 127 ,
} ,
{
0 , 32 , 32 , 64 , 96 , 96 , 128 , 128 , 2 , 34 , 34 , 66 , 98 , 98 , 130 , 130 ,
4 , 36 , 36 , 68 , 100 , 100 , 132 , 132 , 6 , 38 , 38 , 70 , 102 , 102 , 134 , 134 ,
8 , 40 , 40 , 72 , 104 , 104 , 136 , 136 , 10 , 42 , 42 , 74 , 106 , 106 , 138 , 138 ,
12 , 44 , 44 , 76 , 108 , 108 , 140 , 140 , 14 , 46 , 46 , 78 , 110 , 110 , 142 , 142 ,
16 , 48 , 48 , 80 , 112 , 112 , 144 , 144 , 18 , 50 , 50 , 82 , 114 , 114 , 146 , 146 ,
20 , 52 , 52 , 84 , 116 , 116 , 148 , 148 , 22 , 54 , 54 , 86 , 118 , 118 , 150 , 150 ,
24 , 56 , 56 , 88 , 120 , 120 , 152 , 152 , 26 , 58 , 58 , 90 , 122 , 122 , 154 , 154 ,
28 , 60 , 60 , 92 , 124 , 124 , 156 , 156 , 30 , 62 , 62 , 94 , 126 , 126 , 158 , 158 ,
159 , 159 , 127 , 127 , 95 , 63 , 63 , 31 , 157 , 157 , 125 , 125 , 93 , 61 , 61 , 29 ,
155 , 155 , 123 , 123 , 91 , 59 , 59 , 27 , 153 , 153 , 121 , 121 , 89 , 57 , 57 , 25 ,
151 , 151 , 119 , 119 , 87 , 55 , 55 , 23 , 149 , 149 , 117 , 117 , 85 , 53 , 53 , 21 ,
147 , 147 , 115 , 115 , 83 , 51 , 51 , 19 , 145 , 145 , 113 , 113 , 81 , 49 , 49 , 17 ,
143 , 143 , 111 , 111 , 79 , 47 , 47 , 15 , 141 , 141 , 109 , 109 , 77 , 45 , 45 , 13 ,
139 , 139 , 107 , 107 , 75 , 43 , 43 , 11 , 137 , 137 , 105 , 105 , 73 , 41 , 41 , 9 ,
135 , 135 , 103 , 103 , 71 , 39 , 39 , 7 , 133 , 133 , 101 , 101 , 69 , 37 , 37 , 5 ,
131 , 131 , 99 , 99 , 67 , 35 , 35 , 3 , 129 , 129 , 97 , 97 , 65 , 33 , 33 , 1 ,
} ,
{
0 , 64 , 128 , 128 , 2 , 66 , 130 , 130 , 4 , 68 , 132 , 132 , 6 , 70 , 134 , 134 ,
8 , 72 , 136 , 136 , 10 , 74 , 138 , 138 , 12 , 76 , 140 , 140 , 14 , 78 , 142 , 142 ,
16 , 80 , 144 , 144 , 18 , 82 , 146 , 146 , 20 , 84 , 148 , 148 , 22 , 86 , 150 , 150 ,
24 , 88 , 152 , 152 , 26 , 90 , 154 , 154 , 28 , 92 , 156 , 156 , 30 , 94 , 158 , 158 ,
32 , 96 , 160 , 160 , 34 , 98 , 162 , 162 , 36 , 100 , 164 , 164 , 38 , 102 , 166 , 166 ,
40 , 104 , 168 , 168 , 42 , 106 , 170 , 170 , 44 , 108 , 172 , 172 , 46 , 110 , 174 , 174 ,
48 , 112 , 176 , 176 , 50 , 114 , 178 , 178 , 52 , 116 , 180 , 180 , 54 , 118 , 182 , 182 ,
56 , 120 , 184 , 184 , 58 , 122 , 186 , 186 , 60 , 124 , 188 , 188 , 62 , 126 , 190 , 190 ,
191 , 191 , 127 , 63 , 189 , 189 , 125 , 61 , 187 , 187 , 123 , 59 , 185 , 185 , 121 , 57 ,
183 , 183 , 119 , 55 , 181 , 181 , 117 , 53 , 179 , 179 , 115 , 51 , 177 , 177 , 113 , 49 ,
175 , 175 , 111 , 47 , 173 , 173 , 109 , 45 , 171 , 171 , 107 , 43 , 169 , 169 , 105 , 41 ,
167 , 167 , 103 , 39 , 165 , 165 , 101 , 37 , 163 , 163 , 99 , 35 , 161 , 161 , 97 , 33 ,
159 , 159 , 95 , 31 , 157 , 157 , 93 , 29 , 155 , 155 , 91 , 27 , 153 , 153 , 89 , 25 ,
151 , 151 , 87 , 23 , 149 , 149 , 85 , 21 , 147 , 147 , 83 , 19 , 145 , 145 , 81 , 17 ,
143 , 143 , 79 , 15 , 141 , 141 , 77 , 13 , 139 , 139 , 75 , 11 , 137 , 137 , 73 , 9 ,
135 , 135 , 71 , 7 , 133 , 133 , 69 , 5 , 131 , 131 , 67 , 3 , 129 , 129 , 65 , 1 ,
} ,
{
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ,
16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ,
32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 ,
48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 ,
64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 ,
80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 ,
96 , 97 , 98 , 99 , 100 , 101 , 102 , 103 , 104 , 105 , 106 , 107 , 108 , 109 , 110 , 111 ,
112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , 123 , 124 , 125 , 126 , 127 ,
128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 141 , 142 , 143 ,
144 , 145 , 146 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 ,
160 , 161 , 162 , 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 ,
176 , 177 , 178 , 179 , 180 , 181 , 182 , 183 , 184 , 185 , 186 , 187 , 188 , 189 , 190 , 191 ,
192 , 193 , 194 , 195 , 196 , 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 ,
208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 , 216 , 217 , 218 , 219 , 220 , 221 , 222 , 223 ,
224 , 225 , 226 , 227 , 228 , 229 , 230 , 231 , 232 , 233 , 234 , 235 , 236 , 237 , 238 , 239 ,
240 , 241 , 242 , 243 , 244 , 245 , 246 , 247 , 248 , 249 , 250 , 251 , 252 , 253 , 254 , 255 ,
} ,
} ;
__constant uint8_t color_unquantization_tables [ 21 ] [ 256 ] = {
{
0 , 255 ,
} ,
{
0 , 128 , 255 ,
} ,
{
0 , 85 , 170 , 255 ,
} ,
{
0 , 64 , 128 , 192 , 255 ,
} ,
{
0 , 255 , 51 , 204 , 102 , 153 ,
} ,
{
0 , 36 , 73 , 109 , 146 , 182 , 219 , 255 ,
} ,
{
0 , 255 , 28 , 227 , 56 , 199 , 84 , 171 , 113 , 142 ,
} ,
{
0 , 255 , 69 , 186 , 23 , 232 , 92 , 163 , 46 , 209 , 116 , 139 ,
} ,
{
0 , 17 , 34 , 51 , 68 , 85 , 102 , 119 , 136 , 153 , 170 , 187 , 204 , 221 , 238 , 255 ,
} ,
{
0 , 255 , 67 , 188 , 13 , 242 , 80 , 175 , 27 , 228 , 94 , 161 , 40 , 215 , 107 , 148 ,
54 , 201 , 121 , 134 ,
} ,
{
0 , 255 , 33 , 222 , 66 , 189 , 99 , 156 , 11 , 244 , 44 , 211 , 77 , 178 , 110 , 145 ,
22 , 233 , 55 , 200 , 88 , 167 , 121 , 134 ,
} ,
{
0 , 8 , 16 , 24 , 33 , 41 , 49 , 57 , 66 , 74 , 82 , 90 , 99 , 107 , 115 , 123 ,
132 , 140 , 148 , 156 , 165 , 173 , 181 , 189 , 198 , 206 , 214 , 222 , 231 , 239 , 247 , 255 ,
} ,
{
0 , 255 , 32 , 223 , 65 , 190 , 97 , 158 , 6 , 249 , 39 , 216 , 71 , 184 , 104 , 151 ,
13 , 242 , 45 , 210 , 78 , 177 , 110 , 145 , 19 , 236 , 52 , 203 , 84 , 171 , 117 , 138 ,
26 , 229 , 58 , 197 , 91 , 164 , 123 , 132 ,
} ,
{
0 , 255 , 16 , 239 , 32 , 223 , 48 , 207 , 65 , 190 , 81 , 174 , 97 , 158 , 113 , 142 ,
5 , 250 , 21 , 234 , 38 , 217 , 54 , 201 , 70 , 185 , 86 , 169 , 103 , 152 , 119 , 136 ,
11 , 244 , 27 , 228 , 43 , 212 , 59 , 196 , 76 , 179 , 92 , 163 , 108 , 147 , 124 , 131 ,
} ,
{
0 , 4 , 8 , 12 , 16 , 20 , 24 , 28 , 32 , 36 , 40 , 44 , 48 , 52 , 56 , 60 ,
65 , 69 , 73 , 77 , 81 , 85 , 89 , 93 , 97 , 101 , 105 , 109 , 113 , 117 , 121 , 125 ,
130 , 134 , 138 , 142 , 146 , 150 , 154 , 158 , 162 , 166 , 170 , 174 , 178 , 182 , 186 , 190 ,
195 , 199 , 203 , 207 , 211 , 215 , 219 , 223 , 227 , 231 , 235 , 239 , 243 , 247 , 251 , 255 ,
} ,
{
0 , 255 , 16 , 239 , 32 , 223 , 48 , 207 , 64 , 191 , 80 , 175 , 96 , 159 , 112 , 143 ,
3 , 252 , 19 , 236 , 35 , 220 , 51 , 204 , 67 , 188 , 83 , 172 , 100 , 155 , 116 , 139 ,
6 , 249 , 22 , 233 , 38 , 217 , 54 , 201 , 71 , 184 , 87 , 168 , 103 , 152 , 119 , 136 ,
9 , 246 , 25 , 230 , 42 , 213 , 58 , 197 , 74 , 181 , 90 , 165 , 106 , 149 , 122 , 133 ,
13 , 242 , 29 , 226 , 45 , 210 , 61 , 194 , 77 , 178 , 93 , 162 , 109 , 146 , 125 , 130 ,
} ,
{
0 , 255 , 8 , 247 , 16 , 239 , 24 , 231 , 32 , 223 , 40 , 215 , 48 , 207 , 56 , 199 ,
64 , 191 , 72 , 183 , 80 , 175 , 88 , 167 , 96 , 159 , 104 , 151 , 112 , 143 , 120 , 135 ,
2 , 253 , 10 , 245 , 18 , 237 , 26 , 229 , 35 , 220 , 43 , 212 , 51 , 204 , 59 , 196 ,
67 , 188 , 75 , 180 , 83 , 172 , 91 , 164 , 99 , 156 , 107 , 148 , 115 , 140 , 123 , 132 ,
5 , 250 , 13 , 242 , 21 , 234 , 29 , 226 , 37 , 218 , 45 , 210 , 53 , 202 , 61 , 194 ,
70 , 185 , 78 , 177 , 86 , 169 , 94 , 161 , 102 , 153 , 110 , 145 , 118 , 137 , 126 , 129 ,
} ,
{
0 , 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , 22 , 24 , 26 , 28 , 30 ,
32 , 34 , 36 , 38 , 40 , 42 , 44 , 46 , 48 , 50 , 52 , 54 , 56 , 58 , 60 , 62 ,
64 , 66 , 68 , 70 , 72 , 74 , 76 , 78 , 80 , 82 , 84 , 86 , 88 , 90 , 92 , 94 ,
96 , 98 , 100 , 102 , 104 , 106 , 108 , 110 , 112 , 114 , 116 , 118 , 120 , 122 , 124 , 126 ,
129 , 131 , 133 , 135 , 137 , 139 , 141 , 143 , 145 , 147 , 149 , 151 , 153 , 155 , 157 , 159 ,
161 , 163 , 165 , 167 , 169 , 171 , 173 , 175 , 177 , 179 , 181 , 183 , 185 , 187 , 189 , 191 ,
193 , 195 , 197 , 199 , 201 , 203 , 205 , 207 , 209 , 211 , 213 , 215 , 217 , 219 , 221 , 223 ,
225 , 227 , 229 , 231 , 233 , 235 , 237 , 239 , 241 , 243 , 245 , 247 , 249 , 251 , 253 , 255 ,
} ,
{
0 , 255 , 8 , 247 , 16 , 239 , 24 , 231 , 32 , 223 , 40 , 215 , 48 , 207 , 56 , 199 ,
64 , 191 , 72 , 183 , 80 , 175 , 88 , 167 , 96 , 159 , 104 , 151 , 112 , 143 , 120 , 135 ,
1 , 254 , 9 , 246 , 17 , 238 , 25 , 230 , 33 , 222 , 41 , 214 , 49 , 206 , 57 , 198 ,
65 , 190 , 73 , 182 , 81 , 174 , 89 , 166 , 97 , 158 , 105 , 150 , 113 , 142 , 121 , 134 ,
3 , 252 , 11 , 244 , 19 , 236 , 27 , 228 , 35 , 220 , 43 , 212 , 51 , 204 , 59 , 196 ,
67 , 188 , 75 , 180 , 83 , 172 , 91 , 164 , 99 , 156 , 107 , 148 , 115 , 140 , 123 , 132 ,
4 , 251 , 12 , 243 , 20 , 235 , 28 , 227 , 36 , 219 , 44 , 211 , 52 , 203 , 60 , 195 ,
68 , 187 , 76 , 179 , 84 , 171 , 92 , 163 , 100 , 155 , 108 , 147 , 116 , 139 , 124 , 131 ,
6 , 249 , 14 , 241 , 22 , 233 , 30 , 225 , 38 , 217 , 46 , 209 , 54 , 201 , 62 , 193 ,
70 , 185 , 78 , 177 , 86 , 169 , 94 , 161 , 102 , 153 , 110 , 145 , 118 , 137 , 126 , 129 ,
} ,
{
0 , 255 , 4 , 251 , 8 , 247 , 12 , 243 , 16 , 239 , 20 , 235 , 24 , 231 , 28 , 227 ,
32 , 223 , 36 , 219 , 40 , 215 , 44 , 211 , 48 , 207 , 52 , 203 , 56 , 199 , 60 , 195 ,
64 , 191 , 68 , 187 , 72 , 183 , 76 , 179 , 80 , 175 , 84 , 171 , 88 , 167 , 92 , 163 ,
96 , 159 , 100 , 155 , 104 , 151 , 108 , 147 , 112 , 143 , 116 , 139 , 120 , 135 , 124 , 131 ,
1 , 254 , 5 , 250 , 9 , 246 , 13 , 242 , 17 , 238 , 21 , 234 , 25 , 230 , 29 , 226 ,
33 , 222 , 37 , 218 , 41 , 214 , 45 , 210 , 49 , 206 , 53 , 202 , 57 , 198 , 61 , 194 ,
65 , 190 , 69 , 186 , 73 , 182 , 77 , 178 , 81 , 174 , 85 , 170 , 89 , 166 , 93 , 162 ,
97 , 158 , 101 , 154 , 105 , 150 , 109 , 146 , 113 , 142 , 117 , 138 , 121 , 134 , 125 , 130 ,
2 , 253 , 6 , 249 , 10 , 245 , 14 , 241 , 18 , 237 , 22 , 233 , 26 , 229 , 30 , 225 ,
34 , 221 , 38 , 217 , 42 , 213 , 46 , 209 , 50 , 205 , 54 , 201 , 58 , 197 , 62 , 193 ,
66 , 189 , 70 , 185 , 74 , 181 , 78 , 177 , 82 , 173 , 86 , 169 , 90 , 165 , 94 , 161 ,
98 , 157 , 102 , 153 , 106 , 149 , 110 , 145 , 114 , 141 , 118 , 137 , 122 , 133 , 126 , 129 ,
} ,
{
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ,
16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ,
32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 ,
48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 ,
64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 ,
80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 ,
96 , 97 , 98 , 99 , 100 , 101 , 102 , 103 , 104 , 105 , 106 , 107 , 108 , 109 , 110 , 111 ,
112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , 123 , 124 , 125 , 126 , 127 ,
128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 141 , 142 , 143 ,
144 , 145 , 146 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 ,
160 , 161 , 162 , 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 ,
176 , 177 , 178 , 179 , 180 , 181 , 182 , 183 , 184 , 185 , 186 , 187 , 188 , 189 , 190 , 191 ,
192 , 193 , 194 , 195 , 196 , 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 ,
208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 , 216 , 217 , 218 , 219 , 220 , 221 , 222 , 223 ,
224 , 225 , 226 , 227 , 228 , 229 , 230 , 231 , 232 , 233 , 234 , 235 , 236 , 237 , 238 , 239 ,
240 , 241 , 242 , 243 , 244 , 245 , 246 , 247 , 248 , 249 , 250 , 251 , 252 , 253 , 254 , 255 ,
} ,
} ;
2021-09-08 10:54:22 +08:00
typedef enum {
2020-07-31 11:31:32 +08:00
DECODE_LDR_SRGB ,
DECODE_LDR ,
DECODE_HDR
} astc_decode_mode ;
/*
data structure describing information that pertains to a block size and its associated block modes .
*/
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
int8_t decimation_mode ;
int8_t quantization_mode ;
int8_t is_dual_plane ;
int8_t permit_encode ;
int8_t permit_decode ;
float percentile ;
} block_mode ;
__constant uint8_t cbytes1 [ 8 ] = { 0xFC , 0xFD , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF } ;
__constant uint8_t cbytes2 [ 8 ] = { 0xFC , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF } ;
//__constant int block_mode_histogram[2048];
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float4 error_weights [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_gba [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_rba [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_rga [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_rgb [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_rg [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_rb [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_gb [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_ra [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_r [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_g [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_b [ MAX_TEXELS_PER_BLOCK ] ;
float texel_weight_a [ MAX_TEXELS_PER_BLOCK ] ;
int contains_zeroweight_texels ;
2021-09-08 10:54:22 +08:00
} error_weight_block ;
2020-07-31 11:31:32 +08:00
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float4 error_weights [ MAX_TEXELS_PER_BLOCK ] ;
2021-09-08 10:54:22 +08:00
} error_weight_block_orig ;
2020-07-31 11:31:32 +08:00
/* the five rounding modes that IEEE-754r defines */
2021-09-08 10:54:22 +08:00
typedef enum {
2020-07-31 11:31:32 +08:00
SF_UP = 0 , /* round towards positive infinity */
SF_DOWN = 1 , /* round towards negative infinity */
SF_TOZERO = 2 , /* round towards zero */
SF_NEARESTEVEN = 3 , /* round toward nearest value; if mid-between, round to even value */
SF_NEARESTAWAY = 4 /* round toward nearest value; if mid-between, round away from zero */
} roundmode ;
2021-09-08 10:54:22 +08:00
typedef union if32_ {
2020-07-31 11:31:32 +08:00
uint32_t u ;
int32_t s ;
float f ;
} if32 ;
__constant float angular_steppings [ ] = {
1.0 , 1.125 ,
1.25 , 1.375 ,
1.5 , 1.625 ,
1.75 , 1.875 ,
2.0 , 2.25 , 2.5 , 2.75 ,
3.0 , 3.25 , 3.5 , 3.75 ,
4.0 , 4.25 , 4.5 , 4.75 ,
5.0 , 5.25 , 5.5 , 5.75 ,
6.0 , 6.25 , 6.5 , 6.75 ,
7.0 , 7.25 , 7.5 , 7.75 ,
8.0 , 8.5 ,
9.0 , 9.5 ,
10.0 , 10.5 ,
11.0 , 11.5 ,
12.0 , 12.5 ,
13.0 , 13.5 ,
14.0 , 14.5 ,
15.0 , 15.5 ,
16.0 , 16.5 ,
17.0 , 17.5 ,
18.0 , 18.5 ,
19.0 , 19.5 ,
20.0 , 20.5 ,
21.0 , 21.5 ,
22.0 , 22.5 ,
23.0 , 23.5 ,
24.0 , 24.5 ,
25.0 , 25.5 ,
26.0 , 26.5 ,
27.0 , 27.5 ,
28.0 , 28.5 ,
29.0 , 29.5 ,
30.0 , 30.5 ,
31.0 , 31.5 ,
32.0 , 32.5 ,
33.0 , 33.5 ,
34.0 , 34.5 ,
35.0 , 35.5 ,
} ;
# define ANGULAR_STEPS ((int)(sizeof(angular_steppings) / sizeof(angular_steppings[0])))
# define SINCOS_STEPS 64
//=============================================
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float2 v [ 2 ] ;
} mat2t ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float4 v [ 4 ] ;
} mat4t ;
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
float rgb_scale_error ; // error of using LDR RGB-scale instead of complete endpoints.
float rgb_luma_error ; // error of using HDR RGB-scale instead of complete endpoints.
float luminance_error ; // error of using luminance instead of RGB
float alpha_drop_error ; // error of discarding alpha
float rgb_drop_error ; // error of discarding rgb
int can_offset_encode ;
int can_blue_contract ;
} encoding_choice_errors ;
/*
In ASTC , we support relatively many combinations of weight precisions and weight transfer functions .
As such , for each combination we support , we have a hardwired data structure .
This structure provides the following information : A table , used to estimate the closest quantized
weight for a given floating - point weight . For each quantized weight , the corresponding unquantized
and floating - point values . For each quantized weight , a previous - value and a next - value .
*/
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
quantization_method method ;
uint8_t unquantized_value [ 32 ] ; // 0..64
float unquantized_value_flt [ 32 ] ; // 0..1
uint8_t prev_quantized_value [ 32 ] ;
uint8_t next_quantized_value [ 32 ] ;
uint8_t closest_quantized_weight [ 1025 ] ;
} quantization_and_transfer_table ;
__constant quantization_and_transfer_table quant_and_xfer_tables [ 12 ] = {
// quantization method 0, range 0..1
{
2021-09-08 10:54:22 +08:00
QUANT_2 ,
{ 0 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0.000000 , 1.000000 ,
0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ,
0.0 , 0 , 0.0 , 0 , 0.0 , 0.0 , 0 , 0.0 , 0.0 , 0 , 0.0 , 0.0 , 0.0 , 0.0
} ,
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 1, range 0..2
{
2021-09-08 10:54:22 +08:00
QUANT_3 ,
{ 0 , 32 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 0.000000 , 0.500000 , 1.000000 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 1 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 2, range 0..3
{
2021-09-08 10:54:22 +08:00
QUANT_4 ,
{ 0 , 21 , 43 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 0.000000 , 0.328125 , 0.671875 , 1.000000 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 0 , 0 , 1 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 1 , 2 , 3 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 3, range 0..4
{
QUANT_5 ,
{ 0 , 16 , 32 , 48 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
2021-09-08 10:54:22 +08:00
0.000000 , 0.250000 , 0.500000 , 0.750000 , 1.000000 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 0 , 1 , 2 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 1 , 2 , 3 , 4 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 4, range 0..5
{
QUANT_6 ,
{ 0 , 64 , 12 , 52 , 25 , 39 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
2021-09-08 10:54:22 +08:00
0.000000 , 1.000000 , 0.187500 , 0.812500 , 0.390625 , 0.609375 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 3 , 0 , 5 , 2 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 2 , 1 , 4 , 1 , 5 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 5, range 0..7
{
QUANT_8 ,
{ 0 , 9 , 18 , 27 , 37 , 46 , 55 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
2021-09-08 10:54:22 +08:00
0.000000 , 0.140625 , 0.281250 , 0.421875 , 0.578125 , 0.718750 , 0.859375 , 1.000000 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 6, range 0..9
{
QUANT_10 ,
{ 0 , 64 , 7 , 57 , 14 , 50 , 21 , 43 , 28 , 36 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0.000000 , 1.000000 , 0.109375 , 0.890625 ,
0.218750 , 0.781250 , 0.328125 , 0.671875 ,
2021-09-08 10:54:22 +08:00
0.437500 , 0.562500 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 3 , 0 , 5 , 2 , 7 , 4 , 9 , 6 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 2 , 1 , 4 , 1 , 6 , 3 , 8 , 5 , 9 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 7, range 0..11
{
QUANT_12 ,
{ 0 , 64 , 17 , 47 , 5 , 59 , 23 , 41 , 11 , 53 , 28 , 36 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0.000000 , 1.000000 , 0.265625 , 0.734375 ,
0.078125 , 0.921875 , 0.359375 , 0.640625 ,
2021-09-08 10:54:22 +08:00
0.171875 , 0.828125 , 0.437500 , 0.562500 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 5 , 8 , 7 , 0 , 9 , 2 , 11 , 4 , 3 , 6 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 4 , 1 , 6 , 9 , 8 , 1 , 10 , 3 , 2 , 5 , 11 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 8, range 0..15
{
QUANT_16 ,
{ 0 , 4 , 8 , 12 , 17 , 21 , 25 , 29 , 35 , 39 , 43 , 47 , 52 , 56 , 60 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0.000000 , 0.062500 , 0.125000 , 0.187500 ,
0.265625 , 0.328125 , 0.390625 , 0.453125 ,
0.546875 , 0.609375 , 0.671875 , 0.734375 ,
2021-09-08 10:54:22 +08:00
0.812500 , 0.875000 , 0.937500 , 1.000000 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 9, range 0..19
{
QUANT_20 ,
{ 0 , 64 , 16 , 48 , 3 , 61 , 19 , 45 , 6 , 58 , 23 , 41 , 9 , 55 , 26 , 38 , 13 , 51 , 29 , 35 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0.000000 , 1.000000 , 0.250000 , 0.750000 ,
0.046875 , 0.953125 , 0.296875 , 0.703125 ,
0.093750 , 0.906250 , 0.359375 , 0.640625 ,
0.140625 , 0.859375 , 0.406250 , 0.593750 ,
2021-09-08 10:54:22 +08:00
0.203125 , 0.796875 , 0.453125 , 0.546875 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 5 , 16 , 7 , 0 , 9 , 2 , 11 , 4 , 13 , 6 , 15 , 8 , 17 , 10 , 19 , 12 , 3 , 14 , 18 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 4 , 1 , 6 , 17 , 8 , 1 , 10 , 3 , 12 , 5 , 14 , 7 , 16 , 9 , 18 , 11 , 2 , 13 , 19 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 10, range 0..23
{
QUANT_24 ,
{ 0 , 64 , 8 , 56 , 16 , 48 , 24 , 40 , 2 , 62 , 11 , 53 , 19 , 45 , 27 , 37 , 5 , 59 , 13 , 51 , 22 , 42 , 30 , 34 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0.000000 , 1.000000 , 0.125000 , 0.875000 ,
0.250000 , 0.750000 , 0.375000 , 0.625000 ,
0.031250 , 0.968750 , 0.171875 , 0.828125 ,
0.296875 , 0.703125 , 0.421875 , 0.578125 ,
0.078125 , 0.921875 , 0.203125 , 0.796875 ,
2021-09-08 10:54:22 +08:00
0.343750 , 0.656250 , 0.468750 , 0.531250 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ,
{ 0 , 9 , 16 , 11 , 18 , 13 , 20 , 15 , 0 , 17 , 2 , 19 , 4 , 21 , 6 , 23 , 8 , 3 , 10 , 5 , 12 , 7 , 14 , 22 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ 8 , 1 , 10 , 17 , 12 , 19 , 14 , 21 , 16 , 1 , 18 , 3 , 20 , 5 , 22 , 7 , 2 , 9 , 4 , 11 , 6 , 13 , 23 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 20 , 20 , 20 , 20 , 20 , 20 , 20 ,
20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 ,
20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 ,
20 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 22 , 22 , 22 , 22 , 22 , 22 , 22 ,
22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 ,
22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 ,
22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 ,
22 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 ,
21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 ,
21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
// quantization method 11, range 0..31
{
QUANT_32 ,
{ 0 , 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , 22 , 24 , 26 , 28 , 30 , 34 , 36 , 38 , 40 , 42 , 44 , 46 , 48 , 50 , 52 , 54 , 56 , 58 , 60 , 62 , 64 , } ,
{
0.000000 , 0.031250 , 0.062500 , 0.093750 ,
0.125000 , 0.156250 , 0.187500 , 0.218750 ,
0.250000 , 0.281250 , 0.312500 , 0.343750 ,
0.375000 , 0.406250 , 0.437500 , 0.468750 ,
0.531250 , 0.562500 , 0.593750 , 0.625000 ,
0.656250 , 0.687500 , 0.718750 , 0.750000 ,
0.781250 , 0.812500 , 0.843750 , 0.875000 ,
2021-09-08 10:54:22 +08:00
0.906250 , 0.937500 , 0.968750 , 1.000000 ,
} ,
{ 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , } ,
{ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 31 , } ,
{
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
6 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
7 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 ,
8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 ,
12 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 ,
14 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
16 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ,
17 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 ,
18 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 ,
19 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 ,
20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 ,
20 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 ,
21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 ,
21 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 ,
22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 ,
22 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 ,
23 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 ,
24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 ,
24 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 ,
25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 ,
25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 ,
26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 ,
26 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 ,
27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 27 ,
27 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 ,
28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 , 28 ,
28 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 ,
29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 , 29 ,
29 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 ,
30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 ,
30 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ,
31 ,
} ,
2020-07-31 11:31:32 +08:00
} ,
} ;
// packed trit-value for every unpacked trit-quintuplet
// indexed by [high][][][][low]
__constant uint8_t integer_of_trits [ 3 ] [ 3 ] [ 3 ] [ 3 ] [ 3 ] = {
{
{
{
{ 0 , 1 , 2 , } ,
{ 4 , 5 , 6 , } ,
{ 8 , 9 , 10 , } ,
} ,
{
{ 16 , 17 , 18 , } ,
{ 20 , 21 , 22 , } ,
{ 24 , 25 , 26 , } ,
} ,
{
{ 3 , 7 , 15 , } ,
{ 19 , 23 , 27 , } ,
{ 12 , 13 , 14 , } ,
} ,
} ,
{
{
{ 32 , 33 , 34 , } ,
{ 36 , 37 , 38 , } ,
{ 40 , 41 , 42 , } ,
} ,
{
{ 48 , 49 , 50 , } ,
{ 52 , 53 , 54 , } ,
{ 56 , 57 , 58 , } ,
} ,
{
{ 35 , 39 , 47 , } ,
{ 51 , 55 , 59 , } ,
{ 44 , 45 , 46 , } ,
} ,
} ,
{
{
{ 64 , 65 , 66 , } ,
{ 68 , 69 , 70 , } ,
{ 72 , 73 , 74 , } ,
} ,
{
{ 80 , 81 , 82 , } ,
{ 84 , 85 , 86 , } ,
{ 88 , 89 , 90 , } ,
} ,
{
{ 67 , 71 , 79 , } ,
{ 83 , 87 , 91 , } ,
{ 76 , 77 , 78 , } ,
} ,
} ,
} ,
{
{
{
{ 128 , 129 , 130 , } ,
{ 132 , 133 , 134 , } ,
{ 136 , 137 , 138 , } ,
} ,
{
{ 144 , 145 , 146 , } ,
{ 148 , 149 , 150 , } ,
{ 152 , 153 , 154 , } ,
} ,
{
{ 131 , 135 , 143 , } ,
{ 147 , 151 , 155 , } ,
{ 140 , 141 , 142 , } ,
} ,
} ,
{
{
{ 160 , 161 , 162 , } ,
{ 164 , 165 , 166 , } ,
{ 168 , 169 , 170 , } ,
} ,
{
{ 176 , 177 , 178 , } ,
{ 180 , 181 , 182 , } ,
{ 184 , 185 , 186 , } ,
} ,
{
{ 163 , 167 , 175 , } ,
{ 179 , 183 , 187 , } ,
{ 172 , 173 , 174 , } ,
} ,
} ,
{
{
{ 192 , 193 , 194 , } ,
{ 196 , 197 , 198 , } ,
{ 200 , 201 , 202 , } ,
} ,
{
{ 208 , 209 , 210 , } ,
{ 212 , 213 , 214 , } ,
{ 216 , 217 , 218 , } ,
} ,
{
{ 195 , 199 , 207 , } ,
{ 211 , 215 , 219 , } ,
{ 204 , 205 , 206 , } ,
} ,
} ,
} ,
{
{
{
{ 96 , 97 , 98 , } ,
{ 100 , 101 , 102 , } ,
{ 104 , 105 , 106 , } ,
} ,
{
{ 112 , 113 , 114 , } ,
{ 116 , 117 , 118 , } ,
{ 120 , 121 , 122 , } ,
} ,
{
{ 99 , 103 , 111 , } ,
{ 115 , 119 , 123 , } ,
{ 108 , 109 , 110 , } ,
} ,
} ,
{
{
{ 224 , 225 , 226 , } ,
{ 228 , 229 , 230 , } ,
{ 232 , 233 , 234 , } ,
} ,
{
{ 240 , 241 , 242 , } ,
{ 244 , 245 , 246 , } ,
{ 248 , 249 , 250 , } ,
} ,
{
{ 227 , 231 , 239 , } ,
{ 243 , 247 , 251 , } ,
{ 236 , 237 , 238 , } ,
} ,
} ,
{
{
{ 28 , 29 , 30 , } ,
{ 60 , 61 , 62 , } ,
{ 92 , 93 , 94 , } ,
} ,
{
{ 156 , 157 , 158 , } ,
{ 188 , 189 , 190 , } ,
{ 220 , 221 , 222 , } ,
} ,
{
{ 31 , 63 , 127 , } ,
{ 159 , 191 , 255 , } ,
{ 252 , 253 , 254 , } ,
} ,
} ,
} ,
} ;
// packed quint-value for every unpacked quint-triplet
// indexed by [high][middle][low]
__constant uint8_t integer_of_quints [ 5 ] [ 5 ] [ 5 ] = {
{
{ 0 , 1 , 2 , 3 , 4 , } ,
{ 8 , 9 , 10 , 11 , 12 , } ,
{ 16 , 17 , 18 , 19 , 20 , } ,
{ 24 , 25 , 26 , 27 , 28 , } ,
{ 5 , 13 , 21 , 29 , 6 , } ,
} ,
{
{ 32 , 33 , 34 , 35 , 36 , } ,
{ 40 , 41 , 42 , 43 , 44 , } ,
{ 48 , 49 , 50 , 51 , 52 , } ,
{ 56 , 57 , 58 , 59 , 60 , } ,
{ 37 , 45 , 53 , 61 , 14 , } ,
} ,
{
{ 64 , 65 , 66 , 67 , 68 , } ,
{ 72 , 73 , 74 , 75 , 76 , } ,
{ 80 , 81 , 82 , 83 , 84 , } ,
{ 88 , 89 , 90 , 91 , 92 , } ,
{ 69 , 77 , 85 , 93 , 22 , } ,
} ,
{
{ 96 , 97 , 98 , 99 , 100 , } ,
{ 104 , 105 , 106 , 107 , 108 , } ,
{ 112 , 113 , 114 , 115 , 116 , } ,
{ 120 , 121 , 122 , 123 , 124 , } ,
{ 101 , 109 , 117 , 125 , 30 , } ,
} ,
{
{ 102 , 103 , 70 , 71 , 38 , } ,
{ 110 , 111 , 78 , 79 , 46 , } ,
{ 118 , 119 , 86 , 87 , 54 , } ,
{ 126 , 127 , 94 , 95 , 62 , } ,
{ 39 , 47 , 55 , 63 , 31 , } ,
} ,
} ;
__constant float baseline_quant_error [ 21 ] = {
( 65536.0f * 65536.0f / 18.0f ) , // 2 values, 1 step
( 65536.0f * 65536.0f / 18.0f ) / ( 2 * 2 ) , // 3 values, 2 steps
( 65536.0f * 65536.0f / 18.0f ) / ( 3 * 3 ) , // 4 values, 3 steps
( 65536.0f * 65536.0f / 18.0f ) / ( 4 * 4 ) , // 5 values
( 65536.0f * 65536.0f / 18.0f ) / ( 5 * 5 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 7 * 7 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 9 * 9 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 11 * 11 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 15 * 15 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 19 * 19 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 23 * 23 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 31 * 31 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 39 * 39 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 47 * 47 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 63 * 63 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 79 * 79 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 95 * 95 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 127 * 127 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 159 * 159 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 191 * 191 ) ,
( 65536.0f * 65536.0f / 18.0f ) / ( 255 * 255 )
} ;
__constant float rgbo_error_scales [ 6 ] = { 4.0f , 4.0f , 16.0f , 64.0f , 256.0f , 1024.0f } ;
__constant float rgb_error_scales [ 9 ] = { 64.0f , 64.0f , 16.0f , 16.0f , 4.0f , 4.0f , 1.0f , 1.0f , 384.0f } ;
__constant int shamts [ 6 ] = { 1 , 1 , 2 , 3 , 4 , 5 } ;
__constant int dbits_tab [ 8 ] = { 7 , 6 , 7 , 6 , 5 , 6 , 5 , 6 } ;
/* for each possible sign/exponent combination, store a case index. This gives a 512-byte table */
__constant uint8_t tab [ 512 ] = {
0 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 ,
20 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 ,
30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 30 , 40 ,
40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 ,
40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 ,
40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 ,
40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 ,
40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 ,
40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 ,
40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 40 , 50 ,
5 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 15 , 15 , 15 , 15 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 ,
25 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 ,
35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 35 , 45 ,
45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 ,
45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 ,
45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 ,
45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 ,
45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 ,
45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 ,
45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 45 , 55 ,
} ;
/* many of the cases below use a case-dependent magic constant. So we look up a magic constant before actually performing the switch. This table allows us to group cases, thereby minimizing code
size . */
__constant uint32_t tabx [ 60 ] = {
( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x80000000 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) ,
( uint32_t ) ( 1 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8001 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) ,
( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) , ( uint32_t ) ( 0x8000 ) ,
( uint32_t ) ( 0xC8001FFF ) , ( uint32_t ) ( 0xC8000000 ) , ( uint32_t ) ( 0xC8000000 ) , ( uint32_t ) ( 0xC8000FFF ) , ( uint32_t ) ( 0xC8001000 ) ,
( uint32_t ) ( 0x58000000 ) , ( uint32_t ) ( 0x38001FFF ) , ( uint32_t ) ( 0x58000000 ) , ( uint32_t ) ( 0x58000FFF ) , ( uint32_t ) ( 0x58001000 ) ,
( uint32_t ) ( 0x7C00 ) , ( uint32_t ) ( 0x7BFF ) , ( uint32_t ) ( 0x7BFF ) , ( uint32_t ) ( 0x7C00 ) , ( uint32_t ) ( 0x7C00 ) ,
( uint32_t ) ( 0xFBFF ) , ( uint32_t ) ( 0xFC00 ) , ( uint32_t ) ( 0xFBFF ) , ( uint32_t ) ( 0xFC00 ) , ( uint32_t ) ( 0xFC00 ) ,
( uint32_t ) ( 0x90000000 ) , ( uint32_t ) ( 0x90000000 ) , ( uint32_t ) ( 0x90000000 ) , ( uint32_t ) ( 0x90000000 ) , ( uint32_t ) ( 0x90000000 ) ,
( uint32_t ) ( 0x20000000 ) , ( uint32_t ) ( 0x20000000 ) , ( uint32_t ) ( 0x20000000 ) , ( uint32_t ) ( 0x20000000 ) , ( uint32_t ) ( 0x20000000 )
} ;
/*
This table contains , for every FP16 sign / exponent value combination ,
the difference between the input FP16 value and the value obtained
by shifting the correct FP32 result right by 13 bits .
This table allows us to handle every case except denormals and NaN
with just 1 table lookup , 2 shifts and 1 add .
*/
2021-09-08 10:54:22 +08:00
__constant int32_t tbl [ 64 ] = {
( int32_t ) 0x80000000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 ,
( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 ,
( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 ,
( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x1C000 , ( int32_t ) 0x80038000 ,
( int32_t ) 0x80038000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 ,
( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 ,
( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 ,
( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x54000 , ( int32_t ) 0x80070000
2020-07-31 11:31:32 +08:00
} ;
// weight + 12
__constant unsigned int idxtab [ 256 ] = {
12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 ,
20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 ,
28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 ,
36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 ,
44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 ,
52 , 53 , 54 , 55 , 55 , 55 , 55 , 55 ,
55 , 55 , 55 , 55 , 55 , 55 , 55 , 55 ,
55 , 55 , 55 , 55 , 55 , 55 , 55 , 55 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 ,
4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ,
12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 ,
20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 ,
28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 ,
36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 ,
44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 ,
52 , 53 , 54 , 55 , 55 , 55 , 55 , 55 ,
55 , 55 , 55 , 55 , 55 , 55 , 55 , 55 ,
55 , 55 , 55 , 55 , 55 , 55 , 55 , 55 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 ,
4 , 5 , 6 , 7 , 8 , 9 , 10 , 11
} ;
__constant float dummy_percentile_table_3d [ 2048 ] = { 0 } ;
// yes, the next-to-last entry is supposed to have the value 33. This because under
// ASTC, the the 32-weight mode leaves a double-sized hole in the middle of the
// weight space, so we are better off matching 33 weights than 32.
__constant int steps_of_level [ ] = { 2 , 3 , 4 , 5 , 6 , 8 , 10 , 12 , 16 , 20 , 24 , 33 , 36 } ;
__constant float quantization_step_table [ 12 ] = {
1.0f / 1.0f ,
1.0f / 2.0f ,
1.0f / 3.0f ,
1.0f / 4.0f ,
1.0f / 5.0f ,
1.0f / 7.0f ,
1.0f / 9.0f ,
1.0f / 11.0f ,
1.0f / 15.0f ,
1.0f / 19.0f ,
1.0f / 23.0f ,
1.0f / 31.0f ,
} ;
// number of bits in the various fields in the various modes
__constant int mode_bits [ 8 ] [ 4 ] = {
{ 9 , 7 , 6 , 7 } ,
{ 9 , 8 , 6 , 6 } ,
{ 10 , 6 , 7 , 7 } ,
{ 10 , 7 , 7 , 6 } ,
{ 11 , 8 , 6 , 5 } ,
{ 11 , 6 , 8 , 6 } ,
{ 12 , 7 , 7 , 5 } ,
{ 12 , 6 , 7 , 6 }
} ;
// cutoffs to use for the computed values of a,b,c,d, assuming the
// range 0..65535 are LNS values corresponding to fp16.
__constant float mode_cutoffs [ 8 ] [ 4 ] = {
{ 16384 , 8192 , 8192 , 8 } , // mode 0: 9,7,6,7
{ 32768 , 8192 , 4096 , 8 } , // mode 1: 9,8,6,6
{ 4096 , 8192 , 4096 , 4 } , // mode 2: 10,6,7,7
{ 8192 , 8192 , 2048 , 4 } , // mode 3: 10,7,7,6
{ 8192 , 2048 , 512 , 2 } , // mode 4: 11,8,6,5
{ 2048 , 8192 , 1024 , 2 } , // mode 5: 11,6,8,6
{ 2048 , 2048 , 256 , 1 } , // mode 6: 12,7,7,5
{ 1024 , 2048 , 512 , 1 } , // mode 7: 12,6,7,6
} ;
__constant float mode_scales [ 8 ] = {
1.0f / 128.0f ,
1.0f / 128.0f ,
1.0f / 64.0f ,
1.0f / 64.0f ,
1.0f / 32.0f ,
1.0f / 32.0f ,
1.0f / 16.0f ,
1.0f / 16.0f ,
} ;
// scaling factors when going from what was encoded in the mode to 16 bits.
__constant float mode_rscales [ 8 ] = {
128.0f ,
128.0f ,
64.0f ,
64.0f ,
32.0f ,
32.0f ,
16.0f ,
16.0f
} ;
__constant int testbits [ 3 ] = { 0xE0 , 0xF0 , 0xF8 } ;
__constant float mode_rscales2 [ 5 ] = {
32.0f ,
32.0f ,
64.0f ,
128.0f ,
256.0f ,
} ;
__constant int mode_bits2 [ 5 ] [ 3 ] = {
{ 11 , 5 , 7 } ,
{ 11 , 6 , 5 } ,
{ 10 , 5 , 8 } ,
{ 9 , 6 , 7 } ,
{ 8 , 7 , 6 }
} ;
__constant float mode_cutoffs2 [ 5 ] [ 2 ] = {
{ 1024 , 4096 } ,
{ 2048 , 1024 } ,
{ 2048 , 16384 } ,
{ 8192 , 16384 } ,
{ 32768 , 16384 }
} ;
__constant float mode_scales2 [ 5 ] = {
1.0f / 32.0f ,
1.0f / 32.0f ,
1.0f / 64.0f ,
1.0f / 128.0f ,
1.0f / 256.0f ,
} ;
/* table used for the slow default versions. */
2021-09-08 10:54:22 +08:00
__constant uint8_t clz_table [ 256 ] = {
2020-07-31 11:31:32 +08:00
8 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
} ;
/*
This table contains , for every FP16 sign / exponent value combination ,
the difference between the input FP16 value and the value obtained
by shifting the correct FP32 result right by 13 bits .
This table allows us to handle every case except denormals and NaN
with just 1 table lookup , 2 shifts and 1 add .
*/
2021-09-08 10:54:22 +08:00
__constant int32_t tbl2 [ 64 ] = {
( int32_t ) ( 0x80000000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) ,
( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) ,
( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) ,
( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x1C000 ) , ( int32_t ) ( 0x80038000 ) ,
( int32_t ) ( 0x80038000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) ,
( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) ,
( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) ,
( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x54000 ) , ( int32_t ) ( 0x80070000 )
2020-07-31 11:31:32 +08:00
} ;
// more numbers from random.org
__constant float cluster_cutoffs [ 25 ] = {
0.952312f , 0.206893f , 0.835984f , 0.507813f , 0.466170f ,
0.872331f , 0.488028f , 0.866394f , 0.363093f , 0.467905f ,
0.812967f , 0.626220f , 0.932770f , 0.275454f , 0.832020f ,
0.362217f , 0.318558f , 0.240113f , 0.009190f , 0.983995f ,
0.566812f , 0.347661f , 0.731960f , 0.156391f , 0.297786f
} ;
__constant int bits_to_write5 [ 5 ] = { 2 , 2 , 1 , 2 , 1 } ;
__constant int block_shift5 [ 5 ] = { 0 , 2 , 4 , 5 , 7 } ;
__constant int next_lcounter5 [ 5 ] = { 1 , 2 , 3 , 4 , 0 } ;
__constant int hcounter_incr5 [ 5 ] = { 0 , 0 , 0 , 0 , 1 } ;
__constant int bits_to_write3 [ 3 ] = { 3 , 2 , 2 } ;
__constant int block_shift3 [ 3 ] = { 0 , 3 , 5 } ;
__constant int next_lcounter3 [ 3 ] = { 1 , 2 , 0 } ;
__constant int hcounter_incr3 [ 3 ] = { 0 , 0 , 1 } ;
//=======================================================================================================================
# ifndef MIN
# define MIN(x,y) ((x)<(y)?(x):(y))
# endif
# ifndef MAX
# define MAX(x,y) ((x)>(y)?(x):(y))
# endif
2021-09-08 10:54:22 +08:00
typedef struct {
2020-07-31 11:31:32 +08:00
unsigned int m_src_width ; // Original source width
unsigned int m_src_height ; // Original source height
unsigned int m_xdim ; // Compression block size width
unsigned int m_ydim ; // Compression block size height
unsigned int m_zdim ; // Compression block size depth
// quantization_mode_table[integercount/2][bits] gives
// us the quantization level for a given integer count and number of bits that
// the integer may fit into. This is needed for color decoding,
// and for the color encoding.
int quantization_mode_table [ 17 ] [ 128 ] ;
float m_target_bitrate ;
int batch_size ;
int m_rgb_force_use_of_hdr ;
int m_alpha_force_use_of_hdr ;
int m_perform_srgb_transform ;
int m_ptindex ; // set as xdim + 16 * ydim + 256 * zdim;
int m_texels_per_block ; //
unsigned int m_width_in_blocks ; //
unsigned int m_height_in_blocks ; //
float sin_table [ SINCOS_STEPS ] [ ANGULAR_STEPS ] ;
float cos_table [ SINCOS_STEPS ] [ ANGULAR_STEPS ] ;
float stepsizes [ ANGULAR_STEPS ] ;
float stepsizes_sqr [ ANGULAR_STEPS ] ;
int max_angular_steps_needed_for_quant_level [ 13 ] ;
float decimated_weights [ 2 * MAX_DECIMATION_MODES * MAX_WEIGHTS_PER_BLOCK ] ;
uint8_t u8_quantized_decimated_quantized_weights [ 2 * MAX_WEIGHT_MODES * MAX_WEIGHTS_PER_BLOCK ] ;
float decimated_quantized_weights [ 2 * MAX_DECIMATION_MODES * MAX_WEIGHTS_PER_BLOCK ] ;
float flt_quantized_decimated_quantized_weights [ 2 * MAX_WEIGHT_MODES * MAX_WEIGHTS_PER_BLOCK ] ;
// User settings
astc_decode_mode m_decode_mode ;
error_weighting_params m_ewp ;
int m_compress_to_mono ;
block_size_descriptor bsd ;
float m_Quality ;
partition_info partition_tables [ 5 ] [ PARTITION_COUNT ] ;
2021-09-08 10:54:22 +08:00
}
ASTC_Encode
2020-07-31 11:31:32 +08:00
# ifdef __OPENCL_VERSION__
__attribute__ ( ( aligned ) )
# endif
;
extern void fetch_imageblock (
astc_codec_image * input_image ,
imageblock * blk ,
unsigned int pixelcount ,
__global ASTC_Encode * ASTC_Encode
) ;
extern float compress_symbolic_block (
imageblock * blk ,
symbolic_compressed_block * scb ,
__global ASTC_Encode * ASTCEncode
) ;
extern void decompress_symbolic_block (
symbolic_compressed_block * scb ,
imageblock * blk ,
__global ASTC_Encode * ASTCEncode ) ;
extern physical_compressed_block symbolic_to_physical ( symbolic_compressed_block * sc , __global ASTC_Encode * ASTCEncode ) ;
} // ASTC_ENCODE namespace
# endif