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。 可能的值包括(但并不限于)下表中的项。

返回代码 说明
E_INVALIDARG
pPropVarTimecodeVT_I8
MF_E_SHUTDOWN
调用了对象的 Shutdown 方法。
MF_E_BYTESTREAM_NOT_SEEKABLE
字节流不可查找。 无法从字节流的末尾读取时间代码。

注解

异步方法完成后,将调用回调对象的 IMFAsyncCallback::Invoke 方法。 此时,应用程序必须调用 IMFTimecodeTranslate::EndConvertTimecodeToHNS 才能完成异步请求。

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