IMFTimecodeTranslate::BeginConvertTimecodeToHNS-Methode (mfidl.h)

Startet einen asynchronen Aufruf zum Konvertieren des Zeitcodes von Society of Motion Picture and Television Engineers (SMPTE) in Einheiten mit 100 Nanosekunden.

Syntax

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

Parameter

[in] pPropVarTimecode

Zeit im zu konvertierenden SMPTE-Zeitcode. Das vt-Element der PROPVARIANT-Struktur ist auf VT_I8 festgelegt. Das hVal.QuadPart-Element enthält die Zeit in binär codierter Dezimalform (BCD). Siehe Hinweise.

[in] pCallback

Zeiger auf die IMFAsyncCallback-Schnittstelle eines Rückrufobjekts. Der Aufrufer muss diese Schnittstelle implementieren.

[in] punkState

PPointer auf die IUnknown-Schnittstelle eines Zustandsobjekts, das vom Aufrufer definiert wird. Dieser Parameter kann NULL sein. Sie können dieses Objekt verwenden, um Zustandsinformationen aufzunehmen. Das -Objekt wird an den Aufrufer zurückgegeben, wenn der Rückruf aufgerufen wird.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Rückgabecode Beschreibung
E_INVALIDARG
pPropVarTimecode ist nicht VT_I8.
MF_E_SHUTDOWN
Die Shutdown-Methode des Objekts wurde aufgerufen.
MF_E_BYTESTREAM_NOT_SEEKABLE
Der Bytestream kann nicht gesucht werden. Der Zeitcode kann nicht vom Ende des Bytestreams gelesen werden.

Hinweise

Nach Abschluss der asynchronen Methode wird die IMFAsyncCallback::Invoke-Methode des Rückrufobjekts aufgerufen. Zu diesem Zeitpunkt muss die Anwendung IMFTimecodeTranslate::EndConvertTimecodeToHNS aufrufen, um die asynchrone Anforderung abzuschließen.

Der Wert von pPropVarTimecode ist ein 64-Bit-Wert ohne Vorzeichen, der als LONGLONG eingegeben wird. Der obere DWORD-Bereich enthält den Bereich. (Ein Bereich ist eine fortlaufende Reihe von Zeitcodes.) Das untere DWORD enthält den Zeitcode in Form einer Hexadezimalzahl 0xhhmmssff, wobei jede 2-Byte-Sequenz als Dezimalwert gelesen wird.

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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile mfidl.h

Weitere Informationen

Aufrufen asynchroner Methoden

IMFTimecodeTranslate