Condividi tramite


Metodo IMFTimecodeTranslate::BeginConvertTimecodeToHNS (mfidl.h)

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

Sintassi

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

Parametri

[in] pPropVarTimecode

Tempo nel codice ora SMPTE da convertire. Il membro vt della struttura PROPVARIANT è impostato su VT_I8. Il membro hVal.QuadPart contiene l'ora nel formato decimale codificato binario (BCD). Vedere la sezione Osservazioni.

[in] pCallback

Puntatore all'interfaccia IMFAsyncCallback di un oggetto callback. Il chiamante deve implementare questa interfaccia.

[in] punkState

PPointer all'interfaccia IUnknown di un oggetto di stato, definito dal chiamante. Questo parametro può essere NULL. È possibile utilizzare questo oggetto per contenere le informazioni sullo stato. L'oggetto viene restituito al chiamante quando viene richiamato il callback.

Valore restituito

Il metodo restituisce un valore HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Codice restituito Descrizione
E_INVALIDARG
pPropVarTimecode non è VT_I8.
MF_E_SHUTDOWN
È stato chiamato il metodo Shutdown dell'oggetto.
MF_E_BYTESTREAM_NOT_SEEKABLE
Il flusso di byte non è ricercabile. Il codice ora non può essere letto dalla fine del flusso di byte.

Commenti

Al termine del metodo asincrono, viene chiamato il metodo IMFAsyncCallback::Invoke dell'oggetto callback. A questo punto, l'applicazione deve chiamare IMFTimecodeTranslate::EndConvertTimecodeToHNS per completare la richiesta asincrona.

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.

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

Requisiti

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