Aktivieren Sie JavaScript, um die Website anzuzeigen.

FALCON/EAGLE-Benutzerhandbuch 4.62

Syntax

INT is_DirectRenderer (HIDS hCam, UINT nMode, void* pParam, UINT nSize)

Beschreibung:

is_DirectRenderer() fasst erweiterte Darstellungsfunktionen zusammen und bietet die Möglichkeit, Overlay-Daten flackerfrei ins Livebild einzublenden. Unter Windows werden Grafikkarten-Funktionen der Direct3D-Bibliothek unterstützt.

Um die Direct3D-Funktionen nutzen zu können, muss eine entsprechende Version der Microsoft DirectX 9 Runtime auf dem System installiert sein. Installationspakete sind auf den Microsoft Webseiten verfügbar (Stichwort: "DirectX End-User runtime").

Die Grafikkarte muss mindestens eine Texturgröße (Overlay-Größe) von 768x576 Pixel bei PAL bzw. 640x480 Pixel bei NTSC unterstützen. Die maximale Texturgröße kann über den Parameter DR_GET_MAX_OVERLAY_SIZE abgefragt werden.

Aktiviert wird die Direct3D Darstellung wie folgt:
is_SetDisplayMode(h, IS_SET_DM_DIRECT3D)

Für die Darstellung im Direct3D-Modus können verschiedene Farbmodi verwendet werden. Die höchste Leistung wird jedoch erzielt, wenn der Farbmodus des FALCON identisch zum Farbmodus des Windows Desktops ist. In Verbindung mit modernen leistungsfähigen Grafikkarten kann als Grab-Farbformat meist YUV4:2:2 verwendet werden. Dieses Format ist ein 16-Bit pro Pixel Format und weist eine reduzierte PCI/PCIe Busbelastung gegenüber z.B. dem RGB32 Format auf.

Es kommt vor, dass interne Direct3D Buffer ungültig werden, wenn der Desktop nach bestimmten Aktionen reaktiviert wird (z.B. ein Bildschirmschoner wird durch eine Eingabe inaktiv; nach einem Strg-Alt-Entf). In diesem Fall sind die gezeichneten Overlay-Daten intern verloren. Die Applikation wird jedoch über eine Message (Overlay-Lost-Message) aus dem FALCON Treiber über diese Situation benachrichtigt, so dass diese die Overlay-Daten neu zeichnen kann (Message-Beispiel siehe unten). Diese Message wird sowohl an das Anzeigefenster, als auch an das Elternfenster des Anzeigefensters gesendet. Damit kann die Nachricht auch empfangen werden, wenn das Control, das zur Anzeige verwendet wird, selbst keine Nachrichten verarbeitet. Ausgewertet muss die Nachricht jedoch nur in einem der beiden Fensterhandler.

Unter Direct3D kann ein stufenloses Skalieren der Darstellung genutzt werden (siehe DR_ENABLE_SCALING). Allerdings können in Verbindung mit der Interlaced-Aufnahme der Bilddaten beim Herunterskalieren subjektiv schlechtere Skalierungsergebnisse auftreten, im Vergleich zur Bilderfassung direkt in der benötigten skalierten Bildgröße.

Während der Direct3D Modus aktiv ist sind einige FALCON SDK Funktionen nicht nutzbar (Liste siehe unten).

Übergabeparameter

hf

Handle auf Frame Grabber

nMode

Funktionsmodus der Direct3D-Funktion

DR_GET_OVERLAY_DC

Gibt das Device-Context-Handle (DC) auf den Overlay-Bereich der Grafikkarte zurück.

DR_RELEASE_OVERLAY_DC

Gibt das Device-Context-Handle (DC) wieder frei.

DR_GET_MAX_OVERLAY_SIZE

Gibt die Breite x und Höhe y des maximal von der Grafikkarte unterstützen Overlay-Bereichs zurück.

DR_SET_OVERLAY_SIZE

