Classe CMediaSample
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est 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.]
La CMediaSample
classe définit un exemple multimédia qui prend en charge l’interface IMediaSample2 . L’exemple multimédia contient un pointeur vers une mémoire tampon et diverses propriétés stockées en tant que variables membres protégées.
Les exemples multimédias sont créés par des allocateurs, qui sont dérivés de la classe CBaseAllocator . Le CMediaSample
constructeur reçoit un pointeur vers une mémoire tampon allouée, ainsi que la taille de la mémoire tampon. Les autres propriétés sont généralement définies et récupérées via les méthodes d’interface IMediaSample .
Le cycle de vie d’un exemple multimédia diffère de celui de la plupart des objets COM :
- L’allocateur contient une liste d’exemples gratuits. Lorsqu’un filtre a besoin d’un nouvel exemple, il appelle la méthode IMemAllocator::GetBuffer de l’allocator. L’allocateur récupère un exemple à partir de sa liste libre, incrémente le nombre de références de l’exemple et retourne un pointeur vers l’exemple.
- Une fois le filtre terminé avec l’exemple, il appelle la méthode IUnknown::Release sur l’exemple. Contrairement à la plupart des objets, l’exemple ne se supprime pas lui-même lorsque son nombre de références atteint zéro. Au lieu de cela, il appelle la méthode IMemAllocator::ReleaseBuffer sur l’allocator, et l’allocateur retourne l’exemple dans sa liste libre.
- L’allocateur ne détruit pas les échantillons tant que la méthode IMemAllocator::D ecommit n’est pas appelée.
Variables membres protégées | Description |
---|---|
m_dwFlags | Exemples d’indicateurs de propriété. |
m_dwTypeSpecificFlags | Indicateurs spécifiques au type. |
m_pBuffer | Pointeur vers la mémoire tampon qui contient les données multimédias. |
m_lActual | Longueur des données valides dans la mémoire tampon, en octets. |
m_cbBuffer | Taille de la mémoire tampon, en octets. |
m_pAllocator | Pointeur vers l’outil d’allocation qui a créé cet exemple. |
m_pNext | Pointeur vers l’exemple suivant dans la liste des exemples de l’allocator. |
m_Start | Exemple d’heure de début. |
m_End | Exemple d’heure de fin. |
m_MediaStart | Heure de début du média. |
m_MediaEnd | Heure d’arrêt du média. |
m_pMediaType | Pointeur vers le type de média, si le type a changé par rapport à l’exemple précédent dans le flux de données. |
m_dwStreamId | Identificateur de flux. |
Variables membres publiques | Description |
m_cRef | Nombre de références. |
Méthodes publiques | Description |
CMediaSample | Méthode du constructeur. |
~ CMediaSample | Méthode de destructeur. Virtuel. |
SetPointer | Définit le pointeur vers la mémoire tampon. |
Méthodes IMediaSample | Description |
GetPointer | Récupère un pointeur de lecture/écriture vers la mémoire tampon. |
GetSize | Récupère la taille de la mémoire tampon. |
GetTime | Récupère les heures de flux auxquelles cet exemple doit commencer et se terminer. |
SetTime | Définit les heures de flux auxquelles cet exemple doit démarrer et se terminer. |
IsSyncPoint | Détermine si le début de l’exemple est un point de synchronisation. |
SetSyncPoint | Spécifie si le début de cet exemple est un point de synchronisation. |
IsPreroll | Détermine si cet exemple est un exemple de pré-inscription. |
SetPreroll | Spécifie si cet exemple est un exemple de préroll. |
GetActualDataLength | Récupère la longueur des données valides dans la mémoire tampon. |
SetActualDataLength | Définit la longueur des données valides dans la mémoire tampon. |
GetMediaType | Récupère le type de média, si le type de média diffère de l’exemple précédent. |
SetMediaType | Définit le type de média pour l’exemple. |
IsDiscontinuity | Détermine si cet exemple représente une interruption dans le flux de données. |
SetDiscontinuity | Spécifie si cet exemple représente une interruption dans le flux de données. |
GetMediaTime | Récupère les heures de média pour cet exemple. |
SetMediaTime | Définit les heures de média pour cet exemple. |
Méthodes IMediaSample2 | Description |
GetProperties | Récupère les propriétés de l’exemple. |
SetProperties | Définit les propriétés de l’exemple. |
Configuration requise
Condition requise | Valeur |
---|---|
En-tête |
|
Bibliothèque |
|