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)


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.