summaryrefslogtreecommitdiff
path: root/libavfilter/vf_palettegen.c
diff options
context:
space:
mode:
authorClément Bœsch <clement@stupeflix.com>2015-02-25 15:34:13 +0100
committerClément Bœsch <clement@stupeflix.com>2015-02-26 14:20:02 +0100
commitab093bdeefad1489264e064b43e937f40b83f531 (patch)
treec31b1b12bd64a065f55ebd5137dc006ae1a74f5f /libavfilter/vf_palettegen.c
parent7faa40af982960608b117e20fec999b48011e5e0 (diff)
avfilter/palettegen: export color quantization ratio
Diffstat (limited to 'libavfilter/vf_palettegen.c')
-rw-r--r--libavfilter/vf_palettegen.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/libavfilter/vf_palettegen.c b/libavfilter/vf_palettegen.c
index a7d1ffbc3b..0d52843cb8 100644
--- a/libavfilter/vf_palettegen.c
+++ b/libavfilter/vf_palettegen.c
@@ -275,6 +275,15 @@ static struct color_ref **load_color_refs(const struct hist_node *hist, int nb_r
return refs;
}
+static double set_colorquant_ratio_meta(AVFrame *out, int nb_out, int nb_in)
+{
+ char buf[32];
+ const double ratio = (double)nb_out / nb_in;
+ snprintf(buf, sizeof(buf), "%f", ratio);
+ av_dict_set(&out->metadata, "lavfi.color_quant_ratio", buf, 0);
+ return ratio;
+}
+
/**
* Main function implementing the Median Cut Algorithm defined by Paul Heckbert
* in Color Image Quantization for Frame Buffer Display (1982)
@@ -284,6 +293,7 @@ static AVFrame *get_palette_frame(AVFilterContext *ctx)
AVFrame *out;
PaletteGenContext *s = ctx->priv;
AVFilterLink *outlink = ctx->outputs[0];
+ double ratio;
int box_id = 0;
struct range_box *box;
@@ -362,8 +372,9 @@ static AVFrame *get_palette_frame(AVFilterContext *ctx)
box = box_id >= 0 ? &s->boxes[box_id] : NULL;
}
- av_log(ctx, AV_LOG_DEBUG, "%d%s boxes generated out of %d colors\n",
- s->nb_boxes, s->reserve_transparent ? "(+1)" : "", s->nb_refs);
+ ratio = set_colorquant_ratio_meta(out, s->nb_boxes, s->nb_refs);
+ av_log(ctx, AV_LOG_INFO, "%d%s colors generated out of %d colors; ratio=%f\n",
+ s->nb_boxes, s->reserve_transparent ? "(+1)" : "", s->nb_refs, ratio);
qsort(s->boxes, s->nb_boxes, sizeof(*s->boxes), cmp_color);