Dans la plupart des descriptions publiques de SMIL, le langage est décrit comme « permettant aux auteurs d'apporter un contenu comme à la télé au Web ». Cependant, un aspect des présentations fréquemment vu à la télévision a brillé par son absence de SMIL : des transitions telles que les fondus et les balayages. Dans SMIL 1.0, toute représentation des transitions devait être « moulée dans » le média lui-même et il n'y avait aucune méthode de coordination des transitions entre les éléments des différents médias selon l'environnement de temporisation de SMIL 1.0. Le but de cette section est de spécifier la sémantique et la syntaxe pour décrire des transitions dans SMIL et dans d'autres documents basés sur XML. En outre, cette spécification décrit une taxonomie des transitions basées sur SMPTE 258M-1993 [SMPTE-EDL] ainsi qu'un ensemble compact de paramètres qui peuvent être employés pour exprimer ce jeu de transitions.
Considérez une projection de quatre images simples immobiles, chacune étant affichée pendant 5 secondes. En utilisant la temporisation de SMIL, la projection pourrait ressembler à ce qui suit :
...
<seq>
<img src="papillon.jpg" dur="5s" ... />
<img src="aigle.jpg" dur="5s" ... />
<img src="loup.jpg" dur="5s" ... />
<img src="phoque.jpg" dur="5s" ... />
</seq>
...
Dans les faits, quand cette présentation est jouée, nous remarquons une « coupure » nette entre le passage d'une image à une autre, comme c'est montré dans cette image animée. Cependant, ce que nous voudrions voir ce sont trois balayages de gauche à droite entre les quatre images : entre papillong.jpg et aigle.jpg à 5 secondes, entre aigle.jpg et loup.jpg à 10 secondes et entre loup.jpg et phoque.jpg à 15 secondes. Ceci est illustré par cette image animée. Le but de ce document est de définir la syntaxe et la sémantique pour spécifier des transitions de ce type dans des documents basés sur XML.
Bien que les transitions décrites dans ce document soient des transitions visuelles, les concepts s'appliquent aussi bien aux transitions audio, en mettant l'accent sur la superposition des médias audio dans le temps plutôt que dans la disposition. Cependant, ce document ne définit aucun effet de transition audio ou ne dit pas en particulier comment les transitions audio devraient se comporter.
Ce document est organisé comme suit.
Les transitions sont modélisées comme des comportements de filtre animé. Quand un module de transition est inclus dans un profil de langage, tous les éléments avec un contenu interprétable ont implicitement le comportement du filtre de transition qui leur est ajouté. Par défaut, le comportement n'a aucun effet, mais des attributs et des éléments sont fournis pour spécifier et contrôler l'effet du comportement de transition sur le contenu interprétable. Un contenu interprétable est déclaré dans les modules d'objet média de SMIL en utilisant des éléments médias. D'autres langages, tels que HTML, fournissent des éléments supplémentaires comme les éléments span et div pour le rendu. Dans ce document, les termes « élément média » et « objet média » comprennent tout le « contenu interprétable », défini par le langage hôte.
Le comportement du filtre de transition est d'utiliser l'arrière-plan en entrée. Dans ce contexte, l'arrière-plan consiste en ce qui sera présent à ce moment dans la disposition, là où la transition sera appliquée. Par conséquent, l'arrière-plan pourrait inclure un média changeant en activité, un média gelé ou des couleurs de remplissage pleines. Il prend également en entrée l'objet média auquel la transition sera appliquée. L'objet média peut être utilisé soit comme la source, soit comme la destination en entrée, avec l'arrière-plan assurant l'autre entrée. L'objet média définit aussi la zone dans laquelle la transition se produira. Certaines transitions, tel que le fondu en entrée à partir d'une couleur pleine, prendra seulement une entrée - l'objet média auquel la transition est appliquée.
Un paramètre libre commun à tous les comportements des filtres de transition est la progression de l'effet de transition dans la durée simple, que l'on considère être, de façon abstraite, la progression de l'effet du filtre. Nous établissons la convention que cette progression est un nombre réel dans l'intervalle 0.0-1.0, où une progression de 0.0 implique que la sortie du filtre est entièrement l'arrière-plan et où une progression de 1.0 implique que la sortie du filtre est entièrement le média de destination. Les valeurs intermédiaires produisent l'application d'un comportement du filtre de transition, combinant l'arrière-plan et le média de destination d'une certaine façon. Tous les autres paramètres de la transition sont sensés faire partie de l'effet du filtre lui-même. La progression est le seul paramètre qui est animé. D'autres paramètres sont employés pour spécifier l'effet du filtre, mais ils ne sont pas animés.
La distinction entre animer seulement la progression du filtre et animer une ou plusieurs propriétés du média est illustrée par ce qui suit. Dans le balayage de gauche à droite dans l'exemple préliminaire, nous pouvons considérer cette transition comme étant :
Ceci semble être une distinction mineure pour un balayage de gauche à droite, mais alors, pensez à la distinction correspondante pour un fondu enchaîné. Nous pourrions penser d'un fondu enchaîné comme de :
Dans certains cas, il peut sembler commode d'animer une seule propriété particulière pour chaque type de transition. Cependant, ce modèle ne se généralise pas bien à travers la grande diversité de transitions actuellement utilisées. Par conséquent, afin de maintenir la simplicité de ce modèle, nous pensons aux deux effets de balayage de gauche à droite et de fondu enchaîné comme à des « boîtes noires » qui prennent les mêmes entrées - l'arrière-plan, le média de destination et la valeur de la progression.
Des éléments et attributs XML sont fournis pour contrôler les propriétés de la transition. Cependant, les transitions elles-mêmes ne sont pas une propriété de l'attribut ou des éléments utilisés pour contrôler le comportement de transition. Dans le modèle, les transitions sont une propriété comportementale de l'élément média lui-même.
Les transitions sont des suggestions de présentation. Les implémentations doivent pouvoir ignorer des transitions si elles le désirent et continuer de jouer le média de la présentation. Ça revient à dire que le comportement du filtre de transition ne s'exécute pas, ou n'a aucun effet. Les transitions ne modifient pas la durée active des éléments médias qui sont impliqués dans la transition. Les comportements de transition s'opèrent dans la durée simple de leurs éléments médias respectifs. Le comportement de plusieurs transitions simultanément, actives sur un élément donné est indéfini.
Nous présenterons deux méthodes de spécification des transitions :
Nous classerons les transitions selon une taxonomie à deux niveaux de types et de sous-types. Chaque type de transition décrit un groupe de transitions qui sont étroitement liées. Dans ce type, on assigne à chacune des transitions individuelles un sous-type qui souligne la caractéristique distinctive de cette transition. Habituellement, cette caractéristique distinctive a un rapport avec l'origine ou avec la direction du motif géométrique de cette transition. Par exemple, un des types de transition est appelé "barWipe" et représente les codes 1 et 2 du balayage SMPTE. Le code 1 du balayage SMPTE est un balayage composé d'une barre verticale se déplaçant de gauche à droite. Le code 2 du balayage SMPTE est une barre horizontale se déplaçant de haut en bas. Par conséquent, le sous-type du code 1 du balayage SMPTE est appelé "leftToRight" et le sous-type du code 2 du balayage SMPTE est appelé "topToBottom".
Puisque la table des types et sous-types des transitions est assez étendue, nous ne présenterons pas la liste exhaustive ici. Pour la liste complète des types et sous-types des transitions prédéfinies, ainsi que leur application aux codes de balayage SMPTE, voir l'« Annexe ». Notez que la correspondance avec les codes de balayage SMPTE est seulement donnée comme référence.
Pour chacun des types, un des sous-types est étiqueté comme le sous-type « par défaut » dans l'« Annexe ». Si cette classe de transition n'est pas disponible ou n'est pas implémentée par l'agent utilisateur, alors l'agent utilisateur devrait retomber sur le sous-type par défaut pour cette famille de transition. Ceci permet aux auteurs de définir un type pour une classe de transitions sans exiger qu'ils définissent un sous-type pour la classe de transition. Pour plus de détails sur les règles d'analyse et sur la sémantique de repli, voir la section « Les règles d'analyse des transitions ».
Les implémentations sont tenues d'implémenter le sous-type par défaut pour chacun des types de transition suivants.
| Type de transition | Sous-type de transition par défaut | Code de balayage SMPTE |
| barWipe | leftToRight | 1 |
| irisWipe | rectangle | 101 |
| clockWipe | clockwiseTwelve | 201 |
| snakeWipe | topLeftHorizontal | 301 |
L'implémentation du reste des types et sous-types de transition listés dans l'« Annexe » est encouragée, mais n'est pas exigée en raison du grand nombre de transitions.
Maintenant qu'une taxonomie de types et sous-types de transition est définie, nous allons examiner une syntaxe abrégée « comme un style » pour les transitions. Cette syntaxe abrégée exige la spécification de ce qui suit:
L'élément transition définit une seule classe de transition. Cet élément peut apparaître dans différents endroits du document, selon le profil de langage. Cependant, dans la plupart des cas, l'élément transition sera autorisé seulement dans l'élément head du document. Pour être plus clair, un élément « conteneur » de regroupement (tel que l'élément layout dans SMIL) peut être désiré afin de regrouper tous les éléments transition. Puisqu'il peut y avoir plusieurs classes de transition utilisées dans un document, alors il peut y avoir plusieurs éléments transition dans l'élément head du document.
Attributs de l'élément
direction="reverse", alors il sera balayé par la même barre verticale allant
de droite à gauche. Un autre exemple est le type "starWipe" et un sous-type "fourPoint".
Pour cette transition, l'exécution de la transition en avançant fait apparaître
le média de destination à l'intérieur d'une étoile à quatre branches qui commence petite et
qui devient plus large au fur et à mesure que la transition progresse. L'exécution de
cette transition à l'inverse fera apparaître le média de destination dans la zone extérieure
à une grande étoile à quatre branches. L'étoile commencera grande et deviendra plus petite
au fur et à mesure que la transition progressera. Notez que les transitions n'auront pas
toutes des interprétations inverses significatives. Par exemple, un fondu enchaîné n'est
pas une transition géométrique et, par conséquent, n'a pas d'interprétation pour une
direction inverse. Les transitions qui n'ont pas d'interprétation inverse devraient
ignorer l'attribut direction et prendre la valeur par défaut "forward".
Contenu de l'élément
L'élément transition peut avoir l'élément param comme enfant.
Par exemple, supposez que nous voulons définir deux classes de transition : un simple fondu vers le noir de 2 secondes et un balayage en iris de 5 secondes. Ces classes de transition peuvent être exprimées ainsi :
...
<transition id="ftb2" type="fade" subtype="fadeToColor"
dur="2s" color="#000000" /> errata-E24
<transition id="star5" type="starWipe" subtype="fivePoint"
dur="5s" />
...
L'ensemble des paramètres examinés ci-dessus est adéquat pour exprimer toutes les transitions définies dans ce document. Cependant, une implémentation peut choisir d'étendre l'ensemble des transitions et définir ses propres types et sous-types de transition. Certaines de ces nouvelles classes de transition peuvent nécessiter des paramètres qui ne sont pas couverts par l'ensemble des attributs communs listés ci-dessus. Le but de l'élément param est de donner un moyen générique pour fournir des paramètres à ces types et sous-types de transition étendus.
L'élément transition peut prendre comme enfant l'élément param, défini dans « Le module MediaParam de SMIL ». Cet élément peut être issu de HTML ou d'un autre module, selon le profil de langage hôte.
Par exemple, supposez qu'une implémentation décide de créer un nouveau type de transition appelé "superCool" et un sous-type appelé "flamme". Cette nouvelle transition a besoin d'un paramètre appelé "longueurFlamme". L'exemple ci-dessous montre comment cette implémentation pourrait utiliser l'élément param pour fournir une valeur à "longueurFlamme".
<transition id="myfire" type="superCool" subtype="fire">
<param name="longueurFlamme" value="20" >
</transition>
Notez que la signification des paramètres supplémentaires fournis à l'élément transition dépend de l'implémentation de la transition en question.
Une fois qu'une classe de transition a été définie dans l'en-tête du document, une instance de transition peut être créée en appliquant la classe de transition à la durée active d'un élément objet média ou d'un autre élément avec un « contenu interprétable ». Nous faisons ceci en spécifiant un attribut transIn ou transOut sur l'élément objet média. Les transitions définies avec l'attribut transIn commenceront au début de la durée active de l'élément média. Les transitions définies avec l'attribut transOut se termineront à la fin de la durée active de l'élément média ou à la fin de l'état de remplissage de l'élément, si l'attribut fill n'est pas spécifié avec une valeur par défaut.
Les attributs transIn et transOut sont ajoutés à tous les éléments objets médias listés dans « Le module d'objet média de SMIL ». La valeur par défaut des deux attributs est une chaîne vide, indiquant qu'aucune transition ne devrait être exécutée.
La valeur de ces attributs est une liste, dont le séparateur est le point-virgule, des id des transitions. Chaque id devrait correspondre à la valeur de l'identifiant XML d'un des éléments transition précédemment définis dans le document. Le but de la liste est de permettre aux auteurs de spécifier un ensemble de transitions de repli, si la transition préférée n'était pas disponible. La première transition de la liste devrait être exécutée si l'agent utilisateur a implémenté cette transition. Si cette transition n'était pas disponible, alors la deuxième transition de la liste devrait être exécutée, et ainsi de suite. Si la valeur de l'attribut transIn, ou transOut, ne correspond à aucune des valeurs d'identifiant XML des éléments transition précédemment définis, alors il y a une erreur. Dans le cas de cette erreur, la valeur de l'attribut devrait être une chaîne vide et, par conséquent, aucune transition ne devrait être exécutée. Pour plus de détails sur les règles d'analyse, voir la section « Les règles d'analyse des transitions ».
Cependant, l'effet visuel peut faire croire que cette transition est appliquée au milieu de la durée active d'un élément. Considérez l'exemple suivant:
...
<par>
<img src="papillon.jpg" dur="10s" />
<img src="aigle.jpg" begin="3s" dur="4s" />
</par>
...
En supposant que "aigle.jpg" est par-dessus le niveau d'empilement de "papillon.jpg", alors les transitions appliquées au début et à la fin de "aigle.jpg" donneraient l'impression visuelle d'être appliquées pendant la durée active de "papillon.jpg". Cependant, du point de vue de l'auteur, elles sont appliquées au début et à la fin de "aigle.jpg" ;
...
<seq>
<img src="papillon.jpg" dur="5s" ... />
<img src="aigle.jpg" dur="5s" ... />
</seq>
...
Par exemple, dans la présentation suivante, le comportement de l'attribut fill de l'élément image est "freeze", qui garde l'image gelée jusqu'à ce que son parent se termine. Le parent se termine quand tous les enfants se terminent, qui est la fin de video à 30 secondes. Afin de pouvoir finir à la fin de la durée gelée (30 secondes), la transition de fondu vers le noir débute à 29 secondes. Par conséquent, les deux éléments se fondent au noir ensemble à 29 secondes.
...
<transition id="toblack1s" type="fade" subtype="fadeToColor"
fadeColor="#000000" dur="1s"/>
...
<par>
<img ... dur="10s" transOut="toblack1s" fill="freeze"/>
<video ... dur="30s" transOut="toblack1s"/>
</par>
Cependant, dans l'exemple suivant, le comportement de l'attribut fill de l'élément image est "remove". Par conséquent, la transition se termine à la fin de la durée active de l'élément. L'élément image se fond au noir en commençant à 9 secondes et l'élément video se fond au noir en commençant à 29 secondes.
...
<transition id="toblack1s" type="fade" subtype="fadeToColor"
color="#000000" dur="1s"/> errata-E24
...
<par>
<img ... dur="10s" transOut="toblack1s" fill="remove"/>
<video ... dur="30s" transOut="toblack1s"/>
</par>
fill="transition" doit être employée pour permettre la transition entre la dernière
image gelée du média précédent (arrière-plan) et les
images actives du média en cours (destination). Voir
« L'utilisation de fill="transition" » pour plus
d'information. Dans les cas où les durées actives se chevauchent
(et où les médias qui sont joués
sont dans des niveaux d'empilement différents),
la transition s'effectue entre les images actives des deux médias.
Dans l'exemple suivant, les durées actives ne se chevauchent pas, mais fill="transition" gèle la dernière image de la première vidéo. Le résultat est un fondu enchaîné entre la dernière image de "foo1.mpg" et les images actives de "foo2.mpg".
...
<seq>
<video src="foo1.mpg" fill="transition"... />
<video src="foo2.mpg" transIn="xfade1s" ... />
</seq>
...
Dans la présentation suivante, cependant, les fondus enchaînés au début et à la fin de "foo2.mpg" s'effectuent entre les images actives de "foo1.mpg" et "foo2.mpg" puisque leurs durées actives se chevauchent. L'exemple suppose que les vidéos sont à des niveaux d'empilement différents.
...
<transition id="xfade" type="fade" subtype="crossfade" dur="1s" />
...
<par>
<video src="foo1.mpg" dur="30s" />
<video src="foo2.mpg" begin="10s" dur="10s"
transIn="xfade" transOut="xfade" />
</par>
...
...
<transition id="awipe" type="barWipe" dur="1s" ... />
...
<par>
<img src="img1.jpg" dur="2s" transOut="awipe" .../>
<img src="img2.jpg" begin="5s" dur="2s" .../>
</par>
...
Par exemple, dans l'exemple suivant, la transition entrante "barWipe" sera prioritaire sur la transition sortante "fadeToColor". La transition entrante interviendra entièrement pendant les 2 premières secondes de "img1.jpg" et la transition sortante ignorée, et aucune transition sortante n'est exécutée.
...
<transition id="awipe" type="barWipe" dur="2s" ... />
<transition id="toblack" type="fadeToColor dur="2s" ... />
...
<img src="img1.jpg" dur="3s" transIn="awipe" transOut="toblack" .../>
...
Considérez l'exemple suivant. L'image "img2.jpg" a une durée simple de 5 secondes, mais une durée active de 15 secondes, puisqu'elle est jouée trois fois au total. Cependant, la transition entrante est jouée seulement une fois au début de la durée active de "img2.jpg", qui est à 5 secondes dans la durée active du conteneur de temps de la séquence. La transition sortante est également jouée une seule fois, en commençant à 19 secondes dans la durée active du conteneur de temps.
...
<transition id="awipe" type="barWipe" dur="1s" ... />
<transition id="toblack" type="fadeToColor" dur="1s" ... />
...
<seq>
<img src="img1.jpg" dur="5s" fill="transition" .../>
<img src="img2.jpg" dur="5s" repeatCount="3"
transIn="awipe" transOut="toblack" ... />
<img src="img3.jpg" dur="5s" .../>
</seq>
...
L'attribut fill, défini dans « Les modules de temporisation et de synchronisation de SMIL », permet à un auteur de spécifier qu'un élément devrait être prolongé au-delà de sa durée active en gelant l'état final de l'élément. Une nouvelle valeur pour fill, "transition", est requise pour permettre des transitions entre des éléments qui ne devraient pas normalement être affichés en même temps. La valeur de l'attribut fill peut être appliqué seulement aux éléments avec un contenu interprétable et n'est pas applicable aux éléments conteneur de temps purs, tels que par, seq et excl. Si fill="transition" est appliqué à un élément conteneur de temps pur, alors la valeur est ignorée et reprend sa valeur par défaut.
La valeur fill="transition" indique, après que sa durée active est écoulée, que l'élément sera gelé et le restera jusqu'à la fin de la transition suivante sur un élément avec lequel il se chevauche dans la disposition. L'élément contenant fill="transition" sera retiré quand la transition se terminera. Les règles de temporisation définies dans « Les modules de temporisation et de synchronisation de SMIL » s'appliquent toujours : l'élément est sujet aux contraintes de son conteneur de temps parent et peut être retiré par son parent indépendamment du fait qu'une transition est déclarée ou non. Chaque profil doit définir l'interprétation d'un chevauchement dans la disposition.
Dans l'exemple suivant, qui n'utilise pas de transitions, le comportement par défaut est de retirer l'objet représentant "img1.jpg" après 10 secondes.
...
<seq>
<img src="img1.jpg" dur="10s" ... />
<img src="img2.jpg" dur="10s" ... />
</seq>
...
Ajouter une transition entre "img1.jpg" et "img2.jpg" requiert que "img1.jpg" reste affiché après que sa durée active est écoulée et, ainsi, il peut être utilisé par la transition vers "img2.jpg". La première image est retirée dès que la transition est terminée. La spécification fill=>="transition" permet ce comportement, illustré par l'exemple suivant.
...
<transition id="awipe" type="barWipe" dur="1s" ... />
...
<seq>
<img src="img1.jpg" dur="10s" fill="transition" ... />
<img src="img2.jpg" dur="10s" transIn="awipe" ... />
</seq>
...
Après l'ajout des attributs fill et transIn, notre exemple de diaporama de la section Introduction ressemble à ce qui suit :
...
<transition id="wipe1" type="barWipe" subtype="leftToRight" dur="1s"/>
...
<seq>
<img src="papillon.jpg" dur="5s" fill="transition" ... />
<img src="aigle.jpg" dur="5s" fill="transition" transIn="wipe1" ... />
<img src="loup.jpg" dur="5s" fill="transition" transIn="wipe1" ... />
<img src="phoque.jpg" dur="5s" transIn="wipe1" ... />
</seq>
La présentation est maintenant jouée comme c'est décrit par la suite, et comme c'est illustré par cette image animée.
Notez que ces transitions se produisent pendant la durée active de chacune des images qui référencent la transition et ne s'ajoutent ni ne se retranchent de la durée active de l'élément qui les héberge. Dans ce cas, la transition se produit au début de la durée active de chaque élément média.
Notez l'importance de fill="transition". Si nous n'avions pas spécifié fill="transition" sur "papillon.jpg", "aigle.jpg" et "loup.jpg", alors les transitions à 5, 10 et 15 secondes auraient été effectuées avec l'arrière-plan de la zone de lecture (ou la couleur de l'arrière-plan par défaut, selon la spécification du langage de disposition), au lieu de la précédente image dans la séquence.
La spécification fill="transition" permet également des transitions d'un enfant exclusif à un autre quand l'enfant actif précédent est normalement retiré de l'affichage. Dans l'exemple suivant, la première image, qui est en transition avec l'arrière-plan, s'affiche pendant 5 secondes et puis se gèle à cause de fill="transition". L'enfant suivant, activé par un clic de bouton sera en transition avec "papillon.jpg". Quand cet enfant sera terminé, il gèlera également, à cause de fill="transition", restant disponible pour être utilisé dans la transition suivante. Il sera en transition avec l'image suivante activée par un clic de bouton, et ainsi de suite.
...
<transition id="wipe1" type="barWipe" subtype="leftToRight" dur="1s"/>
...
<excl>
<img src="papillon.jpg" begin="0" dur="5s" fill="transition" transIn="wipe1" ... />
<img src="aigle.jpg" begin="button1.click" dur="5s" fill="transition" transIn="wipe1" ... />
<img src="loup.jpg" begin="button2.click" dur="5s" fill="transition" transIn="wipe1" ... />
<img src="phoque.jpg" begin="button3.click" dur="5s" fill="transition" transIn="wipe1" ... />
</excl>
Notez que l'attribut fill prend effet après la durée active d'un élément qui est terminé. Dans l'exemple ci-dessus, si "button2" est cliqué à 3 secondes, alors "papillon.jpg" se terminera, et la valeur de fill="transition" pour "papillon.jpg" sera activée par la fin de la transition suivante. Par conséquent, la transition se produira de "papillon.jpg" vers "loup.jpg" et l'image "papillon.jpg" gelée disparaîtra quand la transition sera finie.
L'attribut pauseDisplay de l'élément priorityClass, défini dans « Les modules de temporisation et de synchronisation de SMIL », peut aussi être employé pour contrôler l'affichage des enfants d'un élément exclusif. Dans l'exemple ci-dessus, l'attribut pauseDisplay pourrait être employé pour garder l'image "papillon.jpg" affichée quand elle est en pause, ainsi la transition se produirait entre "papillon.jpg" et le prochain média activé, et l'image "papillon.jpg" continuerait à être affichée après la transition (en supposant qu'elle ne soit pas complètement recouverte par l'autre média).
Des paramètres de transitions peuvent être mal spécifiés de différentes façons avec des niveaux variés de gravité. Pour ces raisons, les erreurs suivantes devraient être gérées par l'action spécifiée :
Comme indiqué précédemment, chaque élément transition peut avoir un sous-type de transition par défaut. De plus, les attributs transIn ou transOut des éléments médias prennent une liste d'id de transition, dont le séparateur est le point-virgule, pour indiquer une liste de transitions de repli. Pour éliminer les ambiguïtés entre les sous-types par défaut et la liste de repli, cette section définit un algorithme qui doit être suivi pour déterminer la transition à exécuter. La procédure générale est que la première transition résolue de la liste des transitions de repli est celle qui devrait être exécutée.
En donnant un ou plusieurs éléments transition précédemment déclarés et une liste des id des transitions de repli (spécifiée par les attributs transIn ou transOut), une implémentation doit utiliser l'algorithme suivant pour déterminer la transition à exécuter.
current-id
le premier id de la liste ;
current-id est vide (nous n'avons plus d'id dans la liste), quitter
cet algorithme. L'implémentation ne doit pas considérer ceci comme une erreur et
ne doit exécuter aucune transition ;
current-id est l'id d'un élément
transition
précédemment défini, alors aller à
l'étape 4. Sinon, donner à la valeur current-id le prochain id de la liste
et retourner à l'étape 2 ;
current-id, est connue de l'implémentation, aller à l'étape 5.
Sinon, donner à la valeur current-id le prochain id de la liste
et retourner à l'étape 2 ;
current-id, aller à l'étape 6.
S'il n'est pas spécifié, l'implémentation doit quitter cet algorithme et exécuter le sous-type de
transition par défaut pour le type de transition indiqué ;
current-id, est connue de l'implémentation, alors
l'implémentation doit quitter cet algorithme et exécuter la transition spécifiée
par le type et le sous-type. Sinon, donner à la valeur current-id le prochain id
de la liste et retourner à l'étape 2.
Dans l'algorithme spécifié ci-dessus pour déterminer quelle transition effectuer, il y a une méthode implicite pour étendre le jeu des transitions. Si la nouvelle transition n'appartient à aucune des descriptions générales des familles de transitions dans la section « La taxonomie des transitions », les implémentations peuvent créer un nouveau type de transition (une nouvelle famille de transitions) et ensuite créer des nouveaux sous-types de transition pour ce type nouvellement défini. Cependant, il est recommandé que si la nouvelle transition appartient à une famille de transitions existante, les implémentations devraient simplement étendre l'ensemble de sous-types pour ce type existant. Les implémentations peuvent utiliser les noms de type et de sous-type de leur choix pour ces transitions étendues. Cependant, quand ces nouvelles transitions sont utilisées dans un document, elles doivent avoir un espace de nommage qualifié.
Comme mentionné dans la section « Le modèle de transition », les transitions de SMIL 2.0 autorisent deux méthodes pour spécifier des transitions : une méthode abrégée et une méthode en-ligne. Le module BasicTransitions spécifie la méthode abrégée alors que ce module spécifie la méthode en-ligne. Les transitions en-ligne fournissent un contrôle supplémentaire de la temporisation et de la progression par rapport aux transitions abrégées. L'élément transitionFilter offre une gestion des transitions en-ligne.
L'élément transitionFilter est un élément d'animation similaire à l'élément animateMotion, défini dans « Le module BasicAnimation de SMIL 2.0 ». L'élément animateMotion anime la position d'un élément. En revanche, l'élément transitionFilter anime la progression du comportement d'un filtre (transition) sur un élément média ou sur des éléments avec un contenu interprétable. Le comportement du filtre modifie temporairement le rendu visuel ou auditif du média. L'élément transitionFilter peut cibler n'importe quel élément avec un « contenu interprétable », pas nécessairement un élément média. Le langage hôte détermine quels sont les éléments auxquels transitionFilter peut être appliqué. Par exemple, en HTML, les éléments span ou div peuvent représenter un « contenu interprétable ». L'élément transitionFilter peut cibler un élément de contenu interprétable de deux façons : il peut être l'enfant de cet élément, ou le cibler avec l'attribut targetElement.
L'élément transitionFilter partage plusieurs attributs avec l'élément transition. Il intègre la gestion de la temporisation du module BasicInlineTiming de SMIL 2.0 et la gestion de l'animation du module BasicAnimation de SMIL 2.0. Ce module peut également être combiné avec d'autres modules SMIL 2.0, tel que le module TimeManipulations, selon les modules implémentés par le langage hôte.
Cet élément doit être l'enfant d'un élément média ou d'un autre élément avec un contenu interprétable, comme défini par le langage hôte. Ceci contrairement au module BasicTransitions, où il est déclaré dans l'élément transition et puis spécifié par les attributs transIn ou transOut qui sont appliqués aux éléments médias. errata-E25
De la même façon que transIn et transOut sont des attributs de l'objet média auquel la transition est appliquée, l'élément transitionFilter est un enfant de l'objet média auquel la transition est appliquée. Cependant, bien que l'élément transitionFilter soit l'enfant d'un objet média, ce n'est pas un conteneur de temps, et il ne peut pas allonger la durée active de l'objet média. Par conséquent, si transitionFilter est un enfant d'un élément média, il peut seulement appliquer une transition à cet élément média pendant la durée active de cet élément média. Si on veut appliquer une transition pendant la période de gel d'un élément, alors transitionFilter ne devrait pas être un enfant de l'élément média. À la place, c'est l'attribut targetElement qui devrait être employé pour cibler l'élément média.
Notez que l'élément transitionFilter représente une transition « entrante » dans le sens où le média de destination (le média qui est entièrement visible quand la progression est 1.0) est le média auquel la transition est appliquée (le média parent, dans ce cas). Cependant, puisque transitionFilter donne un contrôle total sur la temporisation de la progression, une transition « entrante » peut ressembler à une transition « sortante », en exécutant simplement la transition d'une progression de 1.0 et en terminant la transition à une progression de 0.0.
Attributs de l'élément transitionFilter
Lors de l'intégration des éléments transitionFilter dans le langage hôte, le concepteur de langage devrait éviter d'inclure ces deux derniers attributs en même temps. Si, toutefois, le concepteur du langage hôte choisit d'inclure les deux attributs en même temps dans le langage hôte, alors quand les deux sont spécifiés pour un élément d'animation donné, l'attribut XLink href a la priorité sur l'attribut targetElement.
L'avantage d'utiliser l'attribut targetElement est la syntaxe plus simple de la valeur d'attribut comparée à l'attribut href. L'avantage d'utiliser l'attribut XLink href est qu'il pourra s'étendre à un mécanisme de lien complet dans les futures versions des transitions de SMIL, et que l'élément d'animation peut être traité par des processeurs XLink génériques. La forme XLink est également donnée pour les langages hôtes qui sont conçus pour utiliser XLink pour toutes ces références. Les deux exemples suivants illustrent ces deux approches.
Cet exemple utilise la syntaxe plus simple de targetElement :
<transitionFilter targetElement="foo" .../>
Cet exemple utilise la syntaxe plus flexible du localisateur XLink, pour la cible équivalente :
<foo xmlns:xlink="http://www.w3.org/1999/xlink">
...
<transitionFilter xlink:href="#foo" .../>
...
</foo>
En utilisant un attribut XLink href sur un élément transitionFilter, les attributs XLink supplémentaires suivants doivent être définis dans le langage hôte. Ils peuvent être définis dans un DTD, ou le langage hôte peut les exiger dans la syntaxe du document pour la gestion de processeurs XLink génériques. Pour plus d'information, se référer à [XLINK].
Les attributs XLink suivants sont requis par la spécification XLink. Les valeurs sont fixées, et donc peuvent être spécifiées en tant que telles dans un DTD. Tous les autres attributs XLink sont facultatifs et n'affectent pas la sémantique des transitions de SMIL.
Des détails supplémentaires sur la spécification de l'élément cible associé au document hôte sont décrits dans la section « L'intégration ».
Contenu de l'élément
L'élément transitionFilter peut avoir l'élément param pour enfant.
Exemples avec l'élément transitionFilter
Exemple 1 : un diaporama avec transitionFilter
L'exemple suivant utilise des transitions en-ligne pour un diaporama qui inclut des transitions entre les images, similaire à l'exemple examiné dans l'introduction. La présentation se joue ainsi.
...
<seq>
<img id="papillon" src="papillon.jpg" dur="5s" fill="transition" />
<img id="aigle" src="aigle.jpg" dur="5s" fill="transition" >
<transitionFilter type="barWipe" subtype="leftToRight" dur="1s" />
</img>
<img id="loup" src="loup.jpg" dur="5s" fill="transition" >
<transitionFilter type="barWipe" subtype="leftToRight" dur="1s" />
</img>
<img id="phoque" src="phoque.jpg" dur="5s" >
<transitionFilter type="barWipe" subtype="leftToRight" dur="1s" />
</img>
</seq>
...
Exemple 2 : transition d'horloge avec transitionFilter et "discrete"
L'exemple suivant utilise une liste values et la valeur "discrete" de calcMode pour spécifier la progression de la transition en 12 étapes. La transition débute 2 secondes après le début de la vidéo et continue pendant 12 secondes. Puisque la transition est circulaire, l'effet est celui du balayage d'une horloge qui laisse voir une heure à la fois.
<video id="video1" src="car.avi">
<transitionfilter id="trans1"
type="ellipseWipe" subtype="circle"
begin="2" dur="12" calcMode="discrete"
values="0.083; 0.166; 0.250; 0.333; 0.416; 0.500;
0.583; 0.666; 0.750; 0.833; 0.916; 1.000;" />
</video>
Exemple 3 : transitionFilter avec les attributs from et to
L'exemple suivant utilise une transition partielle qui progresse de 0 à 50% (0.5). On suppose que la vidéo est positionnée directement sur l'image dans la disposition. La présentation se joue ainsi.
<par>
<img src="racing.jpg" begin="0s" dur="5s" />
<video id="car" src="car.avi" begin="0s" dur="3s"
<transitionfilter type="clockWipe" subtype="clockwiseTwelve"
begin="1s" dur="2s" from="0.0" to="0.5" />
</video>
</par>
L'élément transitionFilter peut prendre l'élément param, défini dans « Le module MediaParam de SMIL », pour élément enfant. Cet élément peut être issu de HTML ou de certains autres modules, selon le profil de langage hôte. L'élément param définit une information de paramètre spécifique à transitionFilter. Par exemple, l'implémentation d'une transition "windshieldWipe" pourrait prendre un paramètre qui définit la longueur du rayon du balayage comme suit :
<transitionfilter type="windshieldWipe"
begin="4" dur="3" from="0.5" to="1.0" >
<param name="radius" value="3in" >
</transitionFilter>
La gestion de l'élément param est dépendante de l'implémentation. La signification des paramètres dépend de l'implémentation de la transition spécifique.
Le module TransitionModifiers donne un contrôle supplémentaire sur l'effet visuel de la transition : en contrôlant la répétition d'un motif horizontalement et verticalement et en contrôlant l'effet visuel au bord du motif. Le standard SMPTE autorise également ce type de contrôle géométrique.
Ce module exige le module BasicTransitions ou le module InlineTransitions.
En utilisant les attributs horzRepeat et vertRepeat, le motif géométrique qui compose la transition peut être répété dans les directions horizontale et verticale sur la zone occupée par le média. Pour réaliser la répétition, la zone occupée par le média de destination est divisée en sections égales, horizontalement et/ou verticalement, selon les valeurs de horzRepeat et vertRepeat. Des transitions identiques sont alors exécutées, en même temps, une dans chacune des sections résultantes.
Les diagrammes suivants illustrent la différence entre le comportement fourni par les attributs horzRepeat et vertRepeat par défaut et chaque attribut avec deux copies de la transition appliquée à une image.
Figure 1. Une image qui n'a aucune transition qui lui est appliquée.
Figure 2. L'image de la Figure 1 avec une transition en éventail en cours d'exécution. La zone courante de la transition est illustrée par le triangle noir. Cet exemple utilise la valeur par défaut, égale à un, de horzRepeat et vertRepeat, qui produit une occurrence de la transition. Par conséquent, le motif en éventail n'est pas répété dans l'une ou l'autre direction.
Cette image animée illustre la transition en éventail de la Figure 2. La transition en éventail pourrait être déclarée comme suit :
<transition ... type="fanWipe" subtype="centerTop" dur="1s"/>
Figure 3. La même transition en éventail de la Figure 2 en cours d'exécution, mais avec deux répétitions horizontales (horzRepeat="2"). La répétition produit deux copies plus petites, mais identiques, de la transition, l'une dans la moitié gauche de l'image et l'autre dans la moitié droite de l'image. Le nombre de motifs dans la direction horizontale est égal à horzRepeat.
Figure 4. La même transition en éventail de la Figure 2 en cours d'exécution, mais avec deux répétitions verticales (vertRepeat="2"). La répétition produit deux copies plus petites, mais identiques, de la transition, l'une dans la moitié supérieure de l'image et l'autre dans la moitié inférieure de l'image. Le nombre de motifs dans la direction verticale est égal à vertRepeat.
L'exemple suivant montre la déclaration de la transition de la Figure 4. Il spécifie une valeur de vertRepeat à "2" qui indique que la transition en éventail se produira dans deux endroits du média en même temps.
<transition ... type="fanWipe" subtype="centerTop" dur="1s" horzRepeat="1" vertRepeat="2"/>
Notez que nous n'avions pas à régler horzRepeat sur "1", puisque "1" est la valeur par défaut, mais nous la fixons explicitement ici pour la clarté. Cette transition est illustrée par cette image animée.
Dans un exemple plus complexe, si horzRepeat a été fixé à "3" et vertRepeat a été fixé à "2" alors 6 transitions en éventail plus petites se produiraient en même temps sur le média, avec 3 motifs en largeur (horzRepeat) et 2 en hauteur (vertRepeat).
Notez que les attributs horzRepeat et vertRepeat pourraient ne pas produire un changement visuel selon le type de transition. En particulier, ces attributs n'ont pas d'effet visuel si la réplication du motif de transition produit des résultats identiques. Par exemple, un attribut vertRepeat fixé à "2" n'aura pas d'impact visuel sur une poussée de gauche à droite - ou une transition "slideWipe" - parce que la transition se produirait toujours à partir du bord gauche tout du long jusqu'au bord droit du média. En revanche, le même attribut vertRepeat aurait un effet sur une poussée de gauche à droite - ou une transition "slideWipe" - parce qu'une transition se produirait à partir du haut jusqu'au milieu du média et l'autre transition se produirait à partir du milieu jusqu'en bas du média en même temps. Ni horzRepeat ni vertRepeat n'affectent une transition de fondu, parce qu'un fondu s'applique uniformément, indépendamment du nombre de fois où celui-ci est appliqué.
Les implémentations peuvent choisir comme optimisation d'ignorer les attributs horzRepeat et vertRepeat dans les cas où ils n'auraient pas d'effet.
Le but de cette section est de spécifier les exigences et les recommandations pour un langage hôte ou un profil afin d'intégrer les transitions de SMIL.
<head> du document (s'il en existe un)
et aussi qu'il y ait une sorte d'élément conteneur qui regroupe tous
les éléments transition
(similaire à l'élément <layout> dans le <head> des documents SMIL 1.0) ;
fill="transition" (exigé
pour les modules BasicTransitions et InlineTransitions) ;
Table 1 : La table de taxonomie contient une liste détaillée des noms des types et sous-types de transition. Les noms des types et sous-types ont été choisis afin que le nom soit significatif de l'effet visuel de la transition. Cependant, dans certains cas, le nom seul n'est pas suffisant pour décrire visuellement ces transitions. Pour une meilleure compréhension de ces transitions, voyez, s'il vous plait, les pages 11-16 de SMPTE 258M-1993 [SMPTE-EDL].
Comme assistance au lecteur dans l'identification des motifs de transitions de SMPTE, cet annexe fournit également les illustrations des balayages SMPTE correspondants dans les tables suivantes.
Table 2 : Les balayages de bord SMPTETable 3 : Les balayages en iris SMPTE
Dans le cas de divergence entre les noms de type et sous-type dans la table de taxonomie et les tables illustrées, la table de taxonomie a la priorité. La spécification SMPTE [SMPTE-EDL] a la priorité sur les tables illustrées dans cette annexe. Les illustrations sont fournies seulement par commodité.
Les codes de balayage SMPTE (quand c'est approprié) sont fournis entre parenthèses, après le nom du sous-type, et sont seulement cités pour référence. Les codes de balayage ne font pas partie du nom du sous-type de la transition. Le sous-type par défaut de la transition, pour chaque type, est indiqué par le mot [défaut].
Types de transition |
Sous-types de transition (Code de balayage SMPTE entre parenthèses) |
Balayages de bord - les balayages se produisent le long d'un bord |
|
| "barWipe" | "leftToRight" (1) [défaut], "topToBottom" (2) |
| "boxWipe" | "topLeft" (3) [défaut], "topRight" (4), "bottomRight" (5), "bottomLeft" (6), "topCenter" (23), "rightCenter" (24), "bottomCenter" (25), "leftCenter" (26) |
| "fourBoxWipe" | "cornersIn" (7) [défaut], "cornersOut" (8) |
| "barnDoorWipe" | "vertical" (21) [défaut], "horizontal" (22), "diagonalBottomLeft" (45), "diagonalTopLeft" (46) |
| "diagonalWipe" | "topLeft" (41) [défaut], "topRight" (42) |
| "bowTieWipe" | "vertical" (43) [défaut], "horizontal" (44) |
| "miscDiagonalWipe" | "doubleBarnDoor" (47) [défaut], "doubleDiamond" (48) |
| "veeWipe" | "down" (61) [défaut], "left" (62), "up" (63), "right" (64) |
| "barnVeeWipe" | "down" (65) [défaut], "left" (66), "up" (67), "right" (68) |
| "zigZagWipe" | "leftToRight" (71) [défaut], "topToBottom" (72) |
| "barnZigZagWipe" | "vertical" (73) [défaut], "horizontal" (74) |
Balayages en iris - les formes s'étendent à partir du centre du média |
|
| "irisWipe" | "rectangle" (101) [défaut], "diamond" (102) |
| "triangleWipe" | "up" (103) [défaut], "right" (104), "down" (105), "left" (106) |
| "arrowHeadWipe" | "up" (107) [défaut], "right" (108), "down" (109), "left" (110) |
| "pentagonWipe" | "up" (111) [défaut], "down" (112) |
| "hexagonWipe" | "horizontal" (113) [défaut], "vertical" (114) |
| "ellipseWipe" | "circle" (119) [défault], "horizontal" (120), "vertical" (121) |
| "eyeWipe" | "horizontal" (122) [défaut], "vertical" (123) |
| "roundRectWipe" | "horizontal" (124) [défaut], "vertical" (125) |
| "starWipe" | "fourPoint" (127) [défaut], "fivePoint" (128), "sixPoint" (129) |
| "miscShapeWipe" | "heart" (130) [défaut], "keyhole" (131) |
Balayages en horloge - rotation autour d'un point central |
|
| "clockWipe" | "clockwiseTwelve" (201) [défaut], "clockwiseThree" (202), "clockwiseSix" (203), "clockwiseNine" (204) |
| "pinWheelWipe" | "twoBladeVertical" (205) [défaut], "twoBladeHorizontal" (206), "fourBlade" (207) |
| "singleSweepWipe" | "clockwiseTop" (221) [défaut], "clockwiseRight" (222), "clockwiseBottom" (223), "clockwiseLeft" (224), "clockwiseTopLeft" (241), "counterClockwiseBottomLeft" (242), "clockwiseBottomRight" (243), "counterClockwiseTopRight" (244) |
| "fanWipe" | "centerTop" (211) [défaut], "centerRight" (212), "top" (231), "right" (232), "bottom" (233), "left" (234) |
| "doubleFanWipe" | "fanOutVertical" (213) [défaut], "fanOutHorizontal" (214), "fanInVertical" (235), "fanInHorizontal" (236) |
| "doubleSweepWipe" | "parallelVertical" (225) [défaut], "parallelDiagonal" (226), "oppositeVertical" (227), "oppositeHorizontal" (228), "parallelDiagonalTopLeft" (245), "parallelDiagonalBottomLeft" (246) |
| "saloonDoorWipe" | "top" (251) [défaut], "left" (252), "bottom" (253), "right" (254) |
| "windshieldWipe" | "right" (261) [défaut], "up" (262), "vertical" (263), "horizontal" (264) |
Balayages en matrice - le média est révélé en carrés suivant un motif |
|
| "snakeWipe" | "topLeftHorizontal" (301) [défaut], "topLeftVertical" (302), "topLeftDiagonal" (303), "topRightDiagonal" (304), "bottomRightDiagonal" (305), "bottomLeftDiagonal" (306) |
| "spiralWipe" | "topLeftClockwise" (310) [défaut], "topRightClockwise" (311), "bottomRightClockwise" (312), "bottomLeftClockwise" (313), "topLeftCounterClockwise" (314), "topRightCounterClockwise" (315), "bottomRightCounterClockwise" (316), "bottomLeftCounterClockwise" (317) |
| "parallelSnakesWipe" | "verticalTopSame" (320), [défaut] "verticalBottomSame" (321), "verticalTopLeftOpposite" (322), "verticalBottomLeftOpposite" (323), "horizontalLeftSame" (324), "horizontalRightSame" (325), "horizontalTopLeftOpposite" (326), "horizontalTopRightOpposite" (327), "diagonalBottomLeftOpposite" (328), "diagonalTopLeftOpposite" (329) |
| "boxSnakesWipe" | "twoBoxTop" (340) [défaut], "twoBoxBottom" (341), "twoBoxLeft" (342), "twoBoxRight" (343), "fourBoxVertical (344), "fourBoxHorizontal" (345) |
| "waterfallWipe" | "verticalLeft" (350) [défaut], "verticalRight" (351), "horizontalLeft" (352), "horizontalRight" (353) |
Balayages Non-SMPTE |
|
| "pushWipe" | "fromLeft" [défaut], "fromTop", "fromRight", "fromBottom" |
| "slideWipe" | "fromLeft" [défaut], "fromTop", "fromRight", "fromBottom" |
| "fade" | "crossfade" [défaut], "fadeToColor", "fadeFromColor" |
Descriptions des transitions non-SMPTE
Les transitions "pushWipe" font comme si le média de destination « poussait » le média d'arrière-plan dehors. En d'autres termes, le média d'arrière-plan et le média de destination sont en mouvement.
Dans les transitions "slideWipe", le média de destination est en mouvement, mais pas le média en arrière-plan. L'effet visuel des transitions "slideWipe" est que le média de destination « glisse » en travers du média en arrière-plan.
Les transitions "fade" sont mélangées, pixel par pixel, entre le média de destination avec soit le média en arrière-plan, soit une couleur spécifiée.
Les balayages de bord commencent à partir d'un bord horizontal, vertical ou diagonal et se déploient en une forme donnée. Le sens du déploiement est indiqué par l'augmentation de la zone blanche.
|
"barWipe" |
|
|
|
|
"boxWipe" |
|
|
|
|
"fourBoxWipe" |
|
|
|
|
"barnDoorWipe" |
|
|
|
|
"diagonalWipe" |
|
|
|
|
"bowTieWipe" |
|
|
|
|
"miscDiagonalWipe" |
|
|
|
|
"veeWipe" |
|
|
|
|
"barnVeeWipe" |
|
|
|
|
"zigZagWipe" |
|
|
|
|
"barnZigZagWipe" |
|
|
|
|
|
|
Les balayages en iris se déploient en une forme donnée à partir du centre du média. Le sens du déploiement est indiqué par l'augmentation de la zone blanche.
|
"irisWipe" |
|
|
|
|
"triangleWipe" |
|
|
|
|
"arrowHeadWipe" |
|
|
|
|
"pentagonWipe" |
|
|
|
|
"hexagonWipe" |
|
|
|
|
"ellipseWipe" |
|
|
|
|
"eyeWipe" |
|
|
|
|
"roundRectWipe" |
|
|
|
|
"starWipe" |
|
|
|
|
"miscShapeWipe" |
|
|
|
|
|
|
Les balayages en horloge tournent autour d'un point central. Le centre de la rotation est
indiqué dans les illustrations suivantes par le symbole
.
La flèche
montre la direction de la rotation.
Le sens de déploiement est indiqué par l'augmentation de la zone blanche.
|
"clockWipe" |
||
|
|
|
|
"pinWheelWipe" |
||
|
|
|
|
"singleSweepWipe" |
||
|
|
|
|
"fanWipe" |
||
|
|
|
|
"doubleFanWipe" |
||
|
|
|
|
"doubleSweepWipe" |
||
|
|
|
|
"saloonDoorWipe" |
|
|
|
|
|
|
"windshieldWipe" |
|
|
|
|
|
|
|
||
Les balayages en matrice révèlent un média en carrés
suivant un motif.
La flèche
montre le motif.
|
"snakeWipe" |
||
|
|
|
|
"spiralWipe" |
||
|
|
|
|
"parallelSnakesWipe" |
|
|
|
|
|
|
"boxSnakesWipe" |
|
|
|
|
|
|
"waterfallWipe" |
||
|
|
|