Browse Source

commit avant la Ganguise + push en vrac

master
tth 3 years ago
parent
commit
a07883c0c2
  1. 49
      doc/the_floatimg_hack.tex
  2. 5
      lib/Makefile
  3. 0
      tools/fimg2gray.c
  4. 2
      tools/mkfimg.c
  5. 8
      v4l2/grabvidseq.c
  6. 18
      v4l2/rgb2fimg.c
  7. 11
      v4l2/video-infos.c

49
doc/the_floatimg_hack.tex

@ -161,12 +161,27 @@ gris, rgb et rgba\index{rgba}. @@ -161,12 +161,27 @@ gris, rgb et rgba\index{rgba}.
#define FIMG_TYPE_RGBA 4
\end{verbatim}
Les deux champs suivants (fval et count) sont à la disposition du yuser
qui peut jouer avec à loisir.
Un peu plus loin, nous avons les pointeurs vers les
différents \textsl{pixmaps} de l'image. En principe l'organisation
interne de ces zones est improbable, puisque qu'elle dérive
d'idées approximatives.
\vspace{1em}
Et pour finir dans la joie, nous avons les pointeurs vers les
différents \textsl{pixmaps} de l'image.
Les deux champs suivants (fval et count) sont à la disposition du
\textsl{yuser}
qui peut jouer avec à loisir pour faire, par exemple, ce genre de
chose. Imaginons un périphérique de capture qui nous fournisse des
images en gris sur 4 bits. Et que nous voulions cumuler\index{cumul}
quelques images...
\vspace{1em}
Le champ \textsl{count} sera mis à 0 et
le champ \textsl{fval} sera initialisé à 15.0
(valeur maximale renvoyée par le capteur).
Ensuite, dans la boucle capture/cumul, \textsl{count} sera
incrémenté à chaque passe, et nous aurons donc, en finale,
toutes les informations nécéssaire pour exploiter au mieux la dynamique
de notre image dans les étapes ultérieures.
@ -192,7 +207,7 @@ Bon, vous avez une image latente, et @@ -192,7 +207,7 @@ Bon, vous avez une image latente, et
vous souhaité dessiner dessus (ou dedans ?) avec vos encres
flottantes ?
\subsection{funcs/}\index{funcs/}
\subsection{funcs/}\index{funcs/}\label{funcs}
Une bonne partie de ces fonctions est indéterministe. Ce qui
veut dire, en langage de tous les soirs, que ça risque de ne
@ -216,20 +231,34 @@ Dans un avenir incertain, il existera des pages de man\index{man}. @@ -216,20 +231,34 @@ Dans un avenir incertain, il existera des pages de man\index{man}.
\subsection{mkfimg}\index{mkfimg}\label{mkfimg}
Création d'un fichier contenant une image de teinte constante.
Création d'un fichier contenant une image de « teinte » constante.
Cette notion de teinte est assez inconsistante pour le moment,
puisqu'il n'y a que la valeur par defaut : \textbf{0.0} que
l'on peut assimiler à un noir absolu\index{absolu}.
\subsection{fimgstats}\index{fimgstats}\label{fimgstats}
Affichage de quelques valeurs calculées à partir d'un fichier
\texttt{.fimg}\index{.fimg}.
\subsection{fimg2png et fimg2pnm}
\subsection{fimg2png, fimg2pnm, fimg2tiff}
\index{fimg2png}\label{fimg2png}
\index{fimg2pnm}\label{fimg2pnm}
\index{fimg2tiff}\label{fimg2tiff}
Quelques petits proggies pour exporter notre format\index{.fimg} secret
vers des choses plus directement utilisables. À condition que le
code soit écrit et documenté en page \pageref{funcs}.
Deux petits proggies pour exporter notre format\index{.fimg} secret
vers des choses plus directement utilisables.
\subsection{fimg2gray}\index{fimg2gray}\label{fimg2gray}
Nous avons vu dans ce document que chaque image flottante pouvait
avoir plusieurs plans de réalité. Il ne faut en négliger aucun.
\vspace{1em}
Il faut quand même deviner que pour passer de l'espace RGB\index{RGB}
à une abstraction linéaire mono-dimensionnelle, il existe une foultitude
de méthodes, toutes plus légitimes que les autres.
% -------------------------------------------------------------------
\section{Video for Linux}\index{v4l2}
@ -248,7 +277,7 @@ v4l2. @@ -248,7 +277,7 @@ v4l2.
% -------------------------------------------------------------------
\section{Et pour la suite ?}
En fait, je fait de la photo par la méthode du « cumul »
En fait, je fait de la photo par la méthode du « cumul »\index{cumul}
depuis plusieurs années. Une webcam\index{webcam},
un Linux\index{Linux}, et ça \textsl{juste marche}.
Sauf que c'est quand même un peu galère à déplacer, il faut

