Condividi tramite


Nuovi segmenti

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Un segmento è un gruppo di esempi multimediali che condividono un'ora di inizio comune, un'ora di arresto e una frequenza di riproduzione. Il metodo IPin::NewSegment segnala l'inizio di un nuovo segmento. Fornisce un modo per un filtro di origine per informare i filtri downstream che le informazioni sull'ora e sulla frequenza sono cambiate. Ad esempio, se il filtro di origine cerca un nuovo punto nel flusso, chiama NewSegment con la nuova ora di inizio.

Alcuni filtri downstream usano le informazioni sui segmenti durante l'elaborazione dei campioni. Ad esempio, in un formato che usa la compressione interframe, se l'ora di arresto cade su un frame differenziale, il filtro di origine potrebbe dover inviare campioni aggiuntivi dopo l'ora di arresto. In questo modo il decodificatore può decodificare il frame differenziale finale. Per determinare il fotogramma finale corretto, il decodificatore fa riferimento al tempo di arresto del segmento. Come altro esempio, i renderer audio usano la frequenza di segmento insieme alla frequenza di campionamento audio per generare l'output audio corretto.

Nel modello push il filtro di origine avvia la chiamata NewSegment . Nel modello pull questa operazione viene eseguita dal filtro del parser. In entrambi i casi, il filtro chiama NewSegment sul pin di input downstream, che propaga la chiamata al filtro successivo, fino a quando la chiamata non raggiunge il renderer. I filtri devono serializzare le chiamate NewSegment con altre chiamate di streaming, ad esempio IMemInputPin::Receive.

Il tempo di flusso viene reimpostato su zero dopo ogni nuovo segmento. Timestamp sui campioni recapitati dopo l'inizio del segmento da zero.