Compare commits

..

No commits in common. "e0d154c37ef3eecef043540bac078fb097f5f344" and "89c49282f18d27a86c17f61e1c3b3b76bb80820f" have entirely different histories.

7 changed files with 31 additions and 146 deletions

View File

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

View File

@ -10,60 +10,13 @@ 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 il est wrappable dans des scripts Rassurez-vous, en général ils sont wrappables dans des scripts
écrits en Bash. Il est même possible un jour qu'ils puissent lire des shell. 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
```
## exemple d'utilisation ## crapulator
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. Il est, à l'heure actuelle, aussi bien en entrée qu'en sortie.
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; int retval, foo;
// FloatImg imgtmp; FloatImg imgtmp;
static int count = 0; static int count = 0;
int flag_debug = 0; int flag_debug = 0;
@ -116,10 +116,6 @@ 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,8 +40,6 @@ 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, float fval) int insert_blank(FloatImg *image, int nbre, int pproc)
{ {
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, fval); fimg_vdeg_a(image, 16.64);
// 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 30 #define BLANK 40
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,12 +71,11 @@ 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 eff:%d:%d)\n", __func__, fprintf(stderr, ">>> %s ( '%s' -> '%s' %d )\n", __func__,
pattern, outdir, szfifo, infx, outfx); pattern, outdir, szfifo);
#endif #endif
if (1 != step) fprintf(stderr, "\tstep is %d\n", step); if (1 != step) fprintf(stderr, "\tstep is %d\n", step);
@ -95,29 +94,21 @@ 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]; height = datas[1]; width = datas[0];
fprintf(stderr, "image size %dx%d\n", width, height); height = datas[1];
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);
/* XXX inject a few strange pics in the fifo */ fimg_create(&input, width, height, 3);
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);
@ -125,6 +116,7 @@ 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);
@ -132,6 +124,7 @@ 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);
@ -139,13 +132,10 @@ 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*2, outfx, maxvalue); insert_blank(&input, BLANK, outfx);
/*
* PLEASE, FLUSH THE FIFO !
*/
fin = fimg_timer_get(0); fin = fimg_timer_get(0);
if (idx) { if (idx) {

View File

@ -13,41 +13,12 @@
#include "fonctions.h" #include "fonctions.h"
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
/* here are global vars exported by the main module /* global vars from main
*/ */
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,29 +22,6 @@ 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...