Chapitre 6

Système de présentation de Madeus

[Table des matières]

1 Introduction

Le système de présentation est une partie importante de l'architecture générale de l'application d'édition de documents multimédia Madeus. Ce système prend en charge la représentation interne d'un document qui est produite par le gestionnaire temporel. Cette représentation, structurée sous forme d'une hiérarchie d'objetsnote2 et d'un graphe d'exécution, est utilisée pour restituer dynamiquement à l'utilisateur le contenu du document à travers les différents dispositifs de la machine, comme l'écran graphique et le haut-parleur.

La construction d'un tel système de présentation est une opération particulièrement délicate. En effet, la disposition temporelle des objets spécifiée par l'auteur n'est qu'une vue idéale conçue par rapport à une forme du temps absolue. Or, cette vue implique la possibilité de réaliser plusieurs actions en un temps nul (hypothèse de synchronisme des événements [BLA 94]), ce qui n'est pas réaliste sur des plates-formes de traitement séquentiel :

La démarche qui a été adoptée dans la conception du système de présentation de Madeus consiste à limiter autant que possible l'adjonction de nouvelles sources de déviations temporelles. Les traitements de présentation appliqués aux objets du document ont été élaborés avec soin afin de satisfaire au mieux la spécification idéale de l'auteur.

Ce chapitre est organisé en trois parties. La première est dédiée à la présentation de notre approche de conception. Elle présente les principales composantes autour desquelles est structuré notre système de présentation. La deuxième partie présente la mise en oeuvre de ces composantes : l'ordonnancement temporel d'une présentation, les mécanismes de synchronisation qui ont été développés (section 3) et le gestionnaire de présentation réalisé pour la restitution d'une présentation (section 4). La dernière partie tire un premier bilan de l'utilisation du système.

[Table des matières]

2 Architecture du système de présentation

Le système Madeus manipule des documents sources écrits en ASCII et utilisant un marquage descriptif, conformément au format pivot décrit dans le chapitre IV. Lors du chargement d'un document, cette représentation est prise en charge par le gestionnaire temporel. Au moment où l'utilisateur souhaite visualiser le document, le gestionnaire produit le graphe d'exécution (graphe de contraintes résultat du formatage statique). Ce graphe, ainsi que l'arbre abstrait, rendent compte des différentes dimensions du document.

La présentation d'un document résulte de la combinaison de traitements réalisés à partir de l'arbre abstrait et du graphe d'exécution. Ces traitements permettent la présentation du document. Il s'agit principalement d'assurer les fonctions suivantes :

Pour garantir l'extensibilité et pour faciliter la portabilité du système sur différentes plate-formes, ces fonctions ont été mises en oeuvre dans Madeus sous forme d'un ensemble de modules.
Image SystemPresentation.gif
Fig 0. Architecture du système de présentation de Madeus

[Table des matières]

2.1 Organisation du système

Le système de présentation est organisé autour de trois modules principaux. Chaque module est dédié au traitement d'un aspect particulier de la présentation et interagit dynamiquement avec les autres modules (cf. Fig 0 ). Ces modules sont :
L'interface de présentation (GUI)
L'interface de présentation regroupe les moyens de visualisation et d'interaction offerts à l'utilisateur par l'intermédiaire de l'interface graphique. Elle lui permet, d'une part, d'agir dynamiquement au cours de la présentation à travers l'activation de liens ou de boutons d'interactions, et d'autre part, de contrôler la progression temporelle. Cette partie a été décrite dans la section IV.2.5.
L'ordonnanceur
L'ordonnanceur se situe au coeur du système de présentation multimédia. Après le chargement d'un document et la production du graphe d'exécution, le démarrage effectif est pris en charge par l'ordonnanceur. C'est ce module qui coordonne les différentes activités de présentation du document et assure sa progression temporelle. Cette progression est réalisée par une horloge associée au document. L'horloge produit et reçoit les différents événements de présentation en s'appuyant sur deux représentations du temps :
Chaque événement de l'horloge peut déclencher de nouvelles activités de présentation ou l'arrêt de celles qui sont en cours. Le rôle de l'ordonnanceur consiste à accorder dynamiquement ces deux formes de temps : c'est la supervision de la présentation.
Le gestionnaire de présentation
Le gestionnaire de présentation met en correspondance la progression temporelle du document et les opérations qui permettent de restituer son contenu à l'utilisateur. Alors qu'au niveau de l'ordonnanceur la progression temporelle est simplement perçue à travers des horloges (démarrage, terminaison, etc.), au niveau du gestionnaire elle correspond à des traitements spécifiques sur les média de base (affichage d'une image, animation d'un texte, etc.). Le gestionnaire de présentation permet aussi l'allocation des ressources comme les accès aux données, les entités d'exécution du système et les ressources graphiques et audio. Il est conçu de façon à renforcer l'indépendance de Madeus vis-à-vis de toute plate-forme spécifique.
[Table des matières]

2.2 Déroulement d'une présentation

