Allocazione dei buffer per la lettura di file
Nello scenario di lettura dei file di base, i buffer usati per recapitare esempi vengono allocati dall'oggetto di lettura (l'oggetto lettore o l'oggetto lettore sincrono). È tuttavia possibile allocare i buffer. Per altre informazioni sui vantaggi dell'allocazione dei buffer personalizzati, vedere Supporto di esempio allocato dall'utente.
Per usare i buffer personalizzati per la lettura dei file, seguire questa procedura.
- Implementare un callback o un callback per il lettore da chiamare quando necessita di un buffer. Se si stanno leggendo esempi di output, usare IWMReaderAllocatorEx::AllocateForOutputEx. Se si stanno leggendo esempi di flusso, usare IWMReaderAllocatorEx::AllocateForStreamEx. Includere qualsiasi logica per la gestione dei buffer adatti all'applicazione.
- Allocare un pool di buffer che verranno usati per la lettura dei file.
- Trovare le dimensioni necessarie per i buffer chiamando IWMReaderAdvanced::GetMaxOutputSampleSize o IWMReaderAdvanced::GetMaxStreamSampleSize per ogni output e/o flusso per cui viene usato il buffer. Se si usa il lettore sincrono, usare invece IWMSyncReader::GetMaxOutputSampleSize o IWMSyncReader::GetMaxStreamSampleSize.
- Creare ogni buffer per il pool.
- Configurare il lettore o il lettore sincrono per la lettura. Per altre informazioni, vedere Lettura di file con lettore asincrono o file di lettura con il lettore sincrono.
- Prima di iniziare a scrivere, chiamare IWMReaderAdvanced::SetAllocateForOutput o IWMReaderAdvanced::SetAllocateForStream per ogni output e flusso per cui si assegnano buffer usando l'oggetto reader. Per il lettore sincrono, chiamare invece IWMSyncReader2::SetAllocateForOutput o IWMSyncReader2::SetAllocateForStream .
- Iniziare a leggere il file.
L'oggetto di lettura eseguirà chiamate al callback dell'allocatore appropriato e otterrà esempi dall'applicazione. La logica di gestione del buffer deve includere un modo per segnalare che un buffer è libero di essere usato di nuovo. In genere, un buffer viene inserito nel pool quando il relativo contenuto viene eseguito il rendering. A seconda dell'applicazione, potrebbe essere necessario solo alcuni buffer nel pool o molti.
Argomenti correlati