mirror of
https://github.com/antos-rde/antosdk-apps.git
synced 2024-09-16 09:06:39 +02:00
222 lines
5.7 KiB
JavaScript
222 lines
5.7 KiB
JavaScript
|
(function() {
|
|||
|
var RemoteCamera;
|
|||
|
|
|||
|
RemoteCamera = class RemoteCamera extends this.OS.application.BaseApplication {
|
|||
|
constructor(args) {
|
|||
|
super("RemoteCamera", args);
|
|||
|
}
|
|||
|
|
|||
|
main() {
|
|||
|
var fps, i, j;
|
|||
|
this.mute = false;
|
|||
|
this.player = this.find("player");
|
|||
|
this.qctl = this.find("qctl");
|
|||
|
this.fpsctl = this.find("fpsctl");
|
|||
|
this.cam_setting = {
|
|||
|
w: 640,
|
|||
|
h: 480,
|
|||
|
fps: 10,
|
|||
|
quality: 60
|
|||
|
};
|
|||
|
fps = [];
|
|||
|
for (i = j = 5; j <= 30; i = j += 5) {
|
|||
|
fps.push({
|
|||
|
text: `${i}`,
|
|||
|
value: i
|
|||
|
});
|
|||
|
}
|
|||
|
this.fpsctl.data = fps;
|
|||
|
this.fpsctl.selected = this.cam_setting.fps / 5 - 1;
|
|||
|
this.fpsctl.onlistselect = (e) => {
|
|||
|
if (this.mute) {
|
|||
|
return;
|
|||
|
}
|
|||
|
this.cam_setting.fps = e.data.item.data.value;
|
|||
|
return this.setCameraSetting();
|
|||
|
};
|
|||
|
this.qctl.value = this.cam_setting.quality;
|
|||
|
this.resoctl = this.find("resoctl");
|
|||
|
this.resoctl.data = [
|
|||
|
{
|
|||
|
text: __("320x240"),
|
|||
|
mode: "qvga"
|
|||
|
},
|
|||
|
{
|
|||
|
text: __("640x480"),
|
|||
|
selected: true,
|
|||
|
mode: "vga"
|
|||
|
},
|
|||
|
{
|
|||
|
text: __("800x600"),
|
|||
|
mode: "svga"
|
|||
|
},
|
|||
|
{
|
|||
|
text: __("1024x760"),
|
|||
|
mode: "hd"
|
|||
|
},
|
|||
|
{
|
|||
|
text: __("1920×1080"),
|
|||
|
mode: "fhd"
|
|||
|
}
|
|||
|
];
|
|||
|
this.resoctl.onlistselect = (e) => {
|
|||
|
if (this.mute) {
|
|||
|
return;
|
|||
|
}
|
|||
|
switch (e.data.item.data.mode) {
|
|||
|
case "qvga":
|
|||
|
this.cam_setting.w = 320;
|
|||
|
this.cam_setting.h = 240;
|
|||
|
break;
|
|||
|
case "vga":
|
|||
|
this.cam_setting.w = 640;
|
|||
|
this.cam_setting.h = 480;
|
|||
|
break;
|
|||
|
case "svga":
|
|||
|
this.cam_setting.w = 800;
|
|||
|
this.cam_setting.h = 600;
|
|||
|
break;
|
|||
|
case "hd":
|
|||
|
this.cam_setting.w = 1024;
|
|||
|
this.cam_setting.h = 768;
|
|||
|
break;
|
|||
|
case "fhd":
|
|||
|
this.cam_setting.w = 1920;
|
|||
|
this.cam_setting.h = 1080;
|
|||
|
}
|
|||
|
return this.setCameraSetting();
|
|||
|
};
|
|||
|
this.qctl.onvaluechange = (e) => {
|
|||
|
if (this.mute) {
|
|||
|
return;
|
|||
|
}
|
|||
|
this.cam_setting.quality = e.data;
|
|||
|
return this.setCameraSetting();
|
|||
|
};
|
|||
|
if (!Antunnel.tunnel) {
|
|||
|
return this.notify(__("Antunnel service is not available"));
|
|||
|
}
|
|||
|
if (!this.setting.channel) {
|
|||
|
return this.requestChannel();
|
|||
|
} else {
|
|||
|
return this.openSession();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
requestChannel() {
|
|||
|
return this.openDialog("PromptDialog", {
|
|||
|
title: __("Enter camera channel"),
|
|||
|
label: __("Please enter camera channel name")
|
|||
|
}).then((v) => {
|
|||
|
this.setting.channel = v;
|
|||
|
return this.openSession();
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
menu() {
|
|||
|
return {
|
|||
|
text: "__(Option)",
|
|||
|
nodes: [
|
|||
|
{
|
|||
|
text: "__(Camera channel)"
|
|||
|
}
|
|||
|
],
|
|||
|
onchildselect: (e) => {
|
|||
|
return this.requestChannel();
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
openSession() {
|
|||
|
if (!Antunnel) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (!this.setting.channel) {
|
|||
|
return;
|
|||
|
}
|
|||
|
this.tunnel = Antunnel.tunnel;
|
|||
|
this.sub = new Antunnel.Subscriber(this.setting.channel);
|
|||
|
this.sub.onopen = () => {
|
|||
|
return console.log("Subscribed to camera channel");
|
|||
|
};
|
|||
|
this.sub.onerror = (e) => {
|
|||
|
return this.error(__("Error: {0}", new TextDecoder("utf-8").decode(e.data)), e);
|
|||
|
};
|
|||
|
//@sub = undefined
|
|||
|
this.sub.onctrl = (e) => {
|
|||
|
var res;
|
|||
|
this.cam_setting.w = Antunnel.Msg.int_from(e.data, 0);
|
|||
|
this.cam_setting.h = Antunnel.Msg.int_from(e.data, 2);
|
|||
|
this.cam_setting.fps = e.data[4];
|
|||
|
this.cam_setting.quality = e.data[5];
|
|||
|
this.mute = true;
|
|||
|
this.qctl.value = this.cam_setting.quality;
|
|||
|
res = `${this.cam_setting.w}x${this.cam_setting.h}`;
|
|||
|
switch (res) {
|
|||
|
case "320x240":
|
|||
|
this.resoctl.selected = 0;
|
|||
|
break;
|
|||
|
case "640x480":
|
|||
|
this.resoctl.selected = 1;
|
|||
|
break;
|
|||
|
case "800x600":
|
|||
|
this.resoctl.selected = 2;
|
|||
|
break;
|
|||
|
case "1024x768":
|
|||
|
this.resoctl.selected = 3;
|
|||
|
break;
|
|||
|
case "1920x1080":
|
|||
|
this.resoctl.selected = 4;
|
|||
|
}
|
|||
|
this.fpsctl.selected = this.cam_setting.fps / 5 - 1;
|
|||
|
return this.mute = false;
|
|||
|
};
|
|||
|
this.sub.onmessage = (e) => {
|
|||
|
var context, imgData, jpeg;
|
|||
|
jpeg = new JpegImage();
|
|||
|
jpeg.parse(e.data);
|
|||
|
context = this.player.getContext("2d");
|
|||
|
this.player.width = jpeg.width;
|
|||
|
this.player.height = jpeg.height;
|
|||
|
//jpeg.copyToImageData(d)
|
|||
|
imgData = context.getImageData(0, 0, jpeg.width, jpeg.height);
|
|||
|
jpeg.copyToImageData(imgData);
|
|||
|
return context.putImageData(imgData, 0, 0);
|
|||
|
};
|
|||
|
this.sub.onclose = () => {
|
|||
|
this.sub = void 0;
|
|||
|
this.notify(__("Unsubscribed to the camera service"));
|
|||
|
return this.quit();
|
|||
|
};
|
|||
|
return Antunnel.tunnel.subscribe(this.sub);
|
|||
|
}
|
|||
|
|
|||
|
cleanup() {
|
|||
|
if (this.sub) {
|
|||
|
return this.sub.close();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
setCameraSetting() {
|
|||
|
var arr;
|
|||
|
if (!this.sub) {
|
|||
|
return;
|
|||
|
}
|
|||
|
arr = new Uint8Array(6);
|
|||
|
arr.set(Antunnel.Msg.bytes_of(this.cam_setting.w), 0);
|
|||
|
arr.set(Antunnel.Msg.bytes_of(this.cam_setting.h), 2);
|
|||
|
arr[4] = this.cam_setting.fps;
|
|||
|
arr[5] = this.cam_setting.quality;
|
|||
|
return this.sub.send(Antunnel.Msg.CTRL, arr);
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
RemoteCamera.singleton = true;
|
|||
|
|
|||
|
RemoteCamera.dependencies = ["pkg://libjpeg/jpg.js"];
|
|||
|
|
|||
|
this.OS.register("RemoteCamera", RemoteCamera);
|
|||
|
|
|||
|
}).call(this);
|