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成員包含二進位編碼十進位 (BCD) 格式的轉換時間。 請參閱<備註>。

傳回值

如果此方法成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。

備註

IMFTimecodeTranslate::BeginConvertHNSToTimecode 方法以非同步方式完成之後呼叫此方法。

pPropVarTimecode的值是輸入為LONGLONG的 64 位不帶正負號值。 上方 DWORD 包含範圍。 (範圍 是連續的時間代碼序列。) 較低的 DWORD 包含十六進位數位 0xhhmmssff格式的時間程式碼,其中每個 2 位元組序列都會讀取為十進位值。

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