IMFTimecodeTranslate::EndConvertHNSToTimecode メソッド (mfidl.h)
100 ナノ秒単位の時間を映画テレビ学会 (SMPTE) タイム コードに変換する非同期要求を完了します。
構文
HRESULT EndConvertHNSToTimecode(
[in] IMFAsyncResult *pResult,
[out] PROPVARIANT *pPropVarTimecode
);
パラメーター
[in] pResult
IMFAsyncResult インターフェイスへのポインター。 コールバック オブジェクトが IMFAsyncCallback::Invoke メソッドで受け取ったのと同じポインターを渡します。
[out] pPropVarTimecode
変換後の時刻を受け取る PROPVARIANT へのポインター。 PROPVARIANT 構造体の vt メンバーは、VT_I8に設定されます。 hVal.QuadPart メンバーには、変換された時刻が 2 進コード 10 進数 (BCD) 形式で格納されます。 「解説」を参照してください。
戻り値
このメソッドは、成功すると S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。
解説
IMFTimecodeTranslate::BeginConvertHNSToTimecode メソッドが非同期的に完了した後に、このメソッドを呼び出します。
pPropVarTimecode の値は、LONGLONG として入力された 64 ビット符号なし値です。 上の DWORD には範囲が含まれています。 ( 範囲 は連続する一連のタイム コードです)。下位 DWORD には、16 進数 の 0xhhmmssff の形式で時刻コードが含まれています。ここで、各 2 バイト シーケンスは 10 進数として読み取られます。
HRESULT ParseTimeCode(
const PROPVARIANT& var,
DWORD *pdwRange,
DWORD *pdwFrames,
DWORD *pdwSeconds,
DWORD *pdwMinutes,
DWORD *pdwHours
)
{
if (var.vt != VT_I8)
{
return E_INVALIDARG;
}
ULONGLONG ullTimeCode = (ULONGLONG)var.hVal.QuadPart;
DWORD dwTimecode = (DWORD)(ullTimeCode & 0xFFFFFFFF);
*pdwRange = (DWORD)(ullTimeCode >> 32);
*pdwFrames = dwTimecode & 0x0000000F;
*pdwFrames += (( dwTimecode & 0x000000F0) >> 4 ) * 10;
*pdwSeconds = ( dwTimecode & 0x00000F00) >> 8;
*pdwSeconds += (( dwTimecode & 0x0000F000) >> 12 ) * 10;
*pdwMinutes = ( dwTimecode & 0x000F0000) >> 16;
*pdwMinutes += (( dwTimecode & 0x00F00000) >> 20 ) * 10;
*pdwHours = ( dwTimecode & 0x0F000000) >> 24;
*pdwHours += (( dwTimecode & 0xF0000000) >> 28 ) * 10;
return S_OK;
}
要件
サポートされている最小のクライアント | Windows 7 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 R2 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | mfidl.h |