Seite 3 von 4

Verfasst: 16.05.2007 20:52
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

Verfasst: 16.05.2007 22:33
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:

Verfasst: 17.05.2007 13:02
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?

Verfasst: 17.05.2007 13:13
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.

Verfasst: 17.05.2007 15:40
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:

Verfasst: 17.05.2007 15:48
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?

Verfasst: 20.05.2007 19:28
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

Verfasst: 20.05.2007 19:47
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

Verfasst: 20.05.2007 19:55
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]

Verfasst: 20.05.2007 21:21
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