From c6b24543fc44384a0c6118f66896663daf44a5ab Mon Sep 17 00:00:00 2001 From: Urvang Joshi Date: Thu, 29 Jan 2015 13:26:01 -0800 Subject: [PATCH] AnimEncoder API: Fix for kmax=1 and default kmin case. Some frames that were previously selected as key-frames were incorrectly being reset to sub-frames. Change-Id: Iee342dbb9a9aec144b8185c3b54ca56aa7038bfb --- src/mux/anim_encode.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/mux/anim_encode.c b/src/mux/anim_encode.c index 49cd24c6..d2898f74 100644 --- a/src/mux/anim_encode.c +++ b/src/mux/anim_encode.c @@ -975,6 +975,8 @@ static int CacheFrame(WebPAnimEncoder* const enc, int duration, if (enc->count_since_key_frame_ == enc->options_.kmax) { enc->flush_count_ = enc->count_ - 1; enc->count_since_key_frame_ = 0; + enc->keyframe_ = KEYFRAME_NONE; + enc->best_delta_ = DELTA_INFINITY; } enc->prev_candidate_undecided_ = 1; } @@ -1001,20 +1003,10 @@ static int CacheFrame(WebPAnimEncoder* const enc, int duration, static int FlushFrames(WebPAnimEncoder* const enc) { while (enc->flush_count_ > 0) { - WebPMuxFrameInfo* info; WebPMuxError err; EncodedFrame* const curr = GetFrame(enc, 0); - // Pick frame or full canvas. - if (curr->is_key_frame_) { - info = &curr->key_frame_; - if (enc->keyframe_ == 0) { - enc->keyframe_ = KEYFRAME_NONE; - enc->best_delta_ = DELTA_INFINITY; - } - } else { - info = &curr->sub_frame_; - } - // Add to mux. + const WebPMuxFrameInfo* const info = + curr->is_key_frame_ ? &curr->key_frame_ : &curr->sub_frame_; assert(enc->mux_ != NULL); err = WebPMuxPushFrame(enc->mux_, info, 1); if (err != WEBP_MUX_OK) {