package vp8
type quant struct {
y1 [2 ]uint16
y2 [2 ]uint16
uv [2 ]uint16
}
func clip(x , min , max int32 ) int32 {
if x < min {
return min
}
if x > max {
return max
}
return x
}
func (d *Decoder ) parseQuant () {
baseQ0 := d .fp .readUint (uniformProb , 7 )
dqy1DC := d .fp .readOptionalInt (uniformProb , 4 )
const dqy1AC = 0
dqy2DC := d .fp .readOptionalInt (uniformProb , 4 )
dqy2AC := d .fp .readOptionalInt (uniformProb , 4 )
dquvDC := d .fp .readOptionalInt (uniformProb , 4 )
dquvAC := d .fp .readOptionalInt (uniformProb , 4 )
for i := 0 ; i < nSegment ; i ++ {
q := int32 (baseQ0 )
if d .segmentHeader .useSegment {
if d .segmentHeader .relativeDelta {
q += int32 (d .segmentHeader .quantizer [i ])
} else {
q = int32 (d .segmentHeader .quantizer [i ])
}
}
d .quant [i ].y1 [0 ] = dequantTableDC [clip (q +dqy1DC , 0 , 127 )]
d .quant [i ].y1 [1 ] = dequantTableAC [clip (q +dqy1AC , 0 , 127 )]
d .quant [i ].y2 [0 ] = dequantTableDC [clip (q +dqy2DC , 0 , 127 )] * 2
d .quant [i ].y2 [1 ] = dequantTableAC [clip (q +dqy2AC , 0 , 127 )] * 155 / 100
if d .quant [i ].y2 [1 ] < 8 {
d .quant [i ].y2 [1 ] = 8
}
d .quant [i ].uv [0 ] = dequantTableDC [clip (q +dquvDC , 0 , 117 )]
d .quant [i ].uv [1 ] = dequantTableAC [clip (q +dquvAC , 0 , 127 )]
}
}
var (
dequantTableDC = [128 ]uint16 {
4 , 5 , 6 , 7 , 8 , 9 , 10 , 10 ,
11 , 12 , 13 , 14 , 15 , 16 , 17 , 17 ,
18 , 19 , 20 , 20 , 21 , 21 , 22 , 22 ,
23 , 23 , 24 , 25 , 25 , 26 , 27 , 28 ,
29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 ,
37 , 37 , 38 , 39 , 40 , 41 , 42 , 43 ,
44 , 45 , 46 , 46 , 47 , 48 , 49 , 50 ,
51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 ,
59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 ,
67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 ,
75 , 76 , 76 , 77 , 78 , 79 , 80 , 81 ,
82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 ,
91 , 93 , 95 , 96 , 98 , 100 , 101 , 102 ,
104 , 106 , 108 , 110 , 112 , 114 , 116 , 118 ,
122 , 124 , 126 , 128 , 130 , 132 , 134 , 136 ,
138 , 140 , 143 , 145 , 148 , 151 , 154 , 157 ,
}
dequantTableAC = [128 ]uint16 {
4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ,
12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 ,
20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 ,
28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 ,
36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 ,
44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 ,
52 , 53 , 54 , 55 , 56 , 57 , 58 , 60 ,
62 , 64 , 66 , 68 , 70 , 72 , 74 , 76 ,
78 , 80 , 82 , 84 , 86 , 88 , 90 , 92 ,
94 , 96 , 98 , 100 , 102 , 104 , 106 , 108 ,
110 , 112 , 114 , 116 , 119 , 122 , 125 , 128 ,
131 , 134 , 137 , 140 , 143 , 146 , 149 , 152 ,
155 , 158 , 161 , 164 , 167 , 170 , 173 , 177 ,
181 , 185 , 189 , 193 , 197 , 201 , 205 , 209 ,
213 , 217 , 221 , 225 , 229 , 234 , 239 , 245 ,
249 , 254 , 259 , 264 , 269 , 274 , 279 , 284 ,
}
)
The pages are generated with Golds v0.8.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .