Compartilhar via


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

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

Sintaxe

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

Parâmetros

[in] pPropVarTimecode

Tempo no código de tempo SMPTE a ser convertido. O membro vt da estrutura PROPVARIANT é definido como VT_I8. O membro hVal.QuadPart contém o tempo no formulário decimal codificado binário (BCD). Consulte Observações.

[in] pCallback

Ponteiro para a interface IMFAsyncCallback de um objeto de retorno de chamada. O chamador deve implementar essa interface.

[in] punkState

PPointer para a interface IUnknown de um objeto de estado, definida pelo chamador. Este parâmetro pode ser NULL. Você pode usar esse objeto para armazenar informações de estado. O objeto é retornado ao chamador quando o retorno de chamada é invocado.

Retornar valor

O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.

Código de retorno Descrição
E_INVALIDARG
pPropVarTimecode não é VT_I8.
MF_E_SHUTDOWN
O método Shutdown do objeto foi chamado.
MF_E_BYTESTREAM_NOT_SEEKABLE
O fluxo de bytes não é buscado. O código de hora não pode ser lido do final do fluxo de bytes.

Comentários

Quando o método assíncrono é concluído, o método IMFAsyncCallback::Invoke do objeto de retorno de chamada é chamado. Nesse ponto, o aplicativo deve chamar IMFTimecodeTranslate::EndConvertTimecodeToHNS para concluir a solicitação 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.

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

Requisitos

Requisito Valor
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