Merge remote-tracking branch 'origin/master'

This commit is contained in:
mmcwilliams 2019-02-11 01:34:38 -05:00
commit ed8f1add35
9 changed files with 90 additions and 64 deletions

View File

@ -381,16 +381,16 @@ button:focus {
font-weight: 600;
float: right;
}
#seq_loop {
#seq_loop_wrap {
width: 40%;
float: left;
padding: 0 0 0 56px;
}
#seq_loop h3 {
#seq_loop_wrap h3 {
font-size: 20px;
margin: 12px 0 3px;
}
#seq_loop input {
#seq_loop_wrap input {
font-family: 'Menlo', monospace;
background: rgba(255, 255, 255, 0.05);
color: #fff;

View File

@ -58,7 +58,7 @@
<div class="cam_end">Camera end: <span>00000</span></div>
<div class="proj_end">Projector end: <span>00000</span></div>
</div>
<div id="seq_loop">
<div id="seq_loop_wrap">
<h3>LOOPS</h3>
<input type="number" min="1" id="seq_loop" value="00001" onchange="this.value = gui.fmtZero(this.value, 6); gui.grid.loopChange(this);"/>
<div id="loop_current"></div>

View File

@ -45,7 +45,7 @@
.timing{
}
}
#seq_loop{
#seq_loop_wrap{
width: 40%;
float: left;
padding: 0 0 0 56px;
@ -64,9 +64,6 @@
}
}
#sequencer{
}
#sequence{
width: 970px;
padding-bottom: 21px;

View File

@ -20,20 +20,32 @@ function padded_frame (i) {
return str;
}
async function frame (video, frame, obj) {
let padded = padded_frame(frame);
let ext = 'tif';
let tmpoutput;
let cmd;
let output;
async function frame (state, light) {
let frame = state.frame
let video = state.path
let w = state.info.width
let h = state.info.height
let padded = padded_frame(frame)
let ext = 'tif'
let rgb = light.on;
let tmpoutput
let cmd
let output
let cmd2
let output2
if (system.platform !== 'nix') {
ext = 'png';
ext = 'png'
}
tmpoutput = path.join(TMPDIR, `export-${padded}.${ext}`)
rgb = rgb.map(e => {
return parseInt(e);
});
cmd = `ffmpeg -i "${video}" -vf select='gte(n\\,${frame})' -vframes 1 -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"`
tmpoutput = path.join(TMPDIR, `export-${padded}.${ext}`);
cmd = `ffmpeg -i "${video}" -vf "select='gte(n\\,${frame})',scale=${w}:${h}" -vframes 1 -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"`;
cmd2 = `convert "${tmpoutput}" -resize ${w}x${h} -size ${w}x${h} xc:"rgb(${rgb[0]},${rgb[1]},${rgb[2]})" +swap -compose Darken -composite "${tmpoutput}"`;
//ffmpeg -i "${video}" -ss 00:00:07.000 -vframes 1 "export-${time}.jpg"
//ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff"
@ -45,9 +57,18 @@ async function frame (video, frame, obj) {
} catch (err) {
console.error(err);
}
if (output && output.stdout) console.log(`"${output.stdout}"`);
if (output) console.log(`"${output}"`);
if (rgb[0] !== 255 || rgb[1] !== 255 || rgb[2] !== 255) {
try {
console.log(cmd2);
output2 = await exec(cmd2);
} catch (err) {
console.error(err);
}
}
if (output2 && output2.stdout) console.log(`"${output2.stdout}"`);
}
async function frames (video, obj) {

View File

@ -47,7 +47,7 @@ cmd.cam_forward = function (rgb, callback) {
gui.updateState();
setTimeout(function () {
light.display(off);
light.set(off, function () {
light.set(off, false, function () {
$('#cmd_cam_forward').removeClass('active');
if (callback) { callback(ms); }
});
@ -58,7 +58,7 @@ cmd.cam_forward = function (rgb, callback) {
cam.set(true, function () {
setTimeout( function () {
light.display(rgb);
light.set(rgb, function () {
light.set(rgb, true, function () {
setTimeout( function () {
cam.move(res);
}, mcopy.cfg.arduino.serialDelay);
@ -67,7 +67,7 @@ cmd.cam_forward = function (rgb, callback) {
});
} else {
light.display(rgb);
light.set(rgb, function () {
light.set(rgb, true, function () {
setTimeout(function () {
cam.move(res);
}, mcopy.cfg.arduino.serialDelay);
@ -87,7 +87,7 @@ cmd.black_forward = function (callback) {
cam.set(true, function () {
setTimeout( function () {
light.display(off);
light.set(off, function () {
light.set(off, false, function () {
setTimeout( function () {
cam.move(res);
}, mcopy.cfg.arduino.serialDelay);
@ -96,7 +96,7 @@ cmd.black_forward = function (callback) {
});
} else {
light.display(off);
light.set(off, function () {
light.set(off, false, function () {
setTimeout(function () {
cam.move(res);
}, mcopy.cfg.arduino.serialDelay);
@ -109,7 +109,7 @@ cmd.cam_backward = function (rgb, callback) {
var res = function (ms) {
gui.updateState();
light.display(off);
light.set(off, function () {
light.set(off, false, function () {
$('#cmd_cam_backward').removeClass('active');
if (callback) { callback(ms); }
});
@ -119,7 +119,7 @@ cmd.cam_backward = function (rgb, callback) {
cam.set(false, function () {
setTimeout(function () {
light.display(rgb);
light.set(rgb, function () {
light.set(rgb, true, function () {
cam.move(res);
});
}, mcopy.cfg.arduino.serialDelay);
@ -127,7 +127,7 @@ cmd.cam_backward = function (rgb, callback) {
} else {
setTimeout(function () {
light.display(rgb);
light.set(rgb, function () {
light.set(rgb, true, function () {
cam.move(res);
});
}, mcopy.cfg.arduino.serialDelay);
@ -146,7 +146,7 @@ cmd.black_backward = function (callback) {
cam.set(false, function () {
setTimeout(function () {
light.display(off);
light.set(off, function () {
light.set(off, false, function () {
cam.move(res);
});
}, mcopy.cfg.arduino.serialDelay);
@ -154,7 +154,7 @@ cmd.black_backward = function (callback) {
} else {
setTimeout(function () {
light.display(off);
light.set(off, function () {
light.set(off, false, function () {
cam.move(res);
});
}, mcopy.cfg.arduino.serialDelay);

View File

@ -191,6 +191,7 @@ devices.digital = function () {
devices.digitalCb = function (evt, args) {
'use strict';
let state;
let color = [255,255,255];
gui.spinner(false);
gui.overlay(false);
if (args.valid && args.valid === true) {
@ -201,9 +202,12 @@ devices.digitalCb = function (evt, args) {
gui.notify('DEVICES', `Using video ${state.fileName}`);
mcopy.state.sequence.arr = ['PF', 'CF'];
gui.grid.setLight(1, color);
gui.grid.state(0);
gui.grid.state(1);
$('#seq_loop').val(`${state.frames}`).trigger('change');
gui.updateState();
} else {
$('#projector_type_digital').prop('checked', 'checked');

View File

@ -111,7 +111,7 @@ light.colorPickers = function () {
light.kelvin.init();
//light.cmy.init();
};
light.set = function (rgb, callback) { //rgb = [0,0,0]
light.set = function (rgb, on, callback) { //rgb = [0,0,0]
'use strict';
var obj;
@ -121,8 +121,9 @@ light.set = function (rgb, callback) { //rgb = [0,0,0]
}
obj = {
rgb : rgb,
id : uuid.v4()
rgb,
id : uuid.v4(),
on
};
ipcRenderer.sendSync('light', obj);

View File

@ -21,6 +21,7 @@ const settings = require('settings')
const system = require('system')
const Server = require('server')
const Intval = require('intval')
const delay = require('delay')
const mcopy = {}
const log = {}
@ -44,12 +45,6 @@ let display
let ffmpeg
let ffprobe
async function delay (ms) {
return new Promise(resolve => {
return setTimeout(resolve, ms)
})
}
mcopy.cfg = require('./data/cfg.json')
mcopy.settings = {}
@ -367,13 +362,18 @@ var createWindow = function () {
})
}
light.state = {
color : [0, 0, 0],
on : [0, 0, 0]
}
light.init = function () {
light.listen()
}
light.listen = function () {
ipcMain.on('light', async (event, arg) => {
try {
await light.set(arg.rgb, arg.id)
await light.set(arg.rgb, arg.id, arg.on)
}catch (err) {
console.error(err)
return reject(err)
@ -381,9 +381,12 @@ light.listen = function () {
event.returnValue = true
})
}
light.set = async function (rgb, id) {
light.set = async function (rgb, id, on) {
const str = rgb.join(',');
let ms
light.state.color = rgb;
if (on) light.state.on = rgb;
console.dir(light.state)
try {
ms = arduino.send('light', mcopy.cfg.arduino.cmd.light)
} catch (err) {
@ -518,7 +521,7 @@ proj.connectDigital = async function (evt, arg) {
dig.state.frames = frames;
dig.state.info = info;
console.dir(dig.state);
//console.dir(dig.state);
log.info(`Opened ${dig.state.fileName}`, 'DIGITAL', true, true);
log.info(`Frames : ${frames}`, 'DIGITAL', true, true);
@ -554,23 +557,23 @@ dig.move = async function () {
if (last > 0) {
display.end()
//wipe last frame
try {
await ffmpeg.clear(last)
} catch (err) {
console.error(err)
}
}
try {
await ffmpeg.frame(dig.state.path, dig.state.frame)
await ffmpeg.clearAll()
} catch (err) {
console.error(err)
}
try {
await ffmpeg.frame(dig.state, light.state)
} catch (err) {
console.error(err)
}
display.start(dig.state.frame)
await delay(100)
await delay(600)
return (+new Date()) - start
}
@ -659,7 +662,6 @@ cam.connectIntval = async function (event, arg) {
return resolve(false)
}
})
}
cam.listen = function () {
@ -784,9 +786,9 @@ transfer.listen = function () {
var init = async function () {
try {
SYSTEM = await system();
SYSTEM = await system()
} catch (err) {
console.error(err);
console.error(err)
}
createWindow()
@ -799,25 +801,26 @@ var init = async function () {
dev.init()
seq.init()
//capture = require('capture')(SYSTEM); //redundant
display = require('display')(SYSTEM);
ffmpeg = require('ffmpeg')(SYSTEM);
ffprobe = require('ffprobe')(SYSTEM);
//capture = require('capture')(SYSTEM) //redundant
display = require('display')(SYSTEM)
ffmpeg = require('ffmpeg')(SYSTEM)
ffprobe = require('ffprobe')(SYSTEM)
//transfer.init()
//capture.init()
arduino = require('./lib/arduino')(mcopy.cfg, ee)
mscript = require('./lib/mscript')
settings.restore()
mcopy.settings = settings.all()
await delay(2000)
await dev.enumerate()
try {
await dev.enumerate()
} catch (err) {
console.error(err)
}
}
app.on('ready', init)
@ -837,4 +840,4 @@ app.on('activate', () => {
mcopy.relaunch = function () {
app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])})
app.exit(0)
}
}

View File

@ -78,7 +78,7 @@ void Pins_init () {
pinMode(PIN_CAMERA, OUTPUT);
pinMode(PIN_INDICATOR, OUTPUT);
digitalWrite(PIN_CAMERA, LOW);
digitalWrite(PIN_CAMERA, HIGH);
digitalWrite(PIN_INDICATOR, LOW);
}
@ -86,10 +86,10 @@ void Frame () {
frame_start = millis();
running = true;
digitalWrite(PIN_CAMERA, HIGH);
digitalWrite(PIN_CAMERA, LOW);
digitalWrite(PIN_INDICATOR, HIGH);
delay(200);
digitalWrite(PIN_CAMERA, LOW);
digitalWrite(PIN_CAMERA, HIGH);
delay(600);
digitalWrite(PIN_INDICATOR, LOW);
running = false;