WEBCAM?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hallo Folker,

so wie ich das aus dem Include sehen kann steht dort folgendes:

Procedure Start_Click ()
lNFrames = 0
capCaptureSequenceNoFile (lwndC)
EndProcedure

Das heißt soviel, das es nur angezeigt und nichts abgespielt wird.

Procedure capCaptureSequenceNoFile (lwndC)

Will man ein Video speichern, müßte man die Startprocedure umändern.
Ich hätte diese Procedure auch nicht in die include geschrieben, sondern
gleich in meine aktuelle Anwendung eingebaut.

Zum Speichern braucht man wohl die capCaptureSequence (lwnd.l)
Zuvor muss eine Datei, in der die Sequence gespeichert werden soll,
geöffnet werden. Ich habe aber noch nicht alles aus diesem Source ausprobieren können :)

Achja, bei mir läuft die TV-Karte mit den aktuellen Fernsehprogramm als
auch meine Videokamera. Was ich selbst noch an Möglichkeit suche ist,
das auflisten der Geräte ohne Dialog, wie's die Funktionen nur bieten) und
ebenso das direkte auswählen ohne Dialog. Mal schauen, was wir da noch
hinkriegen. Wäre auf jeden Fall ein interessanter Opensource.

Hallo Thomas, du hast vollkommen Recht. Ich habe den Source EinsZuEins
übernommen und nur soweit Änderungen vorgenommen, daß man in
PB4 damit arbeiten kann.

Die Proceduren, welche eine Typenzuweisung haben müssten sicher noch
mittels ProcedureReturn ergänzt werden.
Da die Rückgabewerte lt. SDL nur #False und #True sind,
hat der Kollege das wohl nicht gemacht. Sicher könnte man dafür auch
anstelle Byte ebensogut ein Long nehemen.

Nur soweit wollte ich den Source jetzt nicht verändern.
So kann jeder diesen Source (aus dem englischen Forum) frei ändern und
evt. sogar eine Lib daraus machen.

[Edit]
>In PureBasic ist der Funktions/Procedurename nicht automatisch ein
>Returnwert, wie in einigen anderen Sprachen

Wenn PB in seinen Proceduren automatisch an den Typen und Variablen
eine Funktion oder Procedure unterscheiden könnte, wären wir min. schon
bei PB5 :mrgreen:

[/Edit]


Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

In Pascal gibt es dafür

Funktionen und Prozeduren.

In C muss ja jede Prozedur einen Rückgabewert haben, und wenn es void ist.

Naja, besser ist es auch nicht.
In Pascal war es schon ganz gut gelöst. Dadurch hat man gleich gesehen, ob etwas eine Prozedur mit Wertwiedergabe ist oder nicht.

Allerdings sieht man es bei PB ja durch ProcedureReturn()
und durch den TYP, wenn es mal einen String oder so zurückgeben muss
auch.

Bzw. bei meist mit Void als Rückgabewert gekenntzeichnete Prozeduren.

Am Ende ist es egal.

Allerdings überprüft der Compiler nicht, ob ProcedureReturn benutzt wird, wenn man eine Prozedur mit Wertwiedergabe hat!


>>

Code: Alles auswählen

Procedure Test()
  Paul.s="Test"
EndProcedure

Procedure.s Test2()
  Paul.s="Test2"
EndProcedure

Procedure Test3()
  Paul.s="Test3"
  ProcedureReturn Val(Paul) ; ohne VAL ... Fehler!!!
EndProcedure

Procedure.s Test4()
  Paul.s="Test4"
  ProcedureReturn Paul
EndProcedure

Debug Test()
Debug Test2()
Debug Test3()
Debug Test4()
Ohne benütigtes ProcedureReturn spart man Schreibarbeit, wenn es egal ist, ob es eine Funktion ist oder eine Prozedur.
In PureBasic ist der Funktions/Procedurename nicht automatisch ein
Returnwert, wie in einigen anderen Sprachen. Und ein Byte als Ergebnis
halte ich auch eher für unwahrscheinlich, in ein Long wirds auf jedenfall
hineinpassen.
Tja, dann erklär mir doch mal, wieso das obige Programm ohne Probleme ausführbar ist :?

:roll: :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Ich bin kein Fan von API und habe deshalb sehr wenig ahnung davon!

Jetzt mal ganz langsam zum mitmeißeln:

1. Wie bekomme ich damit die Namen aller Treiber heraus
2. Wie kann ich die Webcam in den Buffer streamen?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
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

Beitrag von ts-soft »

