Hardwarezeichnungsfunktionen
[Das feature, das dieser Seite zugeordnet ist, der Videokomprimierungs-Manager, ist ein Legacyfeature. Microsoft empfiehlt dringend, dass neuer Code dieses Feature nicht verwendet.]
Einige Renderer können beim Dekomprimieren von Videoframes direkt auf Videohardware zeichnen. Diese Renderer geben das VIDCF_DRAW-Flag als Reaktion auf die ICGetInfo-Funktion zurück. Wenn Sie diesen Renderertyp verwenden, muss Ihre Anwendung die dekomprimierten Daten nicht verarbeiten. Dadurch kann der Renderer die dekomprimierten Daten zum Zeichnen beibehalten.
Wenn Ihre Anwendung einen Renderer mit Zeichnungsfunktionen verwendet, muss sie die folgenden Aufgaben verarbeiten:
- Wählen Sie einen Renderer aus.
- Geben Sie Bildformate an.
- Initialisieren Sie den Renderer.
- Zeichnen Sie die Daten.
- Steuern von Zeichnungsparametern.
Rendererauswahl
Das ICDrawOpen-Makro öffnet einen Renderer, der Bilder im angegebenen Format zeichnen kann. Es gibt ein Handle eines Renderers zurück, wenn es erfolgreich ist, oder andernfalls null. Dieses Makro verwendet die ICLocate-Funktion , um den Renderer zu öffnen.
Angeben von Bildformaten
Da Ihre Anwendung die dekomprimierten Daten nicht zeichnen muss, ist kein bestimmtes Ausgabeformat erforderlich. Es muss jedoch sichergestellt werden, dass der Renderer mit dem Eingabeformat zeichnen kann, indem die ICM_DRAW_QUERY Nachricht verwendet wird (oder das ICDrawQuery-Makro verwenden). Diese Meldung kann nicht ermitteln, ob ein Renderer eine Bitmap zeichnen kann. Wenn Ihre Anwendung ermitteln muss, ob der Renderer die Bitmap zeichnen kann, verwenden Sie diese Meldung mit der ICDrawBegin-Funktion .
Ihre Anwendung kann über einen Renderer verfügen, der mithilfe der ICDrawSuggestFormat-Funktion ein Eingabeformat vorschlägt. Diese Funktion wird verwendet, wenn ein Renderer die Zeichnungsfunktionen von den Dekomprimierungsfunktionen trennt. Die meisten Anwendungen, die die Zeichenfunktionen verwenden, müssen das Ausgabeformat nicht bestimmen.
Rendererinitialisierung
Die ICDrawBegin-Funktion initialisiert einen Renderer und teilt diesem das Zeichnungsziel mit. Diese Funktion kann auch die folgenden Aufgaben ausführen:
- Bestimmen Sie, ob der Renderer ein bestimmtes Eingabeformat unterstützt.
- Geben Sie an, ob der Zeichnungsvorgang ein Fenster oder den gesamten Bildschirm einnimmt.
- Geben Sie den anzuzeigenden Teil des Bilds mithilfe des Quellrechtecks an.
- Definieren Sie die Wiedergaberate der Bildsequenz.
Einige Renderer puffern die komprimierten Daten, um effizienter zu arbeiten. Ihre Anwendung kann die ICM_GETBUFFERSWANTED Nachricht senden (oder das Makro ICGetBuffersWanted verwenden), um die Anzahl der Puffer zu bestimmen, die der Renderer anfordert. Ihre Anwendung sollte diese Puffer vorab laden und vor dem Zeichnen an den Renderer senden.
Zeichnen der Daten
Sie können die ICDraw-Funktion verwenden, um die Daten zum Zeichnen zu dekomprimieren. Der Renderer beginnt jedoch erst mit dem Zeichnen von Daten, wenn Ihre Anwendung die ICM_DRAW_START-Nachricht sendet (oder das ICDrawStart-Makro verwendet). Wenn Ihre Anwendung diese Funktion aufruft, beginnt der Renderer, die Frames mit der vom dwRate-Parameter dividiert durch den dwScale-Parameter angegebenen Rate zu zeichnen. Diese Parameter wurden bereitgestellt, als die Anwendung den Renderer mithilfe der ICDrawBegin-Funktion initialisierte. Das Zeichnen wird fortgesetzt, bis Ihre Anwendung die ICM_DRAW_STOP-Nachricht sendet (oder das ICDrawStop-Makro verwendet).
Hinweis
Wenn ein Renderer die Daten vor dem Zeichnen puffert, sollte Ihre Anwendung das ICDrawStart-Makro erst verwenden, wenn die Anzahl der Frames gesendet wurde, die der Renderer für das ICGetBuffersWanted-Makro zurückgegeben hat.
Der lTime-Parameter von ICDraw gibt die Zeit zum Zeichnen eines Frames an. Der Renderer dividiert diese ganze Zahl durch die mit ICDrawBegin angegebene Zeitskala, um die tatsächliche Zeit abzurufen. Die Zeiten für ICDraw-Funktionen sind relativ zu ICDrawStart. ICDrawStart legt die Uhr auf 0 (null) fest. Wenn Ihre Anwendung beispielsweise 1000 für die Zeitskala und 75 für lTime angibt, zeichnet der Renderer den Frame 75 Millisekunden in die Sequenz.
Steuern von Zeichnungsparametern
Sie können die Uhr eines Renderers überwachen, indem Sie die ICM_DRAW_GETTIME Nachricht senden (oder das ICDrawGetTime-Makro verwenden), und Sie können die Uhr eines Renderers festlegen, der Daten zeichnen kann, indem Sie die ICM_DRAW_SETTIME Nachricht senden (oder das ICDrawSetTime-Makro verwenden).
Um die aktuelle Position zu ändern, während ein Renderer zeichnet, kann Ihre Anwendung die ICM_DRAW_WINDOW Nachricht senden (oder das ICDrawWindow-Makro verwenden), um das Fenster neu zu positionieren. Anwendungen verwenden diese Meldung in der Regel, wenn sich das Fenster ändert.
Wenn das Wiedergabefenster eine Realize-Palette-Meldung erhält, muss Ihre Anwendung die ICM_DRAW_REALIZE Nachricht senden (oder das ICDrawRealize-Makro verwenden), damit der Renderer die Palette wieder für die Wiedergabe erkennt. Anwendungen können die Palette ändern, indem sie die ICM_DRAW_CHANGEPALETTE Nachricht senden (oder das ICDrawChangePalette-Makro verwenden) und die aktuelle Palette abrufen, indem sie die ICM_DRAW_GET_PALETTE Nachricht senden.
Einige Renderer müssen speziell angewiesen werden, an sie übergebene Frames anzuzeigen. Das Senden der ICM_DRAW_RENDERBUFFER Nachricht (oder verwenden Sie das MAKRO ICDrawRenderBuffer ) bewirkt, dass diese Renderer den Frame zeichnen.