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

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

Sintaxis

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

Parámetros

[in] pPropVarTimecode

Tiempo en el código de tiempo de SMPTE que se va a convertir. El miembro vt de la estructura PROPVARIANT se establece en VT_I8. El miembro hVal.QuadPart contiene la hora en formato decimal codificado binario (BCD). Vea la sección Comentarios.

[in] pCallback

Puntero a la interfaz IMFAsyncCallback de un objeto de devolución de llamada. El autor de la llamada debe implementar esta interfaz.

[in] punkState

PPointer a la interfaz IUnknown de un objeto de estado, definido por el autor de la llamada. Este parámetro puede ser NULL. Puede usar este objeto para contener información de estado. El objeto se devuelve al autor de la llamada cuando se invoca la devolución de llamada.

Valor devuelto

El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.

Código devuelto Descripción
E_INVALIDARG
pPropVarTimecode no está VT_I8.
MF_E_SHUTDOWN
Se llamó al método Shutdown del objeto.
MF_E_BYTESTREAM_NOT_SEEKABLE
La secuencia de bytes no se puede buscar. El código de hora no se puede leer desde el final de la secuencia de bytes.

Comentarios

Cuando se completa el método asincrónico, se llama al método IMFAsyncCallback::Invoke del objeto de devolución de llamada. En ese momento, la aplicación debe llamar a IMFTimecodeTranslate::EndConvertTimecodeToHNS para completar la solicitud 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 un número hexadecimal 0xhhhmmssff, donde cada secuencia de 2 bytes se lee como un 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 Value
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