This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project gfxprim.git.
The branch, master has been updated via 42ad59f700932298c5d6441054ca7d6d7590a9e1 (commit) from 5777210fdacd7e722325dbad7a3df78bfa587462 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- http://repo.or.cz/w/gfxprim.git/commit/42ad59f700932298c5d6441054ca7d6d7590a...
commit 42ad59f700932298c5d6441054ca7d6d7590a9e1 Author: Cyril Hrubis metan@ucw.cz Date: Thu Dec 1 23:32:47 2011 +0100
filters: initial support for histograms.
diff --git a/demos/grinder/Makefile b/demos/grinder/Makefile index a984bd9..377d008 100644 --- a/demos/grinder/Makefile +++ b/demos/grinder/Makefile @@ -7,7 +7,7 @@ LDLIBS+=-lGP -L$(TOPDIR)/build/
APPS=grinder
-grinder: params.o +grinder: params.o histogram.o
include $(TOPDIR)/include.mk include $(TOPDIR)/app.mk diff --git a/demos/grinder/grinder.c b/demos/grinder/grinder.c index f9a0675..4df4004 100644 --- a/demos/grinder/grinder.c +++ b/demos/grinder/grinder.c @@ -28,6 +28,7 @@ #include "GP.h"
#include "params.h" +#include "histogram.h"
static GP_ProgressCallback *progress_callback = NULL;
@@ -629,6 +630,29 @@ static GP_RetCode arithmetic(GP_Context **c, const char *params) return GP_ESUCCESS; }
+/* histogram */ + +static struct param histogram_params[] = { + {"file", PARAM_STR, "Filename of image to use.", NULL, NULL}, + {NULL, 0, NULL, NULL, NULL} +}; + +static GP_RetCode histogram(GP_Context **c, const char *params) +{ + char *file = "histogram.png"; + + if (param_parse(params, histogram_params, "histogram", param_err, &file)) + return GP_EINVAL; + + if (file == NULL) { + print_error("histogram: Filename missing"); + return GP_EINVAL; + } + + histogram_to_png(*c, file); + return GP_ESUCCESS; +} + /* filters */
struct filter { @@ -650,6 +674,7 @@ static struct filter filter_table[] = { {"blur", "gaussian blur", blur_params, blur}, {"dither", "dithers bitmap", dither_params, dither}, {"arithmetic", "arithmetic operation", arithmetic_params, arithmetic}, + {"histogram", "save histogram into image file", histogram_params, histogram}, {"jpg", "save jpg image", save_jpg_params, save_jpg}, {"png", "save png image", save_png_params, save_png}, {NULL, NULL, NULL, NULL} diff --git a/include/filters/GP_Filters.h b/demos/grinder/histogram.c similarity index 52% copy from include/filters/GP_Filters.h copy to demos/grinder/histogram.c index 5bd60a8..24fc9a7 100644 --- a/include/filters/GP_Filters.h +++ b/demos/grinder/histogram.c @@ -16,41 +16,66 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301 USA * * * - * Copyright (C) 2009-2010 Jiri "BlueBear" Dluhos * - * jiri.bluebear.dluhos@gmail.com * - * * * Copyright (C) 2009-2011 Cyril Hrubis metan@ucw.cz * * * *****************************************************************************/
-/* +#include "histogram.h"
- GP_Context filters. +void histogram_to_png(const GP_Context *src, const char *filename) +{ + GP_FILTER_PARAMS(src->pixel_type, params); + + GP_FilterHistogramAlloc(src->pixel_type, params); + GP_FilterHistogram(src, params, NULL);
- */ + unsigned int i, j;
-#ifndef GP_FILTERS_H -#define GP_FILTERS_H + GP_Context *res = GP_ContextAlloc(257*4, 256, GP_PIXEL_RGB888); + + GP_Fill(res, 0xffffff);
-/* Filter per channel parameter passing interface */ -#include "filters/GP_FilterParam.h" + GP_Histogram *hist_r; + hist_r = (GP_FilterParamChannel(params, "R"))->val.ptr; + + for (i = 0; i < hist_r->len; i++) + GP_VLineXYH(res, i, 256, -255.00 * hist_r->hist[i] / hist_r->max + 0.5 , 0xff0000); + + GP_Histogram *hist_g; + hist_g = (GP_FilterParamChannel(params, "G"))->val.ptr; + + for (i = 0; i < hist_g->len; i++) + GP_VLineXYH(res, i+257, 256, -255.00 * hist_g->hist[i] / hist_g->max + 0.5 , 0x00ff00); + + GP_Histogram *hist_b; + hist_b = (GP_FilterParamChannel(params, "B"))->val.ptr; + + for (i = 0; i < hist_b->len; i++) + GP_VLineXYH(res, i+514, 256, -255.00 * hist_b->hist[i] / hist_b->max + 0.5 , 0x0000ff);
-/* Image rotations (90 180 270 grads) and mirroring */ -#include "filters/GP_Rotate.h" + uint32_t max = GP_MAX(hist_r->max, hist_g->max);
-/* Point filters, brightness, contrast ... */ -#include "filters/GP_Point.h" + max = GP_MAX(max, hist_b->max);
-/* Addition, difference, min, max ... */ -#include "filters/GP_Arithmetic.h" + for (i = 0; i < hist_r->len; i++) { + for (j = 0; j < hist_r->len; j++) { + GP_Pixel pix = 0; + + if (255 * hist_r->hist[i] / max + 0.5 > j) + pix |= 0xff0000; + + if (255 * hist_g->hist[i] / max + 0.5 > j) + pix |= 0x00ff00;
-/* Linear convolution based filters (mostly blurs) */ -#include "filters/GP_Linear.h" + if (255 * hist_b->hist[i] / max + 0.5 > j) + pix |= 0x0000ff;
-/* Image scaling (resampling) */ -#include "filters/GP_Resize.h" + GP_PutPixel(res, i+771, 256-j, pix); + } + }
-/* Bitmap dithering */ -#include "filters/GP_Dither.h" + GP_SavePNG(filename, res, NULL);
-#endif /* GP_FILTERS_H */ + GP_ContextFree(res); + GP_FilterHistogramFree(params); +} diff --git a/include/filters/GP_Filters.h b/demos/grinder/histogram.h similarity index 65% copy from include/filters/GP_Filters.h copy to demos/grinder/histogram.h index 5bd60a8..d6fdb4e 100644 --- a/include/filters/GP_Filters.h +++ b/demos/grinder/histogram.h @@ -16,41 +16,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301 USA * * * - * Copyright (C) 2009-2010 Jiri "BlueBear" Dluhos * - * jiri.bluebear.dluhos@gmail.com * - * * * Copyright (C) 2009-2011 Cyril Hrubis metan@ucw.cz * * * *****************************************************************************/
-/* - - GP_Context filters. - - */ - -#ifndef GP_FILTERS_H -#define GP_FILTERS_H - -/* Filter per channel parameter passing interface */ -#include "filters/GP_FilterParam.h" - -/* Image rotations (90 180 270 grads) and mirroring */ -#include "filters/GP_Rotate.h" - -/* Point filters, brightness, contrast ... */ -#include "filters/GP_Point.h" - -/* Addition, difference, min, max ... */ -#include "filters/GP_Arithmetic.h" - -/* Linear convolution based filters (mostly blurs) */ -#include "filters/GP_Linear.h" +#ifndef HISTOGRAM_H +#define HISTOGRAM_H
-/* Image scaling (resampling) */ -#include "filters/GP_Resize.h" +#include <GP.h>
-/* Bitmap dithering */ -#include "filters/GP_Dither.h" +void histogram_to_png(const GP_Context *src, const char *filename);
-#endif /* GP_FILTERS_H */ +#endif /* HISTOGRAM_H */ diff --git a/include/filters/GP_FilterParam.h b/include/filters/GP_FilterParam.h index f997ed5..892f166 100644 --- a/include/filters/GP_FilterParam.h +++ b/include/filters/GP_FilterParam.h @@ -132,6 +132,10 @@ void GP_FilterParamSetUIntAll(GP_FilterParam params[], */ void GP_FilterParamSetPtrAll(GP_FilterParam params[], void *ptr); +/* + * Call free on all pointer values. + */ +void GP_FilterParamFreePtrAll(GP_FilterParam params[]);
/* * Functions to print the array. diff --git a/include/filters/GP_Filters.h b/include/filters/GP_Filters.h index 5bd60a8..d00a852 100644 --- a/include/filters/GP_Filters.h +++ b/include/filters/GP_Filters.h @@ -35,15 +35,18 @@ /* Filter per channel parameter passing interface */ #include "filters/GP_FilterParam.h"
-/* Image rotations (90 180 270 grads) and mirroring */ -#include "filters/GP_Rotate.h" - /* Point filters, brightness, contrast ... */ #include "filters/GP_Point.h"
/* Addition, difference, min, max ... */ #include "filters/GP_Arithmetic.h"
+/* Histograms, ... */ +#include "filters/GP_Stats.h" + +/* Image rotations (90 180 270 grads) and mirroring */ +#include "filters/GP_Rotate.h" + /* Linear convolution based filters (mostly blurs) */ #include "filters/GP_Linear.h"
diff --git a/include/filters/GP_Filters.h b/include/filters/GP_Stats.h similarity index 66% copy from include/filters/GP_Filters.h copy to include/filters/GP_Stats.h index 5bd60a8..6ad62df 100644 --- a/include/filters/GP_Filters.h +++ b/include/filters/GP_Stats.h @@ -16,41 +16,49 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301 USA * * * - * Copyright (C) 2009-2010 Jiri "BlueBear" Dluhos * - * jiri.bluebear.dluhos@gmail.com * - * * * Copyright (C) 2009-2011 Cyril Hrubis metan@ucw.cz * * * *****************************************************************************/
/*
- GP_Context filters. + Statistic filters.
*/
-#ifndef GP_FILTERS_H -#define GP_FILTERS_H - -/* Filter per channel parameter passing interface */ -#include "filters/GP_FilterParam.h" - -/* Image rotations (90 180 270 grads) and mirroring */ -#include "filters/GP_Rotate.h" +#ifndef FILTERS_GP_STATS_H +#define FILTERS_GP_STATS_H
-/* Point filters, brightness, contrast ... */ -#include "filters/GP_Point.h" +#include "GP_Filter.h"
-/* Addition, difference, min, max ... */ -#include "filters/GP_Arithmetic.h" +typedef struct GP_Histogram { + uint32_t min; + uint32_t max; + uint32_t len; + uint32_t hist[]; +} GP_Histogram;
-/* Linear convolution based filters (mostly blurs) */ -#include "filters/GP_Linear.h" +/* + * Histogram filter. + * + * The filter param is expected to hold pointers to struct GP_Histogram + */ +int GP_FilterHistogram(const GP_Context *src, GP_FilterParam histogram[], + GP_ProgressCallback *callback);
-/* Image scaling (resampling) */ -#include "filters/GP_Resize.h" +/* + * Allocate and initalize struct GP_Histogram for each channel and stores the + * pointer to filter params array. The pixel type must match the params[] + * channels. + */ +void GP_FilterHistogramAlloc(GP_PixelType type, GP_FilterParam params[]);
-/* Bitmap dithering */ -#include "filters/GP_Dither.h" +/* + * Free the histogram arrays. + */ +static inline void GP_FilterHistogramFree(GP_FilterParam params[]) +{ + GP_FilterParamFreePtrAll(params); +}
-#endif /* GP_FILTERS_H */ +#endif /* FILTERS_GP_STATS_H */ diff --git a/libs/filters/GP_Brightness.gen.c.t b/libs/filters/GP_Brightness.gen.c.t index b0fa776..7db0fd5 100644 --- a/libs/filters/GP_Brightness.gen.c.t +++ b/libs/filters/GP_Brightness.gen.c.t @@ -6,7 +6,7 @@ Brightness filters -- Increments color channel(s) by a fixed value.
%% block body
-{{ filter_include() }} +{{ filter_point_include() }}
%% macro filter_op(chann_name, chann_size) {{ chann_name }} = {{ chann_name }} + {{ chann_name }}_inc; diff --git a/libs/filters/GP_Contrast.gen.c.t b/libs/filters/GP_Contrast.gen.c.t index 3153db2..dda0b2d 100644 --- a/libs/filters/GP_Contrast.gen.c.t +++ b/libs/filters/GP_Contrast.gen.c.t @@ -6,7 +6,7 @@ Contrast filters -- Multiply color channel(s) by a fixed float value.
%% block body
-{{ filter_include() }} +{{ filter_point_include() }}
%% macro filter_op(chan_name, chan_size) {{ chan_name }} = {{ chan_name }} * {{ chan_name }}_mul + 0.5; diff --git a/libs/filters/GP_FilterParam.c b/libs/filters/GP_FilterParam.c index a07b3de..e968a4b 100644 --- a/libs/filters/GP_FilterParam.c +++ b/libs/filters/GP_FilterParam.c @@ -142,6 +142,14 @@ void GP_FilterParamSetPtrAll(GP_FilterParam params[], params[i].val.ptr = ptr; }
+void GP_FilterParamFreePtrAll(GP_FilterParam params[]) +{ + unsigned int i; + + for (i = 0; params[i].channel_name[0] != '0'; i++) + free(params[i].val.ptr); +} + void GP_FilterParamPrintInt(GP_FilterParam params[]) { unsigned int i; diff --git a/libs/filters/GP_Histogram.gen.c.t b/libs/filters/GP_Histogram.gen.c.t new file mode 100644 index 0000000..cd519d6 --- /dev/null +++ b/libs/filters/GP_Histogram.gen.c.t @@ -0,0 +1,25 @@ +%% extends "filter.stats.c.t" + +%% block descr +Histogram filter -- Compute image histogram. +%% endblock + +%% block body + +{{ filter_stats_include() }} + +%% macro filter_op(chan_name, chan_size) +{{ chan_name }}_hist->hist[{{ chan_name }}]++; +%% endmacro + +%% call(pt) filter_point_per_channel('Histogram', 'GP_FilterParam histogram[]', filter_op) +{{ filter_params(pt, 'histogram', 'GP_Histogram *', '_hist', 'ptr') }} +%% endcall + +%% call(ps) filter_point_per_bpp('Histogram', 'GP_FilterParam histogram[]', filter_op) +{{ filter_param(ps, 'histogram', 'GP_Histogram *', '_hist', 'ptr') }} +%% endcall + +{{ filter_functions('Histogram', 'GP_FilterParam histogram[]', 'histogram') }} + +%% endblock body diff --git a/libs/filters/GP_Invert.gen.c.t b/libs/filters/GP_Invert.gen.c.t index e6d4b24..ed4ce98 100644 --- a/libs/filters/GP_Invert.gen.c.t +++ b/libs/filters/GP_Invert.gen.c.t @@ -6,7 +6,7 @@ Invert filters -- Invert image
%% block body
-{{ filter_include() }} +{{ filter_point_include() }}
%% macro filter_op(chann_name, chann_size) {{ chann_name }} = {{ 2 ** chann_size - 1 }} - {{ chann_name }}; diff --git a/libs/filters/GP_Point.gen.c.t b/libs/filters/GP_Point.gen.c.t index bd41579..1e9af26 100644 --- a/libs/filters/GP_Point.gen.c.t +++ b/libs/filters/GP_Point.gen.c.t @@ -6,7 +6,7 @@ Point filters -- General point filter.
%% block body
-{{ filter_include() }} +{{ filter_point_include() }}
typedef uint32_t (*func)(uint32_t, uint8_t, GP_FilterParam *priv);
diff --git a/include/filters/GP_Filters.h b/libs/filters/GP_Stats.c similarity index 53% copy from include/filters/GP_Filters.h copy to libs/filters/GP_Stats.c index 5bd60a8..df65794 100644 --- a/include/filters/GP_Filters.h +++ b/libs/filters/GP_Stats.c @@ -16,41 +16,72 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301 USA * * * - * Copyright (C) 2009-2010 Jiri "BlueBear" Dluhos * - * jiri.bluebear.dluhos@gmail.com * - * * * Copyright (C) 2009-2011 Cyril Hrubis metan@ucw.cz * * * *****************************************************************************/
-/* +#include <string.h> + +#include <GP_Debug.h> + +#include "GP_Stats.h" + +int GP_FilterHistogram_Raw(const GP_Context *src, GP_FilterParam histogram[], + GP_ProgressCallback *callback); + +int GP_FilterHistogram(const GP_Context *src, GP_FilterParam histogram[], + GP_ProgressCallback *callback) +{ + int ret; + + ret = GP_FilterHistogram_Raw(src, histogram, callback);
- GP_Context filters. + if (ret) + return ret;
- */ + unsigned int i;
-#ifndef GP_FILTERS_H -#define GP_FILTERS_H + for (i = 0; histogram[i].channel_name[0] != '0'; i++) { + unsigned int j; + GP_Histogram *hist = histogram[i].val.ptr; + + hist->max = hist->hist[0]; + hist->min = hist->hist[0];
-/* Filter per channel parameter passing interface */ -#include "filters/GP_FilterParam.h" + for (j = 1; j < hist->len; j++) { + if (hist->hist[j] > hist->max) + hist->max = hist->hist[j];
-/* Image rotations (90 180 270 grads) and mirroring */ -#include "filters/GP_Rotate.h" + if (hist->hist[j] < hist->min) + hist->min = hist->hist[j]; + } + }
-/* Point filters, brightness, contrast ... */ -#include "filters/GP_Point.h" + return 0; +}
-/* Addition, difference, min, max ... */ -#include "filters/GP_Arithmetic.h" +void GP_FilterHistogramAlloc(GP_PixelType type, GP_FilterParam params[]) +{ + uint32_t i;
-/* Linear convolution based filters (mostly blurs) */ -#include "filters/GP_Linear.h" + GP_FilterParamSetPtrAll(params, NULL); + + const GP_PixelTypeChannel *channels = GP_PixelTypes[type].channels;
-/* Image scaling (resampling) */ -#include "filters/GP_Resize.h" + for (i = 0; i < GP_PixelTypes[type].numchannels; i++) { + size_t chan_size = 1<<channels[i].size;
-/* Bitmap dithering */ -#include "filters/GP_Dither.h" + GP_Histogram *hist = malloc(sizeof(struct GP_Histogram) + + sizeof(uint32_t) * chan_size); + + if (hist == NULL) { + GP_FilterHistogramFree(params); + return; + } + + hist->len = chan_size; + memset(hist->hist, 0, sizeof(uint32_t) * chan_size);
-#endif /* GP_FILTERS_H */ + (GP_FilterParamChannel(params, channels[i].name))->val.ptr = hist; + } +} diff --git a/libs/filters/Makefile b/libs/filters/Makefile index d3f68c2..d3b6012 100644 --- a/libs/filters/Makefile +++ b/libs/filters/Makefile @@ -1,5 +1,7 @@ TOPDIR=../..
+STATS_FILTERS=GP_Histogram.gen.c + POINT_FILTERS=GP_Contrast.gen.c GP_Brightness.gen.c GP_Invert.gen.c GP_Point.gen.c
@@ -7,7 +9,7 @@ ARITHMETIC_FILTERS=GP_Difference.gen.c GP_Addition.gen.c GP_Min.gen.c GP_Max.gen.c GP_Multiply.gen.c
GENSOURCES=GP_MirrorV.gen.c GP_Rotate.gen.c GP_Dither.gen.c- $(POINT_FILTERS) $(ARITHMETIC_FILTERS) + $(POINT_FILTERS) $(ARITHMETIC_FILTERS) $(STATS_FILTERS)
CSOURCES=$(filter-out $(wildcard *.gen.c),$(wildcard *.c)) LIBNAME=filters @@ -17,6 +19,7 @@ include $(TOPDIR)/gen.mk include $(TOPDIR)/include.mk include $(TOPDIR)/lib.mk
-$(POINT_FILTERS) $(ARITHMETIC_FILTERS): $(TEMPLATE_DIR)/filter.c.t +$(POINT_FILTERS) $(ARITHMETIC_FILTERS) $(STATS_FILTERS): $(TEMPLATE_DIR)/filter.c.t +$(STATS_FILTERS): $(TEMPLATE_DIR)/filter.stats.c.t $(POINT_FILTERS): $(TEMPLATE_DIR)/filter.point.c.t $(ARITHMETIC_FILTERS): $(TEMPLATE_DIR)/filter.arithmetic.c.t diff --git a/pylib/templates/filter.stats.c.t b/pylib/templates/filter.stats.c.t new file mode 100644 index 0000000..14779a9 --- /dev/null +++ b/pylib/templates/filter.stats.c.t @@ -0,0 +1,102 @@ +%% extends "filter.c.t" + +%% macro filter_stats_include() +{{ filter_include() }} +#include "GP_Stats.h" +%% endmacro + +/* + * Filter per pixel type, used for images with more than one channel per pixel + */ +%% macro filter_point_per_channel(name, opts="", filter_op) +%% for pt in pixeltypes +%% if not pt.is_unknown() and len(pt.chanslist) > 1 +static int GP_Filter{{ name }}_{{ pt.name }}(const GP_Context *src, + {{ maybe_opts_r(opts) }}GP_ProgressCallback *callback) +{ +{{ caller(pt) }} + uint32_t x, y; + + for (y = 0; y < src->h; y++) { + for (x = 0; x < src->w; x++) { + GP_Pixel pix = GP_GetPixel_Raw_{{ pt.pixelsize.suffix }}(src, x, y); + %% for c in pt.chanslist + int32_t {{ c[0] }} = GP_Pixel_GET_{{ c[0] }}_{{ pt.name }}(pix); + %% endfor + + %% for c in pt.chanslist + {{ filter_op(c[0], c[2]) }} + %% endfor + } + + if (GP_ProgressCallbackReport(callback, y, src->h, src->w)) + return 1; + } + + GP_ProgressCallbackDone(callback); + return 0; +} + +%% endif +%% endfor +%% endmacro + +/* + * Point filter per bpp (used for 1 channel pixels to save space). + */ +%% macro filter_point_per_bpp(name, opts="", filter_op) +%% for ps in pixelsizes +%% if ps.size <= 8 and ps.size > 1 +static int GP_Filter{{ name }}_{{ ps.suffix }}(const GP_Context *src, + {{ maybe_opts_r(opts) }}GP_ProgressCallback *callback) +{ +{{ caller(ps) }} + uint32_t x, y; + + for (y = 0; y < src->h; y++) { + for (x = 0; x < src->w; x++) { + int32_t pix = GP_GetPixel_Raw_{{ ps.suffix }}(src, x, y); + {{ filter_op('pix', ps.size) }} + } + + if (GP_ProgressCallbackReport(callback, y, src->h, src->w)) + return 1; + } + + GP_ProgressCallbackDone(callback); + return 0; +} + +%% endif +%% endfor +%% endmacro + +/* + * Switch per pixel sizes or pixel types. + */ +%% macro filter_functions(name, opts="", params="", fmt="") +int GP_Filter{{ name }}_Raw(const GP_Context *src{{ maybe_opts_l(opts) }}, + GP_ProgressCallback *callback) +{ + GP_DEBUG(1, "Running filter {{ name }}"); + + switch (src->pixel_type) { + %% for pt in pixeltypes + case GP_PIXEL_{{ pt.name }}: + %% if pt.is_unknown() or pt.pixelsize.size < 2 + return 1; + %% elif len(pt.chanslist) == 1: + //TODO: BITENDIAN + return GP_Filter{{ name }}_{{ pt.pixelsize.suffix }}(src{{ maybe_opts_l(params) }}, callback); + %% else + return GP_Filter{{ name }}_{{ pt.name }}(src{{ maybe_opts_l(params) }}, callback); + %% endif + %% endfor + default: + break; + } + + return 1; +} + +%% endmacro
-----------------------------------------------------------------------
Summary of changes: demos/grinder/Makefile | 2 +- demos/grinder/grinder.c | 25 +++++++ .../linux_input.c => demos/grinder/histogram.c | 73 ++++++++++++------- libs/core/GP_Debug.c => demos/grinder/histogram.h | 15 ++--- include/filters/GP_FilterParam.h | 4 + include/filters/GP_Filters.h | 9 ++- include/{loaders/GP_JPG.h => filters/GP_Stats.h} | 52 +++++++------ libs/filters/GP_Brightness.gen.c.t | 2 +- libs/filters/GP_Contrast.gen.c.t | 2 +- libs/filters/GP_FilterParam.c | 8 ++ libs/filters/GP_Histogram.gen.c.t | 25 +++++++ libs/filters/GP_Invert.gen.c.t | 2 +- libs/filters/GP_Point.gen.c.t | 2 +- .../linux_input.c => libs/filters/GP_Stats.c | 75 +++++++++++++------- libs/filters/Makefile | 7 ++- .../{filter.point.c.t => filter.stats.c.t} | 47 ++----------- 16 files changed, 214 insertions(+), 136 deletions(-) copy tests/drivers/linux_input.c => demos/grinder/histogram.c (53%) copy libs/core/GP_Debug.c => demos/grinder/histogram.h (88%) copy include/{loaders/GP_JPG.h => filters/GP_Stats.h} (66%) create mode 100644 libs/filters/GP_Histogram.gen.c.t copy tests/drivers/linux_input.c => libs/filters/GP_Stats.c (54%) copy pylib/templates/{filter.point.c.t => filter.stats.c.t} (61%)
repo.or.cz automatic notification. Contact project admin jiri.bluebear.dluhos@gmail.com if you want to unsubscribe, or site admin admin@repo.or.cz if you receive no reply.