>> Tja, dann erklär mir doch mal, wieso das obige Programm ohne Probleme ausführbar ist :?
Welches meinste den nun? Verstehe ich nicht. Defaultvalue ist Long in PB.
Solange nichts definiert ist, kommt eben eine 0 zurück, ausser wenn String
als Rückkgabe definiert wurde, dann "".

Zu den anderem Code: Das Ergebnis von SendMessage ist immer Long,
warum also in ein Byte speichern, auch wenn nur #True und #False erwartet
werden. Solange ein Byte sich nicht in einer Strukture befindet, spart man
kein einziges Byte gegenüber einem Long, man senkt lediglich die
Ausführungsgeschwindigkeit. Nur wenn man sicherstellen muß, das der Wert
in ein Byte paßt, kann das Sinnvoll sein, also eher sehr selten.
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
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

@ts-soft
Das war eher darauf bezogen, dass du geschrieben hattest:
In PureBasic ist der Funktions/Procedurename nicht automatisch ein
Returnwert, wie in einigen anderen Sprachen. Und ein Byte als Ergebnis
halte ich auch eher für unwahrscheinlich, in ein Long wirds auf jedenfall
hineinpassen.
Aber dadurch das mein Programm läuft, sind ja doch alle Prozeduren automatisch Funktionen. Aber ist auch nicht so wild. Will nicht krümmeln.

:mrgreen: :allright:
Kinder an die Macht http://scratch.mit.edu/
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

Beitrag von ts-soft »

Xaby hat geschrieben:Aber dadurch das mein Programm läuft, sind ja doch alle Prozeduren automatisch Funktionen. Aber ist auch nicht so wild. Will nicht krümmeln.

:mrgreen: :allright:
In PB werden diese Funktionen aber Proceduren genannt! Die Funktionen von
PB selbst, bzw. von UserLibs werden als Funktionen bezeichnet.

Das Dein Programm läuft möchte ich bezweifeln, und wenn, wie schnell?
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
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Hab mal nen bisserl mit dem von Falko geposteten Code rumgebastelt und nach nen paar Veränderungen hab ich's hinbekommen Einzelbilder und Viedeosequenzen zu speichern...

Einzelbilder (bmp)

Code: Alles auswählen

Procedure SnapShot()
  SendMessage_(lwndC, #WM_CAP_FILE_SAVEDIB, 0, FormatDate("%yy-%mm-%dd @ %hh#%ii#%ss", Date()) + ".bmp")
EndProcedure
Viedeosequenz

Code: Alles auswählen

Procedure RecordAVI()
  SendMessage_(lwndC, #WM_CAP_SEQUENCE, 0, 0)
EndProcedure
Nun hab ich 2 Probleme:
1.) Ich möchte egentlich das meine Bilder
yy-mm-dd @ hh:mm:ss.bmp
heißen und nicht
yy-mm-dd @ hh#mm#ss.bmp
Wie bekomm ich das hin?!
2.) Wenn ich eine Viedeosequenz aufnehme würd ich der gern die gleiche Maske für den Namen verwenden wie bei Bildern aber wie?! Hab schon mit nem Schnippsel aus'em Forum experimentiert aber ohne Erfolg

Code: Alles auswählen

SendMessage_(lwndC, #WM_CAP_FILE_GET_CAPTURE_FILE, FileName, 0)
Die Viedeosequenz wird aber immer als C:\CAPTURE.AVI gespeichert
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Warum gibst du das nicht gleich in die Funktion ein?

Code: Alles auswählen

Debug FormatDate("%yy-%mm-%dd @ %hh:%ii:%ss", Date()) 
Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Wenn's direkt so ginge hät ich's gemacht...

Bei:

Code: Alles auswählen

FormatDate("%yy-%mm-%dd @ %hh[b]:[/b]%ii[b]:[/b]%ss", Date()) + ".bmp"
passiert nix

Bei:

Code: Alles auswählen

FormatDate("%yy-%mm-%dd @ %hh[b]:[/b]%ii[b]#[/b]%ss", Date()) + ".bmp"
Wird ne 0KB Datei mit dem Namen "07-05-20 @ 19" erstellt

Achtung Spekulation
Der : scheint also irgendwie das SendMessage_ zu killen, gibt's in dem Fall dann sowas wie \: bei Java?![/code]
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Das liegt daran, das in Windows Dateinamen kein : akzeptiert wird.
Probier doch mal in Window die Rauten durch Umbennenen von Hand zu ändern. Dann kriegst du die Meldung, welche Zeichen du nicht verwenden darfst.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten