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; font-weight: 600;
float: right; float: right;
} }
#seq_loop { #seq_loop_wrap {
width: 40%; width: 40%;
float: left; float: left;
padding: 0 0 0 56px; padding: 0 0 0 56px;
} }
#seq_loop h3 { #seq_loop_wrap h3 {
font-size: 20px; font-size: 20px;
margin: 12px 0 3px; margin: 12px 0 3px;
} }
#seq_loop input { #seq_loop_wrap input {
font-family: 'Menlo', monospace; font-family: 'Menlo', monospace;
background: rgba(255, 255, 255, 0.05); background: rgba(255, 255, 255, 0.05);
color: #fff; color: #fff;

View File

@ -58,7 +58,7 @@
<div class="cam_end">Camera end: <span>00000</span></div> <div class="cam_end">Camera end: <span>00000</span></div>
<div class="proj_end">Projector end: <span>00000</span></div> <div class="proj_end">Projector end: <span>00000</span></div>
</div> </div>
<div id="seq_loop"> <div id="seq_loop_wrap">
<h3>LOOPS</h3> <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);"/> <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> <div id="loop_current"></div>

View File

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

View File

@ -20,20 +20,32 @@ function padded_frame (i) {
return str; return str;
} }
async function frame (video, frame, obj) { async function frame (state, light) {
let padded = padded_frame(frame); let frame = state.frame
let ext = 'tif'; let video = state.path
let tmpoutput; let w = state.info.width
let cmd; let h = state.info.height
let output; 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') { 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}" -ss 00:00:07.000 -vframes 1 "export-${time}.jpg"
//ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff" //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff"
@ -45,9 +57,18 @@ async function frame (video, frame, obj) {
} catch (err) { } catch (err) {
console.error(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) { async function frames (video, obj) {

View File

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

View File

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

View File

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

View File

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

View File

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