summaryrefslogtreecommitdiff
path: root/libavfilter/vf_palettegen.c
diff options
context:
space:
mode:
authorClément Bœsch <clement@stupeflix.com>2015-02-25 16:06:34 +0100
committerClément Bœsch <clement@stupeflix.com>2015-02-26 14:20:02 +0100
commit321de034928031fe71b6495596dd1fde4ec79f23 (patch)
treed3bc6ed25a56be770b00013d1b350d2c2e5dfd16 /libavfilter/vf_palettegen.c
parent30f4e9d3d90b66aab06cb0559b7aca5fa290d684 (diff)
downloadffmpeg-321de034928031fe71b6495596dd1fde4ec79f23.tar.gz
avfilter/palettegen: use AV_QSORT()
This makes the sorting of the colors along an axis (r, g or b) predictible, and thus testable under FATE. The performance is not really an issue here since the function is called only once at the end and will need to sort very small number of entries, so an alternative would be to make the sorting functions (see DECLARE_CMP_FUNC()) fallback on another axis in case of equality. This approach was actually simpler. I don't know if there is any advantage in using a multidimensional sort, but it will affect the final palette one way or another.
Diffstat (limited to 'libavfilter/vf_palettegen.c')
-rw-r--r--libavfilter/vf_palettegen.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libavfilter/vf_palettegen.c b/libavfilter/vf_palettegen.c
index f1f472225b..fa8cc12a3c 100644
--- a/libavfilter/vf_palettegen.c
+++ b/libavfilter/vf_palettegen.c
@@ -25,6 +25,7 @@
#include "libavutil/avassert.h"
#include "libavutil/opt.h"
+#include "libavutil/qsort.h"
#include "avfilter.h"
#include "internal.h"
@@ -352,7 +353,8 @@ static AVFrame *get_palette_frame(AVFilterContext *ctx)
/* sort the range by its longest axis if it's not already sorted */
if (box->sorted_by != longest) {
- qsort(&s->refs[box->start], box->len, sizeof(*s->refs), cmp_funcs[longest]);
+ cmp_func cmpf = cmp_funcs[longest];
+ AV_QSORT(&s->refs[box->start], box->len, const struct color_ref *, cmpf);
box->sorted_by = longest;
}