IMFTimecodeTranslate::EndConvertHNSToTimecode 方法 (mfidl.h)

完成异步请求,将时间以 100 纳秒为单位转换为电影和电视工程师协会, (SMPTE) 时间代码。

语法

HRESULT EndConvertHNSToTimecode(
  [in]  IMFAsyncResult *pResult,
  [out] PROPVARIANT    *pPropVarTimecode
);

parameters

[in] pResult

指向 IMFAsyncResult 接口的指针。 传入回调对象在 IMFAsyncCallback::Invoke 方法中收到的同一指针。

[out] pPropVarTimecode

指向接收转换时间的 PROPVARIANT 的指针。 PROPVARIANT 结构的 vt 成员设置为 VT_I8。 hVal.QuadPart 成员以二进制编码的十进制 (BCD) 形式包含转换的时间。 请参阅“备注”。

返回值

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

IMFTimecodeTranslate::BeginConvertHNSToTimecode 方法异步完成之后调用此方法。

pPropVarTimecode 的值是类型为 LONGLONG 的 64 位无符号值。 上部 DWORD 包含范围。 (A 范围 是一系列连续的时间代码。) 下级 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