+ while (enc.rans >= x_max) {
+ RansPutByte(enc.rans & 0xffu, enc);
+ enc.rans >>= 8;
+ }
+}
+
+void RansEncPut(inout RansEncoder enc, uint start, uint freq, uint prob_bits)
+{
+ RansEncRenorm(enc, freq, prob_bits);
+ enc.rans = ((enc.rans / freq) << prob_bits) + (enc.rans % freq) + start;
+}
+
+void RansEncPutSymbol(inout RansEncoder enc, uvec4 sym)
+{
+ uint x_max = sym.x;
+ uint rcp_freq = sym.y;
+ uint bias = sym.z;
+ uint rcp_shift = (sym.w & 0xffffu);
+ uint cmpl_freq = (sym.w >> 16);
+
+ // renormalize
+ while (enc.rans >= x_max) {
+ RansPutByte(enc.rans & 0xffu, enc);
+ enc.rans >>= 8;