This commit is contained in:
tth 2019-09-11 06:19:32 +02:00
parent 7afe2b1b63
commit 0eff0039eb

View File

@ -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 J'ai donc souhaité aller plus loin, et coder chaque canal de
chaque pixel en virgule flottante sur 32bits, le type chaque pixel en virgule flottante sur 32bits, le type
\texttt{float}\index{float} du langage C. \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
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{Premier example}\index{example}\label{example} \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, Pour commencer par quelques chose de simple,
nous allons créer une image RGB\index{RGB} complètement noire, nous allons créer une image RGB\index{RGB} complètement noire,
puis l'enregistrer dans un fichier \texttt{.fimg}\index{.fimg}, 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,
et pour conclure, enregistrement dans un fichier. et pour conclure, enregistrement dans un fichier.
\begin{verbatim} \begin{verbatim}
foo = fimg_create(&fimg, width, height, 3); foo = fimg_create(&fimg, width, height, FIMG_TYPE_RGB);
if (foo) { if (foo) {
fprintf(stderr, "create floatimg -> %d\n", foo); fprintf(stderr, "create floatimg -> %d\n", foo);
exit(1); exit(1);
@ -90,7 +102,7 @@ nous pouvons entrevoir, grâce au logiciel
le résultat sous forme de chiffres divers, et/ou inutiles~: le résultat sous forme de chiffres divers, et/ou inutiles~:
\begin{verbatim} \begin{verbatim}
$ ./fimgstats quux.img $ ./fimgstats quux.img
----------- numbers from 'quux.img' : ----------- numbers from 'quux.img' :
640 480 3 0x7f3718c4f010 0x7f3718d7b010 0x7f3718ea7010 640 480 3 0x7f3718c4f010 0x7f3718d7b010 0x7f3718ea7010
surface 307200 surface 307200
@ -102,24 +114,36 @@ mean values:
max value 0.000000 max value 0.000000
\end{verbatim} \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/} Vous trouverez dans le répertoire \texttt{tools/}\index{tools/}
d'autres exemples de mise en œuvre des fonctions disponibles 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} \section{Installation}
\subsection{Prérequis} \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} avoir quelques bibliothèques installées\footnote{Les \texttt{-dev}
pour Debain et dérivées}~: libv4l2, libpnglite, libtiff, et 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} \subsection{Compilation}
Un script \texttt{build.sh} permet de construire approximativement 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} \vspace{1em}
Pour le moment, la procédure d'installation est un peu rude, Pour le moment, la procédure d'installation est un peu rude,
@ -131,7 +155,7 @@ approprié, par exemple
\texttt{/usr/local/include} et \texttt{/usr/local/lib}. \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}, Classiquement, il y a un fichier à inclure, \texttt{floatimg.h},
contenant un certain nombre de contenant un certain nombre de
@ -260,12 +284,20 @@ l'on peut assimiler à un noir absolu\index{absolu}.
Affichage de quelques valeurs calculées à partir d'un fichier Affichage de quelques valeurs calculées à partir d'un fichier
\texttt{.fimg}\index{.fimg}. \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} \subsection{fimgops}\index{fimgops}\label{fimgops}
Operations diverses sur ou entre des images. 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} \subsection{fimg2png, fimg2pnm, fimg2tiff}
@ -301,6 +333,26 @@ Il reste plein de choses à faire pour que ce soit vraiment utilisable.
\ \
\end{itemize} \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} \section{Video for Linux}\index{v4l2}
@ -334,6 +386,10 @@ options :
-v increase verbosity -v increase verbosity
\end{verbatim} \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 ?} \section{Et pour la suite ?}