Funzionalità di disegno hardware

[La funzionalità associata a questa pagina, Video Compression Manager, è una funzionalità legacy. Microsoft consiglia vivamente che il nuovo codice non usi questa funzionalità.

Alcuni renderer possono disegnare direttamente sull'hardware video durante la decompressione dei fotogrammi video. Questi renderer restituiscono il flag VIDCF_DRAW in risposta alla funzione ICGetInfo. Quando si usa questo tipo di renderer, l'applicazione non deve gestire i dati decompressi. Consente al renderer di conservare i dati decompressi per il disegno.

Se l'applicazione usa un renderer con funzionalità di disegno, deve gestire le attività seguenti:

  • Selezionare un renderer.
  • Specificare i formati di immagine.
  • Inizializzare il renderer.
  • Visualizza i dati.
  • Controllare i parametri di disegno.

Selezione del renderer

La macro ICDrawOpen apre un renderer in grado di disegnare immagini con il formato specificato. Restituisce un handle di un renderer se riesce con successo o zero in caso contrario. Questa macro usa la funzione ICLocate per aprire il renderer.

Specificare i formati delle immagini

Poiché l'applicazione non deve disegnare i dati decompressi, non richiede un formato di output specifico. Deve tuttavia assicurarsi che il renderer possa disegnare usando il formato di input usando il messaggio di ICM_DRAW_QUERY oppure usare la macro ICDrawQuery. Questo messaggio non può determinare se un renderer può disegnare una bitmap. Se l'applicazione deve determinare se il renderer può disegnare la bitmap, usare questo messaggio con la funzioneICDrawBegin.

L'applicazione può avere un renderer che suggerisca un formato di input usando la funzioneICDrawSuggestFormat. Questa funzione viene utilizzata quando un renderer separa le funzionalità di disegno dalle funzionalità di decompressione. La maggior parte delle applicazioni che usano le funzioni di disegno non dovrà determinare il formato di output.

Inizializzazione del renderer

La funzioneICDrawBegininizializza un renderer e indica la destinazione del disegno. Questa funzione può anche eseguire le attività seguenti:

  • Determinare se il renderer supporta un formato di input specifico.
  • Specificare se l'operazione di disegno occupa una finestra o l'intera schermata.
  • Specificare la parte dell'immagine da visualizzare usando il rettangolo di origine.
  • Definire la frequenza di riproduzione della sequenza di immagini.

Alcuni renderer memorizzano nel buffer i dati compressi per operare in modo più efficiente. L'applicazione può inviare il messaggio di ICM_GETBUFFERSWANTED (o usare la macroICGetBuffersWanted) per determinare il numero di buffer delle richieste del renderer. L'applicazione deve precaricare questi buffer e inviarli al renderer prima di disegnare.

Disegno dei dati

È possibile utilizzare la funzioneICDrawper decomprimere i dati per il disegno. Il renderer, tuttavia, non avvia il disegno dei dati finché l'applicazione non invia il messaggio di ICM_DRAW_START (o usa la macroICDrawStart). Quando l'applicazione chiama questa funzione, il renderer inizia a disegnare i fotogrammi alla velocità specificata dal parametro dwRate diviso per il parametro dwScale; questi parametri sono stati forniti quando l'applicazione ha inizializzato il renderer usando la funzioneICDrawBegin. Il disegno continua finché l'applicazione non invia il messaggio di ICM_DRAW_STOP oppure usa la macro ICDrawStop).

Nota

Se un renderer memorizza nel buffer i dati prima del disegno, l'applicazione non deve usare la macro ICDrawStart finché non ha inviato il numero di fotogrammi restituiti dal renderer per la macro ICGetBuffersWanted.

 

Il parametro lTime di ICDraw specifica il tempo necessario per disegnare una cornice. Il renderer divide questo numero intero per la scala temporale specificata con ICDrawBegin per ottenere l'ora effettiva. I tempi per le funzioni ICDraw sono relativi a ICDrawStart . ICDrawStart imposta l'orologio su zero. Ad esempio, se l'applicazione specifica 1000 per la scala temporale e 75 per lTime, il renderer disegna il fotogramma 75 millisecondi dall'inizio della sequenza.

Controllo dei parametri di disegno

È possibile monitorare l'orologio di un renderer inviando il messaggio di ICM_DRAW_GETTIME (o usando la macro ICDrawGetTime) ed è possibile impostare l'orologio di un renderer in grado di disegnare dati inviando il messaggio di ICM_DRAW_SETTIME (o usando la macro ICDrawSetTime).

Per modificare la posizione corrente durante il disegno di un renderer, l'applicazione può inviare il messaggio di ICM_DRAW_WINDOW (o usare la macro ICDrawWindow) per riposizionare la finestra. Le applicazioni usano in genere questo messaggio ogni volta che cambia la finestra.

Se la finestra di riproduzione riceve un messaggio di realizzazione della tavolozza, l'applicazione deve inviare il messaggio ICM_DRAW_REALIZE (o utilizzare la macro ICDrawRealize) per far sì che il renderer aggiorni nuovamente la tavolozza per la riproduzione. Le applicazioni possono modificare la tavolozza inviando il messaggio di ICM_DRAW_CHANGEPALETTE oppure usando la macro ICDrawChangePalette) e ottenere la tavolozza corrente inviando il messaggio ICM_DRAW_GET_PALETTE.

Alcuni renderer devono essere istruiti specificamente per visualizzare i fotogrammi passati. L'invio del messaggio di ICM_DRAW_RENDERBUFFER (o l'uso della macro ICDrawRenderBuffer) determina il disegno del frame da parte di questi renderer.