mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-23 04:24:35 +02:00
avfilter/palettegen: export color quantization ratio
This commit is contained in:
parent
7faa40af98
commit
ab093bdeef
@ -6980,6 +6980,11 @@ the background is static.
|
|||||||
Default value is @var{full}.
|
Default value is @var{full}.
|
||||||
@end table
|
@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
|
||||||
|
@var{info} logging level.
|
||||||
|
|
||||||
@subsection Examples
|
@subsection Examples
|
||||||
|
|
||||||
@itemize
|
@itemize
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 5
|
#define LIBAVFILTER_VERSION_MAJOR 5
|
||||||
#define LIBAVFILTER_VERSION_MINOR 11
|
#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, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
|
@ -275,6 +275,15 @@ static struct color_ref **load_color_refs(const struct hist_node *hist, int nb_r
|
|||||||
return refs;
|
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
|
* Main function implementing the Median Cut Algorithm defined by Paul Heckbert
|
||||||
* in Color Image Quantization for Frame Buffer Display (1982)
|
* in Color Image Quantization for Frame Buffer Display (1982)
|
||||||
@ -284,6 +293,7 @@ static AVFrame *get_palette_frame(AVFilterContext *ctx)
|
|||||||
AVFrame *out;
|
AVFrame *out;
|
||||||
PaletteGenContext *s = ctx->priv;
|
PaletteGenContext *s = ctx->priv;
|
||||||
AVFilterLink *outlink = ctx->outputs[0];
|
AVFilterLink *outlink = ctx->outputs[0];
|
||||||
|
double ratio;
|
||||||
int box_id = 0;
|
int box_id = 0;
|
||||||
struct range_box *box;
|
struct range_box *box;
|
||||||
|
|
||||||
@ -362,8 +372,9 @@ static AVFrame *get_palette_frame(AVFilterContext *ctx)
|
|||||||
box = box_id >= 0 ? &s->boxes[box_id] : NULL;
|
box = box_id >= 0 ? &s->boxes[box_id] : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
av_log(ctx, AV_LOG_DEBUG, "%d%s boxes generated out of %d colors\n",
|
ratio = set_colorquant_ratio_meta(out, s->nb_boxes, s->nb_refs);
|
||||||
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, ratio);
|
||||||
|
|
||||||
qsort(s->boxes, s->nb_boxes, sizeof(*s->boxes), cmp_color);
|
qsort(s->boxes, s->nb_boxes, sizeof(*s->boxes), cmp_color);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user