Reduce frequency of key frames slightly
This commit is contained in:
parent
a447ba7d76
commit
83b8c8ea12
@ -1001,6 +1001,18 @@ update_current_frame(GraphicsManager *self, Image *img, const CoalescedFrameData
|
|||||||
img->current_frame_shown_at = monotonic();
|
img->current_frame_shown_at = monotonic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
reference_chain_too_large(Image *img, const Frame *frame) {
|
||||||
|
size_t limit = 2 * img->width * img->height;
|
||||||
|
size_t drawn_area = frame->width * frame->height;
|
||||||
|
unsigned num = 1;
|
||||||
|
while (drawn_area < limit && num < 5) {
|
||||||
|
if (!frame->base_frame_id || !(frame = frame_for_id(img, frame->base_frame_id))) break;
|
||||||
|
drawn_area += frame->width * frame->height;
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
return num >= 5 || drawn_area >= limit;
|
||||||
|
}
|
||||||
|
|
||||||
static Image*
|
static Image*
|
||||||
handle_animation_frame_load_command(GraphicsManager *self, GraphicsCommand *g, Image *img, const uint8_t *payload, bool *is_dirty) {
|
handle_animation_frame_load_command(GraphicsManager *self, GraphicsCommand *g, Image *img, const uint8_t *payload, bool *is_dirty) {
|
||||||
@ -1060,7 +1072,7 @@ handle_animation_frame_load_command(GraphicsManager *self, GraphicsCommand *g, I
|
|||||||
img->extra_framecnt--;
|
img->extra_framecnt--;
|
||||||
ABRT("EINVAL", "No frame with number: %u found", g->_other_frame_number);
|
ABRT("EINVAL", "No frame with number: %u found", g->_other_frame_number);
|
||||||
}
|
}
|
||||||
if (other_frame->base_frame_id) {
|
if (other_frame->base_frame_id && reference_chain_too_large(img, other_frame)) {
|
||||||
// since the frame this frame refers to refers to yet another frame, make
|
// since the frame this frame refers to refers to yet another frame, make
|
||||||
// this a fully coalesced key frame, for performance
|
// this a fully coalesced key frame, for performance
|
||||||
CoalescedFrameData cfd = get_coalesced_frame_data(self, img, other_frame);
|
CoalescedFrameData cfd = get_coalesced_frame_data(self, img, other_frame);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user