Compare commits

..

7 Commits

Author SHA1 Message Date
e0d154c37e is fonderie ok ? 2020-11-05 21:07:38 +01:00
c9de7cdc80 + some sample script code 2020-11-05 18:24:05 +01:00
014b1cc47a cleaning the Makefile 2020-11-05 18:17:14 +01:00
cd8346362e more bla bla 2020-11-05 17:33:50 +01:00
a940bba100 fixing a gruik bug 2020-11-05 12:54:08 +01:00
5b0670006a added binarize function 2020-11-05 12:48:35 +01:00
3cb969866f some fine explanations 2020-11-04 19:29:07 +01:00
7 changed files with 146 additions and 31 deletions

View File

@ -1,20 +1,20 @@
COPT = -g -no-pie -Wall -O3 -DDEBUG_LEVEL=0 -Werror=parentheses COPT = -g -no-pie -Wall -DDEBUG_LEVEL=0 -Werror=parentheses
LIBS = -lfloatimg -lpnglite -lm LIBS = -lfloatimg -lpnglite -lm
OBJS = fonctions.o sfx.o crapulator.o OBJS = fonctions.o sfx.o crapulator.o
DEPS = fonctions.h crapulator.h DEPS = fonctions.h crapulator.h
fonderie: fonderie.c fonctions.h ${OBJS} Makefile fonderie: fonderie.c ${DEPS} ${OBJS} Makefile
gcc ${COPT} $< ${OBJS} ${LIBS} -o $@ gcc ${COPT} $< ${OBJS} ${LIBS} -o $@
crapulator.o: crapulator.c ${DEPS} crapulator.o: crapulator.c ${DEPS} Makefile
gcc ${COPT} -c $< gcc ${COPT} -c $<
fonctions.o: fonctions.c fonctions.h Makefile fonctions.o: fonctions.c ${DEPS} Makefile
gcc ${COPT} -c $< gcc ${COPT} -c $<
sfx.o: sfx.c fonctions.h Makefile sfx.o: sfx.c ${DEPS} Makefile
gcc ${COPT} -c $< gcc ${COPT} -c $<
# --------------------------------------------------------- # ---------------------------------------------------------

View File