Les modules présentés ci-dessus effectuent des traitements qui se situent à différents niveaux de l'exécution et qui s'enchaînent au fur et à mesure du déroulement de la présentation : lancement de la présentation d'un document, d'un objet de base, lecture d'un échantillon de données, etc. La progression d'une présentation multimédia résulte donc des interactions entre les différents modules. On distingue alors deux types d'information qui circulent entre ces modules : les flots de données et les flots de contrôle.
Flots de données
Ces flots représentent des données qui circulent au niveau du gestionnaire de présentation. Ils sont de deux types :
Flots de contrôle
Ces flots sont représentés au sein de l'application par un ensemble d'événements. Ces événements sont de trois types :
La présentation d'un document fait intervenir une combinaison de ces deux types de flots. Par exemple, l'opération d'arrêt d'une présentation (flot de contrôle) se propage à travers les différents modules jusqu'au médiateur d'accès (flot de données). De la même façon, l'arrivée du dernier échantillon d'une vidéo (flot de données) déclenche l'événement de terminaison qui lui est associé (flot de contrôle).

[Table des matières]

3 Ordonnancement d'une présentation dans Madeus

L'ordonnancement d'une présentation consiste à mettre en correspondance l'image abstraite de la présentation (arbre abstrait et graphe d'exécution) et sa réalisation concrète au sein du système. Ce traitement regroupe l'ensemble des tâches suivantes : L'ordonnancement d'une présentation applique ces différents traitements en s'appuyant sur la structure du graphe. L'ordonnancement est donc constitué d'une boucle fermée qui produit et récupère des événements et déclenche les traitements correspondants. À tout instant, ces traitements dépendent de l'état courant de la présentation du document.

[Table des matières]

3.1 Contexte d'une présentation

L'état d'un document multimédia en cours de présentation est défini par la valeur des attributs de présentation de chaque objet à chaque instant. Cet état comprend de plus des informations qui identifient la progression temporelle de la présentation.

On définit sous le terme de coupure temporelle l'image de la présentation à un instant donné. Elle correspond à l'état d'avancement de tous les objets à cet instant. À partir du graphe d'exécution, on peut déterminer une coupure temporelle pour chaque instant de début ou de fin d'un objet (voir la Fig 1 ). Ces coupures sont utilisées pour la reconstitution du contexte de la présentation lors de la navigation hypermédia (changements de contexte).

Image Coupure.gif
Fig 1. Coupure temporelle d'une présentation multimédia

Ainsi, à chaque objet du document, qu'il soit composé ou de base, est associé un contexte permettant d'indiquer l'état de sa présentation. Cet état est défini par les informations suivantes :

Le lien entre la structure temporelle d'un document et les attributs de présentation est maintenu dans une structure de données appelée contexte de présentation. Le contexte de présentation de Madeus est une structure hiérarchique qui associe, à chaque objet actif composé (cf. Fig 2 ), toutes les activités en cours qu'il contient. Ces activités sont décrites par la liste des chaînes actives du graphe d'exécution. Ces chaînes pointent sur l'objet en cours de présentation. Le contexte est mis à jour dynamiquement au rythme de la progression de la présentation, conformément à la topologie du graphe.
Image Contexte.gif
Fig 2. Contexte de présentation

Les valeurs des attributs de présentation sont également mises à jour dynamiquement. Ce processus de mise à jour permet d'assurer la transmission des différents attributs entre les objets composés, ainsi que l'application des attributs de style au niveau des objets de base (mouvement de fenêtre).

Par ailleurs, le contexte de présentation est la structure de base utilisée pour la synchronisation inter- et intra-objets.

[Table des matières]

3.2 Synchronisation inter-objets

La synchronisation inter-objets est appliquée à chaque occurrence d'un événement de présentation. On distingue deux types d'événements : [Table des matières]

3.2.1 Structures de synchronisation

La synchronisation inter-objets est réalisée au moyen des noeuds du graphe temporel. Ces noeuds contiennent des informations de synchronisation décrivant de façon précise les relations qui existent entre les différents événements. Ces relations indiquent à l'ordonnanceur les actions qu'il doit entreprendre à la réception d'un événement.
Image Noeud.gif
Fig 3. Structure de présentation d'un noeud temporel

La structure d'un noeud est décrite dans la Fig 3 . Elle comprend les informations suivantes :

Les conditions de franchissement d'un noeud sont définies à partir de deux tables. Ces tables indiquent la nature de la synchronisation entre les objets du document. Chacune joue un rôle de synchronisation particulier : La structure d'un noeud est complétée par une liste d'actions spatio-temporelles.

Chaque action est composée d'un opérateur spatial décrivant la nature de l'opération à effectuer et d'un opérande.

L'opérande est une référence interne à un objet simple ou composé. Parmi ces opérations, on trouve les actions Map et Unmap permettant de réaliser l'apparition ou la disparition d'un objet de base ou composé à l'écran. Ces actions sont réalisées dans l'ordre suivant : les actions Unmap d'abord, les actions Map ensuite, car les premières concernent des objets dont la présentation se termine et les secondes les objets dont la présentation commence par rapport à l'instant représenté par le noeud. On libère ainsi les espaces occupés sur l'écran graphique avant de les ré-allouer à d'autres objets. D'autres opérations peuvent être attachées à cette liste d'actions. En particulier, des scripts peuvent être activés au franchissement du noeud permettant ainsi la coordination du système de présentation avec des outils externes.

