Dela via


Kvalitetsmeddelanden

[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]

Kvalitetsmeddelanden definieras med strukturen Kvalitet. Den här strukturen innehåller följande medlemmar:

  • typ: Definierad av QualityMessageType uppräkning; antingen Hungersnöd, vilket indikerar att filtret tar emot för lite data, eller Översvämning, vilket indikerar att filtret tar emot för mycket data.
  • proportion: Den begärda justeringen i datahastigheten, från en baslinje på 1 000. 750 anger till exempel 75% och 1500 anger 150%.
  • Sent: Referenstid som anger hur sent det senaste exemplet kom. Värdet är negativt om exemplet kom tidigt.
  • TimeStamp: Tidsstämpeln för det senaste exemplet.

Anta till exempel att ett exempel med en tidsstämpel på 240 millisekunder (ms) når återgivningen på 280 ms, strömtid. Renderaren skapar ett kvalitetsmeddelande av typen Svält. Exemplet kom 40 ms sent, så medlemmen Late är 400000. (Alla referenstider finns i 100 nanosekunder.) TimeStamp medlem är 24000000.

För Proportion medlem kan renderaren använda ett löpande medelvärde för att beräkna värdet. Exempel kanske har anlänt i tid och det här exemplet är en avvikelse. I så fall kan renderaren bara begära en liten korrigering. Om exemplen däremot är konsekvent sena kan renderaren begära en större korrigering.

Kvalitetskontroll hanteras via gränssnittet IQualityControl. Den innehåller två metoder.

  • Notify: Skickar ett kvalitetsmeddelande.
  • SetSink: Anger en anpassad kvalitetshanterare.

Ett objekt som implementerar IQualityControl tar emot kvalitetsmeddelanden via metoden Notify. Den kan antingen hantera meddelandet eller skicka meddelandet till ett annat objekt. Om programmet anropar objektets SetSink--metod bör objektet delegera kvalitetskontroll till den angivna kvalitetshanteraren.