@ -10,13 +10,60 @@ de **films flous**.
Le programme principal, utilisé à partir de la ligne de commande Le programme principal, utilisé à partir de la ligne de commande
avec une foule d'options aux mnémoniques abscons. avec une foule d'options aux mnémoniques abscons.
Rassurez-vous, en général ils sont wrappables dans des scripts Rassurez-vous, en général il est wrappable dans des scripts
shell. Il est même possible un jour qu'ils puissent lire des écrits en Bash. Il est même possible un jour qu'ils puissent lire des
paramètres dans `$(env)`. paramètres dans `$(env)`.
```
tth@delirium:~/Devel/FloatImg/Fonderie$ ./fonderie -h
*** ./fonderie :
compiled by tTh, Nov 3 2020 03:42:29
pid 3424
*** FloatImg library, alpha v112 (Nov 2 2020, 00:31:33)
FONDERIE
options:
-g convert to gray
-I input glob pattern
-O output directory
-T fifo size
-v increase verbosity
-w input effect
-x output effect
```
## crapulator ## exemple d'utilisation
Voici comment appeler ce truc depuis la ligne de commande
tel qu'il m'arrive de pratiquer :
```
#!/bin/bash
GRABDIR="/spool/tth/fonderie"
FONDEUR="$HOME/Devel/FloatImg/Fonderie/fonderie"
GLOB=${GRABDIR}'/?????.fimg'
${FONDEUR} -v -T 40 -I "$GLOB" -w 10 -x 0
```
Ensuite il suffit d'encoder toutes les images générées dans
`p8/` (répertoire de sortie par défaut
avec une incantation de ffmpeg :
```
ffmpeg -nostdin \
-loglevel error \
-y -r 30 -f image2 -i p8/%05d.png \
-c:v libx264 -pix_fmt yuv420p \
foo.mp4
```
## crapulator.c
C'est dans ce module qu'est codé le moteur de filtrage, utilisé C'est dans ce module qu'est codé le moteur de filtrage, utilisé
aussi bien en entrée qu'en sortie. aussi bien en entrée qu'en sortie. Il est, à l'heure actuelle,
assez rudimentaire, avec un paramétrage simpliste, et un manque
criant de documentation...
**Use the source, Luke**

View File

@ -55,8 +55,8 @@ return 0;
*/ */
int crapulator(FloatImg *image, int idFx, float fval) int crapulator(FloatImg *image, int idFx, float fval)
{ {
int retval, foo; int retval;
FloatImg imgtmp; // FloatImg imgtmp;
static int count = 0; static int count = 0;
int flag_debug = 0; int flag_debug = 0;
@ -116,6 +116,10 @@ switch (idFx) {
} }
break; break;
case 10:
retval = binarize(image, 0);
break;
default : default :
fprintf(stderr, "%s : effect #%d invalid\n", fprintf(stderr, "%s : effect #%d invalid\n",
__func__, idFx); __func__, idFx);

View File

@ -40,6 +40,8 @@ int create_fifo(int nbslot, int w, int h, int t);
* funcs in 'sfx.c' * funcs in 'sfx.c'
*/ */
int binarize(FloatImg *pimg, int notused);
int brotche_rand48_a(FloatImg *fimg, float ratio, float mval); int brotche_rand48_a(FloatImg *fimg, float ratio, float mval);
int brotche_rand48_b(FloatImg *fimg, float ratio, float mval); int brotche_rand48_b(FloatImg *fimg, float ratio, float mval);
int colors_brotcher(FloatImg *fimg, float fval); int colors_brotcher(FloatImg *fimg, float fval);

View File

@ -41,13 +41,13 @@ numero++; /* VERY IMPORTANT :) */
return 0; return 0;
} }
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
int insert_blank(FloatImg *image, int nbre, int pproc) int insert_blank(FloatImg *image, int nbre, int pproc, float fval)
{ {
int idx, foo; int idx, foo;
fimg_clear(image); fimg_clear(image);
for (idx=0; idx<nbre; idx++) { for (idx=0; idx<nbre; idx++) {
fimg_vdeg_a(image, 16.64); fimg_vdeg_a(image, fval);
// brotche_rand48_b(image, drand48()*0.10, 1e5); // brotche_rand48_b(image, drand48()*0.10, 1e5);
if ((foo=traite_une_image(image, pproc, 1))) { if ((foo=traite_une_image(image, pproc, 1))) {
fprintf(stderr, "%s : err %d from 'traite_une_image'\n", fprintf(stderr, "%s : err %d from 'traite_une_image'\n",
@ -61,7 +61,7 @@ puts("");
return 0; return 0;
} }
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
#define BLANK 40 #define BLANK 30
int demarre_la_machine(char *pattern, char *outdir, int szfifo, int demarre_la_machine(char *pattern, char *outdir, int szfifo,
int infx, int outfx, int step) int infx, int outfx, int step)
@ -71,11 +71,12 @@ glob_t globbuf;
char *cptr; char *cptr;
FloatImg input; FloatImg input;
double fin; double fin;
float maxvalue;
int datas[3]; int datas[3];
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' -> '%s' %d )\n", __func__, fprintf(stderr, ">>> %s ( '%s' -> '%s' %d eff:%d:%d)\n", __func__,
pattern, outdir, szfifo); pattern, outdir, szfifo, infx, outfx);
#endif #endif
if (1 != step) fprintf(stderr, "\tstep is %d\n", step); if (1 != step) fprintf(stderr, "\tstep is %d\n", step);
@ -94,21 +95,29 @@ fprintf(stderr, "glob '%s' -> %d, %ld files found\n", pattern, foo,
/* get the size of the inputs images */ /* get the size of the inputs images */
foo = fimg_fileinfos(globbuf.gl_pathv[0], datas); foo = fimg_fileinfos(globbuf.gl_pathv[0], datas);
width = datas[0]; width = datas[0]; height = datas[1];
height = datas[1]; fprintf(stderr, "image size %dx%d\n", width, height);
fimg_create(&input, width, height, 3);
/* get the maximum value of the first pic */
foo = fimg_load_from_dump(globbuf.gl_pathv[0], &input);
if (foo) {
fprintf(stderr, "%s: err %d loading %s\n",
__func__, foo, globbuf.gl_pathv[0]);
exit(1);
}
maxvalue = fimg_get_maxvalue(&input);
fprintf(stderr, "maxvalue %f\n", maxvalue);
foo = create_fifo(szfifo, width, height, FIMG_TYPE_RGB); foo = create_fifo(szfifo, width, height, FIMG_TYPE_RGB);
fprintf(stderr, "init fifo (%d slots) --> %d\n", szfifo, foo); fprintf(stderr, "init fifo (%d slots) --> %d\n", szfifo, foo);
fimg_create(&input, width, height, 3); /* XXX inject a few strange pics in the fifo */
insert_blank(&input, BLANK, outfx, maxvalue);
/* XXX inject a few stange pics in the fifo */
insert_blank(&input, BLANK, outfx);
for (idx=0; idx<globbuf.gl_pathc; idx++) { for (idx=0; idx<globbuf.gl_pathc; idx++) {
cptr = globbuf.gl_pathv[idx]; cptr = globbuf.gl_pathv[idx];
/* first step : read the current grabed picz from disk, /* first step : read the current grabed picz from disk,
and put it in our private buffer */ and put it in our private buffer */
foo = fimg_load_from_dump(cptr, &input); foo = fimg_load_from_dump(cptr, &input);
@ -116,7 +125,6 @@ for (idx=0; idx<globbuf.gl_pathc; idx++) {
fprintf(stderr, "load #%d from dump -> %d\n", idx, foo); fprintf(stderr, "load #%d from dump -> %d\n", idx, foo);
continue; continue;
} }
/* ========================= */ /* ========================= */
/* FSCKING INPUT FILTER HERE */ /* FSCKING INPUT FILTER HERE */
foo = crapulator(&input, infx, 0.42); foo = crapulator(&input, infx, 0.42);
@ -124,7 +132,6 @@ for (idx=0; idx<globbuf.gl_pathc; idx++) {
fprintf(stderr, "%s crapulator -> %d\n", __func__, foo); fprintf(stderr, "%s crapulator -> %d\n", __func__, foo);
exit(1); exit(1);
} }
foo = traite_une_image(&input, outfx, step); foo = traite_une_image(&input, outfx, step);
if (foo) { if (foo) {
fprintf(stderr, "traitement %s -> %d WTF?\n", cptr, foo); fprintf(stderr, "traitement %s -> %d WTF?\n", cptr, foo);
@ -132,10 +139,13 @@ for (idx=0; idx<globbuf.gl_pathc; idx++) {
} }
fprintf(stderr, "\t%5d\r", idx); fprintf(stderr, "\t%5d\r", idx);
} }
fputs("\n", stderr); fputs("\n", stderr);
insert_blank(&input, BLANK, outfx); insert_blank(&input, BLANK*2, outfx, maxvalue);
/*
* PLEASE, FLUSH THE FIFO !
*/
fin = fimg_timer_get(0); fin = fimg_timer_get(0);
if (idx) { if (idx) {

View File

@ -13,12 +13,41 @@
#include "fonctions.h" #include "fonctions.h"
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
/* global vars from main /* here are global vars exported by the main module
*/ */
extern int verbosity; extern int verbosity;
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
int binarize(FloatImg *pimg, int notused)
{
float mm[6], mR, mG, mB;
int foo, size;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %d )\n", __func__, pimg, notused);
#endif
foo = fimg_get_minmax_rgb(pimg, mm);
mR = (mm[1] - mm[0]) / 2.0;
mG = (mm[3] - mm[2]) / 2.0;
mB = (mm[5] - mm[4]) / 2.0;
if (verbosity > 1)
fprintf(stderr, "%s: %f %f %f\n", __func__, mR, mG, mB);
size = pimg->width * pimg->height;
for (foo=0; foo<size; foo++) {
if (pimg->R[foo] < mR) pimg->R[foo] = mm[0];
else pimg->R[foo] = mm[1];
if (pimg->G[foo] < mG) pimg->G[foo] = mm[2];
else pimg->G[foo] = mm[3];
if (pimg->B[foo] < mB) pimg->B[foo] = mm[4];
else pimg->B[foo] = mm[5];
}
return 0;
}
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
int brotche_rand48_a(FloatImg *fimg, float ratio, float mval) int brotche_rand48_a(FloatImg *fimg, float ratio, float mval)
{ {

View File

@ -22,6 +22,29 @@ Par ailleurs, d'autres expérimentations sont
sur le traitement et l'assemblage de ces images floues dans le but de faire sur le traitement et l'assemblage de ces images floues dans le but de faire
des films flous. des films flous.
Un logiciel à base de [moyenne mobile](fonderie/) est en bonne voie.
*En avant vers l'infini, et au-delà...* *En avant vers l'infini, et au-delà...*
## Dépendances
Bien entendu, avant tout, il faut installer quelques outils et
dépendances. Je vais tenter de les lister dans le plus grand
désordre (à la sauce Debian) :
- libtiff-dev
- libpnglite-dev
- liblo-dev
- libv4l2-dev
Certains outils externes sont aussi utiles :
- gnuplot
- ImageMagick
- LaTeX
## Documentation
Encore trop légère, mais déja [présente](doc/).
C'est à vous de compiler le
[PDF](http://la.buvette.org/photos/cumul/the_floatimg_hack.pdf)
Your mileage may vary...