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


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

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

Синтаксис

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

Параметры

[in] pPropVarTimecode

Время в преобразуемом коде времени SMPTE. Элемент vt структуры PROPVARIANT имеет значение VT_I8. Элемент hVal.QuadPart содержит время в двоичном десятичном формате (BCD). См. заметки.

[in] pCallback

Указатель на интерфейс IMFAsyncCallback объекта обратного вызова. Вызывающий объект должен реализовать этот интерфейс.

[in] punkState

PPointer к интерфейсу IUnknown объекта состояния, определенного вызывающим объектом. Этот параметр может принимать значение NULL. Этот объект можно использовать для хранения сведений о состоянии. Объект возвращается вызывающей при вызове обратного вызова.

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

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
E_INVALIDARG
pPropVarTimecode не VT_I8.
MF_E_SHUTDOWN
Был вызван метод Shutdown объекта .
MF_E_BYTESTREAM_NOT_SEEKABLE
Поток байтов недоступен для поиска. Код времени не может быть прочитан из конца потока байтов.

Комментарии

После завершения асинхронного метода вызывается метод IMFAsyncCallback::Invoke объекта обратного вызова. На этом этапе приложение должно вызвать IMFTimecodeTranslate::EndConvertTimecodeToHNS для выполнения асинхронного запроса.

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

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

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

IMFTimecodeTranslate