Partager via


Format de flux

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Le MSDV et le pilote UVC peuvent générer deux formats DV : audio-vidéo entrelacé ou vidéo uniquement. L’audio-vidéo entrelacé est le format d’origine de l’appareil. Le format vidéo uniquement contient les mêmes données, mais les exemples sont marqués comme n’ayant pas de données audio. Le format vidéo uniquement existe principalement pour la compatibilité avec les applications qui utilisent Video pour Windows. Pour plus d’informations, consultez Fichiers AVI DV de type 1 et type 2.

Pilote MSDV

Le pilote MSDV a deux broches de sortie. La première broche de sortie envoie des données entrelacées, et la deuxième broche de sortie envoie des données vidéo uniquement. Une seule broche de sortie peut être connectée à la fois. Pour sélectionner un format, connectez la broche de sortie appropriée. Vous pouvez utiliser l’interface IAMStreamConfig sur l’épingle de sortie pour rechercher le format.

Pilote UVC

Contrairement au pilote MSDV, le pilote UVC fournit les deux formats à partir de la même broche. Le format par défaut est vidéo uniquement. Pour sélectionner le format, utilisez l’interface IAMStreamConfig sur la broche de sortie. Appelez la méthode GetStreamCaps pour énumérer les types de média sur la broche de sortie. Pour chaque type de média, si le type principal correspond au format souhaité, appelez SetFormat et transmettez ce type de média.

Format Type principal
Audio et vidéo entrelacés MEDIATYPE_Interleaved
Vidéo uniquement MEDIATYPE_Video

 

La fonction suivante définit le format en fonction du GUID du type principal.

HRESULT SetStreamFormat(IAMStreamConfig *pConfig, const GUID& majorType)
{
    if (pConfig == NULL)
    {
        return E_POINTER;
    }

    // Get the number of stream capabilities.
    int count = 0, size = 0;
    HRESULT hr = pConfig->GetNumberOfCapabilities(&count, &size);
    if (FAILED(hr))
    {
        return hr;
    }

    // Allocate memory for the stream capabilities structure.
    BYTE *pCaps = new BYTE[size];
    if (pCaps == NULL)
    {
        return E_OUTOFMEMORY;
    }
    
    // Enumerate the stream capabilities.
    bool bFoundType = false;
    for (int ix = 0; ix < count; ix++)
    {
        AM_MEDIA_TYPE *pmt;
        hr = pConfig->GetStreamCaps(ix, &pmt, pCaps);
        if (FAILED(hr))
        {
            break;
        }
        else if (pmt->majortype == majorType)
        {
            // This is the media type we want.
            bFoundType = true;
            hr = pConfig->SetFormat(pmt);
            DeleteMediaType(pmt);
            break;
        }
        DeleteMediaType(pmt);
    }
    delete [] pCaps;
    if (FAILED(hr))
    {
        return hr;
    }
    return bFoundType ? S_OK : E_FAIL;
}

Le pilote MSDV prend également en charge IAMStreamConfig, ce qui vous permet d’écrire du code qui fonctionne pour les deux types d’appareils.

Contrôle d’un caméscope DV