diff options
author | Ray Simard <rhs.ffmpeg@sylvan-glade.com> | 2012-01-21 06:19:46 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-01-21 08:22:49 +0400 |
commit | 9ec39937f9c7f28a2279a19f71f290d8161eb52f (patch) | |
tree | a86e50ea151af2e2884057edc1f258330720fce8 /libavfilter | |
parent | bdd739e91cf30a016cba1461170a01b231e54785 (diff) |
deshake: variable used uninitialized
Sometimes the scan finds nothing that qualifies for addition to
the array and pos is zero after the loops. The code forces pos to
1 and the array is then processed as if it had one valid element in it,
producing some amusing but not very useful results.
I don't see the rationale for this. If pos is zero coming out of the
loops, the only appropriate thing to do is set t->angle to zero. The
attached patch does that. It's worked properly in several tests so far.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/vf_deshake.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libavfilter/vf_deshake.c b/libavfilter/vf_deshake.c index b752fbf760..bb20551bc9 100644 --- a/libavfilter/vf_deshake.c +++ b/libavfilter/vf_deshake.c @@ -292,14 +292,15 @@ static void find_motion(DeshakeContext *deshake, uint8_t *src1, uint8_t *src2, } } - pos = FFMAX(1, pos); - - center_x /= pos; - center_y /= pos; - - t->angle = clean_mean(angles, pos); - if (t->angle < 0.001) - t->angle = 0; + if (pos) { + center_x /= pos; + center_y /= pos; + t->angle = clean_mean(angles, pos); + if (t->angle < 0.001) + t->angle = 0; + } else { + t->angle = 0; + } // Find the most common motion vector in the frame and use it as the gmv for (y = deshake->ry * 2; y >= 0; y--) { |