From 6f697ba107f073218af2268a7e3c5b3891420634 Mon Sep 17 00:00:00 2001 From: tth Date: Fri, 21 Feb 2020 10:38:01 +0100 Subject: [PATCH] gros bla en plus --- doc/the_floatimg_hack.tex | 113 +++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 2 deletions(-) diff --git a/doc/the_floatimg_hack.tex b/doc/the_floatimg_hack.tex index b4a9061..6c468fa 100644 --- a/doc/the_floatimg_hack.tex +++ b/doc/the_floatimg_hack.tex @@ -23,6 +23,10 @@ \setlength \parskip {0.40em} +\makeatletter +\def\verbatim@font{\normalfont\ttfamily\small} +\makeatother + \setlength{\hoffset}{0em} \setlength{\textheight}{640pt} \setlength{\textwidth}{422pt} @@ -66,6 +70,11 @@ Mais le service après-vente est assez réactif. Du moins pour ceux qui suivent le canal \texttt{\#tetalab} sur le réseau IRC de Freenode. +\textbf{Attention !} ce document commence par une bonne rafale +de technique parfois hardue\footnote{gni?}. +Vous avez parfaitement le droit de auter directement à +la page \pageref{outils} pour quelque chose de plus concret. + % ------------------------------------------------------------------- \setlength \parskip {0em} @@ -865,7 +874,7 @@ pour comprendre. Quand au second fichier, il contient un compteur (stocké en ascii) qui est incrémenté après chaque capture réussie. Et ce compteur est utilisable par la variable \texttt{OFORMAT} que nous avons -vue quelques lignes plus haut. +vue quelques lignes plus haut. \subsection{Fonderie}\index{fonderie}\label{fonderie} @@ -873,7 +882,107 @@ Ce projet externe\footnote{... pour le moment, j'ai des soucis sur l'architecture du \textbf{pipdeprod} à adopter\dots} est destiné à la confection de films flous\index{film} à partir de photos floues. Le script \texttt{scripts/echomix.sh} est une première expérimentation -en bash, utilisant deux outils en \textsc{cli}. +en bash, utilisant deux outils en \textsc{cli}, +le premier pouvant salement brotcher une image, et le second capable de +mélanger harmonieusement deux images, la balance est équilibrée. + +Il s'agit donc d'un petit programme écrit en Bash\index{bash}, un langage +dont la connaissance est, pour moi, indispendable à qui veut faire des +images kitchies\index{kitchy}. Mais ne vous inquiétez pas, c'est en +fait assez simple à comprendre. Et comprendre, c'est apprendre. + +Voici donc le script, décomposé et expliqué : + +\begin{verbatim} +#!/bin/bash + +SRCDIR="Fist" +DSTDIR="Pong" +FTMP="/dev/shm/tmp.fimg" +FDST="/dev/shm/foo.fimg" + +# count the nomber of picz in the source directory +NBRE=$(ls -1 ${SRCDIR}/*.fimg | wc -l) +# compute the echo picz offset +OFFS=$(( NBRE / 4 )) +\end{verbatim} + + +Dans ce préliminaire logiciel, nous avons nommés le répertoire +\textsc{srcdir} contenant les captures d'image au format fimg, le répertoire +\textsc{dstdir} dans lequel seront rangées les images calculées, +et l'emplacement de deux fichiers de travail. + +Les quelques lignes suivantes, qui semble bien magiques, ne sont en fait +que de la magie Unix\index{Unix}. Elles nous permettent d'avoir +\textsc{nbre}, le nombre d'images à traiter, et \textsc{offs}, un décalage +dépendant du nombre d'image. Muni de toutes ces informations, nous +pouvons rentrer dans le lard du sujet, la boucle qui travaille. + + +\begin{verbatim} +# MAIN LOOP +for idx in $(seq 0 $NBRE) +do + # build the two input filenames ... + # + imgA=$(printf "$SRCDIR/%04d.fimg" $idx) + vb=$(( $(( idx + OFFS )) % NBRE)) + imgB=$(printf "$SRCDIR/%04d.fimg" $vb) + + # ... and the output filename + # + dst=$(printf "%s/%05d.png" ${DSTDIR} $idx) +\end{verbatim} + +Dans cette première partie de la boucle nous avons construit plusieurs +noms de fichier à partir du rang de la boucle en cours d'exécution, +des deux valeurs \textsc{nbre} et \textsc{offs} calculées en préambule. + +\begin{verbatim} + # trying to autocompute the mixing coefficient + # + compute=" s(${idx} / 16) " + K=$(echo $compute | bc -l) + printf " %25s => %8.3f\n" "$compute" $K +\end{verbatim} + +Cette seconde partie sert à calculer avec la commande +\texttt{bc}\index{bc} +un coefficient variable en fonction du temps : +$sin(idx/16)$ afin d'avoir une oscillation du coefficient entre +-1.0 et 1.0, deux valeurs probablement glitchantes. + +\begin{verbatim} + # do the hard floating computation + # + fimgfx -v cos010 ${imgB} ${FTMP} + fimgops -k ${K} ${FTMP} ${imgA} mix ${FDST} +\end{verbatim} + +Étape suivante, étape cruciale : le brassage d'une multitude de +pixels flottants. + +Tout d'abord, nous faisons subir à l'image-echo +(\texttt{imgB}, définie au début du script) un distorsion +chromatique de type \textsl{cos010}, le résultat étant écrit +dans un fichier temporaire. Ensuite, nous mixons l'image +primaire et son echo en utilisant le rapport de mixage +calculé quelques lignes plus haut. + + +\begin{verbatim} + + # write the output as PNG for video encoding + # + fimg2png ${FDST} ${dst} +done +\end{verbatim} + +Et en fin de boucle, nous convertissons le résultat de nos +savants au format PNG, et écrivons le fichier dans le répertoire +de destination fixé au début. +C'est le moment de passer la main à ffmpeg\index{ffmpeg}. C'est juste une POC\index{POC}, et une implémentation bien plus complète écrite en \textbf{C}\index{C} est déja en chantier,