Warning: session_start(): open(/var/lib/php/sessions/sess_k34l2r4hdlvdefeafvp5p0iejm, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
cmodule VectorImageStream > DynImageSurfaceAndEnabled {
transient S fpsText;
transient new PerSecondCounter fpsCounter;
transient JButton btnStartStream;
start {
set zoomToWindowOnSetImage;
dm_vmBus_onMessage_q vectorSDK_gotLine((mod, s) -> handleLine((S) s));
dm_doEvery(1.0, r {
double fps = fpsCounter.getLast();
setField(fpsText := formatDoubleX(fps, 1) + " fps");
enableButton(btnStartStream, fps == 0);
});
dm_registerAs_direct vectorCamStream();
dm_vmBus_onMessageAndNow vectorSDK_connected(rThread startStream);
}
void handleLine(S s) {
S prefix = "img: ";
if (!enabled || !startsWith(s, prefix)) ret;
fpsCounter.inc();
BufferedImage img = imageFromBytes(base64decode(substring(s, prefix)));
vmBus_send haveVectorImage(module(), img);
setImage(img);
}
void startStream enter {
dm_call vectorSDK('startCamStream);
}
JPanel makeControlArea() {
JPanel buttons = super.makeControlArea();
enableDoubleBuffering(); // flickers when partially obscured otherwise
addComponents_inFront(buttons,
btnStartStream = jbutton("Start", rThread startStream));
ret westCenterAndEastWithMargin(
jbutton("Snapshot", rThread snapshot),
dm_rightAlignedLabel fpsText(), buttons);
}
void snapshot enter {
File f = vectorCamDir("vector-" + ymd_minus_hms_minus_millis() + ".jpg");
saveJPEG(f, getImage());
copyFileToClipboard(f);
printFileInfo(f);
}
// API
BufferedImage getLatestVectorImage() {
ret getImage();
}
}