From: Mark Nauwelaerts Date: Fri, 14 Jan 2011 13:08:38 +0000 (+0100) Subject: baseparse: avoid loop in frame locating interpolation X-Git-Tag: RELEASE-0.10.29~288 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ce23c62f58b3f042c354c4503bde4ece8b226da5;p=platform%2Fupstream%2Fgst-plugins-good.git baseparse: avoid loop in frame locating interpolation --- diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 59355c7..927c355 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -3032,6 +3032,7 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, gst_util_uint64_scale (hpos - lpos, time - ltime, htime - ltime) + lpos - chunk; } else { + /* should mean lpos == hpos, since lpos <= hpos is invariant */ newpos = lpos; /* we check this case once, but not forever, so break loop */ cont = FALSE; @@ -3065,8 +3066,7 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, break; } else if (newtime > time) { /* overshoot */ - newpos -= newpos == hpos ? chunk : 0; - hpos = CLAMP (newpos, lpos, hpos); + hpos = (newpos >= hpos) ? MAX (lpos, hpos - chunk) : MAX (lpos, newpos); htime = newtime; } else if (newtime + tolerance > time) { /* close enough undershoot */ @@ -3076,9 +3076,10 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, } else if (newtime < ltime) { /* so a position beyond lpos resulted in earlier time than ltime ... */ GST_DEBUG_OBJECT (parse, "non-ascending time; aborting"); + break; } else { /* undershoot too far */ - newpos += newpos == hpos ? chunk : 0; + newpos += newpos == lpos ? chunk : 0; lpos = CLAMP (newpos, lpos, hpos); ltime = newtime; }