Le graphe de la Fig 3 représente un seul niveau d'une hiérarchie logique : chaque arc pouvant représenter un objet composé et donc un nouveau graphe de synchronisation (hypergraphe). Ainsi la synchronisation d'un document multimédia revient à la synchronisation de tous les objets qu'il contient.

[Table des matières]

3.2.2 Algorithme de synchronisation

L'algorithme de la Fig 4 utilise de façon directe les tables présentées dans la section précédente. Il met en oeuvre la synchronisation globale du document à partir des différents événements de présentation. À chaque occurrence d'un événement, il applique un traitement qui consiste à propager l'effet de causalité entre les événements de fin, contenus dans la Table_Causalité. Par exemple, si l'événement e1 est associé à l'événement e2, l'occurrence de e1 provoque l'occurrence de e2. Si à son tour e2 est lié avec d'autres événements, ils sont provoqués de façon récursive (lignes 8-13). Le compteur Terminaisons_Restantes est alors décrémenté d'autant d'unités que d'événements produits. Dans les autres cas, l'ordonnanceur décrémente simplement le compteur Terminaisons_Restantes d'une seule unité : cas des événements définis dans la Table_Égalité (égalité entre instants, lignes 15-16).

Après cette phase, l'ordonnanceur vérifie la condition de franchissement d'un noeud. Elle correspond à une mise à zéro du compteur Terminaisons_Restantes (ligne 18). Dès qu'un noeud atteint cette valeur, l'ordonnanceur met à jour la liste des chaînes actives du contexte (ligne 19) et démarre les horloges des objets correspondants aux arcs sortant du noeud (lignes 20-22). Cette opération se traduit, au niveau du gestionnaire de présentation, par le lancement des activités de présentation correspondantes.


Algorithme : Ordonnanceur(événement : e)

{

1. si (e.type == Démarrer_Document)

2. Déclencher_Noeud(Document.début);

3. sinon /* traitement de la terminaison d'un objet */

4. si (e.type == Terminaison_Objet) {

5. pour (e.O.fin) {

6. 1) e.O.fin in Table_Causalité(e.O.fin)

7. e.O.fin.Terminaisons_Restantes --;

8. e1 = e;

9. tant que exists(<e1,e2,Vrai> in Table_Causalité(e.O.fin)){

10. Termine(e2.Horloge);

11. e2.O.fin.Terminaisons_Restantes --;

12. <e1,e2,Faux> <== <e1,e2,Vrai>;

13. e1 = e2;

14. }

15. 2) e.O.fin in Table_Égalité(e.O.fin)

16. e.O.fin.Terminaisons_Restantes --;

17. }

18. si (e.O.fin.Terminaisons_Restantes == 0) alors {

19. Mettre_à_jour_Contexte(e.O.fin);

20. pour chaque Action de Table_Actions(e.O.fin)

21. Gestionnaire de Présentation (

22. Table_Actions[i].Opération(Table_Actions[i].Opérande));

23. Déclencher_Noeud(e.O.fin);

24. }

25. }

}

/* Activation des arcs sortants d'un noeud */

Fonction Déclencher_Noeud(Noeud : n) {

Pour i=1 à n.Arcs_Sortants

Démarre_Horloge(n.Objet_Sortant[i]);

}


Fig 4. Algorithme d'ordonnancement de Madeus

L'interface entre l'ordonnanceur et le gestionnaire de présentation se fait, soit directement par les appels de fonctions spatio-temporelles (Gestionnaire de Présentation), soit indirectement par la modification des valeurs d'horloges (Termine_Horloge) de l'algorithme. Cette technique de synchronisation vise à séparer les fonctions d'ordonnancement temporel des activités de présentation réalisées par le gestionnaire de présentation.

[Table des matières]

3.2.3 Algorithme de formatage dynamique

La synchronisation présentée dans la section précédente prend en compte uniquement l'aspect déterministe et donc prédit des objets multimédia : les objets sont lancés avec les vitesses élaborées lors du formatage statique. Or, comme nous l'avons indiqué dans le modèle temporel, la prise en compte du comportement indéterministe est une nécessité absolue. Cette nécessité est d'autant plus grande que les systèmes d'exploitation actuels [COU 92], les protocoles réseau et la nature de certains média sont autant de sources d'indéterminisme qu'il faut prendre en compte.

