var image = { type : 1, idTimeoutShort : null, idTimeoutLong : null, irisTimeout : null, timeLoadingStarted : avutil.getTime(), loading : true, maxsensorwidth : 1920, maxsensorheight : 1088, resolution : 'half', fpsMaxVal : 30, h264BitrateCheck : false, audioEnable : "off", sdPlayback : false, channel : 1, makeH264String : function() { return "?res=" + this.resolution.getValue() + "&x0=" + this.left.getValue() + "&y0=" + this.top.getValue() + "&x1=" + this.right.getValue() + "&y1=" + this.bottom.getValue() + (this.h264BitrateCheck ? "&bitrate=" + this.h264BitrateNumber.getValue() : "&qp=" + this.h264Quality.getValue() + (this.h264EnableRatelimit.getValue()=="on" ? "&ratelimit=" + this.h264Ratelimit.getValue() : "") ) + (0 100) val = 100; for(i=10; i>=4; i--) { gamma[i] = 255*Math.pow((x[i]-8)/216.0, val/100.0) + 0.5; } for(i=3; i>=0; i--) { gamma[i] = x[i] * gamma[4] /32.0 + 0.5; } for(i=10; i>=0; i--) { // made to work like in AV100 setCameraRegister(3, 160+i, Math.floor(gamma[i])); // slow down for 1ms slowdown(); } setCameraRegister(3, 159, 1); //document.title = val + " " + gamma[1] + " " + gamma[2] + " " + gamma[3] + " " + gamma[4] + " " + gamma[5] + " " + gamma[6] + " " + gamma[7] + " " + gamma[8] + " " + gamma[9] + " " + gamma[10]; return Math.round(gamma[4]); /* keep! else // multi-sensor camera { Page(6); for(int i=10; i>=0; i--) { Register(0x69+i, (int)gamma[i], roDIRECT); Sleep(50U); } Register(0x68, 1, roDIRECT); Page(3); } */ } function onParametersChange2() { if (image.type === 3) { // give camera some time to react, but not too much; also, trying to avoid showing bad image on flip (timeouts 50-200ms for 5155DN) clearTimeout(image.idTimeoutShort); image.idTimeoutShort = setTimeout('imageReset()', 500); } } function imageTypeSelection(action, value) { if (action === 'get') { return image.type; } else { if (value == 2) { var val = 1*image.fps.getValue(); dijit.byId("textbox"+"Frames per second").setValue(val); dijit.byId("slider"+"Frames per second").setValue(val); } image.type = value; imageReset(); } } function applyVideo() { image.makeDivisible(); image.setActual(); image.jpegString = image.makeJpegString(); image.rtspLink.set('value', image.rtspUri()); imageReset(); } function applyVideoIfDims() { if (checkImgSize()) { applyVideo(); } } function redraw_seleted_window(selImg) { var imgPos = {}; imgPos.ptLeft = Math.round( (selImg.left / image.Resolution() - image.getLeft()) * image.dispRatio ); imgPos.ptTop = Math.round( (selImg.top / image.Resolution() - image.getTop()) * image.dispRatio ); imgPos.ptWidth = Math.round( (selImg.width / image.Resolution()) * image.dispRatio ); imgPos.ptHeight = Math.round( (selImg.height / image.Resolution()) * image.dispRatio ); imgPos.offLeft = imgPos.ptLeft + $('#overlay').offset().left, imgPos.offTop = imgPos.ptTop + $('#overlay').offset().top; // draw rectangle $('#inlay').offset({ left: imgPos.offLeft, top: imgPos.offTop }); $('#inlay').width(imgPos.ptWidth); $('#inlay').height(imgPos.ptHeight); //alert("#inlay:" + imgPos.offLeft + " " + imgPos.offTop + " " + imgPos.ptWidth + " " + imgPos.ptHeight + " " + imgPos.ptLeft + " "+ imgPos.ptTop); return imgPos; } function channel(action, value) { if (action === 'get') { return image.channel; } else { image.channel = value; applyVideo(); } } function mouseMode(action, value) { if (action === 'get') { return image.mouseMode; } else { image.mouseMode = value; var selImg = {}; //$('#border-table').css('border-width', '10px'); if (value == "focus") { color = 'transparent'; selImg.left = getCameraParam("focusleft"); selImg.top = getCameraParam("focustop"); selImg.width = getCameraParam("focusright") - selImg.left; selImg.height = getCameraParam("focusbottom") - selImg.top; //alert("selImg:" + selImg.left + " " + selImg.top + " " + selImg.width + " " + selImg.height); $('#bg-table').css('background-color', color); $('#border-table').css('border-color', '#FFFFFF'); // finished: white redraw_seleted_window(selImg); } else if (value == "backlight" && getCameraParam("exposure") == "off") { color = '#00FF00'; border = '#AAFFAA'; selImg.left = getCameraParam("expwndleft"); selImg.top = getCameraParam("expwndtop"); selImg.width = getCameraParam("expwndwidth"); selImg.height = getCameraParam("expwndheight"); //alert("selImg:" + selImg.left + " " + selImg.top + " " + selImg.width + " " + selImg.height); $('#bg-table').css('background-color', color); redraw_seleted_window(selImg); } else { $('#inlay').offset({ left: 0, top: 0 }); $('#inlay').width(0); $('#inlay').height(0); } } } function vbr(action, value) { if (action === 'get') { return "vbr"; } else { image.h264BitrateCheck = false; dijit.byId("radio"+"cbr0").set('checked',false); tmp_bitrate = 1*image.h264BitrateNumber.getValue(); image.h264BitrateNumber.setValue(0); //dijit.byId("radio"+"cbr0").setValue('vbr'); } } var tmp_bitrate; function cbr(action, value) { if (action === 'get') { if (tmp_bitrate=1*getCameraParam("bitrate")) { dijit.byId("radio"+"vbr0").set('checked',false); image.h264BitrateCheck = true; return "cbr"; } } else { image.h264BitrateCheck = true; dijit.byId("radio"+"vbr0").set('checked',false); //dijit.byId("radio"+"vbr0").setValue('cbr'); image.h264BitrateNumber.setValue(tmp_bitrate); } } function videoToScreen(action, value) { if (action === 'get') { return image.toScreen; } else { image.toScreen = value; imageReset(); } } /* function nextJPEGImage() { var hiddenImage = document.getElementById('hiddenImage'); var mainImage = document.getElementById('mainImage'); var cell; if (mainImage!==null && hiddenImage!==null) { mainImage.src = hiddenImage.src; hiddenImage.src = image.jpegUri(); prepareMDTable(); if (image.mdEnable) drawMDcells(); } } function jpegTimeouts() { clearTimeout(image.idTimeoutShort); clearTimeout(image.idTimeoutLong); var liveJpeg; if (1<=image.fps.getValue() && image.fps.getValue()<=16) { liveJpeg = 1000/image.fps.getValue(); } else { // TODO 2: change frequency depending on logical sensor size, current cropped size and binning mode liveJpeg = 30; // 30ms for maximum frequency of 33fps } var loadTime = avutil.getTime() - image.timeLoadingStarted; var dt = liveJpeg - loadTime; var timeout = Math.max(Math.min(dt, 1000), 2); // normal timeout for next image image.idTimeoutShort = setTimeout("nextJPEGImage()", timeout); // long timeout - if image failed to load image.idTimeoutLong = setInterval("jpegTimeouts()", 60*1000); } */ function preload() { var hiddenImage = document.getElementById('hiddenImage'); hiddenImage.src = image.jpegUri(); } function myErrorHandler() { image.loading = false; } function showimage() { var hiddenImage = document.getElementById('hiddenImage'); var mainImage = document.getElementById('mainImage'); clearInterval(image.idTimeoutLong); if (image.loading == false) image.loading = true; else { if (model.isDualsensor()) { var img_tmp=new Image(); img_tmp.src=document.hiddenImage.src; //document.title = img_tmp.width + " " + img_tmp.height + " " + image.getWidth() + " " + image.dispRatio; $('#mainImage').width(Math.round(image.dispRatio * img_tmp.width)); $('#mainImage').height(Math.round(image.dispRatio * img_tmp.height)); } mainImage.src=hiddenImage.src; } image.idTimeoutLong=setInterval("preload()",5000); prepareMDTable(); if (image.mdEnable) drawMDcells(); } function foo() {;} function hidfoo() {;} function mainfoo() {;} function loadImage() { var mainImage = document.getElementById('mainImage'); mainImage.src = image.jpegUri(); } function imageRemove() { var center = document.getElementById('central_region'); // delete existing image related artifacts clearTimeout(image.idTimeoutShort); clearInterval(image.idTimeoutLong); while (center!==null && center.hasChildNodes()) { if (center.lastChild.id === "overlay") { break; } center.removeChild(center.lastChild); } } var idTimeoutDelay; function imageSetup() { var center = document.getElementById('central_region'); /*imageRemove(); if (image.toScreen) { var client = getClientWH(); // limit magnification to 128x image.dispRatio = Math.min(client.w/image.getWidth(), client.h/image.getHeight(), 128); } else { image.dispRatio = 1; } */ //clearTimeout(idTimeoutDelay); if (image.type === 2) { // H.264 var embed = document.createElement('embed'); embed.src = image.rtspUri(); embed.autoplay = "true"; embed.type = "application/x-vlc-plugin"; // embed.type = "video/quicktime"; // TODO 2: may be not precise sometimes - not taking into account rounding to 32x or 64x embed.width = image.dispRatio * image.getWidth(); embed.height = image.dispRatio * image.getHeight(); $('#overlay').width(embed.width); $('#overlay').height(embed.height); center.appendChild(embed); } else if (image.type===1 || image.type===3) { // M-JPEG or still image center.innerHTML += '
'; var w = Math.round(image.dispRatio * image.getWidth()), h = Math.round(image.dispRatio * image.getHeight()); $('#mainImage').width(w); $('#mainImage').height(h); $('#overlay').width(w); $('#overlay').height(h); var hiddenImage = document.getElementById('hiddenImage'); var mainImage = document.getElementById('mainImage'); hiddenImage.src = image.jpegUri(); //mainImage.draggable = false; // prevents image dragging & highlighting in Firefox $('#mainImage').mousedown(function(e) { e.preventDefault(); }); $('#mainImage').mousemove(function(e) { e.preventDefault(); }); $('#mainImage').mouseup(function(e) { e.preventDefault(); }); //$('#central_region').mouseup(function(e) { e.preventDefault(); }); //$('#central_region').click(function(e) { e.preventDefault(); }); /* $('#inlay').mouseup(function(e) { e.preventDefault(); }); $('#inlay').click(function(e) { e.preventDefault(); }); $('#overlay').mouseup(function(e) { e.preventDefault(); }); $('#overlay').click(function(e) { e.preventDefault(); }); */ if (image.type === 1) { //hiddenImage.onunload = hidfoo; hiddenImage.onload = showimage; //jpegTimeouts; hiddenImage.onError = myErrorHandler; //mainImage.onunload = mainfoo; // dummy function mainImage.onload = function(){image.idTimeoutShort = setTimeout(preload, 0);}; // hiddenImage.onload = function(){image.idTimeoutShort = setInterval(loadImage, 0);}; } else { hiddenImage.onload = function() { mainImage.src = hiddenImage.src; }; } } image.mdTableReady = 0; } function imageReset() { imageRemove(); if (image.toScreen) { var client = getClientWH(); // limit magnification to 128x image.dispRatio = Math.min(client.w/image.getWidth(), client.h/image.getHeight(), 128); } else { image.dispRatio = 1; } //imageSetup(); idTimeoutDelay=setTimeout(imageSetup, 2000); } // TODO 0: warn about wrong zone size; // ext===8 for the old MD and 32 for the extended MD function calculateGrid(ext) { var sensor = getMaxSensorDims(), subz = {}, zsize = image.zoneSize; subz.hor = Math.ceil(sensor.width / zsize / 32); subz.ver = Math.ceil(sensor.height / zsize / 32); if (subz.hor > image.zbnum) subz.hor = image.zbnum; if (subz.ver > image.zbnum) subz.ver = image.zbnum; subz.size = zsize * 32 * image.dispRatio / image.Resolution(); // alert('grid: ' + subz.hor + ' x ' + subz.ver + " " + image.zbnum + " " + subz.size +" " + image.dispRatio); return subz; } // draw grid, measured as the number of 32x32 sub-zones horizontally & vertically function drawGrid(subz) { // var tbl = document.getElementById("lay-table"); // var tr = document.createElement("tr"); // tr.setAttribute("style","height:800pt;"); // var td = document.createElement("td"); // td.setAttribute("style","width:800pt;"); // var td = document.createElement("td"); // tbl.appendChild(tr.appendChild(td)); // tr.appendChild(td); // tr.appendChild(td); } //draw in screen coordinates function drawGridScreen(nHor, nVer, side) { var tbl = $('#lay-table')[0], row, cell, i, j; //tbl.innerHTML = ""; tbl.style.tableLayout = 'fixed'; tbl.width = Math.ceil(nHor*side); tbl.height = Math.ceil(nVer*side); side = Math.ceil(side); if (browser()==="MSIE") { for (i=0; i= image.gridHor) break; if(!(bytecode&(1<= image.gridHor || i >= image.gridVer) bytecode+=(1<<(k%8)); else if(document.getElementById(i+"_"+j).style.backgroundColor!='red')bytecode+=(1<<(k%8)); k++; if (k%8 == 0) { twobytes=bytecode.toString(16); if(twobytes.length<2)pmstr+="0"; pmstr+=twobytes; bytecode=0; } } } setCameraParam('mdprivasymask', pmstr); getPrivacy(); } function prepareMDTable() { function removeMDTable() { //cleargrid(); //document.getElementById("lay-table").innerHTML = ""; var tbl = document.getElementById("lay-table"); while(tbl.hasChildNodes()) { tbl.removeChild(tbl.firstChild); } } if (image.mdEnable) { if (image.mdTableReady === 0) {var subz = calculateGrid(); removeMDTable(); image.gridHor = subz.hor; image.gridVer = subz.ver; image.gridSize = subz.size; drawGridScreen(subz.hor, subz.ver, subz.size); image.mdTableReady = 1; getPrivacy(); } } else if (image.mdTableReady) removeMDTable(); }