Intersections de plage de données dans AVStream
Un format de données est un ensemble unique de paramètres décrivant certains aspects d’une connexion. Par exemple, un format de données audio peut spécifier un certain format d’audio à des échantillons X par seconde et des bits Y par exemple.
Une plage de données spécifie une séquence de paramètres valides. Par instance, une plage de données audio peut spécifier un certain format d’audio à des échantillons A-B par seconde et des bits C-D par exemple.
Le minidriver fournit une liste de plages de données qu’il prend en charge pour une broche spécifique dans le membre DataRanges de la structure KSPIN_DESCRIPTOR correspondante.
Dans AVStream, les mini-disques peuvent fournir leurs propres gestionnaires d’intersection de plage de données en fournissant un pointeur vers une routine de rappel fournie par minidriver dans le membre IntersectHandler d’un KSPIN_DESCRIPTOR_EX. Pour permettre à AVStream d’croiser les plages, définissez ce membre sur NULL. Consultez AVStrMiniIntersectHandlerEx pour savoir comment définir la routine de rappel.
Si un minidriver fournit un gestionnaire d’intersections, lorsqu’une intersection doit être effectuée, le minidriver reçoit deux plages de données qui correspondent au type principal, au sous-format et au spécificateur. En outre, les attributs requis des plages de données correspondent.
Si les plages se croisent et qu’un espace tampon suffisant est fourni dans le paramètre Data de la routine de rappel AVStrMiniIntersectHandlerEx , la routine d’intersection choisit un format dans l’intersection et le retourne à l’appelant dans la mémoire tampon pointée par Data.
Si les deux plages de données ne se croisent pas, le gestionnaire retourne STATUS_NO_MATCH.
Si le minidriver a spécifié une répartition AVStrMiniPinSetDataFormat , AVStream appelle cette distribution pour informer le minidriver qu’AVStream définit un format spécifique sur la broche. Fournissez un pointeur vers votre routine de rappel AVStrMiniPinSetDataFormat dans le membre SetDataFormat de la structure KSPIN_DISPATCH . (Les minidrivers qui sont des clients de la classe de flux reçoivent SRB_SET_DATA_FORMAT au lieu d’AVStrMiniPinSetDataFormat.)
Le minidriver peut refuser un format proposé en retournant STATUS_NO_MATCH à partir d’AVStrMiniPinSetDataFormat.
En plus de l’appel initial à AVStrMiniPinSetDataFormat avant la création de la broche, votre minidriver peut recevoir un deuxième appel AVStrMiniPinSetDataFormat juste avant que la broche ne passe à l’état RUN. Si votre client AVStream ou de classe de flux est un minidriver de capture vidéo et que vous recevez une telle notification, cette répartition contient les paramètres de surface réels. Si possible, le minidriver ne doit pas échouer ce deuxième changement de format. Ne partez pas du principe qu’un deuxième appel de répartition se produira.
Le minidriver doit capturer des données dans n’importe quel format contenu dans la dernière distribution AVStrMiniPinSetDataFormat réussie.