diff --git a/doc/the_floatimg_hack.tex b/doc/the_floatimg_hack.tex index 5be69c65..74f35aef 100644 --- a/doc/the_floatimg_hack.tex +++ b/doc/the_floatimg_hack.tex @@ -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 % ------------------------------------------------------------------- \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, 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 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: 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 \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}. 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. \ \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 : -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 ?}