CUETools.Codecs.FLAKE.FlakeWriter.calc_optimal_rice_params C# (CSharp) Method

calc_optimal_rice_params() static private method

static private calc_optimal_rice_params ( int porder, int parm, ulong sums, uint n, uint pred_order, int &method ) : uint
porder int
parm int
sums ulong
n uint
pred_order uint
method int
return uint
		static unsafe uint calc_optimal_rice_params(int porder, int* parm, ulong* sums, uint n, uint pred_order, ref int method)
		{
			uint part = (1U << porder);
			uint cnt = (n >> porder) - pred_order;
			int maxK = method > 0 ? 30 : Flake.MAX_RICE_PARAM;
			int k = cnt > 0 ? Math.Min(maxK, BitReader.log2i(sums[0] / cnt)) : 0;
			int realMaxK0 = k;
			ulong all_bits = cnt * ((uint)k + 1U) + (sums[0] >> k);
			parm[0] = k;
			cnt = (n >> porder);
			for (uint i = 1; i < part; i++)
			{
				k = Math.Min(maxK, BitReader.log2i(sums[i] / cnt));
				realMaxK0 = Math.Max(realMaxK0, k);
				all_bits += cnt * ((uint)k + 1U) + (sums[i] >> k);
				parm[i] = k;
			}
			method = realMaxK0 > Flake.MAX_RICE_PARAM ? 1 : 0;
			return (uint)all_bits + ((4U + (uint)method) * part);
		}