Sélection d’un format de flux
Les appareils de capture vidéo peuvent capturer des vidéos dans différents formats. La structure KSDATARANGE est utilisée pour transmettre des informations sur la largeur, la hauteur, la granularité, le rognage et les fréquences d’images pour un espace de couleurs particulier. Les structures KS_DATARANGE_VIDEO et KS_DATARANGE_VIDEO2 sont des extensions de la structure KSDATARANGE et doivent être utilisées pour décrire les formats de capture vidéo. Utilisez KS_DATARANGE_VIDEO pour décrire uniquement les images vidéo. Utilisez KS_DATARANGE_VIDEO2 pour décrire les champs vidéo et les trames vidéo, avec ou sans paramètres de bob ou de trame.
Le processus de sélection d’un format de flux est appelé exécution d’une intersection de données. L’interface de classe Stream envoie une demande de SRB_GET_DATA_INTERSECTION à un minidriver de classe Stream pour effectuer une intersection de données. Le minidriver est chargé de déterminer la validité de la plage de données demandée, puis de sélectionner un format de flux particulier dans la plage de données fournie, généralement à l’aide de structures KS_DATAFORMAT_VIDEOINFOHEADER ou KS_DATAFORMAT_VIDEOINFOHEADER2 .
Enfin, le minidriver doit définir certains membres du format résultant, comme indiqué ci-dessous :
.
.
.
// Calculate biSizeImage for this request, and put the result in both
// the biSizeImage field of the bmiHeader AND in the SampleSize field
// of the DataFormat.
//
// Note that for compressed sizes, this calculation will probably not
// be just width * height * bitdepth
DataFormatVideoInfoHeaderOut->VideoInfoHeader.bmiHeader.biSizeImage =
DataFormatVideoInfoHeaderOut->DataFormat.SampleSize =
KS_DIBSIZE(DataFormatVideoInfoHeaderOut->VideoInfoHeader.bmiHeader);
.
.