ffmpeg | branch: master | Clément Bœsch <u...@pkh.me> | Tue Dec 27 17:38:57 2022 +0100| [c9084cd0e2d7d3a56f2ae32b01f4cecc9c4d4597] | committer: Clément Bœsch
avfilter/palettegen: use lowbias32 for color hashing 1.12x faster overall in palettegen on my machine. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c9084cd0e2d7d3a56f2ae32b01f4cecc9c4d4597 --- libavfilter/vf_palettegen.c | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/libavfilter/vf_palettegen.c b/libavfilter/vf_palettegen.c index 6301cf6358..97e12f7274 100644 --- a/libavfilter/vf_palettegen.c +++ b/libavfilter/vf_palettegen.c @@ -63,8 +63,7 @@ enum { NB_STATS_MODE }; -#define NBITS 5 -#define HIST_SIZE (1<<(3*NBITS)) +#define HIST_SIZE (1<<15) typedef struct PaletteGenContext { const AVClass *class; @@ -387,27 +386,13 @@ static AVFrame *get_palette_frame(AVFilterContext *ctx) return out; } -/** - * Hashing function for the color. - * It keeps the NBITS least significant bit of each component to make it - * "random" even if the scene doesn't have much different colors. - */ -static inline unsigned color_hash(uint32_t color) -{ - const uint8_t r = color >> 16 & ((1<<NBITS)-1); - const uint8_t g = color >> 8 & ((1<<NBITS)-1); - const uint8_t b = color & ((1<<NBITS)-1); - - return r << (NBITS * 2) | g << NBITS | b; -} - /** * Locate the color in the hash table and increment its counter. */ static int color_inc(struct hist_node *hist, uint32_t color) { int i; - const unsigned hash = color_hash(color); + const uint32_t hash = ff_lowbias32(color) & (HIST_SIZE - 1); struct hist_node *node = &hist[hash]; struct color_ref *e; _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".