@signalk/freeboard-sk
Version:
Openlayers chart plotter implementation for Signal K
2 lines (1 loc) • 8.82 kB
JavaScript
import{a as te}from"./chunk-FGDSLMXF.js";import"./chunk-FDERIQAA.js";var V=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),Z=4017,$=799,J=3406,N=2276,Q=1567,W=3784,U=5793,K=2896;function se(q,l){let o=0,u=[],D=16;for(;D>0&&!q[D-1];)--D;u.push({children:[],index:0});let w=u[0],C;for(let t=0;t<D;t++){for(let h=0;h<q[t];h++){for(w=u.pop(),w.children[w.index]=l[o];w.index>0;)w=u.pop();for(w.index++,u.push(w);u.length<=t;)u.push(C={children:[],index:0}),w.children[w.index]=C.children,w=C;o++}t+1<D&&(u.push(C={children:[],index:0}),w.children[w.index]=C.children,w=C)}return u[0].children}function le(q,l,o,u,D,w,C,t,h){let{mcusPerLine:F,progressive:c}=o,r=l,b=l,i=0,d=0;function x(){if(d>0)return d--,i>>d&1;if(i=q[b++],i===255){let f=q[b++];if(f)throw new Error(`unexpected marker: ${(i<<8|f).toString(16)}`)}return d=7,i>>>7}function m(f){let a=f,p;for(;(p=x())!==null;){if(a=a[p],typeof a=="number")return a;if(typeof a!="object")throw new Error("invalid huffman sequence")}return null}function E(f){let a=f,p=0;for(;a>0;){let L=x();if(L===null)return;p=p<<1|L,--a}return p}function k(f){let a=E(f);return a>=1<<f-1?a:a+(-1<<f)+1}function v(f,a){let p=m(f.huffmanTableDC),L=p===0?0:k(p);f.pred+=L,a[0]=f.pred;let T=1;for(;T<64;){let g=m(f.huffmanTableAC),y=g&15,j=g>>4;if(y===0){if(j<15)break;T+=16}else{T+=j;let S=V[T];a[S]=k(y),T++}}}function P(f,a){let p=m(f.huffmanTableDC),L=p===0?0:k(p)<<h;f.pred+=L,a[0]=f.pred}function s(f,a){a[0]|=x()<<h}let n=0;function A(f,a){if(n>0){n--;return}let p=w,L=C;for(;p<=L;){let T=m(f.huffmanTableAC),g=T&15,y=T>>4;if(g===0){if(y<15){n=E(y)+(1<<y)-1;break}p+=16}else{p+=y;let j=V[p];a[j]=k(g)*(1<<h),p++}}}let e=0,ee;function re(f,a){let p=w,L=C,T=0;for(;p<=L;){let g=V[p],y=a[g]<0?-1:1;switch(e){case 0:{let j=m(f.huffmanTableAC),S=j&15;if(T=j>>4,S===0)T<15?(n=E(T)+(1<<T),e=4):(T=16,e=1);else{if(S!==1)throw new Error("invalid ACn encoding");ee=k(S),e=T?2:3}continue}case 1:case 2:a[g]?a[g]+=(x()<<h)*y:(T--,T===0&&(e=e===2?3:0));break;case 3:a[g]?a[g]+=(x()<<h)*y:(a[g]=ee<<h,e=0);break;case 4:a[g]&&(a[g]+=(x()<<h)*y);break;default:break}p++}e===4&&(n--,n===0&&(e=0))}function ce(f,a,p,L,T){let g=p/F|0,y=p%F,j=g*f.v+L,S=y*f.h+T;a(f,f.blocks[j][S])}function ie(f,a,p){let L=p/f.blocksPerLine|0,T=p%f.blocksPerLine;a(f,f.blocks[L][T])}let G=u.length,R,I,X,z,M,H;c?w===0?H=t===0?P:s:H=t===0?A:re:H=v;let B=0,Y,O;G===1?O=u[0].blocksPerLine*u[0].blocksPerColumn:O=F*o.mcusPerColumn;let ne=D||O;for(;B<O;){for(I=0;I<G;I++)u[I].pred=0;if(n=0,G===1)for(R=u[0],M=0;M<ne;M++)ie(R,H,B),B++;else for(M=0;M<ne;M++){for(I=0;I<G;I++){R=u[I];let{h:f,v:a}=R;for(X=0;X<a;X++)for(z=0;z<f;z++)ce(R,H,B,X,z)}if(B++,B===O)break}if(d=0,Y=q[b]<<8|q[b+1],Y<65280)throw new Error("marker was not found");if(Y>=65488&&Y<=65495)b+=2;else break}return b-r}function fe(q,l){let o=[],{blocksPerLine:u,blocksPerColumn:D}=l,w=u<<3,C=new Int32Array(64),t=new Uint8Array(64);function h(F,c,r){let b=l.quantizationTable,i,d,x,m,E,k,v,P,s,n=r,A;for(A=0;A<64;A++)n[A]=F[A]*b[A];for(A=0;A<8;++A){let e=8*A;if(n[1+e]===0&&n[2+e]===0&&n[3+e]===0&&n[4+e]===0&&n[5+e]===0&&n[6+e]===0&&n[7+e]===0){s=U*n[0+e]+512>>10,n[0+e]=s,n[1+e]=s,n[2+e]=s,n[3+e]=s,n[4+e]=s,n[5+e]=s,n[6+e]=s,n[7+e]=s;continue}i=U*n[0+e]+128>>8,d=U*n[4+e]+128>>8,x=n[2+e],m=n[6+e],E=K*(n[1+e]-n[7+e])+128>>8,P=K*(n[1+e]+n[7+e])+128>>8,k=n[3+e]<<4,v=n[5+e]<<4,s=i-d+1>>1,i=i+d+1>>1,d=s,s=x*W+m*Q+128>>8,x=x*Q-m*W+128>>8,m=s,s=E-v+1>>1,E=E+v+1>>1,v=s,s=P+k+1>>1,k=P-k+1>>1,P=s,s=i-m+1>>1,i=i+m+1>>1,m=s,s=d-x+1>>1,d=d+x+1>>1,x=s,s=E*N+P*J+2048>>12,E=E*J-P*N+2048>>12,P=s,s=k*$+v*Z+2048>>12,k=k*Z-v*$+2048>>12,v=s,n[0+e]=i+P,n[7+e]=i-P,n[1+e]=d+v,n[6+e]=d-v,n[2+e]=x+k,n[5+e]=x-k,n[3+e]=m+E,n[4+e]=m-E}for(A=0;A<8;++A){let e=A;if(n[8+e]===0&&n[16+e]===0&&n[24+e]===0&&n[32+e]===0&&n[40+e]===0&&n[48+e]===0&&n[56+e]===0){s=U*r[A+0]+8192>>14,n[0+e]=s,n[8+e]=s,n[16+e]=s,n[24+e]=s,n[32+e]=s,n[40+e]=s,n[48+e]=s,n[56+e]=s;continue}i=U*n[0+e]+2048>>12,d=U*n[32+e]+2048>>12,x=n[16+e],m=n[48+e],E=K*(n[8+e]-n[56+e])+2048>>12,P=K*(n[8+e]+n[56+e])+2048>>12,k=n[24+e],v=n[40+e],s=i-d+1>>1,i=i+d+1>>1,d=s,s=x*W+m*Q+2048>>12,x=x*Q-m*W+2048>>12,m=s,s=E-v+1>>1,E=E+v+1>>1,v=s,s=P+k+1>>1,k=P-k+1>>1,P=s,s=i-m+1>>1,i=i+m+1>>1,m=s,s=d-x+1>>1,d=d+x+1>>1,x=s,s=E*N+P*J+2048>>12,E=E*J-P*N+2048>>12,P=s,s=k*$+v*Z+2048>>12,k=k*Z-v*$+2048>>12,v=s,n[0+e]=i+P,n[56+e]=i-P,n[8+e]=d+v,n[48+e]=d-v,n[16+e]=x+k,n[40+e]=x-k,n[24+e]=m+E,n[32+e]=m-E}for(A=0;A<64;++A){let e=128+(n[A]+8>>4);e<0?c[A]=0:e>255?c[A]=255:c[A]=e}}for(let F=0;F<D;F++){let c=F<<3;for(let r=0;r<8;r++)o.push(new Uint8Array(w));for(let r=0;r<u;r++){h(l.blocks[F][r],t,C);let b=0,i=r<<3;for(let d=0;d<8;d++){let x=o[c+d];for(let m=0;m<8;m++)x[i+m]=t[b++]}}}return o}var _=class{constructor(){this.jfif=null,this.adobe=null,this.quantizationTables=[],this.huffmanTablesAC=[],this.huffmanTablesDC=[],this.resetFrames()}resetFrames(){this.frames=[]}parse(l){let o=0;function u(){let t=l[o]<<8|l[o+1];return o+=2,t}function D(){let t=u(),h=l.subarray(o,o+t-2);return o+=h.length,h}function w(t){let h=0,F=0,c,r;for(r in t.components)t.components.hasOwnProperty(r)&&(c=t.components[r],h<c.h&&(h=c.h),F<c.v&&(F=c.v));let b=Math.ceil(t.samplesPerLine/8/h),i=Math.ceil(t.scanLines/8/F);for(r in t.components)if(t.components.hasOwnProperty(r)){c=t.components[r];let d=Math.ceil(Math.ceil(t.samplesPerLine/8)*c.h/h),x=Math.ceil(Math.ceil(t.scanLines/8)*c.v/F),m=b*c.h,E=i*c.v,k=[];for(let v=0;v<E;v++){let P=[];for(let s=0;s<m;s++)P.push(new Int32Array(64));k.push(P)}c.blocksPerLine=d,c.blocksPerColumn=x,c.blocks=k}t.maxH=h,t.maxV=F,t.mcusPerLine=b,t.mcusPerColumn=i}let C=u();if(C!==65496)throw new Error("SOI not found");for(C=u();C!==65497;){switch(C){case 65280:break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:{let t=D();C===65504&&t[0]===74&&t[1]===70&&t[2]===73&&t[3]===70&&t[4]===0&&(this.jfif={version:{major:t[5],minor:t[6]},densityUnits:t[7],xDensity:t[8]<<8|t[9],yDensity:t[10]<<8|t[11],thumbWidth:t[12],thumbHeight:t[13],thumbData:t.subarray(14,14+3*t[12]*t[13])}),C===65518&&t[0]===65&&t[1]===100&&t[2]===111&&t[3]===98&&t[4]===101&&t[5]===0&&(this.adobe={version:t[6],flags0:t[7]<<8|t[8],flags1:t[9]<<8|t[10],transformCode:t[11]});break}case 65499:{let h=u()+o-2;for(;o<h;){let F=l[o++],c=new Int32Array(64);if(F>>4===0)for(let r=0;r<64;r++){let b=V[r];c[b]=l[o++]}else if(F>>4===1)for(let r=0;r<64;r++){let b=V[r];c[b]=u()}else throw new Error("DQT: invalid table spec");this.quantizationTables[F&15]=c}break}case 65472:case 65473:case 65474:{u();let t={extended:C===65473,progressive:C===65474,precision:l[o++],scanLines:u(),samplesPerLine:u(),components:{},componentsOrder:[]},h=l[o++],F;for(let c=0;c<h;c++){F=l[o];let r=l[o+1]>>4,b=l[o+1]&15,i=l[o+2];t.componentsOrder.push(F),t.components[F]={h:r,v:b,quantizationIdx:i},o+=3}w(t),this.frames.push(t);break}case 65476:{let t=u();for(let h=2;h<t;){let F=l[o++],c=new Uint8Array(16),r=0;for(let i=0;i<16;i++,o++)c[i]=l[o],r+=c[i];let b=new Uint8Array(r);for(let i=0;i<r;i++,o++)b[i]=l[o];h+=17+r,F>>4===0?this.huffmanTablesDC[F&15]=se(c,b):this.huffmanTablesAC[F&15]=se(c,b)}break}case 65501:u(),this.resetInterval=u();break;case 65498:{u();let t=l[o++],h=[],F=this.frames[0];for(let d=0;d<t;d++){let x=F.components[l[o++]],m=l[o++];x.huffmanTableDC=this.huffmanTablesDC[m>>4],x.huffmanTableAC=this.huffmanTablesAC[m&15],h.push(x)}let c=l[o++],r=l[o++],b=l[o++],i=le(l,o,F,h,this.resetInterval,c,r,b>>4,b&15);o+=i;break}case 65535:l[o]!==255&&o--;break;default:if(l[o-3]===255&&l[o-2]>=192&&l[o-2]<=254){o-=3;break}throw new Error(`unknown JPEG marker ${C.toString(16)}`)}C=u()}}getResult(){let{frames:l}=this;if(this.frames.length===0)throw new Error("no frames were decoded");this.frames.length>1&&console.warn("more than one frame is not supported");for(let c=0;c<this.frames.length;c++){let r=this.frames[c].components;for(let b of Object.keys(r))r[b].quantizationTable=this.quantizationTables[r[b].quantizationIdx],delete r[b].quantizationIdx}let o=l[0],{components:u,componentsOrder:D}=o,w=[],C=o.samplesPerLine,t=o.scanLines;for(let c=0;c<D.length;c++){let r=u[D[c]];w.push({lines:fe(o,r),scaleX:r.h/o.maxH,scaleY:r.v/o.maxV})}let h=new Uint8Array(C*t*w.length),F=0;for(let c=0;c<t;++c)for(let r=0;r<C;++r)for(let b=0;b<w.length;++b){let i=w[b];h[F]=i.lines[0|c*i.scaleY][0|r*i.scaleX],++F}return h}},oe=class extends te{constructor(l){super(),this.reader=new _,l.JPEGTables&&this.reader.parse(l.JPEGTables)}decodeBlock(l){return this.reader.resetFrames(),this.reader.parse(new Uint8Array(l)),this.reader.getResult().buffer}};export{oe as default};