Hallo msl,
Er legt sehr viel Wert auf die zweite Variante von chdkptp, der interaktiven Kommandozeileneingabe (CLI).
Für Experimente mit der GUI habe ich den Reiter "User" eingeführt und mit ein paar Funktionen bestückt.
Auch beim besten Willen kann ich mit diesen Infos bisher rein gar nichts anfangen
Ich habe leider nie professionell auch nur eine einzige Programmiersprache erlernt. Meine Kenntnisse zur Programmierung etwa des wissenschaftlichen Taschenrechners HP48 sind rein autodidaktisch erworben durch Studium von dessen beiden umfangreichen Handbüchern. Und meine (leider immer noch recht bescheidenen) Lua-Kenntnisse verdanke ich im wesentlichen Dir persönlich - dazu nochmals Danke!
Darum habe ich momentan nur die Datei "gui.lua" genauer unter die Lupe genommen in der Hoffnung, daß Änderungen daran etwas verbessern können. Das Primärziel war dabei ein dauerhafter Halfshoot.
Bei der "gui.lua" fallen mir aber zunächst einige Ungereimtheiten auf, was deren Tasten-Verhalten im Vergleich zu den originalen Tasten an einer Cam bewirken. Das betrifft die Modi "Wiedergabe aktiv" und "laufende Videoaufnahme aktiv".
1) Bei laufender Videoaufnahme macht ein "HalfShoot" m.W. gar nichts. Ein "Shoot" kann dagegen bei einigen Cams (etwa meine SX20) zu einem gemachten Bild führen, wobei die Videoaufnahme anschließend weiterläuft - bei anderen Cams (etwa meine SX240) führt ein "Shoot" dagegen dann zu einem Abbruch der Videoaufnahme.
2) Bei "Wiedergabe aktiv" bringt das bisher gemachte "Press/Release HalfShoot" nach Klicken auf "HalfShoot" m.W. gar nichts.
Eine Cam schaltet dann ja normalerweise (wie auch bei "Shoot") eigentlich nur in den Aufnahmemodus um, und sonst passiert nichts.
In meinen weiter unten angehängten neuen Dateiversionen der "gui.lua" habe ich das so modifiziert, wie es m.W. dem Verhalten der Tasten an einer Cam entspricht.
ZUM EIGENTLICHEN PROBLEM HALFSHOOT:
Eigentlich hatte ich gedacht, daß die "gui.lua" Lua-Befehle ausführt, wobei die dann erreichten Cam-Zustände erhalten bleiben.
Die bisherige "gui.lua" verwirft aber bisher per se einen erfolgreichen Halfshoot kurz darauf wieder durch "Release Halfshoot", was ich für unlogisch hielt.
Da man die "gui.lua" im Prinzip als kleines Rädchen der übergeordneten "state machine chdkptp" begreifen muss, sollte man sie auch entsprechend programmieren. Nach dem Motto "gesagt - getan" habe ich das auch versucht unter der Umgehung von globalen Variablen.
Bei meinem versuchten Ansatz wird ein Halfshoot versucht und, wenn erfolgreich, danach nicht released.
Ein nachfolgendes erneutes Halfshoot oder ein Shoot sollte dann durch Auswerten des Lua-Befehls get_shooting() sozusagen "intelligent" die nun passende Aktion ausführen mit unterschiedlichen Auslöseverfahren oder bspw. nur einem Release von Halfshoot.
Folgende "intelligente" Programmzeilen für Halfshoot und Shoot habe ich dabei verwendet:
HALFSHOOT:
- Code: Alles auswählen
iup.hbox{
-- TODO we should have a way to press shoot half and have it stay down,
-- so we can do normal shooting proccess
iup.button{
title='shoot half',
size='45x15',
action=function(self)
gui.execquick(string.format([[
local timeout=%d
local rec,vid = get_mode()
if rec and not vid then
if get_shooting() == false then
press("shoot_half")
local n = 0
repeat
sleep(10)
n = n + 10
until get_shooting() == true or n > timeout
if get_shooting() == false then
release("shoot_half")
end
else
release("shoot_half")
end
elseif not rec and not vid then
set_record(1)
sleep(1000)
end
SHOOT:
- Code: Alles auswählen
iup.button{
title='shoot',
size='94x15',
action=function(self)
-- video seems to need a small delay after half press to reliably start recording
-- Additional note from Werner_O: as I know, video recording cannot be startet via Halfshoot/Shoot
gui.execquick([[
local rec,vid = get_mode()
if rec and not vid then
if get_shooting() == false then
shoot()
else
press("shoot_full_only")
sleep(100)
release("shoot_full_only")
release("shoot_half")
end
elseif not rec and not vid then
set_record(1)
sleep(1000)
else
shoot()
end
Leider funktioniert dieser Ansatz aber nicht, weil anscheinend die übergeordnete "state machine chdkptp" irgendwo den gemachten Befehl press("shoot_half") wieder released. Ein Shoot führt dann immer nur zu einem Shoot-Full mit neuer Messung.
M.E. ist darum die "state machine chdkptp" noch fehlerhaft und muß überarbeitet werden, damit gemachte Unterfunktionen in der "gui.lua" (in diesem Fall ein aktiviertes "ShootHalf") nicht an anderer Stelle wieder verworfen werden.
Meine beiden geänderten "gui.lua" (für Windows und den Raspberry) habe ich angehängt, und die funktionieren auch.
Immerhin wird mir von denen nun auch ein erfolgreiches Halfshoot mit grünem Rahmen angezeigt (auch am Laptop via mstsc.exe vom RPi3), auch wenn dieser Halfshoot wie gesagt schnell wieder ungewollt released wird.
Soviel zunächst von mir,
liebe Grüße
Werner_O