/*!******************************************************************************* *! FILE NAME : panorama_preview.js *! DESCRIPTION : panorama previewer's js functions *! REVISION : 1.00 *! AUTHOR : Oleg Dzhimiev <oleg@elphel.com> *! Copyright (C) 2012 Elphel, Inc *! -----------------------------------------------------------------------------** *! This program is free software: you can redistribute it and/or modify *! it under the terms of the GNU General Public License as published by *! the Free Software Foundation, either version 3 of the License, or *! (at your option) any later version. *! *! This program is distributed in the hope that it will be useful, *! but WITHOUT ANY WARRANTY; without even the implied warranty of *! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *! GNU General Public License for more details. *! *! The four essential freedoms with GNU GPL software: *! * the freedom to run the program for any purpose *! * the freedom to study how the program works and change it to make it do what you wish *! * the freedom to redistribute copies so you can help your neighbor *! * the freedom to distribute copies of your modified versions to others *! *! You should have received a copy of the GNU General Public License *! along with this program. If not, see <http://www.gnu.org/licenses/>. *! -----------------------------------------------------------------------------** */ var baseWidth = 194; var baseHeight = 146; var W = 2592; var H = 1944; var load_counter = 0; var settings_file = "settings.xml"; // sort var cams = [ {"ip":"192.168.0.161","port":2326,"channel":3,"master":0,"logger":0,"index":4}, {"ip":"192.168.0.161","port":2325,"channel":2,"master":0,"logger":0,"index":3}, {"ip":"192.168.0.161","port":2323,"channel":0,"master":0,"logger":1,"index":1}, {"ip":"192.168.0.161","port":2324,"channel":1,"master":0,"logger":0,"index":2}, {"ip":"192.168.0.162","port":2326,"channel":3,"master":0,"logger":0,"index":8}, {"ip":"192.168.0.162","port":2325,"channel":2,"master":0,"logger":0,"index":7}, {"ip":"192.168.0.162","port":2323,"channel":0,"master":0,"logger":0,"index":5}, {"ip":"192.168.0.162","port":2324,"channel":1,"master":0,"logger":0,"index":6}, {"ip":"192.168.0.163","port":2325,"channel":2,"master":1,"logger":0,"index":9}, {"ip":"192.168.0.163","port":2326,"channel":3,"master":0,"logger":0,"index":10} ]; var cnv; var cContext; var refresh_counter=0; var CurrentImageNumber=0; var image_name = new Array(8); // globals for map var osm_markers = new Array(); var kml_response; var map_points = new Array(); var N=0; $(function(){ get_dates(); osm_init(); // init canvas cnv = document.getElementById('canvas'); cContext = cnv.getContext('2d'); cnv.setAttribute('width',baseHeight*8);cnv.setAttribute('height',baseWidth*3); // init hidden canvases for(var i=0;i<cams.length;i++){ append_hidden_div(i); } //rewriteURL(); //read_settings(); }); function append_hidden_div(index){ el = $("<div>",{ id: "div_"+index }).css({ //position: "absolute", //top: "1000px", //left: (index*200)+"px", display: "none" }); el.attr("index",index); el.on("canvas_ready",function(){ //can draw on main canvas var cnv = $(this).find("#display")[0]; var index = $(this).attr("index"); draw_image(cnv,index); load_counter++; if (load_counter==8){ //clear clearInterval(intvl); document.getElementById('status').innerHTML= "Done."; } }); $("body").append(el); } function remove_hidden_div(index){ $("#div_"+index).off("canvas_ready"); $("#div_"+index).remove(); } function draw_image(img,index){ var w = baseWidth; var h = baseHeight; index = +index; cContext.rotate(90*Math.PI/180); if (index%2==0) { cContext.drawImage(img, 0,0*h,w,h, 0*w,-1*h*(index+1),w,h); cContext.drawImage(img, 0,1*h,w,h, 1*w,-1*h*(index+1),w,h); cContext.scale(-1,1); cContext.drawImage(img, 0,2*h,w,h, -3*w, -1*h*(index+1), w, h); cContext.scale(-1,1); }else{ cContext.scale(1,-1); //mirror is needed cContext.drawImage(img, 0,0*h,w,h, 0*w,index*h,w,h); cContext.drawImage(img, 0,1*h,w,h, 1*w,index*h,w,h); cContext.scale(-1,1); cContext.drawImage(img, 0,2*h,w,h, -3*w,h*(index),w,h); cContext.scale(-1,1); cContext.scale(1,-1); } cContext.rotate(-90*Math.PI/180); } function refresh_images(){ refresh_counter=0; intvl=setInterval("refresh_time()",500); image_full_name($('#input_date_list').attr('value'),$("#input_image_number").val()); } function refresh_time() { refresh_counter++; if (refresh_counter%3==1) document.getElementById('status').innerHTML = "Working."; else if (refresh_counter%3==2) document.getElementById('status').innerHTML = "Working.."; else document.getElementById('status').innerHTML = "Working..."; if (refresh_counter==120) { clearInterval(intvl); refresh_counter=0; document.getElementById('status').innerHTML = "Timeout."; } } var images_list; function image_full_name(folder, image_number) { $.ajax({ url: "./panorama_preview.php?type=jp4&folder=/data/footage/"+folder, success: function(data){ images_list = $(data).find("f"); var mode = "jp4"; if ($("#jpeg_mode").attr("checked")) mode = "jpeg"; for (var i=0;i<8;i++) { var tmp_string = images_list[+image_number].firstChild.data; tmp_string = tmp_string.substring(0,tmp_string.lastIndexOf("_")+1)+(i+1)+tmp_string.substring(tmp_string.indexOf("."),tmp_string.length); image_name[i] = "./jp4-proxy.php?n=tmp/"+i+"&url=/data/footage/"+folder+"/"+tmp_string+"&mode="+mode; } var tmp_smth = images_list[+image_number].firstChild.data; var tmp_smth_part1 = tmp_smth.substring(0,tmp_smth.lastIndexOf("/")); var tmp_smth_part2 = tmp_smth.substring(tmp_smth.lastIndexOf("/")+1); $("#filename").html(tmp_smth); //form a link tmp_string = "./fullsize_canvas.php?settings="+settings_file+"&width=2592&height=1944&path=/data/footage/"+folder+"/"+tmp_smth_part1+"&name="+tmp_smth_part2; $("#larger_preview").html("<a href='"+tmp_string+"'>Full size preview</a>"); $("#canvas_link").attr("href",tmp_string); $("#canvas_link").attr("title","Click for a full size preview"); load_counter = 0; for (var i=0;i<8;i++){ remove_hidden_div(i); append_hidden_div(i); $("#div_"+i).jp4({image:image_name[cams[i].index-1],width:200,fast:true}); } } }); } function set_image_number(k) { old_number = document.getElementById('input_image_number').value; image_change(k-old_number); } function refresh_map() { new_number = document.getElementById('input_image_number').value; image_change(new_number-CurrentImageNumber); } function image_change(delta) { old_number = CurrentImageNumber;//document.getElementById('input_image_number').value; new_number = +old_number + delta; //if (new_number==0) new_number = 1; document.getElementById('input_image_number').value=new_number; CurrentImageNumber = new_number; //set_icon(old_number,icon_dot); //set_icon(new_number,icon_eyesis); osm_set_current_position(map_points[new_number]); refresh_images(); } function get_dates() { //get_folder_list("",'input_date_list'); get_folder_list_request("/data/footage/","","input_date_list"); } function folder_list_fill(folder_list,element_id){ var list = "<ul>"; for(var i=0; i<folder_list.length; i++) { list = list + "<li>"+folder_list[i].firstChild.data+"</li>"; } list = list + "</ul>"; document.getElementById(element_id).innerHTML= list; // init list jquery_list("input_date_list","Choose Date"); // extra click bind var list_elements=$('#input_date_list').find('li'); list_elements.each(function(i) { var li = $(this); li.click(function(){ //get_folders(); osm_remove_points(); get_kml_records_list("/data/footage/"+$(this).html()+"/map_points.kml"); //map_points = parse_kml(kml_response); //console.log(map_points); //osm_set_current_position(mark); //refresh_images(); //return false; }); }); } function get_folder_list_request(some_folder,type,element_id,mode) { $.ajax({ url: "./panorama_preview.php?type="+type+"&folder="+some_folder, success: function(data){ folder_list_fill($(data).find("f"),element_id); } }); } function new_item_selected() { set_image_number(0); } function copy_files() { var panos_number = $("#panos_number").val(); var src_folder="/data/footage/"+$('#input_date_list').attr('value')+"/"; var image_number = $('#input_image_number').val(); var dest_path= $('#copy_path').val(); for (var i=0; i<panos_number; i++) { var src_file = images_list[+image_number+i].firstChild.data; request = "./copy.php?folder="+src_folder+"&file="+src_file+"&dest_path="+dest_path+"&imagej=/data/post-processing/imagej_processed"; $.ajax({ url: request, async: true, }); } } var intvl2; function copy_all(){ intvl2=setInterval("refresh_time_2('Copying')",500); $.ajax({ url: "copy_all.php?src=/data/footage/"+$('#input_date_list').attr('value')+"&dest="+$('#copy_path').val()+"&imagej=/data/post-processing/imagej_processed", async: true, success: function(){ clearInterval(invl2); $('#status').html("Done."); } }); } function rewriteURL(){ var parameters=location.href.replace(/\?/ig,"&").split("&"); for (var i=0;i<parameters.length;i++) parameters[i]=parameters[i].split("="); for (var i=1;i<parameters.length;i++) { switch (parameters[i][0]) { case "settings": settings_file = parameters[i][1];break; } } if (location.href.lastIndexOf("?")==-1) { baseURL = location.href; }else{ baseURL = location.href.substring(0,location.href.lastIndexOf("?")); } newURL="?settings="+settings_file; window.history.pushState('index.html', 'Title', baseURL+newURL); }