ESCAPI problems
Posted: Tue Jan 16, 2007 5:16 pm
				
				Anyone had any luck with ESCAPI 2.0 for easy webcam capture on Windows?
http://sol.gfxile.net/code.html
I wrote this code (just place it in the same folder as escapi.dll from the escapi20.zip archive and make sure your camera is plugged in!), and all the function calls seem to work, but I just get black data (all zeroes) from the webcam after capture:
I used the setupESCAPI() function from escapi.cpp in the archive as a guide to setting things up, as well as using the "simplest" example as a guide to capturing. The only thing I can imagine is that something's going wrong with the initCOM call... I'll never understand COM stuff as long as I live.
This also fails in BlitzMax (see my post here: http://www.blitzmax.com/Community/posts.php?topic=66505), yet the provided binary examples work fine, and it's just a simple C-style API.
Anyone got any ideas as to what might be wrong?
(Heh, spot the forum bug with ? in URLs!)
[/url]
			http://sol.gfxile.net/code.html
I wrote this code (just place it in the same folder as escapi.dll from the escapi20.zip archive and make sure your camera is plugged in!), and all the function calls seem to work, but I just get black data (all zeroes) from the webcam after capture:
Code: Select all
; PB4...
Structure SimpleCapParams
	mTargetBuf.l	; Must be at least mWidth * mHeight * SizeOf(int) of size! 
	mWidth.l
	mHeight.l
EndStructure
camnum = 0 ; First device found; adjust to suit...
esc = OpenLibrary (#PB_Any, "escapi.dll")
If esc
	
	initCOM = GetFunction (esc, "initCOM")
	countCaptureDevices = GetFunction (esc, "countCaptureDevices")
	initCapture = GetFunction (esc, "initCapture")
	deinitCapture = GetFunction (esc, "deinitCapture")
	doCapture = GetFunction (esc, "doCapture")
	isCaptureDone = GetFunction (esc, "isCaptureDone")
	getCaptureDeviceName = GetFunction (esc, "getCaptureDeviceName")
	ESCAPIDLLVersion = GetFunction (esc, "ESCAPIDLLVersion")
	CallFunctionFast (initCOM)
	Debug "ESCAPIDLLVersion:"
	Debug "$" + Hex (CallFunctionFast (ESCAPIDLLVersion))
	Debug ""
	
	Debug "countCaptureDevices:"
	Debug CallFunctionFast (countCaptureDevices)
	Debug ""
	cam$ = Space (#MAX_PATH)
	CallFunctionFast (getCaptureDeviceName, camnum, @cam$, #MAX_PATH)
	Debug cam$
	Debug ""
	scp.SimpleCapParams
	scp\mWidth = 320
	scp\mHeight = 240
	scp\mTargetBuf = AllocateMemory (scp\mWidth * scp\mHeight * 4)
	
	Debug "initCapture:"
	Debug CallFunctionFast (initCapture, camnum, @scp)
	Debug ""
	For a = 1 To 10
		CallFunctionFast (doCapture, camnum)
		Repeat
			Delay (1)
		Until CallFunctionFast (isCaptureDone, camnum)
	Next
	Debug "Size:"
	Debug scp\mWidth
	Debug scp\mHeight
	
	image = CreateImage (#PB_Any, scp\mWidth, scp\mHeight)
	StartDrawing (ImageOutput (image))
	
	For y = 0 To scp\mHeight - 1
		For x = 0 To scp\mWidth - 1
			Plot (x, y, scp\mTargetBuf + count)
			count = count + 1
		Next
	Next
	
	StopDrawing ()
	CallFunctionFast (deinitCapture, camnum)
	CloseLibrary (esc)
	
EndIf
window = OpenWindow (#PB_Any, 320, 200, 320, 200, "ESCAPI 2")
CreateGadgetList (WindowID (window))
ImageGadget (#PB_Any, 0, 0, 320, 200, ImageID (image))
Repeat
Until WaitWindowEvent () = #PB_Event_CloseWindow
This also fails in BlitzMax (see my post here: http://www.blitzmax.com/Community/posts.php?topic=66505), yet the provided binary examples work fine, and it's just a simple C-style API.
Anyone got any ideas as to what might be wrong?
(Heh, spot the forum bug with ? in URLs!)
[/url]