diff --git a/Fonderie/crapulator.c b/Fonderie/crapulator.c index 71fd9dd..531a0aa 100644 --- a/Fonderie/crapulator.c +++ b/Fonderie/crapulator.c @@ -165,6 +165,7 @@ switch (idFx) { break; case 12: retval = fimg_lissage_2x2(image); + (void)fimg_killborders(image); break; case 13: retval = insitu_filtre3x3(image); @@ -176,6 +177,12 @@ switch (idFx) { retval = kill_a_few_lines(image, fval, image->height/20); break; + case 16: + retval = bouger_les_pixels(image, 6); + break; + case 17: + retval = mirror_split(image, 0); + break; /* here are the glitches */ case 24: /* experiment ! */ diff --git a/Fonderie/filterstack.c b/Fonderie/filterstack.c index 11d6c47..116c24a 100644 --- a/Fonderie/filterstack.c +++ b/Fonderie/filterstack.c @@ -17,107 +17,105 @@ extern int verbosity; -static FilterSlot *stack_slots; -static int nbre_filters, idx_slot; -/* -------------------------------------------------------------- */ -int filterstack_init(int nbre) -{ -FilterSlot *fsptr; +static FilterStack f_stacks[NUMBER_OF_STACK]; +/* -------------------------------------------------------------- */ +int filterstack_init(int numid, int nbre) +{ #if DEBUG_LEVEL -fprintf(stderr, ">>> %s ( %d )\n", __func__, nbre); +fprintf(stderr, ">>> %s ( %d %d )\n", __func__, numid, nbre); #endif -if (NULL != stack_slots) { - fprintf(stderr, "ERR stack_slots = %p\n",stack_slots); - return -1; - } -fsptr = calloc(nbre, sizeof(FilterSlot)); -if (NULL == fsptr) { - fprintf(stderr, "%s : no memory\n", __func__); +if (numid < 0 || numid > NUMBER_OF_STACK) { + fprintf(stderr, "%s: slot number %d invalid\n", __func__, numid); exit(1); } -stack_slots = fsptr; -nbre_filters = nbre; -idx_slot = 0; - -fprintf(stderr, "%s: stack at %p\n", __func__, stack_slots); +memset(&f_stacks[numid], 0, sizeof(FilterSlot)); return 0; } /* -------------------------------------------------------------- */ -int filterstack_add(int code, int ival, float fval) +int filterstack_add(int numid, int code, int ival, float fval) { +int idxsl; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( %d %d %f )\n", __func__, code, ival, fval); #endif -if (NULL==stack_slots) { - fprintf(stderr, "%s: NULL statck !\n", __func__); +if (numid < 0 || numid > NUMBER_OF_STACK) { + fprintf(stderr, "%s: slot number %d invalid\n", __func__, numid); exit(1); } -if (idx_slot == nbre_filters) { + +if (f_stacks[numid].count == FILTER_BY_STACK) { fprintf(stderr, "%s: stack is full\n", __func__); return -1; } -stack_slots[idx_slot].numero = code; -stack_slots[idx_slot].ival = ival; -stack_slots[idx_slot].fval = fval; +idxsl = f_stacks[numid].count; /* aliasing */ -idx_slot++; +f_stacks[numid].slots[idxsl].numero = code; +f_stacks[numid].slots[idxsl].ival = ival; +f_stacks[numid].slots[idxsl].fval = fval; + +f_stacks[numid].count++; return 0; } /* -------------------------------------------------------------- */ -int filterstack_list(const char *txt) +int filterstack_list(int numid, const char *txt) { int idx; -if (NULL==stack_slots) { - fprintf(stderr, "%s: NULL statck !\n", __func__); +if (numid < 0 || numid > NUMBER_OF_STACK) { + fprintf(stderr, "%s: slot number %d invalid\n", __func__, numid); exit(1); } -fprintf(stderr, "------- %-20s --------\n", txt); -fprintf(stderr, "stack at %p, size %d, current %d\n", - stack_slots, nbre_filters, idx_slot); +fprintf(stderr, "--- %2d -- %-20s --------\n", numid, txt); +// fprintf(stderr, "stack at %p, size %d, current %d\n", +// f_slots, nbre_filters, idx_slot); fprintf(stderr, "idx fx# name ival fval\n"); -for (idx=0; idx>> %s ( %p %d )\n", __func__, target, notused); #endif -if (NULL==stack_slots) { - fprintf(stderr, "%s: NULL statck !\n", __func__); +if (numid < 0 || numid > NUMBER_OF_STACK) { + fprintf(stderr, "%s: slot number %d invalid\n", __func__, numid); exit(1); } -for (idx=0; idx 1) fprintf(stderr, "%d : effect %2d on %p\n", - idx, stack_slots[idx].numero, target); + idx, eff, target); + + foo = crapulator(target, eff, fv); - foo = crapulator(target, stack_slots[idx].numero, - stack_slots[idx].fval); if (foo) { fprintf(stderr, "crapulator error %d\n", foo); return foo; @@ -127,7 +125,7 @@ for (idx=0; idx>> %s ( '%s' %d )\n", __func__, fname, notused); #endif -if (NULL==stack_slots) { - fprintf(stderr, "%s: NULL statck !\n", __func__); +if (numid < 0 || numid > NUMBER_OF_STACK) { + fprintf(stderr, "%s: slot number %d invalid\n", __func__, numid); exit(1); } @@ -151,8 +149,6 @@ if (NULL==(fp=fopen(fname, "r"))) { /* * here was dragons */ - - /* hadoc parser ? */ fclose(fp); @@ -160,14 +156,19 @@ fclose(fp); return -1; } /* -------------------------------------------------------------- */ -int parse_filter_chain(const char *argument) +int parse_filter_chain(int numid, char *argument) { char *cptr; int value, foo; +if (numid < 0 || numid > NUMBER_OF_STACK) { + fprintf(stderr, "%s: slot number %d invalid\n", __func__, numid); + exit(1); + } + fprintf(stderr, "\n%s: arg = '%s'\n", __func__, argument); -foo = filterstack_init(8); +foo = filterstack_init(numid, 8); if (foo) { fprintf(stderr, "%s: filterstack init --> %d\n", __func__, foo); return foo; @@ -180,7 +181,7 @@ for (;;) { argument = NULL; // fprintf(stderr, " parsing '%s'\n", cptr); if (1 == sscanf(cptr, "%d", &value)) { - foo = filterstack_add(value, 1, 1.0); + foo = filterstack_add(numid, value, 1, 1.0); if (foo) { fprintf(stderr, "%s: err %d add\n", __func__, foo); @@ -188,7 +189,7 @@ for (;;) { } } -if (verbosity) filterstack_list(__func__); +if (verbosity) filterstack_list(numid, __func__); return 0; } /* ----------------------------------------------------------- */ diff --git a/Fonderie/filterstack.h b/Fonderie/filterstack.h index 18cb7d7..bc787c2 100644 --- a/Fonderie/filterstack.h +++ b/Fonderie/filterstack.h @@ -8,16 +8,23 @@ typedef struct { float fval; } FilterSlot; +#define NUMBER_OF_STACK 8 +#define FILTER_BY_STACK 8 -int filterstack_init(int nbre); +typedef struct { + int count; + FilterSlot slots[FILTER_BY_STACK]; + } FilterStack; -int filterstack_add(int code, int ival, float fval); +int filterstack_init(int numid, int nbre); -int filterstack_list(const char *txt); /* XXX */ +int filterstack_add(int numid, int code, int ival, float fval); -int filterstack_run(FloatImg *target, int notused); +int filterstack_list(int numid, const char *txt); /* XXX */ -int load_stack_from_file(char *fname, int notused); +int filterstack_run(int numid, FloatImg *target, int notused); -int parse_filter_chain(const char *argument); +int load_stack_from_file(int numid, char *fname, int notused); + +int parse_filter_chain(int numid, char *argument); diff --git a/Fonderie/fonderie.c b/Fonderie/fonderie.c index c6cdb28..bbc815e 100644 --- a/Fonderie/fonderie.c +++ b/Fonderie/fonderie.c @@ -81,7 +81,7 @@ if (1 != step) fprintf(stderr, "\tstep is %d\n", step); (void)fimg_timer_set(0); -if (infx) fprintf(stderr, "\tin fx #%d\n", infx); +if (infx) fprintf(stderr, "\tin fx #%d\n", infx); else fprintf(stderr, "\tno in fx\n"); if (outfx) fprintf(stderr, "\tout fx #%d\n", outfx); else fprintf(stderr, "\tno out fx\n"); diff --git a/Fonderie/glitches.c b/Fonderie/glitches.c index 273d70b..21bc8a1 100644 --- a/Fonderie/glitches.c +++ b/Fonderie/glitches.c @@ -120,7 +120,7 @@ return -1; /* * used by vertical_singlitch() */ -int x_delta(float dy, float phy) +static int x_delta(float dy, float phy) { float param, fv; param = dy + phy; diff --git a/Fonderie/interpolator.c b/Fonderie/interpolator.c index 30d53bd..4abc944 100644 --- a/Fonderie/interpolator.c +++ b/Fonderie/interpolator.c @@ -181,7 +181,7 @@ for (idx=0; idx %d\n", foo); return foo; @@ -269,7 +269,7 @@ if (3 != (argc-optind)) { exit(1); } -foo = parse_filter_chain(filterchain); +foo = parse_filter_chain(0, filterchain); if (foo) { fprintf(stderr, "err %d parsing '%s'\n", foo, filterchain); exit(1); diff --git a/Fonderie/metriques.c b/Fonderie/metriques.c index c83eab2..320902c 100644 --- a/Fonderie/metriques.c +++ b/Fonderie/metriques.c @@ -59,7 +59,20 @@ if (foo) { return foo; } fval = -1.0; /* sensible default value */ -foo = get_float_metric_b(&image, &fval); +switch (mode) { + case 1: + foo = get_float_metric_a(&image, &fval); + break; + case 2: + foo = get_float_metric_b(&image, &fval); + break; + default: + fprintf(stderr, "%s: method %d invalid\n", + __func__, mode); + exit(1); + break; /* not reached */ + } + *where = fval; fimg_destroy(&image); diff --git a/Fonderie/sfx.c b/Fonderie/sfx.c index 0d49249..d201536 100644 --- a/Fonderie/sfx.c +++ b/Fonderie/sfx.c @@ -18,6 +18,63 @@ */ extern int verbosity; +/* -------------------------------------------------------------- */ +/* nouveau du 9 decembre 2020, en ecoutant le Fermion raconter du + superbe portnawak */ +int bouger_les_pixels(FloatImg *pimg, int intensite) +{ +int x, y, nx, ny; +float rgb[3]; + +#if DEBUG_LEVEL +fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pimg, intensite); +#endif + +if (intensite < 1) { + fprintf(stderr, "%s: %d bad intensity\n", __func__, intensite); + return -1; + } + +for (x=0; xwidth; x++) { + for (y=0; yheight; y++) { + + nx = x+(rand()%intensite)-(intensite/2); + ny = y+(rand()%intensite)-(intensite/2); + + if ( nx<0 || ny<0 || nx>=pimg->width + || ny>=pimg->height ) + continue; + + fimg_get_rgb(pimg, nx, ny, rgb); + fimg_put_rgb(pimg, x, y, rgb); + + } + } + +return 0; +} +/* -------------------------------------------------------------- */ +/* nouveau du 9 decembre 2020, en ecoutant les Cernettes */ +int mirror_split(FloatImg *pimg, int kaboo) +{ +int line, x, xs, xd; + +#if DEBUG_LEVEL +fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pimg, kaboo); +#endif + +for (line=0; lineheight; line++) { + for (x=0; xwidth/2; x++) { + xs = (pimg->width * line) + x; + xd = (pimg->width * line) + (pimg->width -x); + pimg->R[xd] = pimg->R[xs]; + pimg->G[xd] = pimg->G[xs]; + pimg->B[xd] = pimg->B[xs]; + } + } + +return 0; +} /* -------------------------------------------------------------- */ /* nouveau du 20 novembre 2020, pour encoder une vidz du vernissage * du festival Sauvageonnes de Mixart-Myrys */ diff --git a/Fonderie/sfx.h b/Fonderie/sfx.h index 9e14405..e54c911 100644 --- a/Fonderie/sfx.h +++ b/Fonderie/sfx.h @@ -3,6 +3,10 @@ */ +int bouger_les_pixels(FloatImg *pimg, int kaboo); + +int mirror_split(FloatImg *pimg, int kaboo); + int des_bords_sombres_a(FloatImg *pimg, int offset); int trinarize(FloatImg *pimg, int notused); // in sfx.c diff --git a/Fonderie/t.c b/Fonderie/t.c index f44824c..fd222c1 100644 --- a/Fonderie/t.c +++ b/Fonderie/t.c @@ -23,6 +23,8 @@ int convert_to_gray; /* WTF ? */ #define LMAX 255.0 #define TIMER 1 +#define STK 0 + /* ----------------------------------------------------------- */ int essai_filterstack(char *fname) @@ -31,7 +33,7 @@ int foo; FloatImg image; double debut, fin; -filterstack_list(__func__); +filterstack_list(STK, __func__); foo = fimg_create_from_dump(fname, &image); if (foo) { @@ -43,7 +45,7 @@ srand(getpid()); srand48(getpid()); debut = fimg_timer_set(TIMER); -foo = filterstack_run(&image, 0); +foo = filterstack_run(STK, &image, 0); if (foo) { fprintf(stderr, "filterstack run --> %d\n", foo); return foo; @@ -92,7 +94,7 @@ while ((opt = getopt(argc, argv, "hF:v")) != -1) { fprintf(stderr, "%s : argc = %d, optind = %d\n", argv[0], argc, optind); #endif -foo = parse_filter_chain(filterchain); +foo = parse_filter_chain(STK, filterchain); if (foo) { fprintf(stderr, "err %d in parse_filter_chain\n", foo); exit(1);