| 207 | } |
| 208 | |
| 209 | void RangeEncoder::writeBits(U32 bits, U32 sym) |
| 210 | { |
| 211 | assert(bits && (sym < (1u<<bits))); |
| 212 | |
| 213 | if (bits > 21) // 22 bits |
| 214 | { |
| 215 | writeShort(sym&U16_MAX); |
| 216 | sym = sym >> 16; |
| 217 | bits = bits - 16; |
| 218 | } |
| 219 | |
| 220 | U32 r, tmp; |
| 221 | normalize(); |
| 222 | r = range >> bits; |
| 223 | tmp = r * sym; |
| 224 | low += tmp; |
| 225 | #ifdef EXTRAFAST |
| 226 | range = r; |
| 227 | #else |
| 228 | if ((sym+1) >> bits) |
| 229 | { |
| 230 | range -= tmp; |
| 231 | } |
| 232 | else |
| 233 | { |
| 234 | range = r; |
| 235 | } |
| 236 | #endif |
| 237 | } |
| 238 | |
| 239 | void RangeEncoder::writeByte(U8 sym) |
| 240 | { |
nothing calls this directly
no outgoing calls
no test coverage detected