Compare commits

...

5 Commits

Author SHA1 Message Date
152bb72522 some bla... 2020-12-19 08:48:56 +01:00
cc897b7a94 no more useless message, again 2020-12-19 08:48:17 +01:00
77300f77ba no more useless message 2020-12-18 12:16:24 +01:00
e3369b8bf6 +#include "filterstack.h" 2020-12-18 12:15:32 +01:00
d369babbb3 + upside-down 2020-12-18 10:18:09 +01:00
8 changed files with 95 additions and 17 deletions

View File

@ -5,10 +5,27 @@ savons faire des images **floues***. L'étape suivante, les plus
pervers d'entre vous le savent déja, est celle de la création pervers d'entre vous le savent déja, est celle de la création
de **films flous**. de **films flous**.
À l'heure actuelle, il y a deux programmes distincts. Le premier
(fonderie) fait une moyenne mobile sur N images consécutives,
et le second (interpolator) fait un fondu-enchainé de N pas
entre deux images consécutives.
Mais avant et après un de ces deux traitements, il y a des chaines
de filtres...
## Chaine de filtres
Ce système connait un certain nombre de filtres et d'effets spéciaux
destinés à la kitchitude du produit final. Ils peuvent être chainés
les uns après les autres, à l'entrée et à la sortie du process
de floutagement.
## Fonderie ## Fonderie
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 et à la syntaxe
perverse.
Rassurez-vous, en général il est wrappable dans des scripts Rassurez-vous, en général il est wrappable dans des scripts
écrits en Bash. 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
@ -27,8 +44,8 @@ options:
-O output directory -O output directory
-T fifo size -T fifo size
-v increase verbosity -v increase verbosity
-w input effect -E input effect chain
-x output effect -F output effect chain
``` ```
## exemple d'utilisation ## exemple d'utilisation
@ -43,10 +60,11 @@ GRABDIR="/spool/tth/fonderie"
FONDEUR="$HOME/Devel/FloatImg/Fonderie/fonderie" FONDEUR="$HOME/Devel/FloatImg/Fonderie/fonderie"
GLOB=${GRABDIR}'/?????.fimg' GLOB=${GRABDIR}'/?????.fimg'
${FONDEUR} -v -T 40 -I "$GLOB" -w 10 -x 0 ${FONDEUR} -T 40 -I "$GLOB" -E 10 -T 30 -F 2:7
``` ```
Ensuite il suffit d'encoder toutes les images générées dans Votre machine va maintenant mouliner avec entrain, et
ensuite il suffit d'encoder toutes les images générées dans
`p8/` (répertoire de sortie par défaut) `p8/` (répertoire de sortie par défaut)
avec une incantation de ffmpeg : avec une incantation de ffmpeg :
@ -58,7 +76,7 @@ ffmpeg -nostdin \
foo.mp4 foo.mp4
``` ```
## crapulator.c ## 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. Il est, à l'heure actuelle,
@ -67,12 +85,10 @@ criant de documentation...
## Interpolator ## Interpolator
Un logiciel dont l'inspiration vient du passé et d'importantes Un logiciel dont l'inspiration vient du passé et les améliorations
amélioration de Terre-Blanque, ça ne peut d'une résidence à Terre-Blanque, ça ne peut pas être complètement
pas être complètement malsain. malsain.
Mais il reste encore pas mal de choses à faire pour le mettre
en prod' un trolldi soir.
## Conclusion ## Conclusion

View File

@ -183,6 +183,9 @@ switch (idFx) {
case 17: case 17:
retval = mirror_split(image, 0); retval = mirror_split(image, 0);
break; break;
case 18:
retval = upside_down(image);
break;
/* here are the glitches */ /* here are the glitches */
case 24: /* experiment ! */ case 24: /* experiment ! */
@ -217,6 +220,7 @@ switch (num) {
case 0: return "none"; case 0: return "none";
case 8: return "ctr2x2"; case 8: return "ctr2x2";
case 13: return "fltr3x3"; case 13: return "fltr3x3";
case 18: return "updown";
} }
return "???"; return "???";

View File

