Metodo IMFTimecodeTranslate::EndConvertHNSToTimecode (mfidl.h)

Completa una richiesta asincrona per convertire il tempo in unità di 100 nanosecondi nel codice temporale Society of Motion Picture and Television Engineers (SMPTE).

Sintassi

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

Parametri

[in] pResult

Puntatore all'interfaccia IMFAsyncResult . Passare lo stesso puntatore ricevuto dall'oggetto callback nel metodo IMFAsyncCallback::Invoke .

[out] pPropVarTimecode

Puntatore a un PROPVARIANT che riceve l'ora convertita. Il membro vt della struttura PROPVARIANT è impostato su VT_I8. Il membro hVal.QuadPart contiene l'ora convertita in formato decimale binario (BCD). Vedere la sezione Osservazioni.

Valore restituito

Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Chiamare questo metodo dopo che il metodo IMFTimecodeTranslate::BeginConvertHNSToTimecode viene completato in modo asincrono.

Il valore di pPropVarTimecode è un valore senza segno a 64 bit digitato come LONGLONG. La DWORD superiore contiene l'intervallo. Un intervallo è una serie continua di codici temporali. La DWORD inferiore contiene il codice temporale sotto forma di numero esadecimale 0xhhmmssff, dove ogni sequenza a 2 byte viene letta come valore decimale.

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

Requisiti

   
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione mfidl.h

Vedi anche

Chiamata di metodi asincroni

IMFTimecodeTranslate