Verwenden des vom Grabber allokierten DMA Speichers unter IMPACT

mvIMPACT Go!, mvIMPACT S, mvIMPACT SDK

Hierzu muss der DMA Speicher des Frame Grabbers entsprechend gross angelegt werden
um für die ganze Sequenz Platz zu bieten. Dies kann mit dem Tool "SetDMA.exe" gemacht werden.

Unter Impact S kann unter "Acquisition options -> Sequence tab" die Option
"using device memory if possible" verwendet werden. Allerdings wird dann effektiv die doppelte
Menge Speicher benötigt, da Impact die Daten nach Aufnahme noch in einen eigenen Buffer kopieren muss.

Mit dem SDK kann wie folgt vorgegangen werden:

Sequenz in DMA Speicher:
------------------------
 
// device öffnen
 DEV_HANDLE device = IPL_DONT_CARE;
    DEV_Open(&device, "matrixvision.ddc");
 
    // Abfrage, wieviel Bilder in momentan angelegten DMA Speicher passen
 IPL_LONG dmaframes = 0;
 DEV_InquireCaps(device, (DEV_CAPSTYPE)DEV_NUMBER_FRAMES, &dmaframes);
 
    // momentane Grab Auflösung abfragen
 IPL_LONG capwidth=0, capheight=0;
 DEV_InquireCaps(device, DEV_CAPWINDOW_WIDTH, &capwidth);
 DEV_InquireCaps(device, DEV_CAPWINDOW_HEIGHT, &capheight);
 
    // IPL Buffer allokieren
 IPL_BUFHANDLE buffer = IPL_DONT_CARE;
 IPL_BufAlloc(&buffer, capwidth, capheight, 1, 1, dmaframes, IPL_DTUCHAR, IPL_IMAGEBUF, NULL);
 
 // Device mitteilen, dass es DMA Speicher verwenden soll
 IPL_LONG usedma = 1;
 DEV_ControlCaps(device, DEV_FORCE_ACQUIRE_DEVMEM, &usedma);
 
    // Sequenz aufnehmen
    DEV_Grab(device, &buffer);
 
 // close device
    DEV_Close(device);
 
 // free allocated buffers
 IPL_BufFree(buffer);

Auch hier gilt, dass man effiktiv die doppelte Menge RAM benötigt.

Zurück