Dans Madeus, l'approche qui a été retenue est en accord avec la vérification de la contrôlabilité fournie à l'auteur (phase d'observation et phase de recouvrement). On peut relever deux types d'observations de l'indéterminisme lors d'une présentation :

La phase d'observation permet de relever les valeurs des intervalles incontrôlables. Ces valeurs sont alors utilisées pour ajuster le scénario afin de respecter les contraintes temporelles décrites dans le graphe d'exécution. Cet ajustement est réalisé au moyen de la flexibilité contenue dans les chaînes. Il consiste à adapter les durées nominales de certains objets.

Algorithme : Formateur_Dynamique(événement : e)

{

1 /* Instantiation d'un intervalle incontrôlable */

2. Indéterminisme=e.O.Horloge.Valeur - e.O.Horloge.Lower_Bound;

3. si e.O.Chaîne.Flex > Indéterminisme

4. Formater_Chaîne (e.O.Chaîne, (-1) * Indéterminisme);

5. sinon

6. /* Compensation sur les chaînes concurrentes */

7. pour toutes les Chaînes actives Ch in Contexte(e.O.englobant)

8. Formater_Chaîne (Ch, Indéterminisme);

}

Fonction : Formater_Chaîne (Chaîne : Ch, Entier : Ind)

{

9. Ch.Flex = Ch.Flex - |Ind|;

10. Pour tout objet O in Ch | Doc.Horloge.Valeur < O.fin

11. si O.type == discret {

12. O.fin = O.fin + Ind;

13. fin de la fonction;

14. } sinon

15. si Doc.Horloge.Valeur < O.début {

16. si O.Flex >= Ind {

17. O.Horloge.Durée = O.Horloge.Durée + Ind;

18. O.Flex = O.Flex - |Ind|;

19. fin de la fonction;

20. }

21. sinon {

22. O.Horloge.Durée = O.Horloge.Durée +

23. Signe(Ind) * O.Flex;

24. Ind = Ind - Signe(Ind) * O.Flex;

25. O.Flex = 0;

26. }

27. }

}


Fig 5. Algorithme de formatage dynamique de Madeus

L'algorithme de la Fig 5 met en oeuvre le principe d'observation et de recouvrement des intervalles incontrôlables [LAY 96a]. Lorsque l'événement de fin d'un objet incontrôlable a lieu, le montant d'indéterminisme est d'abord calculé (ligne 2). Ensuite, l'ajustement du graphe est pris en compte prioritairement sur la chaîne de cet intervalle (ligne 4). Si la flexibilité de la chaîne, depuis cet instant jusqu'à sa fin, est suffisante, l'indéterminisme est compensé en effectuant le re-formatage cette chaîne. Cette opération consiste à rétrécir la durée de la chaîne du montant d'indéterminisme observé. Dans le cas contraire (lignes 7 et 8), les chaînes concurrentes sont rallongées afin de permettre à la chaîne en question de rattraper ce délai. Par exemple, dans la Fig 6 , pour l'indéterminisme delta, observé sur l'intervalle x de la chaîne C1, le formatage de la chaîne n'a pu être effectué car sa flexibilité f1 est inférieure à delta. Les chaînes concurrentes C2, C3 et C4 sont alors reformatées pour être rallongées de ce même montant delta.

Image compensation.gif
Fig 6. Configuration des chaînes concurrentes à l'instant tau

L'avantage de cette technique est de permettre de ré-aligner temporellement les chaînes les unes par rapport aux autres de façon non bloquante et locale. Ceci est effectué grâce au contexte de présentation qui permet, d'avoir, à tout instant, une vision globale de la progression du document. Il est ainsi possible de respecter les contraintes de coïncidence portées par les noeuds extrémités des chaînes.

Par ailleurs, le principe du formateur dynamique peut être employé pour gérer également les exceptions. Il suffit pour cela d'appliquer l'algorithme afin d'imposer le ré-alignement temporel des chaînes. Dans ce cas, on risque de ne plus respecter, momentanément, une partie des contraintes spécifiées par l'auteur.

[Table des matières]

3.3 Synchronisation intra-objets

La présentation d'un objet multimédia est composée d'un ensemble d'actions élémentaires de grain variable (affichage d'une image de vidéo, remplissage du tampon interne de la carte son, décompression d'un échantillon, etc.). Dans Madeus, le contrôle de ces actions de présentation est réalisé à partir d'un mécanisme d'horloges qui masque le traitement spécifique de chaque objet [ROT 96]. Par exemple, l'arrêt de l'horloge d'un document correspond à l'arrêt de la présentation de tous les objets qu'il contient. Chaque horloge mesure, tout au long de la durée de la présentation d'un objet, sa progression temporelle. Cette progression de l'horloge est manipulée par l'ordonnanceur afin de réaliser deux types de fonctions :
  1. Offrir à l'utilisateur des fonctionnalités (TAC) de contrôle d'une présentation au moyen des actions Pause, Démarre, Redémarre, etc., fournies par l'interface graphique de Madeus.
  2. Propager les tics réguliers de l'horloge au sein du gestionnaire de présentation. Ceci permet d'apparier les horloges avec les actions de présentation correspondantes au niveau de l'implantation des objets de base.
Types d'horloges
On distingue deux types d'horloges (Fig 8 ) selon le type de média et leurs implantations dans le gestionnaire de présentation :
Opérations sur les horloges
Les horloges du document et des différents objets sont manipulées à travers l'ensemble des opérations suivantes :
Démarre(Horloge) : démarre l'horloge interne d'un objet multimédia depuis son début.

Pause(Horloge) : suspend l'horloge interne d'un objet.

Redémarre(Horloge) : relance la progression de l'horloge d'un objet qui a été suspendue par Pause.

Change_Vitesse(Horloge, Vitesse) : modifie la cadence d'une horloge.

Termine(Horloge) a pour effet d'interrompre la progression de l'horloge.

Tic_un_Quantum(Horloge) : fait progresser l'horloge d'un quantum de temps (un tic).
Fin(Horloge) : indique si l'horloge a atteint sa durée d'échéance.

La gestion de l'horloge (voir l'algorithme de la Fig 7 ) consiste à propager les tics (allocation de quantums) aux activités parallèles d'un objet composé (lignes 1-4). Si l'une des horloges atteint sa durée d'échéance, l'ordonnanceur est avisé pour effectuer la synchronisation inter-objets (lignes 5-6). Si l'utilisateur modifie la progression de la présentation (TAC) au niveau de l'interface utilisateur (cf. Fig 8 ), il suffit, dans ce cas, de mettre à jour l'horloge globale du document. Cette modification se traduit par la propagation des mises à jour de chacune des horloges des objets de base actifs dans le contexte (lignes 8-9). S'il reste encore des horloges à faire progresser (ligne 10-11), l'algorithme réarme un chien de garde du système d'exploitation (timer d'UNIX) qui le réactive de façon régulière.

Algorithme : Gestion_Horloge(événement : e)

{

1. /* attribution des quantums de temps */

2. si (e.type == Fin_Quantum)

3. pour tout objet O in Document.Context tel que Fin(O.Horloge) == Faux et O.Horloge.interne {

4. Tic_un_Quantum(O.Horloge);

5 si Fin(e.O.Horloge)

6 Ordonnanceur(e);

7 }

8. si (e.type == TAC)

9. e.Opération(Document.Horloge);

10. si exists (O in Document.Context)midFin(O.Horloge) == Faux

11. Système_Arme_Chien_de_Garde(Quantum_Madeus);

}


Fig 7. Algorithme de gestion des horloges

Enfin, pour les objets ayant des horloges externes correspondant à des intervalles incontrôlables, les opérations liées à la modification de leur vitesse d'horloge n'ont pas de sens. Dans ce cas, l'ordonnanceur ignore simplement ces horloges en prenant en compte leurs dates d'échéance au plus tôt.

Image HorlogeHierarchie.gif
Fig 8. Hiérarchie des horloges

[Table des matières]

3.4 Gestion de la navigation

Les liens sont des objets particuliers qui permettent à l'utilisateur de naviguer librement dans l'espace intra- ou inter-document. Dans les documents hypertextes statiques, les liens supportent l'interactivité dans la mesure où leur activation provoque une rupture dans la lecture séquentielle. Dans cette section, on s'intéresse plus particulièrement à l'influence de la structure temporelle sur la gestion et la mise en oeuvre des liens. Une discussion beaucoup plus complète sur la nature des liens, leur typage, leur représentation, et leur mise en oeuvre au sein de la structure du document statique est présentée dans [QUI 92][HAR 93a].

On distingue dans Madeus deux types de liens : les liens d'inclusion et les liens de référence. Le traitement de l'activation d'un lien est effectué en fonction de son type. Ce traitement est réalisé selon le schéma suivant :

  1. L'émission d'un événement d'activation de lien au niveau du gestionnaire de présentation. Celui-ci identifie l'objet référencé et demande à l'ordonnanceur d'exécuter la requête d'ouverture du lien.
  2. Le traitement de cette requête entraîne soit la libération du contexte courant s'il s'agit d'un lien de référence, soit l'arrêt de la présentation en cours s'il s'agit d'une inclusion avec arrêt (cf. Fig 9 ).
  3. Le chargement de l'objet cible de la référence est alors amorcé. Cet objet est ensuite interprété et lancé à partir de son instant de début.
Image activelien.gif
Fig 9. Effet de l'activation d'un lien d'inclusion sur le document

Dans le cas d'une référence de type inclusion, l'appel est assimilé à une intégration d'un nouveau graphe de présentation au sein du document (voir Fig 9 ). Ce graphe est ordonnancé en exclusion mutuelle avec celui du document si l'attribut arrêt est positionné à vrai, en concurrence dans le cas contraire. Dans le premier cas la présentation du document est relancée dès la terminaison de l'inclusion et dans le second cas elle n'est pas affectée.

[Table des matières]

4 Gestionnaire de présentation

Le gestionnaire de présentation effectue la médiation entre l'ordonnanceur et la représentation des objets dans l'environnement de présentation. Il est constitué de trois modules : L'interaction entre l'ordonnanceur et le gestionnaire de présentation est réalisée à travers la représentation de l'exécution sous forme d'automates d'états finis [ISO 96]. Ces automates permettent de faire correspondre aux opérations effectuées sur les horloges des traitements de plus bas niveau (des copies graphiques, des effets vidéo).

[Table des matières]

4.1 Automate d'états finis

Chaque automate est composé d'un ensemble de noeuds et d'arcs. Les noeuds représentent des états de la présentation. Les arcs représentent des transitions entre ces états. Les arcs sont activés par des événements qui proviennent soit de l'ordonnanceur, soit du médiateur d'exécution (terminaison de processus externes, interactions utilisateur, etc.).

L'occurrence d'un événement se traduit soit par une transition de l'automate d'un état à un autre, soit par la modification des paramètres internes d'un objet (variables d'état).

