Compartilhar via


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

Conclui uma solicitação assíncrona para converter o tempo em unidades de 100 nanossegundos para o código de tempo da Society of Motion Picture and Television Engineers (SMPTE).

Sintaxe

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

Parâmetros

[in] pResult

Um ponteiro para a interface IMFAsyncResult . Passe o mesmo ponteiro que o objeto de retorno de chamada recebeu no método IMFAsyncCallback::Invoke .

[out] pPropVarTimecode

Um ponteiro para um PROPVARIANT que recebe o tempo convertido. O membro vt da estrutura PROPVARIANT é definido como VT_I8. O membro hVal.QuadPart contém o tempo convertido no formulário decimal codificado binário (BCD). Consulte Observações.

Valor retornado

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Chame esse método depois que o método IMFTimecodeTranslate::BeginConvertHNSToTimecode for concluído de forma assíncrona.

O valor de pPropVarTimecode é um valor sem sinal de 64 bits digitado como LONGLONG. O DWORD superior contém o intervalo. (Um intervalo é uma série contínua de códigos de tempo.) O DWORD inferior contém o código de tempo na forma de um número hexadecimal 0xhhmmssff, em que cada sequência de 2 bytes é lida como um 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 com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho mfidl.h

Confira também

Chamando métodos assíncronos

IMFTimecodeTranslate