Seite 2 von 2

Re: Capture Include (Webcams, DVB-T ...)

Verfasst: 04.01.2011 14:20
von ts-soft
dige hat geschrieben:Boaaaah! Mein erster Bluescreen unter Win7Pro!!
Wollte testen ob das Framework mit einer Terratec
Cinergy DVB-T zusammenarbeitet. Das mag die
scheinbar nicht und schafft es das komplette
System ins Nirvana zu reissen...
Wenn Du das doch noch schaffst, wäre schon wenn Du den Source mal postest,
vielleicht kann ich es dann auf meinen TV dongle ummünzen.

Gruß
Thomas

Re: Capture Include (Webcams, DVB-T ...)

Verfasst: 04.01.2011 16:16
von dige
Ich habe nur das pbi inkl. Demo gestartet und vermutlich
wurde dann versucht die Karte zu initialisieren und deren
Treiber haben den BOD hinbekommen...

Re: Capture Include (Webcams, DVB-T ...)

Verfasst: 04.01.2011 16:57
von ts-soft
Bei der Demo sehe ich nur nen Fenster kurz aufpoppen und dann wars das auch.
Verstanden hab ich den Code auch nicht, wo ich was einstelle, damit evtl. TV kommt.

Gruß
Thomas

Re: Capture Include (Webcams, DVB-T ...)

Verfasst: 04.01.2011 19:17
von PureLust
@cxAlex:
Unter Win-XP mit Logitech USB-WebCam funktioniert's hier einwandfrei.
Echt 'ne nette und hilfreiche Include - Thx (auch an Jilocasin). :allright:

Auf meinem Notebook mit Win7-64Bit und build-in WebCam (standard Windows-Treiber) funnzt es jedoch nicht.

@Thomas:
Wie oben beschrieben funnzt es bei mir mit einer buid-in WebCam auf'm Notebook auch nicht.
Auch bei mir poppte nur das Fenster kurz auf und das wars.
Um zu sehen wo's genau hakt, hab ich die Capture_Init() mal mit ein paar Debugs und Infos zu den verfügbaren Treibern ausgestattet.
Mit der build-in Cam bekomme ich schon beim connect zum Treiber einen Fehler.
(Den gleichen Fehler bekomme ich allerdings auch unter WinXP, wenn die Logitech-Cam nicht angeschlossen ist.)

Kannst ja mal schauen wo's bei Dir hakt:

Code: Alles auswählen