Image etatabstrait.gif
Fig 10. États abstraits d'un objet multimédia

Les principales actions modélisant une transition d'état d'un objet sont (voir Fig 10 ) :

À chaque réception d'une demande de création Create, le médiateur met en place l'infrastructure permettant, pour chaque objet, d'exécuter sa présentation : c'est la phase de configuration d'un objet.

[Table des matières]

4.2 Configuration des objets multimédia de base

La structure des objets au sein du système comprend les informations suivantes : Les traitements liés à la présentation des objets multimédia dépendent de leur type. Pour les données texte et les interactions utilisateur, leur représentation dans le contexte de présentation est suffisante pour réaliser leur rendu à l'écran (voir l'objet A dans la Fig 11 ). Par contre, les objets comme la vidéo, les images et l'audio sont stockés de façon externe (disque local ou serveur distant). Ces différents objets nécessitent une série de traitements avant d'aboutir à leur restitution finale sur les périphériques de la machine.
Image Configuration.gif
Fig 11. Configuration des objets multimédia de base

Le traitement de chaque objet de base est organisé en trois modules :

Ces trois modules définissent la configuration de traitement pour chaque objet multimédia de base. Le transfert des données entre les différents modules est réalisé à travers des tampons selon le schéma de synchronisation producteur-consommateur [KRA 87].

