Unified · Split
| @@ -1328,21 +1328,19 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, · 1327 unmodified lines | ||
| 1328 | 1328 | |
| 1329 | 1329 | if (s.last_val != val) { |
| 1330 | 1330 | int64_t delta = val - s.last_val; |
| 1331 | + int64_t step = FFMAX(1, (delta + current_mul/2) / current_mul); | |
| 1331 | 1332 | av_assert2(s.last_val < val); |
| 1332 | 1333 | av_assert2(current_mul > 0); |
| 1333 | 1334 | |
| 1334 | − val = FFMAX(1, (delta + current_mul/2) / current_mul); | |
| 1335 | − | |
| 1336 | − delta -= val*current_mul; | |
| 1335 | + delta -= step*current_mul; | |
| 1337 | 1336 | av_assert2(delta <= current_mul/2); |
| 1338 | 1337 | av_assert2(delta > -current_mul); |
| 1339 | − val += s.last_val; | |
| 1340 | 1338 | |
| 1341 | − av_assert2(s.last_val < val); | |
| 1339 | + av_assert2(step > 0); | |
| 1342 | 1340 | if (s.lu) { |
| 1343 | 1341 | s.index_stack[s.run] = s.current_mul_index; |
| 1344 | 1342 | av_assert2(s.run < FF_ARRAY_ELEMS(s.delta_stack)); |
| 1345 | − if (val - s.last_val == 1) { | |
| 1343 | + if (step == 1) { | |
| 1346 | 1344 | s.delta_stack[s.run] = delta; |
| 1347 | 1345 | s.run ++; |
| 1348 | 1346 | av_assert2(s.i == s.pixel_num || s.last_val + current_mul + delta == sc->unit[s.p][s.i].val); |
| @@ -1365,14 +1363,14 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, · 16 unmodified lines | ||
| 1365 | 1363 | } |
| 1366 | 1364 | } else { |
| 1367 | 1365 | av_assert2(s.run == 0); |
| 1368 | − put_symbol_inline(&s.rc, s.state[s.lu][0], val - s.last_val - 1, 0, NULL, NULL); | |
| 1366 | + put_symbol_inline(&s.rc, s.state[s.lu][0], step - 1, 0, NULL, NULL); | |
| 1369 | 1367 | |
| 1370 | 1368 | if (current_mul > 1) |
| 1371 | 1369 | put_symbol_inline(&s.rc, s.state[s.lu][1], delta, 1, NULL, NULL); |
| 1372 | − if (val - s.last_val == 1) | |
| 1370 | + if (step == 1) | |
| 1373 | 1371 | s.lu ^= 1; |
| 1374 | 1372 | |
| 1375 | − av_assert2(s.i == s.pixel_num || s.last_val + (val - s.last_val) * current_mul + delta == sc->unit[s.p][s.i].val); | |
| 1373 | + av_assert2(s.i == s.pixel_num || s.last_val + step * current_mul + delta == sc->unit[s.p][s.i].val); | |
| 1376 | 1374 | if (s.i < s.pixel_num) |
| 1377 | 1375 | s.last_val = sc->unit[s.p][s.i].val; |
| 1378 | 1376 | } |