Share via


Miglioramenti alla riproduzione di DVD in Windows Vista

[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.

In questa sezione vengono descritti i miglioramenti apportati alla riproduzione e alla navigazione in DVD in Windows Vista.

Specifica di un decodificatore

Nelle versioni precedenti di DirectShow era difficile specificare un particolare decodificatore MPEG-2 durante la creazione di un grafico di riproduzione DVD. A partire da Windows Vista, un'applicazione può specificare il decodificatore come segue:

  1. Aggiungere il decodificatore al grafico prima di chiamare IBuilder::RenderVideoVideoVolume.
  2. Chiama RenderVideoVolume e imposta il flag AM_DVD_DO_NOT_CLEAR. Lo strumento di navigazione DVD darà la preferenza al decodificatore aggiunto.

Supporto per il renderer video avanzato

È consigliabile che le applicazioni scritte per Windows Vista o versioni successive usino Enhanced Video Renderer (EVR) per la riproduzione video. Per usare EVR in un'applicazione di riproduzione DVD, impostare il flag di AM_DVD_EVR_ONLY quando si chiama RenderVideoVolume.

Per configurare L'EVR prima di compilare il grafo, chiamare IConfigurationGraphBuilder::GetDestinazioniInterface ed eseguire una query per l'interfaccia IEVRFilterConfig o IMFVideoRenderer. Queste interfacce sono documentate nella documentazione di Media Foundation SDK. Per altre informazioni sulla configurazione del renderer video in un grafico di riproduzione DVD, vedere Compilazione del grafico del filtro DVD.

Lo strumento di navigazione DVD non userà il metodo EVR a meno che il metodo IAMDecoderCaps::GetDecoderCaps del decodificatore non restituisca il flag AM_GETDECODERCAP_QUERY_EVR_SUPPORT. Questo flag è definito per garantire che le applicazioni siano compatibili con i decodificatori esistenti. Se RenderVideoVolume ha esito negativo usando il flag AM_DVD_EVR_ONLY, eseguire nuovamente il fallback a un altro renderer video chiamando di nuovo il metodo senza il flag .

Riproduzione inversa uniforme

Lo strumento di navigazione DVD può ora eseguire una riproduzione inversa uniforme. Nella riproduzione inversa uniforme, lo strumento di navigazione DVD invia intere unità di oggetti video (VOB) al decodificatore e il decodificatore emette i fotogrammi in ordine inverso. Questa funzionalità richiede che i decodificatori supportino la riproduzione inversa uniforme.

Quando l'applicazione imposta la velocità di riproduzione su un valore negativo, lo strumento di navigazione DVD esegue una query sui decodificatori per la proprietà AM_RATE_ReverseMaxFullDataRate. Il valore di questa proprietà è il valore assoluto della velocità inversa massima x 10000. Ad esempio, se la velocità inversa massima è -2,0, il valore è 20000.

Se il decodificatore video supporta la proprietà , lo strumento di navigazione DVD usa una riproduzione inversa uniforme. Il flusso audio viene riprodotto inverso se il decodificatore audio supporta la proprietà ; in caso contrario, il flusso audio viene disattivato. Se il decodificatore video non supporta la proprietà o la velocità di riproduzione supera la frequenza inversa massima del decodificatore video, lo strumento di navigazione DVD passa alla modalità di scansione. In modalità di scansione, lo strumento di navigazione DVD invia solo i fotogrammi al decodificatore e rilascia tutti i fotogrammi B e P.

Durante la riproduzione inversa uniforme, lo strumento di navigazione DVD invia voBU completi al decodificatore. Lo strumento di navigazione DVD invia le VOBU in ordine inverso, ma invia i fotogrammi all'interno di ogni VOBU nell'ordine di avanzamento normale. All'inizio di ogni VOBU, lo strumento di navigazione DVD imposta il flag AM_ReverseBlockStart nell'esempio. Alla fine del VOBU, lo strumento di navigazione DVD invia un campione vuoto con il flag AM_ReverseBlockEnd. Per recuperare questi flag, chiamare IMediaSample2::GetProperties nell'esempio. I flag vengono impostati nel membro dwTypeSpecificFlags della struttura AM_SAMPLE2_PROPERTIES .

Il decodificatore memorizza nella cache i dati video fino a quando non riceve l'esempio con il flag AM_ReverseBlockEnd. A questo punto, il decodificatore fornisce fotogrammi decodificati in ordine inverso. Ad esempio, se VOBU 1 contiene fotogrammi da 1 a 4 e VOBU 2 contiene fotogrammi da 5 a 8, lo strumento di navigazione DVD invierà i fotogrammi in questo ordine:

(Blocca inizio) F5 F6 F7 F8 (fine blocco) (inizio blocco) F1 F2 F3 F4 (fine blocco)

Il decodificatore deve elaborare i fotogrammi come segue:

  1. Decodifica VOBU 2.
  2. Fotogrammi di output: F8 F7 F6 F5
  3. DecodificaRE VOBU 1.
  4. Fotogrammi di output: F4 F3 F2 F1

Lo strumento di navigazione DVD imposta il timestamp del primo campione in VOBU (F1 e F5 in questo esempio), ma il timestamp contiene l'ora di presentazione dell'inizio del blocco, quindi il decodificatore deve applicare questa volta all'ultimo campione nel blocco (F4 e F8). I tempi di presentazione aumentano durante la riproduzione inversa.

In genere un VOBU contiene fino a 42 fotogrammi e può contenere più di un gruppo di immagini (GOP). Per consentire la decodifica dell'intero VOBU, il decodificatore deve memorizzare nella cache i frame I e P decodificati. Le VOB sui DVD non sono GOP chiuse, quindi un frame B all'interno di un GOP potrebbe richiedere la decodifica di tutti i frame di riferimento nel GOP precedente. Se il decodificatore non dispone di superfici sufficienti per contenere tutti i fotogrammi decodificati, potrebbe essere necessario decodificare nuovamente i fotogrammi selezionati.

Modifiche alla frequenza

Per impostazione predefinita, lo strumento di navigazione DVD scarica il grafico tra le variazioni di frequenza. Se il decodificatore supporta la proprietà AM_RATE_ResetOnTimeDisc , tuttavia, lo strumento di navigazione DVD non scarica il grafico, con conseguente transizione più fluida tra le frequenze di riproduzione.

Lo strumento di navigazione DVD segna sempre i campioni per la riproduzione a velocità 1x, indipendentemente dalla velocità effettiva di riproduzione. Il decodificatore deve ridimensionare i timestamp sui campioni decodificati in modo che corrispondano alla velocità di riproduzione effettiva. Per informazioni dettagliate, vedere proprietà AM_RATE_SimpleRateChange. Di conseguenza, quando si gioca a velocità diverse da 1x, i timestamp sui fotogrammi decodificati divergono da quelli nei fotogrammi codificati. Ogni volta che lo strumento di navigazione DVD imposta il flag di AM_SAMPLE_TIMEDISCONTINUITY su un campione, il decodificatore deve risincronizzare i timestamp. In altre parole, il frame decodificato deve avere lo stesso timestamp del frame di input. Per recuperare il flag AM_SAMPLE_TIMEDISCONTINUITY, chiamare IMediaSample2::GetProperties nell'esempio. Il flag viene impostato nel membro dwSampleFlags della struttura AM_SAMPLE2_PROPERTIES .

Risparmio energia

In Windows Vista, lo strumento di navigazione DVD consente i miglioramenti seguenti al risparmio energia:

  • Risoluzione del timer più elevata
  • Cache dei dati di dimensioni maggiori

Risoluzione timer: le applicazioni possono richiedere una risoluzione timer minima chiamando la funzione timeBeginPeriod . Una risoluzione più elevata (periodo più breve) aumenta la velocità di risposta del sistema a eventi periodici, ad esempio timeout, ma può anche aumentare la frequenza dei commutatori di contesto del thread.

Per impostazione predefinita, l'orologio di riferimento in DirectShow imposta la risoluzione del timer su 1 millisecondo. A tale risoluzione, la CPU non immetterà alcuna modalità di risparmio energia. A partire da Windows Vista, lo strumento di navigazione DVD esegue l'override del comportamento predefinito dell'orologio di riferimento chiamando IReferenceClockTimerControl::SetDefaultTimerResolution sull'orologio di riferimento. In questo modo viene rimossa la richiesta dell'orologio per una risoluzione timer di 1 millisecondo. Ciò potrebbe consentire alla CPU di accedere a una modalità di risparmio energia.

La risoluzione timer è un'impostazione globale; Windows seleziona il valore richiesto più basso. I filtri del renderer di combinazione video (VMR) (VMR-7 e VMR-9) impostano la risoluzione del timer su 1 millisecondo. L'EVR imposta in genere la risoluzione su un valore compreso tra 4 e 8 millisecondi, a seconda che la composizione desktop sia abilitata e se EVR sia in modalità a schermo intero. Altre applicazioni potrebbero anche impostare la risoluzione.

Dimensioni cache: le applicazioni possono specificare la quantità di dati memorizzati nella cache dello strumento di navigazione DVD impostando l'opzione DVD_CacheSizeInMB nel metodo IDeviceControl2::SetOption . Se l'applicazione imposta questo flag su un valore elevato (> 50 MB), l'unità DVD può ruotare verso il basso dopo la prelettura iniziale, a seconda dell'hardware, che può ridurre il consumo di energia.

Applicazioni DVD