| 277 | } |
| 278 | |
| 279 | static inline void put_symbol_inline(RangeCoder *c, uint8_t *state, int v, int is_signed){ |
| 280 | int i; |
| 281 | |
| 282 | if(v){ |
| 283 | const int a= FFABS(v); |
| 284 | const int e= av_log2(a); |
| 285 | put_rac(c, state+0, 0); |
| 286 | if(e<=9){ |
| 287 | for(i=0; i<e; i++){ |
| 288 | put_rac(c, state+1+i, 1); //1..10 |
| 289 | } |
| 290 | put_rac(c, state+1+i, 0); |
| 291 | |
| 292 | for(i=e-1; i>=0; i--){ |
| 293 | put_rac(c, state+22+i, (a>>i)&1); //22..31 |
| 294 | } |
| 295 | |
| 296 | if(is_signed) |
| 297 | put_rac(c, state+11 + e, v < 0); //11..21 |
| 298 | }else{ |
| 299 | for(i=0; i<e; i++){ |
| 300 | put_rac(c, state+1+FFMIN(i,9), 1); //1..10 |
| 301 | } |
| 302 | put_rac(c, state+1+9, 0); |
| 303 | |
| 304 | for(i=e-1; i>=0; i--){ |
| 305 | put_rac(c, state+22+FFMIN(i,9), (a>>i)&1); //22..31 |
| 306 | } |
| 307 | |
| 308 | if(is_signed) |
| 309 | put_rac(c, state+11 + 10, v < 0); //11..21 |
| 310 | } |
| 311 | }else{ |
| 312 | put_rac(c, state+0, 1); |
| 313 | } |
| 314 | } |
| 315 | |
| 316 | static void av_noinline put_symbol(RangeCoder *c, uint8_t *state, int v, int is_signed){ |
| 317 | put_symbol_inline(c, state, v, is_signed); |
no test coverage detected