Read unsigned Exp-Golomb coded value (ue(v))
| 36 | |
| 37 | // Read unsigned Exp-Golomb coded value (ue(v)) |
| 38 | fl::u32 readUE() { |
| 39 | int leadingZeros = 0; |
| 40 | while (hasBits(1) && readBits(1) == 0) { |
| 41 | leadingZeros++; |
| 42 | if (leadingZeros > 32) return 0; // prevent infinite loop |
| 43 | } |
| 44 | if (leadingZeros == 0) return 0; |
| 45 | fl::u32 suffix = readBits(leadingZeros); |
| 46 | return (1u << leadingZeros) - 1 + suffix; |
| 47 | } |
| 48 | |
| 49 | // Read signed Exp-Golomb coded value (se(v)) |
| 50 | fl::i32 readSE() { |