Partager via


Capture basée sur les ports vidéo

Les appareils de capture basés sur des ports vidéo doivent fournir une broche de port vidéo qui se connecte au gestionnaire de ports vidéo. La broche de port vidéo permet au transport basé sur le matériel d’afficher le flux d’aperçu sans surcharge de bus d’interconnexion de composant processeur ou périphérique (PCI). Une broche distincte fournit une fonctionnalité de capture (par exemple, lorsque la vidéo capturée doit être écrite sur le disque). Pendant le processus de capture, les mémoires tampons de capture sont fournies au pilote d’affichage, qui remplit la mémoire tampon par le mastering de bus. L’interaction entre le minidriver de capture et le pilote d’affichage est décrite plus en détail plus loin dans cette section et dans le transport vidéo en mode noyau.

Sur les systèmes qui exécutent Microsoft Windows 98 SE ou Windows 2000, le filtre Overlay Mixer (partie du filtre Video Port Manager dans les systèmes d’exploitation ultérieurs) ne prend pas en charge les connexions de port vidéo sur les moniteurs secondaires. La connexion d’épingle échoue dans ce cas. Les connexions de port vidéo sur les moniteurs secondaires sont prises en charge sur les systèmes exécutant Windows Millennium Edition (Windows Me) et Windows XP.

Si un appareil prend en charge la capture VBI, il expose généralement deux broches supplémentaires : VPVBI et VBI. Le filtre du gestionnaire de ports vidéo utilise la broche VPVBI pour allouer des surfaces de port vidéo pour la capture VBI. L’épingle VBI elle-même fournit les exemples VBI bruts.

Le diagramme suivant montre les chemins d’accès distincts pour la capture VPVBI et VBI.

diagramme illustrant les chemins d’accès distincts pour la capture vpvbi et vbi.

Les jeux de propriétés spécifiques à ce type de graphique de filtre sont KSPROPSETID_VPConfig et KSPROPSETID_VPVBIConfig et PROPSETID_ALLOCATOR_CONTROL.

Utilisation des extensions de port vidéo (VPE)

Remarque : Les paragraphes suivants s’appliquent uniquement aux systèmes d’exploitation précédant la prochaine version de Windows Vista. VPE est désactivé dans Windows Vista si le pilote d’affichage utilise le nouveau modèle d’affichage du pilote Windows Vista (LDDM).

Les minidrivers de capture vidéo peuvent utiliser la fonction DxApi pour communiquer avec le pilote de miniport vidéo pour permettre le transport vidéo de diffusion en continu sur le bus de port vidéo entre le matériel de capture et le matériel d’affichage. Le flux se compose de champs séquentiels de la vidéo NTSC, PAL ou SECAM, et peut inclure le remplissage (VBI) et le code temporel (synchronisation horizontale et synchronisation verticale). Les caractéristiques du flux vidéo, notamment la dimension, le format de couleur, la fréquence, la mise à l’échelle et le rognage sont configurées en mode utilisateur via l’interface VPE DirectDraw. Une fois la diffusion en continu démarrée, DxApi est ensuite appelé en mode noyau pour capturer des images individuelles. Pour prendre en charge les modifications d’affichage, telles que les modifications apportées à la résolution ou le passage à ou à partir d’invites de commandes en plein écran, les minidrivers de capture vidéo doivent également s’inscrire auprès du pilote miniport vidéo afin qu’ils puissent répondre à ces événements de modification d’affichage.

Les VPEs et la fonction DxApi ont été introduits dans directDraw DDI avec DirectX 5.0. DxApi est pris en charge par le pilote vidéo miniport dans les systèmes d’exploitation Windows 2000 et ultérieurs. Un pilote miniport d’affichage virtuel (miniVDD) prend en charge DxApi dans les systèmes d’exploitation Windows 98 et Windows Me. Pour activer le transport vidéo en mode noyau à l’aide de DxApi, un minidriver de capture vidéo WDM doit inclure le fichier ddkmapi.h (API en mode noyau DirectDraw) et établir un lien avec la bibliothèque dxapi.lib. La bibliothèque DxApi utilise des fonctionnalités exportées par dxapi.sys. DxApi.sys est disponible uniquement lorsque DirectDraw est chargé, car DxApi fait partie des VPEs vers directDraw DDI.