@ -76,7 +76,7 @@ if (numid < 0 || numid > NUMBER_OF_STACK) {
fprintf(stderr, "--- %2d -- %-20s --------\n", numid, txt); fprintf(stderr, "--- %2d -- %-20s --------\n", numid, txt);
// fprintf(stderr, "stack at %p, size %d, current %d\n", // fprintf(stderr, "stack at %p, size %d, current %d\n",
// f_slots, nbre_filters, idx_slot); // f_slots, nbre_filters, idx_slot);
fprintf(stderr, "idx fx# name ival fval\n"); fprintf(stderr, "idx ___ fx# _ name ________ ival _ fval ___\n");
for (idx=0; idx<f_stacks[numid].count; idx++) { for (idx=0; idx<f_stacks[numid].count; idx++) {
@ -122,7 +122,9 @@ for (idx=0; idx<f_stacks[numid].count; idx++) {
foo = crapulator(target, eff, fv); foo = crapulator(target, eff, fv);
if (foo) { if (foo) {
fprintf(stderr, "crapulator error %d\n", foo); fprintf(stderr,
"crapulator give me error %d on effect %d\n",
foo, eff);
return foo; return foo;
} }
} }

View File

@ -12,6 +12,7 @@
#include "fonctions.h" #include "fonctions.h"
#include "crapulator.h" #include "crapulator.h"
#include "filterstack.h"
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
/* global vars from main /* global vars from main

View File

@ -76,7 +76,8 @@ for (idx=0; idx<nombre; idx++) {
return -1; return -1;
} }
if (verbosity) if (verbosity)
fprintf(stderr, "%5d %s %f\r", idx, filename, metrique); fprintf(stderr, "%5d %s %10.3f\r",
idx, filename, metrique);
idxvalues[idx].idx = idx; idxvalues[idx].idx = idx;
idxvalues[idx].value = metrique; idxvalues[idx].value = metrique;
average += (double)metrique; average += (double)metrique;

View File

@ -18,6 +18,59 @@
*/ */
extern int verbosity; extern int verbosity;
/* -------------------------------------------------------------- */
/* nouveau du 19 decembre 2020, pour le grand ecran de da Scritch */
int upside_down(FloatImg *pimg)
{
float *rowpix;
float *Ps, *Pd;
int Os, Od; /* offset of lines */
int wsz;
int ya, y2;
if (verbosity>1) fprintf(stderr, "%s: image width is %d\n",
__func__, pimg->width);
rowpix = calloc(pimg->width, sizeof(float));
if (NULL==rowpix) {
fprintf(stderr, "%s : memory full\n", __func__);
exit(1);
}
wsz = pimg->width * sizeof(float);
if (verbosity>1) fprintf(stderr, "%s: wsx = %d\n", __func__, wsz);
for (ya=0; ya<pimg->height/2; ya++) {
y2 = pimg->height - (ya+1);
Os = (pimg->width * ya);
Od = (pimg->width * y2);
/* let's go, crash coredumping... */
Ps = pimg->R + Os;
Pd = pimg->R + Od;
memcpy(rowpix, Ps, wsz);
memcpy(Ps, Pd, wsz);
memcpy(Pd, rowpix, wsz);
Ps = pimg->G + Os;
Pd = pimg->G + Od;
memcpy(rowpix, Ps, wsz);
memcpy(Ps, Pd, wsz);
memcpy(Pd, rowpix, wsz);
Ps = pimg->B + Os;
Pd = pimg->B + Od;
memcpy(rowpix, Ps, wsz);
memcpy(Ps, Pd, wsz);
memcpy(Pd, rowpix, wsz);
}
free(rowpix);
return 0;
}
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
/* nouveau du 9 decembre 2020, en ecoutant le Fermion raconter du /* nouveau du 9 decembre 2020, en ecoutant le Fermion raconter du
superbe portnawak */ superbe portnawak */
@ -113,7 +166,7 @@ return 0;
int trinarize(FloatImg *pimg, int notused) int trinarize(FloatImg *pimg, int notused)
{ {
float mm[6], mRa, mGa, mBa, mRb, mGb, mBb; float mm[6], mRa, mGa, mBa, mRb, mGb, mBb;
float val, *fptr; float *fptr;
int foo, size; int foo, size;
#if DEBUG_LEVEL #if DEBUG_LEVEL

View File

@ -6,6 +6,7 @@
int bouger_les_pixels(FloatImg *pimg, int kaboo); int bouger_les_pixels(FloatImg *pimg, int kaboo);
int mirror_split(FloatImg *pimg, int kaboo); int mirror_split(FloatImg *pimg, int kaboo);
int upside_down(FloatImg *pimg);
int des_bords_sombres_a(FloatImg *pimg, int offset); int des_bords_sombres_a(FloatImg *pimg, int offset);

View File

@ -76,7 +76,7 @@ int main(int argc, char *argv[])
{ {
int foo; int foo;
int opt; int opt;
char *filterchain = "0"; char *filterchain = "18";
fprintf(stderr, "*** %s : compiled by tTh, %s %s\n", __FILE__, fprintf(stderr, "*** %s : compiled by tTh, %s %s\n", __FILE__,
__DATE__, __TIME__); __DATE__, __TIME__);
@ -100,7 +100,7 @@ if (foo) {
exit(1); exit(1);
} }
foo = essai_filterstack("mire.fimg"); foo = essai_filterstack("01137.fimg");
if (foo) { if (foo) {
fprintf(stderr, "err %d in essai_filterstack\n", foo); fprintf(stderr, "err %d in essai_filterstack\n", foo);
exit(1); exit(1);