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

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

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

Beitrag 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...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

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

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten