Aktivieren Sie JavaScript, um die Website anzuzeigen.

IDS Software Suite 4.95.1

Navigation: C: Programmierung > Vorgehensweise > Bilder und Videos speichern

Kameraspeicher verwenden (GigE uEye Kameras)

Blättern Zurück Top Vor Mehr

Im Folgenden werden alle Funktionen und Parameter aufgeführt, die für den Memory-Modus einer GigE uEye Kamera benötigt werden. Der Memory-Modus wird über die Funktion is_Transfer() aktiviert.

is_Transfer()

TRANSFER_CMD_GET_IMAGE_DESTINATION_CAPABILITIES

Gibt zurück, welchen Memory-Modus die Kamera unterstützt:

•IS_TRANSFER_DESTINATION_DEVICE_MEMORY = 1

•IS_TRANSFER_DESTINATION_USER_MEMORY = 2

TRANSFER_CMD_SET_IMAGE_DESTINATION

Setzt den aktuellen Zielspeicher

TRANSFER_CMD_GET_IMAGE_DESTINATION

Gibt den aktuellen Zielspeicher zurück

Beispiel

INT nRet = IS_SUCCESS;
 
/* Check if camera memory is supported */
UINT nCaps = 0;
nRet = is_Transfer(hCam, TRANSFER_CMD_GET_IMAGE_DESTINATION_CAPABILITIES, (void*)&nCaps, sizeof(nCaps));
if ((nRet == IS_SUCCESS) && ((nCaps & IS_TRANSFER_DESTINATION_DEVICE_MEMORY) != 0))
{
  /* Enable camera memory mode */
  TRANSFER_TARGET transferTarget = IS_TRANSFER_DESTINATION_DEVICE_MEMORY;
  nRet = is_Transfer(hCam, TRANSFER_CMD_SET_IMAGE_DESTINATION, (void*)&transferTarget , sizeof(transferTarget ));
}

Für den Memory-Modus existieren vier Trigger-Modi (je 2 im Pre- und Post-Trigger-Modus), die über die Funktion is_SetExternalTrigger() gesetzt werden müssen, bevor der Memory-Modus verwendet werden kann. Zwei dieser vier Trigger-Modi wurden mit Version 4.20 eingeführt und funktionieren nur in Verbindung mit dem Memory-Modus. Daher führt die Verwendung der Trigger-Modi IS_SET_TRIGGER_PRE_HI_LO und IS_SET_TRIGGER_PRE_LO_HI ohne Aktivierung des Memory-Modus zu einem Fehler beim Aufruf von is_CaptureVideo().

is_SetExternalTrigger()

IS_SET_TRIGGER_HI_LO

Aktiviert im Memory-Modus den Post-Trigger (fallende Flanke)

IS_SET_TRIGGER_HI_LO

Aktiviert im Memory-Modus den Post-Trigger (steigende Flanke)

IS_SET_TRIGGER_PRE_HI_LO

Aktiviert im Memory-Modus den Pre-Trigger (fallende Flanke)

IS_SET_TRIGGER_PRE_LO_HI

Aktiviert im Memory-Modus den Pre-Trigger (steigende Flanke)

Zusätzlich kann über is_Trigger() die Triggerburst-Größe angegeben werden. Diese wirkt sich abhängig vom eingestellten Trigger-Modus unterschiedlich aus. Im Post-Trigger-Modus gibt der Trigger-Burst die Anzahl Bilder an, die nach dem Triggersignal neu vom Sensor angefordert werden (Snapshot-Betrieb, d.h. "getriggerte Aufnahme"). Im Pre-Trigger-Modus läuft die Kamera im "Freerun" bis ein Triggersignal kommt. Dann werden noch n Bilder aufgenommen, wobei n die Triggerburst-Größe ist. Der Defaultwert für die Triggerburst-Größe ist im Post-Trigger-Modus 1 und im Pre-Trigger-Modus 0.

is_Trigger()

IS_TRIGGER_CMD_GET_BURST_SIZE_SUPPORTED

Gibt zurück, die Kamera den Burst-Triggermodus unterstützt (aktuell nur GigE uEye Kameras)

IS_TRIGGER_CMD_GET_BURST_SIZE_RANGE

Gibt den Wertebereich, den Standardwert und das Inkrement für die Anzahl der Bilder in einem Burst zurück.

IS_TRIGGER_CMD_GET_BURST_SIZE

Gibt die aktuell eingestellte Anzahl der Bilder in einem Burst zurück.

IS_TRIGGER_CMD_SET_BURST_SIZE

Setzt die Anzahl der Bilder in einem Burst.

Beispiel

INT nRet = IS_SUCCESS;
 
/* Enable pre-trigger mode */
nRet = is_SetExternalTrigger(hCam, IS_SET_TRIGGER_PRE_HI_LO);
 
/* Set trigger burst size to 5 */
UINT nBurstSize = 5;
nRet = is_Trigger(hCam, IS_TRIGGER_CMD_SET_BURST_SIZE, (void*)&nBurstSize, sizeof(nBurstSize));

Die Aufnahme wird über is_CaptureVideo() gestartet. In diesem Zustand wird kontinuierlich auf ein Triggersignal gewartet. Jedes Triggersignal löst eine "Iteration" aus. Wurde eine Iteration beendet, wird das Event IS_SET_EVENT_CAMERA_MEMORY bzw. die Windows-Message IS_CAMERA_MEMORY gesendet (sofern diese zuvor aktiviert wurden). Sobald der Kameraspeicher voll ist, wird keine Iteration mehr ausgelöst und die Anzahl der Fehltrigger wird inkrementiert. Sobald eine Iteration gelöscht wird, ist wieder Platz im Kameraspeicher und die Kamera reagiert wieder auf das Triggersignal.

hint_info

Achtung: Derzeit kann das kontinuierliche Warten auf Triggersignale nicht durch is_StopLiveVideo() unterbrochen werden, da dann der Zugriff auf den Kameraspeicher nicht mehr möglich ist. Auch is_FreezeVideo() ist nicht möglich, d.h. es kann nicht auf ein einzelnes Tirggersignal gewartet werden, da dieses Verhalten technisch dem von is_StopLiveVideo() entspricht. In einer kommenden Version soll dies aber möglich sein.

Der Zugriff auf den Kameraspeicher erfolgt über die Funktion is_ImageBuffer().

is_ImageBuffer()

IS_IMGBUF_DEVMEM_CMD_GET_AVAILABLE_ITERATIONS

Gibt die Anzahl der Iterationen zurück, die momentan im Kameraspeicher vorhanden sind.

IS_IMGBUF_DEVMEM_CMD_GET_ITERATION_INFO

Gibt Informationen über eine spezielle Iteration zurück, z. B. die Anzahl der enthaltenen Bilder.

IS_IMGBUF_DEVMEM_CMD_TRANSFER_IMAGE

Überträgt ein Bild aus einer Iteration im Kameraspeicher in den Benutzerpuffer im PC.

IS_IMGBUF_DEVMEM_CMD_RELEASE_ITERATIONS

Gibt alle Iterationen bis zur angegebenen ID im Kameraspeicher frei.

Beispiel

INT nRet = IS_SUCCESS;
 
ID_RANGE iterationRange;
 
/* Get range of all available iterations */
nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_GET_AVAILABLE_ITERATIONS, &iterationRange,
                    sizeof(iterationRange));
if (nRet == IS_SUCCESS)
{
  UINT u32FirstIterationID = iterationRange.u32First;
  UINT u32LastIterationID = iterationRange.u32Last;
 
  /* Get infos about the first iteration */
  IMGBUF_ITERATION_INFO iterationInfo;
  iterationInfo.u32IterationID = u32FirstIterationID;
 
  INT nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_GET_ITERATION_INFO, &iterationInfo,
                            sizeof(iterationInfo));
  if (nRet == IS_SUCCESS)
  {
      UINT u32FirstImageID = iterationInfo.rangeImageID.u32First;
      UINT u32LastImageID = iterationInfo.rangeImageID.u32Last;
 
      /* Transfer last image to active user buffer */
      IMGBUF_ITEM bufferItem;
      bufferItem.u32ImageID     = u32LastImageID;
      bufferItem.u32IterationID = u32FirstIterationID;
 
      nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_TRANSFER_IMAGE, (void*)&bufferItem,
                            sizeof(bufferItem));
  }
 
  /* Release all iterations up to the last available iteration */
  nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_RELEASE_ITERATIONS, (void*)
                        &iterationRange.u32Last, sizeof(iterationRange.u32Last));
}

Pre-Trigger-Modus (die Kamera läuft im "Freerun")

is_CaptureVideo(): Die Kamera wartet kontinuierlich auf Triggersignale. Jedes Triggersgnal erzeugt eine weitere Iteration. Wenn der Kameraspeicher voll ist, werden weitere Triggersignale ignoriert und es kommt zu Fehl-Triggern. Im Treiber 4.20 ist nach is_StopLiveVideo() kein Zugriff auf den Kameraspeicher mehr möglich. Im Pre-Trigger-Modus kann auch auf Bilder zugegriffen werden, die vor dem Triggersignal im Kameraspeicher gespeichert wurden.

•m: Triggerburst-Größe

•nx: Aufgenommene Bilder seit der letzten Iteration oder seit dem Start. Die Anzahl der Bilder kann über dwImageBuffers bzw. dwImageBuffersInUse in der Struktur UEYEIMAGEINFO (siehe is_GetImageInfo()) erfragt werden.

Abb. 188: Iterationen im Kameraspeicher (Pre-Tigger-Modus)

Abb. 188: Iterationen im Kameraspeicher (Pre-Tigger-Modus)

Post-Trigger-Modus (die Kamera läuft im "Snapshot-Modus")

is_CaptureVideo(): Die Kamera wartet kontinuierlich auf Triggersignale. Jedes Triggersignal erzeugt eine weitere Iteration. Wenn der Kameraspeicher voll ist, werden weitere Triggersignale ignoriert und es kommt zu Fehltriggern. Im Treiber 4.20 ist nach is_StopLiveVideo() kein Zugriff auf den Kameraspeicher mehr möglich.

•m: Triggerburst-Größe

Abb. 189: Iterationen im Kameraspeicher (Post-Tigger-Modus)

Abb. 189: Iterationen im Kameraspeicher (Post-Tigger-Modus)