mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-11 10:25:20 +00:00
There are a few changes. The 20K bootblock size restriction is gone. ROMFS has been tested and works on v2 with qemu and kontron. Once this patch is in, those patches will follow. Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Patrick Georgi <patrick.georgi@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4032 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
81 lines
2.1 KiB
C++
81 lines
2.1 KiB
C++
// Compress/RangeCoder/RangeCoderBit.cpp
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "RangeCoderBit.h"
|
|
|
|
namespace NCompress {
|
|
namespace NRangeCoder {
|
|
|
|
UInt32 CPriceTables::ProbPrices[kBitModelTotal >> kNumMoveReducingBits];
|
|
static CPriceTables g_PriceTables;
|
|
|
|
CPriceTables::CPriceTables() { Init(); }
|
|
|
|
void CPriceTables::Init()
|
|
{
|
|
const int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits);
|
|
for(int i = kNumBits - 1; i >= 0; i--)
|
|
{
|
|
UInt32 start = 1 << (kNumBits - i - 1);
|
|
UInt32 end = 1 << (kNumBits - i);
|
|
for (UInt32 j = start; j < end; j++)
|
|
ProbPrices[j] = (i << kNumBitPriceShiftBits) +
|
|
(((end - j) << kNumBitPriceShiftBits) >> (kNumBits - i - 1));
|
|
}
|
|
|
|
/*
|
|
// simplest: bad solution
|
|
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
|
ProbPrices[i] = kBitPrice;
|
|
*/
|
|
|
|
/*
|
|
const double kDummyMultMid = (1.0 / kBitPrice) / 2;
|
|
const double kDummyMultMid = 0;
|
|
// float solution
|
|
double ln2 = log(double(2));
|
|
double lnAll = log(double(kBitModelTotal >> kNumMoveReducingBits));
|
|
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
|
ProbPrices[i] = UInt32((fabs(lnAll - log(double(i))) / ln2 + kDummyMultMid) * kBitPrice);
|
|
*/
|
|
|
|
/*
|
|
// experimental, slow, solution:
|
|
for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++)
|
|
{
|
|
const int kCyclesBits = 5;
|
|
const UInt32 kCycles = (1 << kCyclesBits);
|
|
|
|
UInt32 range = UInt32(-1);
|
|
UInt32 bitCount = 0;
|
|
for (UInt32 j = 0; j < kCycles; j++)
|
|
{
|
|
range >>= (kNumBitModelTotalBits - kNumMoveReducingBits);
|
|
range *= i;
|
|
while(range < (1 << 31))
|
|
{
|
|
range <<= 1;
|
|
bitCount++;
|
|
}
|
|
}
|
|
bitCount <<= kNumBitPriceShiftBits;
|
|
range -= (1 << 31);
|
|
for (int k = kNumBitPriceShiftBits - 1; k >= 0; k--)
|
|
{
|
|
range <<= 1;
|
|
if (range > (1 << 31))
|
|
{
|
|
bitCount += (1 << k);
|
|
range -= (1 << 31);
|
|
}
|
|
}
|
|
ProbPrices[i] = (bitCount
|
|
// + (1 << (kCyclesBits - 1))
|
|
) >> kCyclesBits;
|
|
}
|
|
*/
|
|
}
|
|
|
|
}}
|