5
lib/Makefile

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
COPT = -Wall -fpic -g -no-pie -DDEBUG_LEVEL=0
OBJS = fimg-core.o fimg-pnm.o fimg-file.o fimg-math.o \
fimg-timers.o operators.o
fimg-timers.o operators.o fimg-2gray.o
DEPS = Makefile ../floatimg.h
# modify it 'as you like'
@ -23,6 +23,9 @@ t: t.c ../libfloatimg.a $(DEPS) @@ -23,6 +23,9 @@ t: t.c ../libfloatimg.a $(DEPS)
fimg-core.o: fimg-core.c $(DEPS)
gcc $(COPT) -c $<
fimg-2gray.o: fimg-2gray.c $(DEPS)
gcc $(COPT) -c $<
operators.o: operators.c $(DEPS)
gcc $(COPT) -c $<

0
tools/fimg2gray.c

2
tools/mkfimg.c

@ -19,6 +19,8 @@ int main(int argc, char *argv[]) @@ -19,6 +19,8 @@ int main(int argc, char *argv[])
int foo, opt;
int width, height;
char *fname;
float fvalue;
FloatImg fimg;
while ((opt = getopt(argc, argv, "ho:v")) != -1) {

8
v4l2/grabvidseq.c

@ -191,6 +191,7 @@ foo = fimg_create(&cumul, @@ -191,6 +191,7 @@ foo = fimg_create(&cumul,
fmt.fmt.pix.width, fmt.fmt.pix.height,
FIMG_TYPE_RGB);
fimg_clear(&cumul);
cumul.fval = 255.0;
#endif
@ -220,7 +221,8 @@ for (i = 0; i < nbre_capt; i++) { @@ -220,7 +221,8 @@ for (i = 0; i < nbre_capt; i++) {
}
if(verbosity > 1) {
printf("%6d / %6d %9.3f\n", i, nbre_capt, fimg_timer_get(0));
printf("%6d / %6d %9.3f\n", i, nbre_capt,
fimg_timer_get(0));
}
@ -246,15 +248,13 @@ for (i = 0; i < nbre_capt; i++) { @@ -246,15 +248,13 @@ for (i = 0; i < nbre_capt; i++) {
#endif
#if SAVE_AS_CUMUL
/**
/** this is the slow version
x_rgb2fimg(buffers[buf.index].start,
fmt.fmt.pix.width, fmt.fmt.pix.height, &grab);
fimg_add(&grab, &cumul, &cumul);
**/
x_add_rgb2fimg(buffers[buf.index].start,
fmt.fmt.pix.width, fmt.fmt.pix.height, &cumul);
#endif
#if SAVE_AS_FIMG

18
v4l2/rgb2fimg.c

@ -5,6 +5,11 @@ @@ -5,6 +5,11 @@
#include "funcs.h"
/*
* Be careful, these functions are not yet fireproof,
* and calling conventions are fluctuating.
*/
/* --------------------------------------------------------------------- */
int x_upscaler(unsigned char *src, int w, int h, FloatImg *d)
{
@ -13,6 +18,14 @@ int x, y, xx, yy; @@ -13,6 +18,14 @@ int x, y, xx, yy;
float r, g, b;
static unsigned short modz;
/*
* check in image sizes are correct
*/
if ( d->width != w*2 || d->height != h*2 ) {
fprintf(stderr, "%s : dimension error\n", __func__);
return -2;
}
// rp = d->R, gp = d->G, bp = d->B;
for (y=0; y<h; y++) {
@ -49,7 +62,6 @@ for (iter=0; iter<size; iter++) { @@ -49,7 +62,6 @@ for (iter=0; iter<size; iter++) {
return 0;
}
/* --------------------------------------------------------------------- */
/* --------------------------------------------------------------------- */
int x_add_rgb2fimg(unsigned char *src, int w, int h, FloatImg *d)
{
int iter, size;
@ -64,8 +76,12 @@ for (iter=0; iter<size; iter++) { @@ -64,8 +76,12 @@ for (iter=0; iter<size; iter++) {
*bp++ += (float)*src++;
}
d->count++; /* one more frame in the accumulator */
return 0;
}
/* --------------------------------------------------------------------- */
int x_rgb2file(unsigned char *src, int w, int h, char *fname)
{
FloatImg buff;

11
v4l2/video-infos.c

@ -95,7 +95,7 @@ return 0; @@ -95,7 +95,7 @@ return 0;
int enum_controls(int fd, char *txt, int k)
{
struct v4l2_queryctrl qctrl;
int foo, idx;
int idx;
printf("-- controls enumeration '%s'\n", txt);
@ -208,7 +208,6 @@ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; @@ -208,7 +208,6 @@ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
foo = ioctl(vfd, VIDIOC_G_FMT, &fmt);
if (0 != foo) {
perror("ioctl G_FMT");
// exit(1);
}
else {
pr_v4l2_format("Experimental", &fmt);
@ -249,9 +248,13 @@ static void print_title(char *txt) @@ -249,9 +248,13 @@ static void print_title(char *txt)
int foo, l;
l = strlen(txt);
for (foo=0; foo<l+18; foo++) putchar('*'); puts("");
for (foo=0; foo<l+18; foo++)
putchar('*');
puts("");
printf("****** %s ******\n", txt);
for (foo=0; foo<l+18; foo++) putchar('*'); puts("\n");
for (foo=0; foo<l+18; foo++)
putchar('*');
puts("\n");
}
/* --------------------------------------------------------------------- */
int main(int argc, char *argv[])

Loading…
Cancel
Save