@@ -153,6 +153,7 @@ static void compute_box_stats(PaletteGenContext *s, struct range_box *box)
avg[0] = sr / box->weight;
avg[1] = sg / box->weight;
avg[2] = sb / box->weight;
+ box->color = 0xffU<<24 | avg[0]<<16 | avg[1]<<8 | avg[2];
/* Compute squared error of each color channel */
for (int i = box->start; i < box->start + box->len; i++) {
@@ -196,32 +197,6 @@ static int get_next_box_id_to_split(PaletteGenContext *s)
return best_box_id;
}
-/**
- * Get the 32-bit average color for the range of RGB colors enclosed in the
- * specified box. Takes into account the weight of each color.
- */
-static uint32_t get_avg_color(struct color_ref * const *refs,
- const struct range_box *box)
-{
- int i;
- const int n = box->len;
- uint64_t r = 0, g = 0, b = 0, div = 0;
-
- for (i = 0; i < n; i++) {
- const struct color_ref *ref = refs[box->start + i];
- r += (ref->color >> 16 & 0xff) * ref->count;
- g += (ref->color >> 8 & 0xff) * ref->count;
- b += (ref->color & 0xff) * ref->count;
- div += ref->count;
- }
-
- r = r / div;
- g = g / div;
- b = b / div;
-
- return 0xffU<<24 | r<<16 | g<<8 | b;
-}
-
/**
* Split given box in two at position n. The original box becomes the left part
* of the split, and the new index box is the right part.
@@ -237,8 +212,6 @@ static void split_box(PaletteGenContext *s, struct range_box *box, int n)
av_assert0(box->len >= 1);
av_assert0(new_box->len >= 1);
- box->color = get_avg_color(s->refs, box);
- new_box->color = get_avg_color(s->refs, new_box);
compute_box_stats(s, box);
compute_box_stats(s, new_box);
}
@@ -336,7 +309,6 @@ static AVFrame *get_palette_frame(AVFilterContext *ctx)
box = &s->boxes[box_id];
box->len = s->nb_refs;
box->sorted_by = -1;
- box->color = get_avg_color(s->refs, box);
compute_box_stats(s, box);
s->nb_boxes = 1;