Platforms to show: All Mac Windows Linux Cross-Platform
/Cameras/CanonEOSDigital/Example
Required plugins for this example: MBS Cameras Plugin, MBS Images Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Cameras/CanonEOSDigital/Example
This example is the version from Wed, 12th Mar 2024.
Project "Example.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Löschen"
Const kFileQuit = "Beenden"
Const kFileQuitShortcut = ""
EventHandler Sub Close()
if inited then
// you can have trouble if you don't cleanup properly
EDSModuleMBS.Terminate
end if
End EventHandler
EventHandler Sub Open()
DebugCopyFrameworks
dim file as FolderItem
// find DLL in application folder
if TargetWin32 then
file = FindFile("EDSDK.dll")
elseif TargetMacOS then
// find Framework in inside frameworks folder in app bundle
dim frameworks as FolderItem = app.ExecutableFile.Parent.parent.Child("Frameworks")
file = frameworks.Child("EDSDK.framework")
else
MsgBox "not supported."
end if
// pass true for version 2.x of SDK or false for 3.x
dim isVersion2 as Boolean = true
// load framework or DLL
if EDSModuleMBS.LoadLibrary(file, isVersion2) then
EDSModuleMBS.Initialize
dim e as integer = EDSModuleMBS.Lasterror
if e = 0 then
Inited = true
// okay, so wait for cameras
cah = new MyEdsCameraAddedHandlerMBS
MainWindow.OpenDevice
else
MsgBox "Failed to initialize: "+str(e)
end if
else
MsgBox "Failed to load library."
end if
End EventHandler
Sub DebugCopyFrameworks()
// for debug mode I used to copy the framework files into the app on startup
// makes debugging much easier!
if DebugBuild and TargetMachO then
dim frameworks as FolderItem = app.ExecutableFile.Parent.parent.Child("Frameworks")
dim f as FolderItem = FindFile("EDSDK.framework")
f.CopyFileTo frameworks
// no longer needed
'f = FindFile("DPP.framework")
'f.CopyFileTo frameworks
end if
End Sub
Function FindFile(name as string) As FolderItem
// Look for file in parent folders from executable on
dim parent as FolderItem = app.ExecutableFile.Parent
while parent<>Nil
dim file as FolderItem = parent.Child(name)
if file<>Nil and file.Exists then
Return file
end if
parent = parent.Parent
wend
End Function
Property Inited As Boolean
Property cah As MyEdsCameraAddedHandlerMBS
End Class
Class MainWindow Inherits Window
Control List Inherits Listbox
ControlInstance List Inherits Listbox
EventHandler Sub Change()
UpdateButton
End EventHandler
EventHandler Sub ExpandRow(row As Integer)
dim v as Variant = me.RowTag(row)
if v isa EdsCameraMBS then
dim camera as EdsCameraMBS = v
camera.OpenSession
dim u as integer = camera.ChildCount-1
CheckError camera
for i as integer = 0 to u
Add camera.Child(i)
next
elseif v isa EdsVolumeMBS then
dim volume as EdsVolumeMBS = v
dim u as integer = volume.ChildCount-1
System.DebugLog "Lasterror: "+str(volume.Lasterror)
for i as integer = 0 to u
add volume.Child(i)
next
elseif v isa EdsDirectoryItemMBS then
dim folder as EdsDirectoryItemMBS = v
dim u as integer = folder.ChildCount-1
System.DebugLog "Lasterror: "+str(folder.Lasterror)
for i as integer = 0 to u
add folder.Child(i)
next
end if
End EventHandler
End Control
Control TakePictureButton Inherits PushButton
ControlInstance TakePictureButton Inherits PushButton
EventHandler Sub Action()
// send take picture command
// set save to host if you don't have a SD card
'camera.SetPropertyDataInt32(camera.kEdsPropID_SaveTo, 0, EDSModuleMBS.kEdsSaveTo_Host)
'CheckError camera
camera.SendCommand camera.kEdsCameraCommand_TakePicture
CheckError camera
End EventHandler
End Control
Control ShowPictureButton Inherits PushButton
ControlInstance ShowPictureButton Inherits PushButton
EventHandler Sub Action()
// download selected file
dim c as EdsDirectoryItemMBS = List.RowTag(List.ListIndex)
dim info as EdsDirectoryItemInfoMBS = c.DirectoryItemInfo
dim file as FolderItem = SpecialFolder.Desktop.Child(info.FileName)
stream = new EdsStreamMBS(file, EdsStreamMBS.kEdsFileCreateDisposition_CreateNew, EdsStreamMBS.kEdsAccess_Write)
// with progress, so we install progress callback
bar.Value = 0
bar.Visible = true
Progress = new MyEdsProgressMBS
stream.SetProgress Progress, c.kEdsProgressOption_Periodically
CheckError c
// run download
c.Download(info.Size, stream)
CheckError c
// tell camera we are done
c.DownloadComplete
CheckError c
// cleanup
stream = nil
bar.Visible = false
// and show file
file.Launch
End EventHandler
End Control
Control bar Inherits ProgressBar
ControlInstance bar Inherits ProgressBar
End Control
Control DeleteFileButton Inherits PushButton
ControlInstance DeleteFileButton Inherits PushButton
EventHandler Sub Action()
// delete a file
dim c as EdsDirectoryItemMBS = List.RowTag(List.ListIndex)
c.DeleteDirectoryItem
CheckError c
List.RemoveRow List.ListIndex
End EventHandler
End Control
Control StartLiveButton Inherits PushButton
ControlInstance StartLiveButton Inherits PushButton
EventHandler Sub Action()
StartLiveView camera
End EventHandler
End Control
Control Timer1 Inherits Timer
ControlInstance Timer1 Inherits Timer
EventHandler Sub Action()
EDSModuleMBS.GetEvent
if EDSModuleMBS.Lasterror <> 0 then
me.Mode = 0
MsgBox "Error "+str(EDSModuleMBS.Lasterror)+": "+GetErrorMessage(EDSModuleMBS.Lasterror)
end if
End EventHandler
End Control
Sub Add(v as EdsDirectoryItemMBS)
if v<>nil then
dim info as EdsDirectoryItemInfoMBS = v.DirectoryItemInfo
if info.IsFolder then
List.AddFolder info.FileName
else
List.AddRow info.FileName
end if
List.RowTag(List.LastIndex) = v
end if
End Sub
Sub Add(v as EdsVolumeMBS)
if v<>nil then
dim info as EdsVolumeInfoMBS = v.VolumeInfo
List.AddFolder info.VolumeLabel
List.RowTag(List.LastIndex) = v
end if
End Sub
Sub Clear()
List.DeleteAllRows
TakePictureButton.Enabled = false
StartLiveButton.Enabled = false
camera = nil
End Sub
Sub OpenDevice()
if camera <> nil then Return // ignore second device
List.DeleteAllRows
dim c as EdsCameraListMBS = EDSModuleMBS.GetCameraList
if c<>Nil then
dim count as integer = c.ChildCount
if count>0 then // we only care for first device
camera = c.Child(0)
camera.OpenSession
// we install a couple of handlers to get events from device
MyEdsObjectEventHandler = new MyEdsObjectEventHandlerMBS(camera, EDSModuleMBS.kEdsObjectEvent_All)
MyEdsCameraStateEventHandler = new MyEdsCameraStateEventHandlerMBS(camera, EDSModuleMBS.kEdsStateEvent_All)
MyEdsPropertyEventHandler = new MyEdsPropertyEventHandlerMBS(camera, EDSModuleMBS.kEdsPropertyEvent_All)
MyEdsPropertyEventHandler.camera = camera
timer1.Mode = 2
dim d as EdsDeviceInfoMBS = camera.DeviceInfo
List.AddFolder d.DeviceDescription
List.RowTag(MainWindow.List.LastIndex) = camera
TakePictureButton.Enabled = true
StartLiveButton.Enabled = true
end if
end if
End Sub
Sub StartLiveView(camera as EdsCameraMBS)
// we set bit for redirecting output to PC, leave other bits as they are.
dim device as UInt32 = camera.GetPropertyDataUInt32(camera.kEdsPropID_Evf_OutputDevice)
CheckError camera
if camera.lasterror = EDSModuleMBS.EDS_ERR_OK then
device = Bitwise.BitOr(device, EDSModuleMBS.kEdsEvfOutputDevice_PC)
camera.SetPropertyDataUInt32 camera.kEdsPropID_Evf_OutputDevice, 0, device
CheckError camera
System.DebugLog "Set Property"
PicWindow.Camera = camera
PicWindow.show
end if
End Sub
Sub StopLiveView(camera as EdsCameraMBS)
// we reset the output device bits to not include PC
dim device as UInt32 = camera.GetPropertyDataUInt32(camera.kEdsPropID_Evf_OutputDevice)
CheckError camera
if camera.lasterror = EDSModuleMBS.EDS_ERR_OK then
dim n as Uint32 = EDSModuleMBS.kEdsEvfOutputDevice_PC
n = Bitwise.OnesComplement(n)
device = Bitwise.BitAnd(device, n)
camera.SetPropertyDataUInt32 camera.kEdsPropID_Evf_OutputDevice, 0, device
end if
End Sub
Sub UpdateButton()
if camera<>nil then
TakePictureButton.enabled = true
StartLiveButton.Enabled = true
else
TakePictureButton.enabled = false
StartLiveButton.Enabled = false
end if
if List.ListIndex >= 0 then
dim v as Variant = List.RowTag(List.ListIndex)
if v isa EdsCameraMBS then
ShowPictureButton.Enabled = false
DeleteFileButton.Enabled = false
elseif v isa EdsDirectoryItemMBS then
dim d as EdsDirectoryItemMBS = v
if d.DirectoryItemInfo.IsFolder then
ShowPictureButton.Enabled = false
DeleteFileButton.Enabled = false
else
ShowPictureButton.Enabled = true
DeleteFileButton.Enabled = true
end if
else
ShowPictureButton.Enabled = false
DeleteFileButton.Enabled = false
end if
else
DeleteFileButton.Enabled = false
ShowPictureButton.Enabled = false
end if
End Sub
Property MyEdsCameraStateEventHandler As MyEdsCameraStateEventHandlerMBS
Property MyEdsObjectEventHandler As MyEdsObjectEventHandlerMBS
Property MyEdsPropertyEventHandler As MyEdsPropertyEventHandlerMBS
Property Progress As MyEdsProgressMBS
Property camera As EdsCameraMBS
Property stream As EdsStreamMBS
End Class
MenuBar MenuBar1
MenuItem FileMenu = "&Ablage"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Bearbeiten"
MenuItem EditUndo = "&Rückgängig"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "&Ausschneiden"
MenuItem EditCopy = "&Kopieren"
MenuItem EditPaste = "&Einfügen"
MenuItem EditClear = "#App.kEditClear"
MenuItem UntitledMenu0 = "-"
MenuItem EditSelectAll = "&Alles auswählen"
End MenuBar
Class MyEdsProgressMBS Inherits EdsProgressMBS
EventHandler Function Progress(Percent as UInt32, byref Cancel as boolean) As integer
// we got progress of a long time operation
MainWindow.bar.Value = Percent
MainWindow.UpdateNow
End EventHandler
End Class
Class MyEdsObjectEventHandlerMBS Inherits EdsObjectEventHandlerMBS
EventHandler Function ObjectChanged(EventCode as integer, obj as EdsBaseMBS) As integer
System.DebugLog CurrentMethodName+": "+str(EventCode)
if EventCode = EDSModuleMBS.kEdsObjectEvent_DirItemRequestTransfer then
// cast object manually by moving handle. Plugin does not know this is a directory item!
dim c as new EdsDirectoryItemMBS
c.Handle = obj.Handle
obj.Handle = 0
'MsgBox d.DirectoryItemInfo.FileName
// download picture without progress
dim info as EdsDirectoryItemInfoMBS = c.DirectoryItemInfo
if info<>nil then
dim file as FolderItem = SpecialFolder.Desktop.Child(info.FileName)
dim stream as new EdsStreamMBS(file, EdsStreamMBS.kEdsFileCreateDisposition_CreateNew, EdsStreamMBS.kEdsAccess_Write)
c.Download(info.Size, stream)
CheckError c
c.DownloadComplete
CheckError c
stream = nil
file.Launch
end if
end if
End EventHandler
End Class
Module Module1
Sub CheckError(o as EdsBaseMBS)
dim n as integer = o.Lasterror
if n = 0 then Return // ok
dim message as string = getErrorMessage(n)
dim m as string = "Error "+str(n)+": "+Message
System.DebugLog m
MsgBox m
End Sub
Function GetErrorMessage(n as integer) As string
dim message as string = "?"
Select case n
case EDSModuleMBS.EDS_ERR_UNIMPLEMENTED
message = "Not implemented"
case EDSModuleMBS.EDS_ERR_INTERNAL_ERROR
message = "Internal error"
case EDSModuleMBS.EDS_ERR_MEM_ALLOC_FAILED
message = "Memory allocation error"
case EDSModuleMBS.EDS_ERR_MEM_FREE_FAILED
message = "Memory release error"
case EDSModuleMBS.EDS_ERR_OPERATION_CANCELLED
message = "Operation canceled"
case EDSModuleMBS.EDS_ERR_INCOMPATIBLE_VERSION
message = "Version error"
case EDSModuleMBS.EDS_ERR_NOT_SUPPORTED
message = "Not supported"
case EDSModuleMBS.EDS_ERR_UNEXPECTED_EXCEPTION
message = "Unexpected exception"
case EDSModuleMBS.EDS_ERR_PROTECTION_VIOLATION
message = "Protection violation"
case EDSModuleMBS.EDS_ERR_MISSING_SUBCOMPONENT
message = "Missing subcomponent"
case EDSModuleMBS.EDS_ERR_SELECTION_UNAVAILABLE
message = "Selection unavailable"
case EDSModuleMBS.EDS_ERR_FILE_IO_ERROR
message = "IO error"
case EDSModuleMBS.EDS_ERR_FILE_TOO_MANY_OPEN
message = "Too many files open"
case EDSModuleMBS.EDS_ERR_FILE_NOT_FOUND
message = "File does not exist"
case EDSModuleMBS.EDS_ERR_FILE_OPEN_ERROR
message = "Open error"
case EDSModuleMBS.EDS_ERR_FILE_CLOSE_ERROR
message = "Close error"
case EDSModuleMBS.EDS_ERR_FILE_SEEK_ERROR
message = "Seek error"
case EDSModuleMBS.EDS_ERR_FILE_TELL_ERROR
message = "Tell error"
case EDSModuleMBS.EDS_ERR_FILE_READ_ERROR
message = "Read error"
case EDSModuleMBS.EDS_ERR_FILE_WRITE_ERROR
message = "Write error"
case EDSModuleMBS.EDS_ERR_FILE_PERMISSION_ERROR
message = "Permission error"
case EDSModuleMBS.EDS_ERR_FILE_DISK_FULL_ERROR
message = "Disk full"
case EDSModuleMBS.EDS_ERR_FILE_ALREADY_EXISTS
message = "File already exists"
case EDSModuleMBS.EDS_ERR_FILE_FORMAT_UNRECOGNIZED
message = "Format error"
case EDSModuleMBS.EDS_ERR_FILE_DATA_CORRUPT
message = "Invaliddata"
case EDSModuleMBS.EDS_ERR_FILE_NAMING_NA
message = "File naming error"
case EDSModuleMBS.EDS_ERR_DIR_NOT_FOUND
message = "Directory does not exist"
case EDSModuleMBS.EDS_ERR_DIR_IO_ERROR
message = "I/O error"
case EDSModuleMBS.EDS_ERR_DIR_ENTRY_NOT_FOUND
message = "No file in directory"
case EDSModuleMBS.EDS_ERR_DIR_ENTRY_EXISTS
message = "File in directory"
case EDSModuleMBS.EDS_ERR_DIR_NOT_EMPTY
message = "Directory full"
case EDSModuleMBS.EDS_ERR_PROPERTIES_UNAVAILABLE
message = "Property (and additional property information) unavailable"
case EDSModuleMBS.EDS_ERR_PROPERTIES_MISMATCH
message = "Property mismatch"
case EDSModuleMBS.EDS_ERR_PROPERTIES_NOT_LOADED
message = "Property not loaded"
case EDSModuleMBS.EDS_ERR_INVALID_PARAMETER
message = "Invalid function parameter"
case EDSModuleMBS.EDS_ERR_INVALID_HANDLE
message = "Handle error"
case EDSModuleMBS.EDS_ERR_INVALID_POINTER
message = "Pointer error"
case EDSModuleMBS.EDS_ERR_INVALID_INDEX
message = "Index error"
case EDSModuleMBS.EDS_ERR_INVALID_LENGTH
message = "Length error"
case EDSModuleMBS.EDS_ERR_INVALID_FN_POINTER
message = "FN pointer error"
case EDSModuleMBS.EDS_ERR_INVALID_SORT_FN
message = "Sort FN error"
case EDSModuleMBS.EDS_ERR_DEVICE_NOT_FOUND
message = "Device not found"
case EDSModuleMBS.EDS_ERR_DEVICE_BUSY
message = "Device busy Note: If a device busy error occurs, reissue the command after a while. The camera will become unstable."
case EDSModuleMBS.EDS_ERR_DEVICE_INVALID
message = "Device error"
case EDSModuleMBS.EDS_ERR_DEVICE_EMERGENCY
message = "Device emergency"
case EDSModuleMBS.EDS_ERR_DEVICE_MEMORY_FULL
message = "Device memory full"
case EDSModuleMBS.EDS_ERR_DEVICE_INTERNAL_ERROR
message = "Internal device error"
case EDSModuleMBS.EDS_ERR_DEVICE_INVALID_PARAMETER
message = "Device parameter invalid"
case EDSModuleMBS.EDS_ERR_DEVICE_NO_DISK
message = "No disk"
case EDSModuleMBS.EDS_ERR_DEVICE_DISK_ERROR
message = "Disk error"
case EDSModuleMBS.EDS_ERR_DEVICE_CF_GATE_CHANGED
message = "The CF gate has been changed"
case EDSModuleMBS.EDS_ERR_DEVICE_DIAL_CHANGED
message = "The dial has been changed"
case EDSModuleMBS.EDS_ERR_DEVICE_NOT_INSTALLED
message = "Device not installed"
case EDSModuleMBS.EDS_ERR_DEVICE_STAY_AWAKE
message = "Device connected in awake mode"
case EDSModuleMBS.EDS_ERR_DEVICE_NOT_RELEASED
message = "Device not released"
case EDSModuleMBS.EDS_ERR_STREAM_IO_ERROR
message = "Stream I/O error"
case EDSModuleMBS.EDS_ERR_STREAM_NOT_OPEN
message = "Stream open error"
case EDSModuleMBS.EDS_ERR_STREAM_ALREADY_OPEN
message = "Stream already open"
case EDSModuleMBS.EDS_ERR_STREAM_OPEN_ERROR
message = "Failed to open stream"
case EDSModuleMBS.EDS_ERR_STREAM_CLOSE_ERROR
message = "Failed to close stream"
case EDSModuleMBS.EDS_ERR_STREAM_SEEK_ERROR
message = "Stream seek error"
case EDSModuleMBS.EDS_ERR_STREAM_TELL_ERROR
message = "Stream tell error"
case EDSModuleMBS.EDS_ERR_STREAM_READ_ERROR
message = "Failed to read stream"
case EDSModuleMBS.EDS_ERR_STREAM_WRITE_ERROR
message = "Failed to write stream"
case EDSModuleMBS.EDS_ERR_STREAM_PERMISSION_ERROR
message = "Permission error"
case EDSModuleMBS.EDS_ERR_STREAM_COULDNT_BEGIN_THREAD
message = "Could not start reading thumbnail"
case EDSModuleMBS.EDS_ERR_STREAM_BAD_OPTIONS
message = "Invalid stream option"
case EDSModuleMBS.EDS_ERR_STREAM_END_OF_STREAM
message = "Invalid stream termination"
case EDSModuleMBS.EDS_ERR_COMM_PORT_IS_IN_USE
message = "Port in use"
case EDSModuleMBS.EDS_ERR_COMM_DISCONNECTED
message = "Port disconnected"
case EDSModuleMBS.EDS_ERR_COMM_DEVICE_INCOMPATIBLE
message = "Incompatible device"
case EDSModuleMBS.EDS_ERR_COMM_BUFFER_FULL
message = "Buffer full"
case EDSModuleMBS.EDS_ERR_COMM_USB_BUS_ERR
message = "USB bus error"
case EDSModuleMBS.EDS_ERR_USB_DEVICE_LOCK_ERROR
message = "Failed to lock the UI"
case EDSModuleMBS.EDS_ERR_USB_DEVICE_UNLOCK_ERROR
message = "Failed to unlock the UI"
case EDSModuleMBS.EDS_ERR_STI_UNKNOWN_ERROR
message = "Unknown STI"
case EDSModuleMBS.EDS_ERR_STI_INTERNAL_ERROR
message = "Internal STI error"
case EDSModuleMBS.EDS_ERR_STI_DEVICE_CREATE_ERROR
message = "Device creation error"
case EDSModuleMBS.EDS_ERR_STI_DEVICE_RELEASE_ERROR
message = "Device release error"
case EDSModuleMBS.EDS_ERR_DEVICE_NOT_LAUNCHED
message = "Device startup failed"
case EDSModuleMBS.EDS_ERR_ENUM_NA
message = "Enumeration terminated (there was no suitableenumeration item)"
case EDSModuleMBS.EDS_ERR_INVALID_FN_CALL
message = "Called in a mode when the function could not be used"
case EDSModuleMBS.EDS_ERR_HANDLE_NOT_FOUND
message = "Handle not found"
case EDSModuleMBS.EDS_ERR_INVALID_ID
message = "Invalid ID"
case EDSModuleMBS.EDS_ERR_WAIT_TIMEOUT_ERROR
message = "Timeout"
case EDSModuleMBS.EDS_ERR_SESSION_NOT_OPEN
message = "Session open error"
case EDSModuleMBS.EDS_ERR_INVALID_TRANSACTIONID
message = "Invalid transaction ID"
case EDSModuleMBS.EDS_ERR_INCOMPLETE_TRANSFER
message = "Transfer problem"
case EDSModuleMBS.EDS_ERR_INVALID_STRAGEID
message = "Storage error"
case EDSModuleMBS.EDS_ERR_DEVICEPROP_NOT_SUPPORTED
message = "Unsupported device property"
case EDSModuleMBS.EDS_ERR_INVALID_OBJECTFORMATCODE
message = "Invalid object format code"
case EDSModuleMBS.EDS_ERR_SELF_TEST_FAILED
message = "Failed self-diagnosis"
case EDSModuleMBS.EDS_ERR_PARTIAL_DELETION
message = "Failed in partial deletion"
case EDSModuleMBS.EDS_ERR_SPECIFICATION_BY_FORMAT_UNSUPPORTED
message = "Unsupported format specification"
case EDSModuleMBS.EDS_ERR_NO_VALID_OBJECTINFO
message = "Invalid object information"
case EDSModuleMBS.EDS_ERR_INVALID_CODE_FORMAT
message = "Invalid code format"
'case EDSModuleMBS.EDS_ERR_UNKNOWN_VENDER_CODE
'message = "Unknown vendor code"
case EDSModuleMBS.EDS_ERR_CAPTURE_ALREADY_TERMINATED
message = "Capture already terminated"
case EDSModuleMBS.EDS_ERR_INVALID_PARENTOBJECT
message = "Invalid parent object"
case EDSModuleMBS.EDS_ERR_INVALID_DEVICEPROP_FORMAT
message = "Invalid property format"
case EDSModuleMBS.EDS_ERR_INVALID_DEVICEPROP_VALUE
message = "Invalid property value"
case EDSModuleMBS.EDS_ERR_SESSION_ALREADY_OPEN
message = "Session already open"
case EDSModuleMBS.EDS_ERR_TRANSACTION_CANCELLED
message = "Transaction canceled"
case EDSModuleMBS.EDS_ERR_SPECIFICATION_OF_DESTINATION_UNSUPPORTED
message = "Unsupported destination specification"
case EDSModuleMBS.EDS_ERR_UNKNOWN_COMMAND
message = "Unknown command"
case EDSModuleMBS.EDS_ERR_OPERATION_REFUSED
message = "Operation refused"
case EDSModuleMBS.EDS_ERR_LENS_COVER_CLOSE
message = "Lens cover closed"
case EDSModuleMBS.EDS_ERR_OBJECT_NOTREADY
message = "Image data set not ready for live view"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_AF_NG
message = "Focus failed"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_RESERVED
message = "Reserved"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_MIRROR_UP_NG
message = "Currently configuring mirror up"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_SENSOR_CLEANING_NG
message = "Currently cleaning sensor"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_SILENCE_NG
message = "Currently performing silent operations"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_NO_CARD_NG
message = "Card not installed"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_CARD_NG
message = "Error writing to card"
case EDSModuleMBS.EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG
message = "Card write protected"
end Select
Return Message
End Function
End Module
Class PicWindow Inherits Window
Control Timer1 Inherits Timer
ControlInstance Timer1 Inherits Timer
EventHandler Sub Action()
NextFrame
End EventHandler
End Control
EventHandler Function CancelClose(appQuitting as Boolean) As Boolean
if Camera<>nil then
MainWindow.StopLiveView Camera
end if
End EventHandler
Sub NextFrame()
System.DebugLog "Update live video..."
dim stream as new EdsStreamMBS(0) // memory stream
if stream.Lasterror = EDSModuleMBS.EDS_ERR_OK then
dim image as new EdsEvfImageMBS(stream)
if image.Lasterror = EDSModuleMBS.EDS_ERR_OK then
Camera.DownloadEvfImage image, false
if Camera.Lasterror = EDSModuleMBS.EDS_ERR_OK then
'dim zoom as UInt32 = image.GetPropertyDataUInt32(EdsEvfImageMBS.kEdsPropID_Evf_Zoom)
'dim zoompoint as EdsPointMBS = image.GetPropertyDataPoint(EdsEvfImageMBS.kEdsPropID_Evf_ZoomPosition)
dim p as ptr = stream.Pointer
dim len as UInt32 = stream.Length
System.DebugLog "Got "+str(len)+" bytes."
stream.Seek(0, stream.kEdsSeek_Begin)
dim s as string = stream.Read(len)
System.DebugLog "Read "+str(lenb(s))+" bytes."
self.Backdrop = JPEGStringToPictureMBS(s,true)
else
System.DebugLog "Failed to download image with error "+str(Camera.Lasterror)+": "+GetErrorMessage(Camera.Lasterror)
end if
else
System.DebugLog "Failed to create image with error "+str(image.Lasterror)+": "+GetErrorMessage(image.Lasterror)
end if
else
System.DebugLog "Failed to create memory stream with error "+str(stream.Lasterror)+": "+GetErrorMessage(stream.Lasterror)
end if
End Sub
Property Camera As EdsCameraMBS
End Class
Class MyEdsPropertyEventHandlerMBS Inherits EdsPropertyEventHandlerMBS
EventHandler Function PropertyChanged(PropertyEvent as UInt32, PropertyID as UInt32, Param as UInt32) As integer
System.DebugLog CurrentMethodName
if PropertyID = EdsBaseMBS.kEdsPropID_Evf_OutputDevice then
System.DebugLog "kEdsPropID_Evf_OutputDevice"
dim device as UInt32 = camera.GetPropertyDataUInt32(camera.kEdsPropID_Evf_OutputDevice)
if not Active and BitwiseAnd(device, EDSModuleMBS.kEdsEvfOutputDevice_PC)<>0 then
System.DebugLog "Output To PC started..."
Active = true
PicWindow.timer1.Mode = 2
end if
if Active and BitwiseAnd(device, EDSModuleMBS.kEdsEvfOutputDevice_PC) = 0 then
System.DebugLog "Output To PC stopped..."
'PicWindow.timer1.Mode = 0
Active = false
end if
end if
End EventHandler
Property Active As Boolean
Property camera As EdsCameraMBS
End Class
Class MyEdsCameraAddedHandlerMBS Inherits EdsCameraAddedHandlerMBS
EventHandler Function CameraAdded() As integer
MainWindow.OpenDevice
End EventHandler
End Class
Class MyEdsCameraStateEventHandlerMBS Inherits EdsCameraStateEventHandlerMBS
EventHandler Function StateChanged(StateEvent as UInt32, EventData as UInt32) As integer
if StateEvent = EDSModuleMBS.kEdsStateEvent_Shutdown then
PicWindow.close
MainWindow.clear
MsgBox "Camera disconnected."
end if
End EventHandler
End Class
Sign
End Sign
End Project
The items on this page are in the following plugins: MBS Cameras Plugin.