IMFTimecodeTranslate::BeginConvertTimecodeToHNS 方法 (mfidl.h)
启动异步调用,将电影和电视工程师协会 (SMPTE) 时间代码转换为 100 纳秒单位。
语法
HRESULT BeginConvertTimecodeToHNS(
[in] const PROPVARIANT *pPropVarTimecode,
[in] IMFAsyncCallback *pCallback,
[in] IUnknown *punkState
);
参数
[in] pPropVarTimecode
要转换的时间(以 SMPTE 时间代码为单位)。 PROPVARIANT 结构的 vt 成员设置为 VT_I8。 hVal.QuadPart 成员包含二进制编码的十进制时间 (BCD) 形式。 请参阅“备注”。
[in] pCallback
指向回调对象的 IMFAsyncCallback 接口的指针。 调用方必须实现此接口。
[in] punkState
PPointer 到状态对象的 IUnknown 接口,由调用方定义。 此参数可以为 NULL。 可以使用此对象来保存状态信息。 调用回调时,对象将返回到调用方。
返回值
该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。
返回代码 | 说明 |
---|---|
|
pPropVarTimecode 未 VT_I8。 |
|
调用了对象的 Shutdown 方法。 |
|
字节流不可查找。 无法从字节流的末尾读取时间代码。 |
注解
异步方法完成后,将调用回调对象的 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 |