次の方法で共有


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

関連項目

非同期メソッドの呼び出し

IMFTimecodeTranslate