Поделиться через


Метод IMFTimecodeTranslate::EndConvertHNSToTimecode (mfidl.h)

Выполняет асинхронный запрос для преобразования времени в 100-наносекундных единиц в код времени Общества инженеров кино и телевидения (SMPTE).

Синтаксис

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

Параметры

[in] pResult

Указатель на интерфейс IMFAsyncResult . Передайте тот же указатель, что и объект обратного вызова, полученный в методе IMFAsyncCallback::Invoke .

[out] pPropVarTimecode

Указатель на PROPVARIANT , получающий преобразованное время. Член vt структуры PROPVARIANT имеет значение VT_I8. Элемент hVal.QuadPart содержит преобразованное время в двоичном кодированном десятичном формате (BCD). См. заметки.

Возвращаемое значение

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Вызовите этот метод после асинхронного завершения метода IMFTimecodeTranslate::BeginConvertHNSToTimecode .

Значение pPropVarTimecode является 64-разрядным значением без знака, типизированным как LONGLONG. Верхний параметр 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
Header mfidl.h

См. также раздел

Вызов асинхронных методов

IMFTimecodeTranslate