IMFTimecodeTranslate::BeginConvertTimecodeToHNS 方法 (mfidl.h)

啟動異步呼叫,將電影社會和電視工程師 (SMPTE) 時間程式代碼轉換為100奈秒單位。

語法

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

參數

[in] pPropVarTimecode

要轉換之 SMPTE 時間程式代碼中的時間。 PROPVARIANT 結構的 vt 成員會設定為 VT_I8hVal.QuadPart 成員包含二進位編碼十進位 (BCD) 格式的時間。 請參閱<備註>。

[in] pCallback

回呼物件的 IMFAsyncCallback 介面指標。 呼叫端必須實作這個介面。

[in] punkState

PPointer 至狀態物件的 IUnknown 介面,由呼叫端定義。 此參數可以是 Null。 您可以使用這個物件來儲存狀態資訊。 叫用回呼時,物件會傳回給呼叫端。

傳回值

方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。

傳回碼 Description
E_INVALIDARG
pPropVarTimecode 不是 VT_I8
MF_E_SHUTDOWN
已呼叫物件的 Shutdown 方法。
MF_E_BYTESTREAM_NOT_SEEKABLE
無法搜尋位元組數據流。 無法從位元組數據流結尾讀取時間程序代碼。

備註

異步方法完成時,會呼叫回呼物件的 IMFAsyncCallback::Invoke 方法。 此時,應用程式必須呼叫 IMFTimecodeTranslate::EndConvertTimecodeToHNS 來完成異步要求。

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

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

另請參閱

呼叫異步方法

IMFTimecodeTranslate