[Table des matières]

4.3 Médiateur d'accès

Il permet de réaliser l'accès effectif à l'information multimédia, qu'elle soit locale ou distante. Le chargement des objets suit le schéma suivant :
  1. L'ouverture d'une connexion avec un serveur distant et la récupération d'un flot de données (stream).
  2. Ce flot de données est ensuite passé au module de traitement.
Le prototype actuel, fournit un support pour le protocole HTTP [BER 92]. Il permet l'acquisition des flots mpeg audio et vidéo à travers le réseau, l'objectif étant de démontrer la viabilité de notre approche sur des documents multimédia réels. De plus, cette mise en oeuvre a été menée dans la perspective d'extensions vers des protocoles temps réel comme RTSP [SCH 97].

[Table des matières]

4.4 Médiateur d'exécution

Il fournit un ensemble de fonctions qui permettent le traitement de données provenant de l'interaction avec l'utilisateur, du médiateur d'accès et de l'ordonnanceur. Les fonctions assurées par le médiateur d'exécution sont : [Table des matières]

4.4.1 Opération de liaison

À la construction de la représentation interne du document, la correspondance entre un objet de base et les modules de traitement offerts par l'application est réalisée par l'intermédiaire du type Mime [BOR 93]. Les types Mime supportés sont stockés dans une table interne (voir Fig 12 ). Chaque entrée de la table est composée des deux champs suivants :
  1. Type : est une chaîne de caractères qui indique le type de média de l'objet et son format, par exemple le type audio/mpeg.
  2. Identifiant du module de traitement : donne la localisation du code de traitement correspondant, par exemple, le fichier binaire exécutable madeus_mpeg.
Image Liaison.gif
Fig 12. Opération de liaison

Les modules de traitement supportés par l'application sont de trois types : processus externe, librairie dynamique ou librairie native. Chaque module de traitement est spécialisé dans la manipulation d'un média et d'un format particulier. Les modules de traitement implantés couvrent les types de base suivants :

[Table des matières]

4.4.2 Héritage des attributs de présentation

Lorsqu'un objet multimédia composé ou de base est en cours de présentation, les variables qui lui sont associées rendent compte des valeurs de ses attributs de présentation. On distingue deux types d'attributs :
Image Heritage.gif
Fig 13. Héritage continu des attributs

À chaque réception d'une demande de création Create, le médiateur peut calculer les valeurs des attributs d'un objet de deux façons : si les valeurs sont définies de façon spécifique à cet objet, elles sont directement utilisées pour la présentation. Dans le cas contraire, ces valeurs sont d'abord héritées de l'objet englobant.

Pour les objets continus, lors de l'exécution d'un pas de présentation provenant de l'ordonnanceur, les différents attributs sont utilisés par le médiateur audio ou graphique pour définir les nouvelles caractéristiques de sortie des différents objets.

