Controllo qualità predefinito
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare un nuovo codice MediaPlayer, IMFMediaEngine e Acquisizione audio/video in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
La DirectShow Base Classes implementare alcuni comportamenti predefiniti per il controllo qualità video.
I messaggi di qualità iniziano dal renderer. La classe base per i renderer video è CBaseVideoRenderer, che ha il comportamento seguente:
- Quando il renderer video riceve un esempio, confronta il timestamp dell'esempio con l'ora di riferimento corrente.
- Il renderer video genera un messaggio di qualità. Nella classe di base, il membro Percentuale del messaggio di qualità è limitato a un intervallo compreso tra 500 (50%) e 2000 (200%). I valori al di fuori di questo intervallo potrebbero comportare variazioni di qualità improvvise.
- Per impostazione predefinita, il renderer video invia il messaggio di qualità al pin di output upstream (il pin connesso al pin di input). Le applicazioni possono eseguire l'override di questo comportamento chiamando il metodo SetSink.
L'operazione successiva dipende dal filtro upstream. In genere, si tratta di un filtro di trasformazione. La classe base per i filtri di trasformazione è CTransformFilter, che usa le classi CTransformInputPin e CTransformOutputPin per implementare pin di input e output. Insieme, queste classi hanno il comportamento seguente:
- Il metodo CTransformOutputPin::Notify chiama CTransformFilter::AlterQuality, un metodo privato nella classe base del filtro.
- I filtri derivati possono eseguire l'override AlterQuality per gestire il messaggio di qualità. Per impostazione predefinita, AlterQuality ignora il messaggio di qualità.
- Se alterQuality non gestisce il messaggio di qualità, il pin di output chiama CBaseInputPin::P asNotify, un metodo privato sul pin di input del filtro.
- PassNotify passa il messaggio di qualità alla posizione appropriata, ovvero il pin di output upstream successivo o un gestore qualità personalizzato.
Supponendo che nessun filtro di trasformazione gestisca il messaggio di qualità, il messaggio raggiunge infine il pin di output nel filtro di origine. Nelle classi di base CBasePin::Notify restituisce E_NOTIMPL. Il modo in cui un determinato filtro di origine gestisce i messaggi di qualità dipende dalla natura dell'origine. Alcune origini, ad esempio l'acquisizione di video live, non possono eseguire un controllo di qualità significativo. Altre origini possono regolare la frequenza con cui forniscono campioni.
Il diagramma seguente illustra il comportamento predefinito.
Il renderer video di base implementa IQualityControl::Notify, il che significa che è possibile passare messaggi di qualità al renderer stesso. Se si imposta il membro Proportion su un valore minore di 1000, il renderer video inserisce un periodo di attesa tra ogni fotogramma di cui esegue il rendering, rallentando in effetti il renderer. Questa operazione può essere eseguita per ridurre l'utilizzo del sistema, ad esempio. Per altre informazioni, vedere CBaseVideoRenderer::ThrottleWait. L'impostazione del membro percentuale su un valore maggiore di 1000 non ha alcun effetto.
Argomenti correlati
-
gestioneQuality-Control