diff options
| author | morefigs <morefigs@gmail.com> | 2014-04-11 19:09:18 +1000 |
|---|---|---|
| committer | morefigs <morefigs@gmail.com> | 2014-04-11 19:09:18 +1000 |
| commit | 23a05652c2faabb82146b0c6e156ee4a002dd9c7 (patch) | |
| tree | a0a49481c2e2320bfa55b05dc8dd0963e9f54976 | |
| parent | 21bff7548d17a3896ce5d7397f212a7ddca10fca (diff) | |
| parent | 68913a2c8ae67f3fef4d8d0a84e8ed96162cb852 (diff) | |
| download | pymba-23a05652c2faabb82146b0c6e156ee4a002dd9c7.tar.gz pymba-23a05652c2faabb82146b0c6e156ee4a002dd9c7.zip | |
Merge pull request #3 from jayich/master
Docstring edits. waitFrameCapture returns the errorCode.
| -rw-r--r-- | vimbaframe.py | 180 |
1 files changed, 106 insertions, 74 deletions
diff --git a/vimbaframe.py b/vimbaframe.py index e97360e..aa902a3 100644 --- a/vimbaframe.py +++ b/vimbaframe.py @@ -6,84 +6,116 @@ from vimbadll import VimbaC_MemoryBlock from ctypes import * class VimbaFrame(object): - """ - A Vimba frame. - """ - def __init__(self, camera): - self._camera = camera - self._handle = camera.handle - - # get frame sizes - self.payloadSize = self._camera.PayloadSize - self.width = self._camera.Width - self.height = self._camera.Height - - # frame structure - self._frame = structs.VimbaFrame() - - def announceFrame(self): - """ - Announce frames to the API that may be queued for frame capturing later. - """ - # size of expected frame - sizeOfFrame = self.payloadSize - - # keep this reference to keep block alive for life of frame - self._cMem = VimbaC_MemoryBlock(sizeOfFrame) - # set buffer to have length of expected payload size - self._frame.buffer = self._cMem.block - - # set buffer size to expected payload size - self._frame.bufferSize = sizeOfFrame - - errorCode = VimbaDLL.frameAnnounce(self._handle, + """ + A Vimba frame. + """ + def __init__(self, camera): + self._camera = camera + self._handle = camera.handle + + # get frame sizes + self.payloadSize = self._camera.PayloadSize + self.width = self._camera.Width + self.height = self._camera.Height + + # frame structure + self._frame = structs.VimbaFrame() + + + def announceFrame(self): + """ + Announce frames to the API that may be queued for frame capturing later. + + Runs VmbFrameAnnounce + + Should be called after the frame is created. Call startCapture + after this method. + """ + # size of expected frame + sizeOfFrame = self.payloadSize + + # keep this reference to keep block alive for life of frame + self._cMem = VimbaC_MemoryBlock(sizeOfFrame) + # set buffer to have length of expected payload size + self._frame.buffer = self._cMem.block + + # set buffer size to expected payload size + self._frame.bufferSize = sizeOfFrame + + errorCode = VimbaDLL.frameAnnounce(self._handle, byref(self._frame), sizeof(self._frame)) - if errorCode != 0: - raise VimbaException(errorCode) - - def revokeFrame(self): - """ - Revoke a frame from the API. - """ - errorCode = VimbaDLL.frameRevoke(self._handle, + + if errorCode != 0: + raise VimbaException(errorCode) + + + def revokeFrame(self): + """ + Revoke a frame from the API. + """ + errorCode = VimbaDLL.frameRevoke(self._handle, byref(self._frame)) - if errorCode != 0: - raise VimbaException(errorCode) - - def queueFrameCapture(self): - """ - Queue frames that may be filled during frame capturing. - """ - errorCode = VimbaDLL.captureFrameQueue(self._handle, + + if errorCode != 0: + raise VimbaException(errorCode) + + + def queueFrameCapture(self): + """ + Queue frames that may be filled during frame capturing. + Runs VmbCaptureFrameQueue + + Call after announceFrame and startCapture + """ + errorCode = VimbaDLL.captureFrameQueue(self._handle, byref(self._frame), None) # callback not implemented, callback example in pico? - if errorCode != 0: - raise VimbaException(errorCode) - - def waitFrameCapture(self, timeout = 2000): - """ - Wait for a queued frame to be filled (or dequeued). - """ - errorCode = VimbaDLL.captureFrameWait(self._handle, + if errorCode != 0: + raise VimbaException(errorCode) + + + def waitFrameCapture(self, timeout = 2000): + """ + Wait for a queued frame to be filled (or dequeued). Returns Errorcode + upon completion. + Runs VmbCaptureFrameWait + + timeout - int, milliseconds default(timeout, 2000) + + Call after an acquisition command + """ + errorCode = VimbaDLL.captureFrameWait(self._handle, byref(self._frame), timeout) - if errorCode != 0: - raise VimbaException(errorCode) - - # custom method for simplified usage - def getBufferByteData(self): - """ - Retrieve buffer data in a useful format. - - :returns: array -- buffer data. - """ - - # cast frame buffer memory contents to a usable type - data = cast(self._frame.buffer, - POINTER(c_ubyte * self.payloadSize)) - - # make array of c_ubytes from buffer - array = (c_ubyte * self.height * self.width).from_address(addressof(data.contents)) - - return array + + # errorCode to be processed by the end user for this function. + # Prevents system for breaking for example on a hardware trigger + # timeout + #if errorCode != 0: + #raise VimbaException(errorCode) + return errorCode + + # custom method for simplified usage + def getBufferByteData(self): + """ + Retrieve buffer data in a useful format. + + :returns: array -- buffer data. + """ + + # cast frame buffer memory contents to a usable type + data = cast(self._frame.buffer, + POINTER(c_ubyte * self.payloadSize)) + + # make array of c_ubytes from buffer + + array = (c_ubyte * self.height * self.width).from_address(addressof(data.contents)) + + return array + + + + + + |
