[FFmpeg-devel] [PATCH] avfilter/palettegen: export color quantization ratio
Clément Bœsch
u at pkh.me
Wed Feb 25 15:37:38 CET 2015
From: Clément Bœsch <clement at stupeflix.com>
---
doc/filters.texi | 5 +++++
libavfilter/version.h | 2 +-
libavfilter/vf_palettegen.c | 14 ++++++++++++--
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/doc/filters.texi b/doc/filters.texi
index baef346..0c72145 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -6980,6 +6980,11 @@ the background is static.
Default value is @var{full}.
@end table
+The filter also exports the frame metadata @code{lavfi.color_quant_ratio}
+(@code{nb_color_in / nb_color_out}) which you can use to evaluate the degree of
+color quantization of the palette. This information is also visible at
+ at var{info} logging level.
+
@subsection Examples
@itemize
diff --git a/libavfilter/version.h b/libavfilter/version.h
index 83fd2a5..986d7a7 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -31,7 +31,7 @@
#define LIBAVFILTER_VERSION_MAJOR 5
#define LIBAVFILTER_VERSION_MINOR 11
-#define LIBAVFILTER_VERSION_MICRO 101
+#define LIBAVFILTER_VERSION_MICRO 102
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \
diff --git a/libavfilter/vf_palettegen.c b/libavfilter/vf_palettegen.c
index 0e303a9..9a4a701 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 float set_colorquant_ratio_meta(AVFrame *out, int nb_out, int nb_in)
+{
+ char buf[32];
+ float ratio = (float)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)
@@ -363,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);
+ 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,
+ set_colorquant_ratio_meta(out, s->nb_boxes, s->nb_refs));
qsort(s->boxes, s->nb_boxes, sizeof(*s->boxes), cmp_color);
--
2.3.0
More information about the ffmpeg-devel
mailing list