La transmission des valeurs d'attributs entre un objet père et ses fils est effectuée à chaque pas de la présentation. Lorsque l'ordonnanceur appelle la fonction Play_One_Step d'un objet composé (voir Fig 13 ), celui-ci met à jour ses propres valeurs d'attributs. Lorsque l'ordonnanceur appelle la fonction Play_One_Step d'un objet de base, celui-ci prend en compte ces modifications en récupérant les valeurs de l'objet composé englobant. Ceci nous amène à un schéma de propagation continue des attributs organisé en deux étapes (cf. Fig 13 ) :

  1. L'objet (de base ou composé) hérite les valeurs des attributs de l'objet parent (ReadAttribute) et met à jour ses propres attributs (SetAttribute).
  2. Si l'objet est un type de base, il effectue en plus une opération de présentation élémentaire de sortie (OutPut) comme l'affichage à l'écran. Cette opération prend en compte toutes les mises à jour de ses attributs.
Cette gestion des attributs dépend de l'ordonnancement qui, comme nous l'avons souligné dans la section 3.2.2, propage les tics de l'horloge globale de façon descendante : un tic du document (Play_One_Step) est susceptible de changer un ou plusieurs attributs d'un objet composé qui, à son tour, les propage aux objets englobés.

[Table des matières]

4.4.3 Gestion des événements

Lors de la présentation, plusieurs types d'événements peuvent se produire. Un événement peut provenir de plusieurs sources : interaction de l'utilisateur, opération de contrôle de la présentation ou échéance d'un délai de garde de l'horloge de la machine. Un événement déclenche un traitement au sein de l'application. Chaque événement est caractérisé par : Les différents événements de présentation sont pris en compte au sein du processus de l'application Madeus (processus MADEUS client X11 Fig 14 ) ainsi que dans les activités externes créées lors de la présentation (comme les processus P1 et P2 Fig 14 ).

Lorsque l'utilisateur clique sur un objet au moyen de la souris, le médiateur est notifié par une fonction de rappel (callback) qui contient l'identifiant de l'objet ayant émis l'événement. Cet identifiant est obtenu grâce au mécanisme d'abonnement fourni par la boîte à outils X11/Toolkitnote3.

Image Evenement.gif
Fig 14. Gestion des événements

Dans le cas des processus externes, l'isolationnote4 du contexte nécessite la gestion d'une communication bi-directionnelle permanente avec l'ordonnanceur. Cette communication est basée sur des échanges de messages entre le serveur X11, le processus Madeus et les processus externes (cf. Fig 14 ).

[Table des matières]

4.5 Médiateur de présentation

La restitution des données sur les périphériques de la machine est effectuée par deux médiateurs : le médiateur graphique et le médiateur audio. Ces médiateurs fonctionnent comme des serveurs qui reçoivent des demandes de création ou de suppression de modules destination attachés à chaque objet de base (cf. 4.2).

[Table des matières]

4.5.1 Médiateur graphique

Il est dédié au traitement de l'information spatiale et au placement des différents objets sur l'écran graphique. Ce placement dépend d'un ensemble de paramètres qui sont définis à partir de la disposition relative des objets les uns par rapport aux autres [CAR 97].

Au moment de la création d'un objet, ses informations spatiales sont calculées et stockées dans une structure qui associe à chaque objet graphique une fenêtre d'affichage à l'écran. Cette opération tient compte du style attaché à l'objet comme la fonte pour le texte, la taille des caractères, la couleur de fond, etc.

Le médiateur graphique offre les possibilités suivantes :

Image MediateurGraphique.gif
Fig 15. Médiateur graphique

[Table des matières]

4.5.2 Médiateur audio

Nous décrivons le fonctionnement du médiateur audio à travers l'exemple de la Fig 16 . Dans cet exemple, trois objets A, B et C de type audio sont présentés en parallèle et chacun d'eux produit un flot audio constitué d'échantillons élémentaires de son.
Image mixeur.gif
Fig 16. Périphérique logique audio

Chaque objet est implanté par un processus externe qui lit un flot compressé de données et délivre au médiateur un flot d'échantillons à travers des tampons. Chacun de ces échantillons est caractérisé par l'encodage du signal (u-law, a-law ou format linéaire), des paramètres de fréquence de saisie (8 Khz, 41 Khz, ...) et le nombre de canaux de sortie (mono, stéréo) [GIB 94].

Le rôle du médiateur audio consiste à traiter ces différents signaux dans le but de réaliser les fonctions suivantes :

Les attributs de style audio peuvent être modifiés dynamiquement soit par les attributs de volume des objets audio soit à travers l'interface utilisateur (contrôle du volume global). Ces modifications sont prises en compte, lors de la présentation, grâce à la gestion centralisée de la production de l'échantillon final réalisée par le médiateur audio.

[Table des matières]

5 Mise en oeuvre de Madeus

Le système Madeus a été développé sur des stations de travail Sun sous le système d'exploitation Solaris2. La réalisation a duré deux ans et se poursuit actuellement par des développements complémentaires, en particulier sur le gestionnaire de présentation, le médiateur graphique et l'interface d'édition.

Une telle application regroupe des techniques de programmation très hétérogènes : interface graphique, algorithmes et structures de données complexes, manipulation de données multimédia comme l'audio, la vidéo, les images, le texte et la programmation système et réseau.

