import os, glob, subprocess\r
import wx\r
\r
+try:\r
+ #Try to find the OpenCV library for video capture.\r
+ from opencv import cv\r
+ from opencv import highgui\r
+except:\r
+ cv = None\r
+\r
try:\r
#Use the vidcap library directly from the VideoCapture package. (Windows only)\r
# http://videocapture.sourceforge.net/\r
except:\r
win32vidcap = None\r
\r
-#TODO: We can also use OpenCV for camera capture. This should be cross platform compatible.\r
-\r
class webcam(object):\r
def __init__(self):\r
- if win32vidcap != None:\r
+ if cv != None:\r
+ self._cam = highgui.cvCreateCameraCapture(-1)\r
+ elif win32vidcap != None:\r
self._cam = win32vidcap.new_Dev(0, False)\r
#self._cam.displaycapturefilterproperties()\r
#self._cam.displaycapturepinproperties()\r
self._bitmap = None\r
\r
def takeNewImage(self):\r
- buffer, width, height = self._cam.getbuffer()\r
- wxImage = wx.EmptyImage(width, height)\r
- wxImage.SetData(buffer[::-1])\r
- if self._bitmap != None:\r
- del self._bitmap\r
- self._bitmap = wxImage.ConvertToBitmap()\r
- del wxImage\r
- del buffer\r
+ if cv != None:\r
+ frame = cv.QueryFrame(self._cam)\r
+ cv.CvtColor(frame, frame, cv.CV_BGR2RGB)\r
+ self._bitmap = wx.BitmapFromBuffer(frame.width, frame.height, frame.imageData)\r
+ elif win32vidcap != None:\r
+ buffer, width, height = self._cam.getbuffer()\r
+ wxImage = wx.EmptyImage(width, height)\r
+ wxImage.SetData(buffer[::-1])\r
+ if self._bitmap != None:\r
+ del self._bitmap\r
+ self._bitmap = wxImage.ConvertToBitmap()\r
+ del wxImage\r
+ del buffer\r
\r
if self._doTimelaps:\r
filename = os.path.normpath(os.path.join(os.path.split(__file__)[0], "../__tmp_snap", "__tmp_snap_%04d.jpg" % (self._snapshotCount)))\r
\r
def endTimelaps(self):\r
if self._doTimelaps:\r
- ffmpeg = os.path.normpath(os.path.join(os.path.split(__file__)[0], "../ffmpeg.exe"))\r
+ if platform.system() == "Windows":\r
+ ffmpeg = os.path.normpath(os.path.join(os.path.split(__file__)[0], "../ffmpeg.exe"))\r
+ else:\r
+ ffmpeg = os.path.normpath(os.path.join(os.path.split(__file__)[0], "../ffmpeg"))\r
basePath = os.path.normpath(os.path.join(os.path.split(__file__)[0], "../__tmp_snap", "__tmp_snap_%04d.jpg"))\r
subprocess.call([ffmpeg, '-r', '12.5', '-i', basePath, '-vcodec', 'mpeg2video', '-pix_fmt', 'yuv420p', '-r', '25', '-y', '-b:v', '1500k', '-f', 'vob', self._timelapsFilename])\r
self._doTimelaps = False\r
if port == 'AUTO':
programmer = stk500v2.Stk500v2()
self._log("Serial port list: %s" % (str(serialList())))
- for port in serialList():
+ for p in serialList():
try:
- self._log("Connecting to: %s" % (port))
- programmer.connect(port)
+ self._log("Connecting to: %s" % (p))
+ programmer.connect(p)
self._serial = programmer.leaveISP()
- profile.putPreference('serial_port_auto', port)
+ profile.putPreference('serial_port_auto', p)
break
except ispBase.IspError as (e):
- self._log("Error while connecting to %s: %s" % (port, str(e)))
+ self._log("Error while connecting to %s: %s" % (p, str(e)))
pass
except:
- self._log("Unexpected error while connecting to serial port: %s %s" % (port, getExceptionString()))
+ self._log("Unexpected error while connecting to serial port: %s %s" % (p, getExceptionString()))
programmer.close()
elif port == 'VIRTUAL':
self._serial = VirtualPrinter()
self._serial = Serial(port, baudrate, timeout=2)
except:
self._log("Unexpected error while connecting to serial port: %s %s" % (port, getExceptionString()))
+ if self._serial == None:
+ self._log("Failed to open serial port (%s)" % (port))
+ self._errorValue = 'Failed to autodetect serial port.'
+ self._changeState(self.STATE_ERROR)
+ return
self._log("Connected to: %s, starting monitor" % (self._serial))
if baudrate == 0:
self._changeState(self.STATE_DETECT_BAUDRATE)