Método IMFTimecodeTranslate::EndConvertHNSToTimecode (mfidl.h)

Completa una solicitud asincrónica para convertir el tiempo en unidades de 100 nanosegundos en el código de tiempo Society of Motion Picture and Television Engineers (SMPTE).

Sintaxis

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

Parámetros

[in] pResult

Puntero a la interfaz IMFAsyncResult . Pase el mismo puntero que el objeto de devolución de llamada recibido en el método IMFAsyncCallback::Invoke .

[out] pPropVarTimecode

Puntero a un PROPVARIANT que recibe el tiempo convertido. El miembro vt de la estructura PROPVARIANT se establece en VT_I8. El miembro hVal.QuadPart contiene la hora convertida en formato decimal codificado binario (BCD). Vea la sección Comentarios.

Valor devuelto

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Llame a este método después de que el método IMFTimecodeTranslate::BeginConvertHNSToTimecode se complete de forma asincrónica.

El valor de pPropVarTimecode es un valor sin signo de 64 bits con tipo LONGLONG. El DWORD superior contiene el intervalo. (Un intervalo es una serie continua de códigos de tiempo). El DWORD inferior contiene el código de tiempo en forma de número hexadecimal 0xhhmmssff, donde cada secuencia de 2 bytes se lee como un valor decimal.

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;
}

Requisitos

   
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado mfidl.h

Consulte también

Llamar a métodos asincrónicos

IMFTimecodeTranslate