
Le Serveur
L'existant
Une implémentation du serveur d'image existait deja et avait été
codée en C. Ce serveur, avait tendance a s'arrêter de façon
inopinée, ne libérant pas les ressources acquises.
De plus,le code source, bien que compréhensible était
un peu désorganise.
Reprise du serveur en C++
Nous avons décidé de reprendre tout le code de manière
à le rendre plus extensible.Nous avons donc porté l'application
en C++.
Le serveur se divise donc en plusieurs classes :
    serveur,parameters,connection : gérant le
coté serveur (socket) et lecture et décodage de l'URL.
    camera,image_buffer: gérant la caméra
indigo de la station de travail.
Notre serveur pouvait être monotâche sachant que les ressources
nécessaires à la gestion de la Caméra sont importante,
limitant en amont le nombre de client possible (en mode "demande d'images")
Les impératifs
Notre serveur devait être plus stable et donc récupérer
les erreurs de façon plus élégante, tout en restant
très extensible.
Notre désir était de fournir des méthode permettant
de gérer de manière plus intuitive la capture d'une image
et son envoi sur un client HTTP.
 
Le travail réalisé
Le portage en C++ ce qui a pour conséquence :
    gestion correcte des erreurs
    création d'une bibliothèque de classe
réutilisable avec des méthodes qui encapsulent les fonctions
C de base.
    code source plus lisible.
Le serveur devient donc plus facile a maintenir.
La partie gestion de la caméra a été un peu plus
ardue a cause du manque de documentation. Nous avons décidé
d'implémenter seulement la gestion de la Camera Indigo attaché
à la station, bien qu'il aurait été souhaitable de
créer des classes plus générales.
Installation et utilisation
Pour installer ce serveur il suffit de compiler sous Silicon Graphic avec
make.
Ce serveur est spécialisé pour la camera Indigo avec
le device VINO.
Les paramètres de réglage sont directement intégrés
dans l'applet (applet/Javalive/LiveApplet).
Pour mettre en route le serveur il suffit de taper 'CameraSever nroport'
On peut ensuite inclure dans les pages HTML des Tags tels que :
<IMG SRC="http://servername:port/camera?zon=%i&zod=%i&agc=%i&wbl=%i&bbl=%i&rbl=%i&hue=%i&sat=%i&sz=%i&qt=%i&fra=%i">
avec:
 (%i =entier)
- 
    zon,zod= coef du zoom (pour l'instant on doit laisser
zon =1 sous peine de planter le serveur): zod =1,2,3,4,8 ...
 
- 
    agc= automatic gain control (0 ou 1) , 1 par defaut
 
- 
    wbl=balance des blanc (0 ou 1) , 0 par defaut
 
- 
    bbl=balance des bleus (de 0 a 255)
 
- 
    rbl=balance des rouges (de 0 a 255)
 
- 
    hue=gain (0 a 255) sat=saturation (0 a 170)
 
- 
    sz= taille de l'image (1,1/2,1/3 ..) qt= qualite de
compression JPEG (15 % par défaut)
 
- 
    fra= numero de frame (pas important).
 
A partir du serveur on peut charger l'applet : 'http://servername:port/applet/JavaLive/index.html'.
Les plus
La gestion de la mémoire est optimisée et on évite
les recopies inutiles de l'image en mémoire (pas de memcpy).
Tous les paramètres de la Caméra sont gérés
Les classes sont simples d'utilisation (voir le main dans CameraServer.cc)
et peuvent être réutilisées pour d'autres applications.
Extensions possibles
La gestion des paramètres est très rudimentaire et elle mérite
un recodage afin de rendre l'application plus extensible: notre souhait
de départ était d'utiliser le Design Pattern du 'constructeur
virtuel'. Cela n' a été réalisé, faute de temps.
A terme, il faudrait étendre l'application à la gestion
d'autres entrées que la Caméra Indigo.
Le nombre de connexion est très limité et le serveur
est monotâche.
Documentation
Nous avons trouvé une source de documentation faramineuse dans le
document en ligne Insight (DMedia), donnant tous les contrôles possibles
de la Caméra et quelques 'tutoriaux'.
Les 'man' ont aussi été une précieuse source de
documentation.