Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un minidriver AVStream peut utiliser la fonctionnalité de pilote de classe AVStream pour fractionner un flux de données en plusieurs copies pendant que le flux transite par une épingle donnée. Ce processus de fractionnement peut être utile si votre pilote doit copier un flux d’entrée pour produire deux flux de sortie identiques.
Pour ce faire, définissez KSPIN_FLAG_SPLITTER dans le membre Indicateurs de la structure KSPIN_DESCRIPTOR_EX de l’épingle. Lorsque cet indicateur est défini sur une broche, la broche agit comme un séparateur automatique. AVStream copie automatiquement toutes les données nécessaires pour fractionner le flux.
Dans les versions ultérieures à DirectX8.0, l'indicateur KSPIN_FLAG_SPLITTER fonctionne pour les broches sur les filtres centrés sur le filtre ainsi que sur les filtres centrés sur les broches. Les versions antérieures prennent en charge cet indicateur uniquement pour les broches sur les filtres centrés sur le filtre.
Le diagramme suivant montre la configuration d’un filtre dans lequel la broche d’entrée fractionne un flux en deux broches de sortie. Les filtres en aval de cette broche de sortie changent les données inplace.
Les images arrivent sur la broche d’entrée et sont placées dans la file d’attente d’entrée. Le minidriver interagit uniquement avec la file d'attente d'entrée et de sortie pour le connecteur d'origine. AVStream copie automatiquement les données de la file d’attente du premier connecteur à celle du deuxième connecteur.
Par souci de simplicité, ce diagramme ne montre pas comment les images sont fournies à la broche de sortie. Pour fournir des trames à la broche de sortie, par exemple, il peut y avoir un demandeur et un allocateur associés à chaque file d'attente et appartenant à cette section de pipeline. Les images peuvent également provenir d’un filtre en aval.
Dans la structure KSFILTER_DISPATCH , le minidriver spécifie un pointeur vers une routine de rappel AVStrMiniFilterProcess fournie par le fournisseur. Cette routine de rappel est l’endroit où le minidriver reçoit un pointeur vers une structure KSPROCESSPIN_INDEXENTRY contenant le tableau de structures KSPROCESSPIN illustrées ci-dessous.
Ce diagramme montre comment le minidriver fait la distinction entre les deux broches de sortie dans la liste des broches de processus :
Dans ce diagramme, la base de données fait référence au membre DelegateBranch de la structure KSPROCESSPIN et CS fait référence au membre CopySource . Les membres DelegateBranch et CopySource de la broche d’entrée et de la première broche de sortie sont NULL. Cela indique que le minidriver est responsable de la gestion des images sur ces broches.
Toutefois, la deuxième broche de sortie a un CopySource qui pointe vers la première broche de sortie. Cela indique que la deuxième broche de sortie se trouve dans un canal distinct de la première broche de sortie et que AVStream copie automatiquement toutes les données placées dans la file d’attente du premier broche de sortie dans la file d’attente de la deuxième broche de sortie.
Des cas de séparateurs plus compliqués peuvent survenir lorsque deux broches de sortie sont intégrées dans le même tuyau. Un minidriver peut inclure deux broches de sortie basées sur un séparateur dans le même canal, par exemple, tant que les filtres en aval ne modifient pas les données envoyées à partir de ces broches. Étant donné que les données ne sont pas modifiées, les broches de sortie sont considérées comme en mode lecture seule ; les deux filtres en aval reçoivent les mêmes tampons.
Il est également possible que certains des filtres en aval qui s’attachent automatiquement à la broche de fractionnement modifient les données alors que d’autres ne le font pas.
Dans ce cas, la disposition du filtre peut être similaire au diagramme suivant, qui représente un filtre qui contient trois instances de la broche de sortie fractionnée :
Les broches A et B sont affectées au même canal, car les filtres en aval ne modifient pas les données ; les filtres en aval d’A et B reçoivent les mêmes pointeurs de mémoire tampon.
Le minidriver interagit uniquement avec la file d’attente d’entrée et une file d’attente de sortie unique. AVStream copie automatiquement à partir de la file d’attente A/B et de la file d’attente C. Il crée également un objet splitter qui envoie les mêmes trames de données par le biais de l’épingle A et de l’épingle B (notez que les en-têtes de flux diffèrent).
Le tableau des structures KSPROCESSPIN est le suivant :
La seule broche avec laquelle le minidriver doit interagir normalement est la broche A.
Pour simplifier les diagrammes ci-dessus, les demandeurs et les allocateurs ont été omis dans les diagrammes. Les diagrammes sont destinés à illustrer uniquement le processus de fractionnement d’images.