Greffons de transitions

La plus simple des transitions vidéo est le volet et la plus simple des transitions audio est le fondu enchaîné. Ils utilisent un sous-ensemble des membres de la classe par défaut des greffons temps réel, mais ce n'est cependant pas analogue à ce qui a été effectué par PLUGIN_CLASS_MEMBERS pour les transitions.

L'objet de traitement pour les transitions audio hérite toujours de PluginAClient et il hérite toujours de PluginVClient pour les transition vidéo.

Les transitions peuvent avoir une interface graphique ou pas. Si elles en ont une, elles doivent aussi gérer un processus (thread) comme les greffons temps réel. Ceci est effectué avec les mêmes macros PLUGIN_THREAD_OBJECT et PLUGIN_THREAD_HEADER que pour les greffons temps réel. Comme il n'y a qu'une seule image-clé par transition, vous n'avez pas à vous préoccuper de la mise à jour de l'interface utilisateur à partir de l'objet de traitement comme vous deviez le faire pour les greffons temps réel.

Si la transition possède une interface utilisateur graphique, vous pouvez utiliser les macros PLUGIN_CONSTRUCTOR_MACRO et PLUGIN_DESTRUCTOR_MACRO pour initialiser l'objet de traitement. Vous aurez également besoin d'un objet Défault et d'un objet Thread pour ces macros.

Comme l'interface graphique utilisateur est optionnelle, surchargez la fonction appelée uses_gui() pour indiquer si la transition possède une interface graphique ou pas. Elle doit retourner 1 s'il est présent et 0 dans le cas contraire.

Les transitions ont besoin des fonctions load_defaults et save_defaults de façon à ce qu'elles aient une configuration utile la première fois qu'elles seront déposées sur la timeline.

Les fonctions read_data et save_data leur succèdent après l'insertion pour accéder à des données spécifiques à chaque instance de la transition.

La différence la plus importante entre les transitions et les effets temps réel est l'ajout d'une méthode is_transition à l'objet de traitement. is_transition retourne 1 pour indiquer que le greffon est une transition.

Les transitions traitent les données dans une fonction process_realtime function.

     int process_realtime(VFrame *input,
     		VFrame *output);
     int process_realtime(int64_t size,
     		double *input_ptr,
     		double *output_ptr);

Les données pour le prochain plan sont utilisées comme paramètre d'entrée de process_realtime. Le paramètre de sortie de process_realtime est constitué des données du précédent plan.

Il existe des routines pour déterminer si l'on est placé relativement au début ou à la fin de la transition.

  • PluginClient::get_source_position() - retourne la position actuelle depuis le début de la transition de l'échantillon de rang le plus bas se trouvant dans les tampons.
  • PluginClient::get_total_len() - retourne la longueur entière de la transition. Les unités sont soit les échantillons, soit les images, dans le débit demandé par le premier greffon.

Les utilisateurs doivent diviser la position source par la longueur totale pour obtenir la fraction de la transition à laquelle la fonction temps réel du processus en cours se trouve.

Les transitions tournent dans le débit de données requis par le premier greffon qui se trouve sur la piste. Il peut être différent du débit de données du projet. Comme les processus temps réels n'ont pas de paramètre de débit, il faut utiliser get_framerate() ou get_samplerate pour obtenir le débit demandé.