tth 3 years ago
parent
commit
0eff0039eb
  1. 74
      doc/the_floatimg_hack.tex

74
doc/the_floatimg_hack.tex

@ -41,6 +41,11 @@ composante, mais c'est loin d'être le cas général. @@ -41,6 +41,11 @@ composante, mais c'est loin d'être le cas général.
J'ai donc souhaité aller plus loin, et coder chaque canal de
chaque pixel en virgule flottante sur 32bits, le type
\texttt{float}\index{float} du langage C.
\vspace{1em}
Attention, tout le code que nous allons voir ensemble est en
perpétuelle évolution\footnote{voir page \pageref{TODO}},
et sa fiablité reste à démontrer\index{valgrind}.
% -------------------------------------------------------------------
@ -50,6 +55,13 @@ chaque pixel en virgule flottante sur 32bits, le type @@ -50,6 +55,13 @@ chaque pixel en virgule flottante sur 32bits, le type
% -------------------------------------------------------------------
\section{Premier example}\index{example}\label{example}
\textsc{FloatImg} a débuté sous la forme de quelques fonctions
basiques en C, gérant la structure des données d'image en mémoire
et sur disque.
Nous allons donc directement rentrer au cœur du problème.
\vspace{1em}
Pour commencer par quelques chose de simple,
nous allons créer une image RGB\index{RGB} complètement noire,
puis l'enregistrer dans un fichier \texttt{.fimg}\index{.fimg},
@ -70,7 +82,7 @@ en mémoire centrale, initialisations des valeurs de pixel à 0.0, @@ -70,7 +82,7 @@ en mémoire centrale, initialisations des valeurs de pixel à 0.0,
et pour conclure, enregistrement dans un fichier.
\begin{verbatim}
foo = fimg_create(&fimg, width, height, 3);
foo = fimg_create(&fimg, width, height, FIMG_TYPE_RGB);
if (foo) {
fprintf(stderr, "create floatimg -> %d\n", foo);
exit(1);
@ -90,7 +102,7 @@ nous pouvons entrevoir, grâce au logiciel @@ -90,7 +102,7 @@ nous pouvons entrevoir, grâce au logiciel
le résultat sous forme de chiffres divers, et/ou inutiles~:
\begin{verbatim}
$ ./fimgstats quux.img
$ ./fimgstats quux.img
----------- numbers from 'quux.img' :
640 480 3 0x7f3718c4f010 0x7f3718d7b010 0x7f3718ea7010
surface 307200
@ -102,24 +114,36 @@ mean values: @@ -102,24 +114,36 @@ mean values:
max value 0.000000
\end{verbatim}
Nous avons donc sous la main une mécanique qui ne demande qu'à
faire des trucs futiles et des images qui clignotent.
La suite vers la page \pageref{codaz}.
\vspace{1em}
Vous trouverez dans le répertoire \texttt{tools/}\index{tools/}
d'autres exemples de mise en œuvre des fonctions disponibles
sous formes d'outils en ligne de commande, décrits page \pageref{outils}.
sous formes d'outils en ligne de commande,
décrits en page \pageref{outils}.
% -------------------------------------------------------------------
\section{Installation}
\subsection{Prérequis}
Vous devez, en dehors des outils classiques (gcc, make\dots),
Vous devez, en dehors des outils classiques (bash, gcc, make\dots),
avoir quelques bibliothèques installées\footnote{Les \texttt{-dev}
pour Debain et dérivées}~: libv4l2, libpnglite, libtiff, et
probablement d'autres choses.
probablement d'autres choses. Être familier avec l'utilisation du
shell\index{shell} sera un plus.
\subsection{Compilation}
Un script \texttt{build.sh} permet de construire approximativement
le bouzin. Il est loin d'être parfait.
le bouzin. Il est loin d'être parfait\footnote{Il doit être possible
de faire un Makefile récursif, mais\dots}.
Dans chacun des
répertoires à traiter, ce script devrait trouver un Makefile et un fichier
\texttt{t.c} source de la cible par défaut du make.
\vspace{1em}
Pour le moment, la procédure d'installation est un peu rude,
@ -131,7 +155,7 @@ approprié, par exemple @@ -131,7 +155,7 @@ approprié, par exemple
\texttt{/usr/local/include} et \texttt{/usr/local/lib}.
% -------------------------------------------------------------------
\section{Utilisation coté codeur}
\section{Utilisation coté codeur}\label{codaz}
Classiquement, il y a un fichier à inclure, \texttt{floatimg.h},
contenant un certain nombre de
@ -260,12 +284,20 @@ l'on peut assimiler à un noir absolu\index{absolu}. @@ -260,12 +284,20 @@ l'on peut assimiler à un noir absolu\index{absolu}.
Affichage de quelques valeurs calculées à partir d'un fichier
\texttt{.fimg}\index{.fimg}.
\begin{verbatim}
usage : fimgstats [options] file.fimg
-c make a machinable csv
-v increase verbosity
\end{verbatim}
\subsection{fimgops}\index{fimgops}\label{fimgops}
Operations diverses sur ou entre des images.
Syntaxe CLI\index{CLI} à définir.
\begin{verbatim}
Usage:
fimgops [options] A.fimg B.fimg operator D.fimg
\end{verbatim}
\subsection{fimg2png, fimg2pnm, fimg2tiff}
@ -301,6 +333,26 @@ Il reste plein de choses à faire pour que ce soit vraiment utilisable. @@ -301,6 +333,26 @@ Il reste plein de choses à faire pour que ce soit vraiment utilisable.
\
\end{itemize}
% -------------------------------------------------------------------
\section{Exemples pour yusers}\index{example}
\begin{verbatim}
#!/bin/bash
ACCU="quux.fimg"
TMPF="tmp.fimg"
DIMS="640 480"
mkfimg ${ACCU} ${DIMS}
for i in {0..100}
do
fname=$( printf "f%04d.pnm" $i )
echo $fname
mkfimg -t drand48 ${TMPF} ${DIMS}
done
\end{verbatim}
% -------------------------------------------------------------------
\section{Video for Linux}\index{v4l2}
@ -334,6 +386,10 @@ options : @@ -334,6 +386,10 @@ options :
-v increase verbosity
\end{verbatim}
\subsection{video-infos}\index{video-infos}\label{video-infos}
Que contient, que peut faire mon périphérique \textsl{àlc} ?
% -------------------------------------------------------------------
\section{Et pour la suite ?}

Loading…
Cancel
Save