Setzt die Größe des Overlay-Bereichs (Voreinstellung: aktuelle Größe des Kamerabilds.

DR_SET_OVERLAY_POSITION

Setzt die Position des Overlay-Bereichs.

DR_GET_OVERLAY_KEY_COLOR

Gibt die RGB-Werte der aktuellen Key-Farbe zurück (Voreinstellung: Schwarz)

DR_SET_OVERLAY_KEY_COLOR

Setzt die RGB-Werte der Key-Farbe.

DR_SHOW_OVERLAY

Aktiviert die Overlay-Darstellung über dem aktuellen Kamerabild.

DR_HIDE_OVERLAY

Deaktiviert die Overlay-Darstellung.

DR_ENABLE_SCALING

Aktiviert die Echtzeitskalierung des Bildes auf die Größe des Anzeigefensters.

DR_DISABLE_SCALING

Deaktiviert die Echtzeitskalierung.

DR_ENABLE_SEMI_TRANSPARENT_OVERLAY

Aktiviert eine halbtransparente Darstellung des Overlay-Bereichs.

DR_DISABLE_SEMI_TRANSPARENT_OVERLAY

Deaktiviert die halbtransparente Darstellung des Overlay-Bereichs.

DR_SET_VSYNC_AUTO

Aktiviert die Synchronisierung der Bilddarstellung mit dem Bildaufbau des Monitors. Das Bild wird mit dem nächsten VSYNC-Signal des Monitors dargestellt.

DR_SET_VSYNC_OFF

Deaktiviert die Synchronisierung der Bilddarstellung. Das Bild wird sofort dargestellt.

DR_SET_USER_SYNC

Aktiviert die Synchronisierung der Bilddarstellung auf eine vom Anwender vorgegebene Bildzeile.

DR_GET_USER_SYNC_POSITION_RANGE

Gibt die minimale und maximale mögliche Zeilenposition für DR_SET_USER_SYNC zurück.

DR_LOAD_OVERLAY_FROM_FILE

Lädt ein Bitmap-Bild (*.BMP-Datei) in den Overlay-Bereich. Wenn das Bitmap-Bild größer ist als der Overlay-Bereich, wird das Bitmap-Bild beschnitten.

DR_CLEAR_OVERLAY

Löscht die Daten des Overlay-Bereichs durch Füllen mit der Farbe Schwarz.

DR_STEAL_NEXT_FRAME

Kopiert das nächste Bild in den aktiven Benutzerspeicher, der mit is_SetImageMem()gesetzt wurde (Steal-Funktion).

DR_SET_STEAL_FORMAT

Setzt das Farbformat für die Steal-Funktion identisch zu is_PrepareStealVideo()

DR_GET_STEAL_FORMAT

Gibt das eingestellte Farbformat für die Steal-Funktion zurück.

DR_SET_HWND

Setzt ein neues Fenster-Handle für die Bildausgabe unter Direct3D. Dadurch muss jedoch FALCON-intern das Direct3D Interface neu initialisiert werden, so dass alle Overlay-Daten gelöscht werden und von der Applikation neu gezeichnet werden müssen. Die Applikation wird hierüber jedoch durch die Overlay-Lost-Message informiert (siehe auch Beschreibung oben).

DR_CHECK_COMPATIBILITY

Gibt zurück, ob die Grafikkarte die benötigten Direct3D Funktionen unterstützt.

DR_CHECK_COLOR_MODE_SUPPORT

Überprüft, ob die angegebenen Farbmodi für die Darstellung möglich sind. Es muss der FALCON Farbmodus als Quellmodus und der VGA-Farbmodus als Zielmodus angegeben werden.

pParam

Zeiger vom Typ void auf ein Datenobjekt oder ein Array von Objekten (abhängig vom mit nMode ausgewählten Modus).

nSize

Größe des Datenobjekts bzw. des Arrays in Byte

Rückgabewerte

In Verbindung mit

DR_CHECK_COMPATIBILITY

IS_DR_DEVICE_CAPS_INSUFFICIENT

Die Grafikhardware bietet keine vollständige Unterstützung

für die benötigten Direct3D-Funktionen

In Verbindung mit

DR_CHECK_COLOR_MODE_SUPPORT

IS_DR_DEVICE_CAPS_INSUFFICIENT

Die Grafikhardware kann die angegebene Farbraumumrechnung nicht in Hardware durchführen.

IS_SUCCESS

Allgemeine Erfolgsmeldung

IS_NO_SUCCESS

Allgemeine Fehlermeldung

IS_DR_LIBRARY_NOT_FOUND

Die DirectRenderer-Bibliothek konnte nicht gefunden werden.

IS_DR_DEVICE_OUT_OF_MEMORY

Nicht genügend Grafikspeicher verfügbar.

IS_DR_CANNOT_CREATE_SURFACE

Bild- oder Overlay-Surface konnten nicht angelegt werden.

IS_DR_CANNOT_CREATE_VERTEX_BUFFER

Der Vertex-Puffer konnte nicht angelegt werden.

IS_DR_CANNOT_CREATE_TEXTURE

Die Textur konnte nicht angelegt werden.

IS_DR_CANNOT_LOCK_OVERLAY_SURFACE

Das Overlay-Surface konnte nicht gesperrt werden.

IS_DR_CANNOT_UNLOCK_OVERLAY_SURFACE

Das Overlay-Surface konnte nicht entsperrt werden.

IS_DR_CANNOT_GET_OVERLAY_DC

Das Device-Context-Handle für das Overlay konnte nicht freigegeben werden.

IS_DR_CANNOT_RELEASE_OVERLAY_DC

Das Overlay-Surface konnte nicht freigegeben werden.

IS_DR_DEVICE_CAPS_INSUFFICIENT

Die Funktion wird von der Grafikhardware nicht unterstützt.

IS_DR_SURFACE_LOST

Das Overlay-Surface wurde verloren und musste neu erzeugt werden.

IS_DR_CANNOT_LOCK_IMAGE_SURFACE

Das Bild-Surface konnte nicht gesperrt werden.

IS_DR_CANNOT_UNLOCK_IMAGE_SURFACE

Das Bild-Surface konnte nicht entsperrt werden.

Während des Direct3D Modus nicht nutzbare Funktionen

is_SetVideoMode()

is_SetColorMode()

is_SetImageSize()

is_UpdateDisplay()

is_EnableDDOverlay()

is_DisableDDOverlay()

is_ScaleDDOverlay()

is_ShowDDOverlay()

is_HideDDOverlay()

is_OvlSurfaceOffWhileMove()

is_GetDC()

is_ReleaseDC

is_SetDDUpdateTime

is_LockDDOverlayMem

is_UnlockDDOverlayMem

is_LockDDMem

is_UnlockDDMem

is_GetDDOvlSurface

is_SetKeyColor

is_SetKeyOffset

is_AddToSequence

Beispiele

//------------------------------------

// DC-Handle

//------------------------------------

// DC-Handle auf das Overlay holen

HDC hDC;

is_DirectRenderer (h, DR_GET_OVERLAY_DC, (void*)&hDC, sizeof (hDC));

// DC-Handle freigeben

is_DirectRenderer (h, DR_RELEASE_OVERLAY_DC, NULL, NULL);

 

//------------------------------------

// Overlay-Größe

//------------------------------------

//Maximale Größe des Overlay-Bereichs abfragen

UINT OverlaySize[2];

is_DirectRenderer (h, DR_GET_MAX_OVERLAY_SIZE,

        (void*)OverlaySize, sizeof(OverlaySize));

INT nWidth = OverlaySize[0];

INT nHeight = OverlaySize[1];

//Größe des Overlay-Bereichs setzen

UINT Size[2];

Size[0] = 100;

Size[1] = 120;

is_DirectRenderer (h, DR_SET_OVERLAY_SIZE, (void*)Size, sizeof (Size));

//Position des Overlay-Bereichs setzen

UINT Position[2];

Position[0] = 20;

Position[1] = 0;

is_DirectRenderer (h, DR_SET_OVERLAY_POSITION,

        (void*)Position, sizeof (Position));

 

//------------------------------------

// Key-Farbe

//------------------------------------

//Aktuelle Key-Farbe auslesen

UINT OverlayKeyColor[3];

is_DirectRenderer (h, DR_GET_OVERLAY_KEY_COLOR,

        (void*)OverlayKeyColor, sizeof(OverlayKeyColor));

INT nRed   = OverlayKeyColor[0];

INT nGreen = OverlayKeyColor[1];

INT nBlue = OverlayKeyColor[2];

//Neue Key-Farbe setzen

OverlayKeyColor[0] = GetRValue(m_rgbKeyColor);

OverlayKeyColor[1] = GetGValue(m_rgbKeyColor);

OverlayKeyColor[2] = GetBValue(m_rgbKeyColor);

is_DirectRenderer (h, DR_SET_OVERLAY_KEY_COLOR,

        (void*)OverlayKeyColor, sizeof(OverlayKeyColor));

 

//------------------------------------

// Anzeige

//------------------------------------

//Overlay anzeigen

is_DirectRenderer (h, DR_SHOW_OVERLAY, NULL, NULL);

//Overlay ausblenden

is_DirectRenderer (h, DR_HIDE_OVERLAY, NULL, NULL);

 

//------------------------------------

// Skalierung

//------------------------------------

//Skalierung aktivieren

is_DirectRenderer (h, DR_ENABLE_SCALING, NULL, NULL);

//Skalierung deaktivieren

is_DirectRenderer (h, DR_DISABLE_SCALING, NULL, NULL);

 

//------------------------------------

// Transparenz

//------------------------------------

//Halbtransparentes Overlay aktivieren

is_DirectRenderer (h, DR_ENABLE_SEMI_TRANSPARENT_OVERLAY, NULL, NULL);

//Halbtransparentes Overlay deaktivieren

is_DirectRenderer (h, DR_DISABLE_SEMI_TRANSPARENT_OVERLAY, NULL, NULL);

 

//------------------------------------

// Synchronisation

//------------------------------------

//Auto-Synchronisation aktivieren

is_DirectRenderer (h, DR_SET_VSYNC_AUTO, NULL, NULL);

//Benutzerdefinierte Synchronisation: Bereich abfragen + Sync-Pos. setzen

UINT UserSync[2];

is_DirectRenderer (h, DR_GET_USER_SYNC_POSITION_RANGE,

        (void*)UserSync, sizeof (UserSync));

INT Min = UserSync[0];

INT Max = UserSync[1];

INT SyncPosition = 400;

is_DirectRenderer (h, DR_SET_USER_SYNC,

        (void*)&SyncPosition, sizeof (SyncPosition));

//Synchronisation deaktivieren

is_DirectRenderer (h, DR_SET_VSYNC_OFF, NULL, NULL);

 

//------------------------------------

// BMP-Datei

//------------------------------------

//Overlay aus BMP-Datei laden

is_DirectRenderer (h, DR_LOAD_OVERLAY_FROM_FILE,

        (void*)”c:\test.bmp”, NULL);

 

//------------------------------------

// Löschen

//------------------------------------

//Overlay-Bereich löschen

is_DirectRenderer (h, DR_CLEAR_OVERLAY, NULL, NULL);

 

//------------------------------------

// Steal-Funktion

//------------------------------------

//Farbmodus für kopiertes Bild abfragen und setzen

INT nColorMode;

is_DirectRenderer (h, DR_GET_STEAL_FORMAT,

        (void*)&nColorMode, sizeof (nColorMode));

nColorMode = IS_CM_Y8;

is_DirectRenderer (h, DR_SET_STEAL_FORMAT,

        (void*)&nColorMode, sizeof (nColorMode));

//Bild kopieren, Funktion wartet

INT nwait = IS_WAIT;

is_DirectRenderer(h, DR_STEAL_NEXT_FRAME,

        (void*)&wait, sizeof (wait));

 

//------------------------------------

// Fenster-Handle

//------------------------------------

//Setzt ein neues Fenster-Handle für die Bildausgabe

is_DirectRenderer (h, DR_SET_HWND, (void*)&hWnd, sizeof (hWnd));

 

//------------------------------------

// Kompatibilität

//------------------------------------

//Kompatibilität der Grafikkarte prüfen

INT nRet = is_DirectRenderer (h, DR_CHECK_COMPATIBILITY, NULL, NULL);

if (nRet == IS_DR_DEVICE_CAPS_INSUFFICIENT )

//Grafikkarte unterstützt keine uEye Direct3D-Funktionen

 

//------------------------------------

// Farbmodus prüfen

//------------------------------------

INT nVgaMode;

// Aktuellen Farbmodus des Desktops ermitteln

INT nRet = is_GetColorDepth(h, NULL, &nVgaMode);

INT Modes[2];

Modes[0] = IS_SET_CM_RGB16;   // Quellmodus des FALCON (z.B.)

Modes[1] = nVgaMode;       // Zielmodus der Grafikkarte

// Quell- und Zielmodus prüfen

nRet = is_DirectRenderer(h, DR_CHECK_COLOR_MODE_SUPPORT, Modes,

            2 * sizeof(INT));

if (nRet == IS_DR_DEVICE_CAPS_INSUFFICIENT )

//Grafikkarte unterstützt die angegebene Farbraumkonvertierung nicht

 

//------------------------------------

// "Overlay Lost" Nachricht

//------------------------------------

// Beispiel für einen Nachrichtenhandler in MFC Applikationen

// in XX_sample.h

afx_msg LRESULT OnFalconMessage(WPARAM wParam, LPARAM lParam);

 

// in XX_sample.cpp

BEGIN_MESSAGE_MAP(...)

...

ON_MESSAGE(IS_FALCON_MESSAGE, OnFalconMessage)

END_MESSAGE_MAP()

 

LRESULT CXX_class::OnFalconMessage(WPARAM wParam, LPARAM lParam)

{

  switch(wParam)

  {

      case IS_MSG_OVERLAY_DATA_LOST:

    // redraw the overlay data here

    ...

          break;

  } // end switch(wParam)

  return 0;

} // end  LRESULT CXX_class::OnFalconMessage