Fix some broken clamping in rate control.
authorTimothy B. Terriberry <tterribe@xiph.org>
Wed, 14 Sep 2016 17:47:34 +0000 (10:47 -0700)
committerTimothy B. Terriberry <tterribe@xiph.org>
Fri, 23 Sep 2016 19:47:36 +0000 (12:47 -0700)
commiteac29ae2f9c748cb4a0a3fc381002f4dae3e1141
treedd4c1f67b13c99ac6c8c6cf93262e16bdd7a59a3
parent50fd339b4302710eee9a2e06c393dd9ee12c7566
Fix some broken clamping in rate control.

If we have some dupe frames right near the end of the buffer, our
 metric window can be slightly larger than the buffer.
However, the clamping we use to determine how many frames' worth of
 metrics to add to the buffer had a mix of signed and unsigned
 types, so if that number when negative, instead of clamping
 against zero, it would ask for all remaining frames in the file.
That would cause an infinite loop when we tried to find the last
 keyframe in the circular buffer in oc_enc_select_qi() (which was
 not big enough to actually hold that many frames).

This patch changes the clamp to a form that works with all unsigned
 values.

Thanks to Brion Vibber for the report.

Fixes #2229

Forward-port of r19507 from svn.
lib/rate.c