Procedure Capture_Init(WindowID, view_x = #Null, view_y = #Null, view_width = #Null, view_height = #Null, Resolution$ = "640x480")
	Protected RtVar
	Shared WCCapture
	Protected Result
	
	Protected wDriverIndex.w
   Protected cbName.l	= 256
   Protected cbVer.l	= 256
	Protected *lpszName	= AllocateMemory(cbName)
   Protected *lpszVer	= AllocateMemory(cbVer)
	
	With WCCapture
		
		\avicap32 = OpenLibrary(#PB_Any, "avicap32.dll")
		
		If Not \avicap32
			Debug "Could not open Library: avicap32.dll"
		EndIf
		
		If \avicap32
			
			*lpszName = AllocateMemory(256)
			*lpszVer  = AllocateMemory(256)
			
			For wDriverIndex = 0 To 9	
				Result = CallFunction(\avicap32, "capGetDriverDescriptionA", wDriverIndex, *lpszName, cbName, *lpszVer, cbVer)
				
				If Result
					Debug "Driver Nr."+Str(wDriverIndex)+" :"
					Debug PeekS(*lpszName, cbName)
					Debug PeekS(*lpszVer, cbVer)
				Else
					Break
				EndIf
			Next
			Debug ""
			
			\hWndC = CallFunction(\avicap32, "capCreateCaptureWindowA", #Null, #WS_CHILD|#WS_VISIBLE, view_x, view_y, view_width, view_height, WindowID, 1)
			
			If Not \hwndC
				Debug "Could not create CaptureWindowA."
			EndIf
			
			If \hWndC
				If Not SendMessage_(\hWndC, #WM_CAP_DRIVER_CONNECT, 0, 0)	: Debug "Could not connect to Driver."	: EndIf
				If Not SendMessage_(\hWndC, #WM_CAP_SET_PREVIEW, #True, 0)	: Debug "Could not set Preview."			: EndIf
				If Not SendMessage_(\hWndC, #WM_CAP_SET_PREVIEWRATE, 2, 0)	: Debug "Could not set PreviewRate."	: EndIf
				If Not SendMessage_(\hWndC, #WM_CAP_SET_SCALE, #True, 0)		: Debug "Could not set Scale."			: EndIf
				If Not SendMessage_(\hWndC, #WM_CAP_SET_OVERLAY, #True, 0)	: Debug "Could not set Overlay."			: EndIf
				If Not SendMessage_(\hWndC, #WM_CAP_GET_VIDEOFORMAT, SizeOf(VIDEOHDR), @\psVideoFormat)	: Debug "Could not receive VideoFormat."	: EndIf
				
				; Standard - Auflösung
				Resolution$ = LCase(Resolution$)
				\psVideoFormat\bmiHeader\biWidth = Val(Trim(StringField(Resolution$, 1, "x")))
				\psVideoFormat\bmiHeader\biHeight = Val(Trim(StringField(Resolution$, 2, "x")))
				
				If (Not view_width) Or (Not view_height)
					\ViewData\right = \psVideoFormat\bmiHeader\biWidth
					\ViewData\bottom = \psVideoFormat\bmiHeader\biHeight
				EndIf
				
				; Wir ändern hier also mal hübsch das Format, in dem wir das Bild gerne hätten.
				; Standardmäßig ist es oft bei Webcams nur in 16 Bit, dann müssten wir soviel herumrechnen und könnten es uns nicht mit SetDIBits einfach machen.
				; Das gesetzte Videoformat wird auch nach Programmende beibehalten, d.h. beim nächsten Start wird die Vorschau von avicap32 bereits hier oben ein 24-Bit Bild liefern!
				
				\psVideoFormat\bmiHeader\biBitCount = 24
				\psVideoFormat\bmiHeader\biCompression = #BI_RGB
				\psVideoFormat\bmiHeader\biSizeImage = #False
				\psVideoFormat\bmiHeader\biClrUsed = #False
				\psVideoFormat\bmiHeader\biClrImportant = #False
				
				Result = SendMessage_(\hWndC, #WM_CAP_SET_VIDEOFORMAT, SizeOf(VIDEOHDR), @\psVideoFormat) ; Videoformat setzen
				
				If Not Result
					Debug "Could not set VideoFormat."
				EndIf
			
				If Result
					\ViewData\top = view_y
					\ViewData\bottom = view_height
					\ViewData\left = view_x
					\ViewData\right = view_width
					
					\WinID = WindowID
					RtVar = #True
				Else
					
					SendMessage_(\hWndC, #WM_CAP_STOP, 0, 0)
					SendMessage_(\hWndC, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
					DestroyWindow_(\hWndC)
					CloseLibrary(\avicap32)
				EndIf
				
			Else
				CloseLibrary(\avicap32)
			EndIf
		EndIf
		
		If Not RtVar
			\avicap32 = #Null  
		EndIf
	EndWith
	
	ProcedureReturn RtVar
EndProcedure
Treiber unter WinXP-32Bit, bei dem es funktioniert:
. . => Microsoft WDM Image Capture (Win32)
. . => Version: 5.1.2600.5512

Treiber unter Win7-64Bit, bei dem es nicht funktioniert:
. . => Microsoft WDM Image Capture (Win32)
. . => Version: 6.1.7600.16385

Gruß, PL.

Re: Capture Include (Webcams, DVB-T ...)

Verfasst: 04.01.2011 19:54
von ts-soft
@PureLust

Ich hab keine WebCam, ich will DVB-T sehen, aber ich sehe nicht mal eine Möglichkeit da irgendwo was
einzustellen, das er DVB-T nimmt. Nur im Titel steht da was von.

Von alleine wird der mir da nie was anzeigen, ausserdem muß ich ihm doch auch die frequenz, transponder,
ausrichtung usw. übergeben können.

Ich hab keine Ahnung, wie man das für DVB-T nutzen könnte.