L'outil est presque entièrement écrit en langage C et représente, dans sa version actuelle, 48 812 lignes de code, dont 30 157 développées dans le cadre de cette thèse. Une partie du prototype est réalisée avec des librairies du domaine public. Le volume de code par partie du prototype est résumé dans le tableau de la Fig 17 .
Partie du prototype Langage Boîte à outils Développés Réutilisés
Système d'édition lex + yacc 3 107 -
Gestionnaire temporel C - 4 442 -
Ordonnanceur C - 3 169 -
Médiateur graphique et Interface utilisateur C X11 et Motif 4148 -
Audio C ++ lib-mpegaudio 2442 4 221
Vidéo C lib-mpeg 1822 7 300
Image libjpeg, libpng 5 037 7 131
Texte C - 698 -
Gestion d'accès C lib-http 1783 -
Gestion des événements C socket Unix 3509 -

Fig 17. Répartition du volume de code dans Madeus

Ce tableau montre une grande disproportion entre le coût du développement du système de présentation par rapport au gestionnaire temporel et le système d'édition (75 %), ce qui constitue l'une des principales charges de réalisation de cette application. Nous avons cependant cherché à limiter cette charge en réutilisant le plus possible les logiciels disponibles actuellement (colonne de droite du tableau Fig 0 ).

Le développement du système de présentation était néanmoins nécessaire dans la mesure où, sans ce module, nous n'avions pas la possibilité de restituer un document, ni même d'expérimenter l'intégration des fonctions d'édition et de présentation au sein d'un même système, ce qui était l'un des objectifs de cette thèse.

L'interface utilisateur, l'ordonnanceur et le gestionnaire de présentation sont implantés, dans l'espace utilisateur du système. L'exécution des activités parallèles de présentation est réalisée au moyen d'un chien de garde (timer) pour tous les objets multimédia d'un document, à l'exception de la vidéo et de l'audio. Ces derniers sont ordonnancés par un flot d'exécution concurrent et une horloge séparée.

Dans certaines implantations de systèmes multimédia, l'utilisation de processus légers est systématique pour ordonnancer tous les objets d'un document. Ce type de synchronisation, utilisé dans CMIFed [HAR 93b], est pénalisant pour plusieurs raisons. L'emploi des processus légers engendre une dé-synchronisation entre les flots parallèles de présentation à cause du grand nombre d'appels au noyau du système qui en résulte [HÖP 91][AND 91]. Par ailleurs, il est nécessaire d'ajouter, pour chaque processus léger, un niveau supplémentaire de synchronisation inter-objets qui se révèle souvent très coûteux (emploi de sémaphores). Or, dans une présentation multimédia, le quantum de temps alloué aux différents flots de présentation est défini par rapport à des actions de présentation (mouvement d'un graphique à l'écran, affichage d'un objet, etc.) et non pas par rapport à des actions atomiques d'exécution (instruction du processeur).

[Table des matières]

6 Bilan du développement de Madeus

Les principaux avantages que nous retenons de cette réalisation, au niveau applicatif, sont les suivants : De toutes les limitations de conception, le système graphique est la partie la plus fragile de l'application Madeus. L'environnement X11 constitue le goulot d'étranglement car, n'ayant pas été conçu pour être sollicité de façon intensive à travers le temps, il engendre des déviations temporelles relativement importantes [SAS 95]. À titre d'exemple, le temps de chargement d'une fonte peut parfois atteindre l'ordre de la seconde ! Ceci démontre que le système graphique comme le système d'exploitation restent encore très peu adaptés à ce type d'applications et justifie les recherches actuelles qui tentent d'y apporter des solutions [SCH 96].

En conclusion, le système Madeus est opérationnel et est actuellement utilisé par un étudiant de DEA, un étudiant en thèse et un ingénieur CNAM qui l'emploient comme plate-forme pour mener des expériences dans le cadre de leurs activités de recherche. Des documents multimédia ont également été élaborés à des fins de démonstration. L'outil a notamment été présenté lors des démonstrations :

[Table des matières]

7 Conclusion

Dans ce chapitre, nous avons présenté le système de présentation de Madeus à travers son architecture et ses principales fonctions. Nous avons montré comment le graphe d'exécution était exploité pour l'ordonnancement de la présentation, pour la gestion de l'indéterminisme à travers le formatage dynamique, ainsi que pour la gestion de la navigation hypermédia. Ensuite, nous avons développé la partie liée au support des présentations multimédia à travers les différents médiateurs. Ces médiateurs permettent de restituer de façon concrète le document à l'utilisateur. Nous avons également présenté les premières conclusions concernant à la fois la démarche adoptée pour la réalisation du système Madeus et l'évaluation quantitative de l'effort nécessaire pour le développement de ce type d'applications.

Notes :

(1)

Le mot « type » est pris ici au sens temporel du terme : {référence, inclusion}.
(2)

Dans ce chapitre, nous désignerons par le terme objet les éléments d'un document multimédia manipulés dans le contexte du système de présentation.
(3)

Fonction XtAdd_Call_Back.
(4)

Dans Unix, les processus ne partagent pas le même espace d'adressage