IMFTimecodeTranslate::BeginConvertTimecodeToHNS メソッド (mfidl.h)
映画テレビ協会 (SMPTE) のタイム コードを 100 ナノ秒単位に変換するための非同期呼び出しを開始します。
構文
HRESULT BeginConvertTimecodeToHNS(
[in] const PROPVARIANT *pPropVarTimecode,
[in] IMFAsyncCallback *pCallback,
[in] IUnknown *punkState
);
パラメーター
[in] pPropVarTimecode
変換する SMPTE 時間コードの時刻。 PROPVARIANT 構造体の vt メンバーは、VT_I8に設定されます。 hVal.QuadPart メンバーには、バイナリ コード化された 10 進数 (BCD) 形式の時刻が含まれています。 「解説」を参照してください。
[in] pCallback
コールバック オブジェクトの IMFAsyncCallback インターフェイスへのポインター。 呼び出し元は、このインターフェイスを実装する必要があります。
[in] punkState
呼び出し元によって定義された状態オブジェクトの IUnknown インターフェイスへの PPointer。 このパラメーターは、NULL でもかまいません。 このオブジェクトを使用して、状態情報を保持できます。 コールバックが呼び出されると、オブジェクトが呼び出し元に返されます。
戻り値
このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。
リターン コード | 説明 |
---|---|
|
pPropVarTimecode が VT_I8されていません。 |
|
オブジェクトの Shutdown メソッドが呼び出されました。 |
|
バイト ストリームはシークできません。 バイト ストリームの末尾からタイム コードを読み取ることはできません。 |
注釈
非同期メソッドが完了すると、コールバック オブジェクトの IMFAsyncCallback::Invoke メソッドが呼び出されます。 その時点で、アプリケーションは IMFTimecodeTranslate::EndConvertTimecodeToHNS を呼び出して非同期要求を完了する必要があります。
pPropVarTimecode の値は、LONGLONG として入力された 64 ビット符号なし値です。 上の DWORD には範囲が含まれています。 ( 範囲 は連続する一連のタイム コードです)。下位 DWORD には、16 進数 の 0xhhmmssff の形式で時刻コードが含まれています。ここで、各 2 バイト シーケンスは 10 進数として読み取られます。
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;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 R2 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | mfidl.h |