DxApi est une API en mode noyau unique exposée par DxApi.sys. L’extension de port vidéo est une API en mode utilisateur exposée par DDraw.dll. Un minidriver de capture vidéo doit effectuer plusieurs appels différents à DxApi pour configurer et configurer le matériel de port vidéo pour diffuser correctement.

DxApi est une fonction unique qui encapsule plusieurs identificateurs de fonction. Les minidrivers passent l’identificateur de fonction souhaité dans le premier argument à DxApi. Les arguments restants de DxApi concernent les mémoires tampons allouées par minidriver pour les structures qui correspondent aux identificateurs de fonction et aux longueurs de mémoires tampons. Le comportement des fonctions et de la taille et du format des mémoires tampons d’entrée et de sortie dépend de l’identificateur de fonction spécifié. Ce comportement est documenté dans la fonction et les identificateurs DxApi.

WdK fournit deux exemples de pilotes qui montrent comment implémenter la fonctionnalité DxApi . L’exemple ATIWDM nécessite que le matériel spécifique soit présent pour fonctionner. L’exemple TestCap ne nécessite pas de matériel et fonctionne sur toutes les plateformes. Vous pouvez utiliser l’outil GraphEdt pour interagir avec l’un ou l’autre exemple.

Les fonctions courantes qu’un minidriver de capture vidéo doit appeler DxApi pour effectuer les opérations suivantes :

  • Ouvrez un handle en mode noyau DirectDraw (identificateur de fonction DxApi défini sur DD_DXAPI_OPENDIRECTDRAW). Cette opération doit être effectuée à IRQL = PASSIVE_LEVEL.

  • Obtenez les fonctionnalités du port vidéo matériel en mode noyau (identificateur de fonction DxApi défini sur DD_DXAPI_GETKERNELCAPS).

  • Inscrivez des rappels pour gérer les événements DirectDraw, tels que les commutateurs en mode vers une invite de commandes en plein écran (identificateur de fonction DxApi défini sur DD_DXAPI_REGISTER_CALLBACK).

  • Ouvrez un handle pour cibler des surfaces DirectDraw (identificateur de fonction DxApi défini sur DD_DXAPI_OPENSURFACE).

  • Annuler l’inscription des rappels (identificateur de fonction DxApi défini sur DD_DXAPI_UNREGISTER_CALLBACK).

  • Fermez les handles aux surfaces, ainsi qu’à DirectDraw en mode noyau (identificateur de fonction DxApi défini sur DD_DXAPI_CLOSEHANDLE)

Appareils enfants de port vidéo et gestion de l’alimentation

Les appareils enfants de port vidéo, tels que le tuner TV et les adaptateurs de combinaison d’affichage, peuvent bloquer les transitions d’état d’alimentation lorsque le minidriver est en cours d’utilisation. Le blocage de la transition de l’état de l’alimentation se produit lorsque le minidriver est activement utilisé (les broches ou les filtres sont ouverts). Si le minidriver est chargé mais n’a pas de broches ou de filtres en cours d’utilisation, les transitions d’état d’alimentation de S0 (entièrement alimenté) vers des états d’alimentation inférieurs (par exemple, S1, S2, S3 et S4) se produisent. Le blocage de la transition de l’état de l’alimentation se produit uniquement avec des minidrivers de classe Stream qui sont des clients d’appareils enfants de port vidéo.

Une exemption WHQL est disponible pour les appareils qui répondent à ces critères, afin que les fournisseurs puissent toujours obtenir un logo.