Partager via


Méthode IMFTimecodeTranslate ::BeginConvertTimecodeToHNS (mfidl.h)

Démarre un appel asynchrone pour convertir le code horaire SMPTE (Society of Motion Picture and Television Engineers) en unités de 100 nanosecondes.

Syntaxe

HRESULT BeginConvertTimecodeToHNS(
  [in] const PROPVARIANT *pPropVarTimecode,
  [in] IMFAsyncCallback  *pCallback,
  [in] IUnknown          *punkState
);

Paramètres

[in] pPropVarTimecode

Temps dans le code de temps SMPTE à convertir. Le membre vt de la structure PROPVARIANT est défini sur VT_I8. Le membre hVal.QuadPart contient l’heure sous forme décimale codée binaire (BCD). Consultez la section Notes.

[in] pCallback

Pointeur vers l’interface IMFAsyncCallback d’un objet de rappel. L’appelant doit implémenter cette interface.

[in] punkState

PPointer à l’interface IUnknown d’un objet d’état, défini par l’appelant. Ce paramètre peut être NULL. Vous pouvez utiliser cet objet pour stocker des informations d’état. L’objet est retourné à l’appelant lorsque le rappel est appelé.

Valeur retournée

Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code de retour Description
E_INVALIDARG
pPropVarTimecode n’est pas VT_I8.
MF_E_SHUTDOWN
La méthode Shutdown de l’objet a été appelée.
MF_E_BYTESTREAM_NOT_SEEKABLE
Le flux d’octets n’est pas recherché. Le code d’heure ne peut pas être lu à partir de la fin du flux d’octets.

Remarques

Une fois la méthode asynchrone terminée, la méthode IMFAsyncCallback ::Invoke de l’objet de rappel est appelée. À ce stade, l’application doit appeler IMFTimecodeTranslate ::EndConvertTimecodeToHNS pour terminer la demande asynchrone.

La valeur de pPropVarTimecode est une valeur non signée 64 bits tapée en tant que LONGLONG. Le DWORD supérieur contient la plage. (Une plage est une série continue de codes temporels.) Le DWORD inférieur contient le code de temps sous la forme d’un nombre hexadécimal 0xhhmmssff, où chaque séquence de 2 octets est lue en tant que valeur décimale.

void CreateTimeCode(
    DWORD dwFrames,
    DWORD dwSeconds,
    DWORD dwMinutes,
    DWORD dwHours,
    DWORD dwRange,
    PROPVARIANT *pvar
    )
{
    ULONGLONG ullTimecode = ((ULONGLONG)dwRange) << 32;

    ullTimecode +=   dwFrames  % 10;
    ullTimecode += (( (ULONGLONG)dwFrames )  / 10) << 4;
    ullTimecode += (( (ULONGLONG)dwSeconds ) % 10) << 8;
    ullTimecode += (( (ULONGLONG)dwSeconds ) / 10) << 12;
    ullTimecode += (( (ULONGLONG)dwMinutes ) % 10) << 16;
    ullTimecode += (( (ULONGLONG)dwMinutes ) / 10) << 20;
    ullTimecode += (( (ULONGLONG)dwHours )   % 10) << 24;
    ullTimecode += (( (ULONGLONG)dwHours )   / 10) << 28;

    pvar->vt = VT_I8;
    pvar->hVal.QuadPart = (LONGLONG)ullTimecode;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête mfidl.h

Voir aussi

Appel de méthodes asynchrones

IMFTimecodeTranslate