1import{E as w,i as f,U as S,R as h,V as T,r as E,m as I,J as $,B as z,W as D,M as N}from"./B5GHGkt9.js";import"./Cg4IAt1_.js";const e={string:0,uint:1,uid:2,bool:3,binary:4,float:5},U={name:"dtd",container:{440786851:{name:"ebml",container:{17030:{name:"ebmlVersion",value:e.uint},17143:{name:"ebmlReadVersion",value:e.uint},17138:{name:"ebmlMaxIDWidth",value:e.uint},17139:{name:"ebmlMaxSizeWidth",value:e.uint},17026:{name:"docType",value:e.string},17031:{name:"docTypeVersion",value:e.uint},17029:{name:"docTypeReadVersion",value:e.uint}}},408125543:{name:"segment",container:{290298740:{name:"seekHead",container:{19899:{name:"seek",multiple:!0,container:{21419:{name:"id",value:e.binary},21420:{name:"position",value:e.uint}}}}},357149030:{name:"info",container:{29604:{name:"uid",value:e.uid},29572:{name:"filename",value:e.string},3979555:{name:"prevUID",value:e.uid},3965867:{name:"prevFilename",value:e.string},4110627:{name:"nextUID",value:e.uid},4096955:{name:"nextFilename",value:e.string},2807729:{name:"timecodeScale",value:e.uint},17545:{name:"duration",value:e.float},17505:{name:"dateUTC",value:e.uint},31657:{name:"title",value:e.string},19840:{name:"muxingApp",value:e.string},22337:{name:"writingApp",value:e.string}}},524531317:{name:"cluster",multiple:!0,container:{231:{name:"timecode",value:e.uid},22743:{name:"silentTracks ",multiple:!0},167:{name:"position",value:e.uid},171:{name:"prevSize",value:e.uid},160:{name:"blockGroup"},163:{name:"simpleBlock"}}},374648427:{name:"tracks",container:{174:{name:"entries",multiple:!0,container:{215:{name:"trackNumber",value:e.uint},29637:{name:"uid",value:e.uid},131:{name:"trackType",value:e.uint},185:{name:"flagEnabled",value:e.bool},136:{name:"flagDefault",value:e.bool},21930:{name:"flagForced",value:e.bool},156:{name:"flagLacing",value:e.bool},28135:{name:"minCache",value:e.uint},28136:{name:"maxCache",value:e.uint},2352003:{name:"defaultDuration",value:e.uint},2306383:{name:"timecodeScale",value:e.float},21358:{name:"name",value:e.string},2274716:{name:"language",value:e.string},134:{name:"codecID",value:e.string},25506:{name:"codecPrivate",value:e.binary},2459272:{name:"codecName",value:e.string},3839639:{name:"codecSettings",value:e.string},3883072:{name:"codecInfoUrl",value:e.string},2536e3:{name:"codecDownloadUrl",value:e.string},170:{name:"codecDecodeAll",value:e.bool},28587:{name:"trackOverlay",value:e.uint},224:{name:"video",container:{154:{name:"flagInterlaced",value:e.bool},21432:{name:"stereoMode",value:e.uint},176:{name:"pixelWidth",value:e.uint},186:{name:"pixelHeight",value:e.uint},21680:{name:"displayWidth",value:e.uint},21690:{name:"displayHeight",value:e.uint},21683:{name:"aspectRatioType",value:e.uint},3061028:{name:"colourSpace",value:e.uint},3126563:{name:"gammaValue",value:e.float}}},225:{name:"audio",container:{181:{name:"samplingFrequency",value:e.float},30901:{name:"outputSamplingFrequency",value:e.float}
1,159:{name:"channels",value:e.uint},148:{name:"channels",value:e.uint},32123:{name:"channelPositions",value:e.binary},25188:{name:"bitDepth",value:e.uint}}},28032:{name:"contentEncodings",container:{25152:{name:"contentEncoding",container:{20529:{name:"order",value:e.uint},20530:{name:"scope",value:e.bool},20531:{name:"type",value:e.uint},20532:{name:"contentEncoding",container:{16980:{name:"contentCompAlgo",value:e.uint},16981:{name:"contentCompSettings",value:e.binary}}},20533:{name:"contentEncoding",container:{18401:{name:"contentEncAlgo",value:e.uint},18402:{name:"contentEncKeyID",value:e.binary},18403:{name:"contentSignature ",value:e.binary},18404:{name:"ContentSigKeyID ",value:e.binary},18405:{name:"contentSigAlgo ",value:e.uint},18406:{name:"contentSigHashAlgo ",value:e.uint}}},25188:{name:"bitDepth",value:e.uint}}}}}}}}},475249515:{name:"cues",container:{187:{name:"cuePoint",container:{179:{name:"cueTime",value:e.uid},183:{name:"positions",container:{247:{name:"track",value:e.uint},241:{name:"clusterPosition",value:e.uint},21368:{name:"blockNumber",value:e.uint},234:{name:"codecState",value:e.uint},219:{name:"reference",container:{150:{name:"time",value:e.uint},151:{name:"cluster",value:e.uint},21343:{name:"number",value:e.uint},235:{name:"codecState",value:e.uint}}},240:{name:"relativePosition",value:e.uint}}}}}}},423732329:{name:"attachments",container:{24999:{name:"attachedFiles",multiple:!0,container:{18046:{name:"description",value:e.string},18030:{name:"name",value:e.string},18016:{name:"mimeType",value:e.string},18012:{name:"data",value:e.binary},18094:{name:"uid",value:e.uid}}}}},272869232:{name:"chapters",container:{17849:{name:"editionEntry",container:{182:{name:"chapterAtom",container:{29636:{name:"uid",value:e.uid},145:{name:"timeStart",value:e.uint},146:{name:"timeEnd",value:e.uid},152:{name:"hidden",value:e.bool},17816:{name:"enabled",value:e.uid},143:{name:"track",container:{137:{name:"trackNumber",value:e.uid},128:{name:"display",container:{133:{name:"string",value:e.string},17276:{name:"language ",value:e.string},17278:{name:"country ",value:e.string}}}}}}}}}}},307544935:{name:"tags",container:{29555:{name:"tag",multiple:!0,container:{25536:{name:"target",container:{25541:{name:"tagTrackUID",value:e.uid},25540:{name:"tagChapterUID",value:e.uint},25542:{name:"tagAttachmentUID",value:e.uid},25546:{name:"targetType",value:e.string},26826:{name:"targetTypeValue",value:e.uint},25545:{name:"tagEditionUID",value:e.uid}}},26568:{name:"simpleTags",multiple:!0,container:{17827:{name:"name",value:e.string},17543:{name:"string",value:e.string},17541:{name:"binary",value:e.binary},17530:{name:"language",value:e.string},17531:{name:"languageIETF",value:e.string},17540:{name:"default",value:e.bool}}}}}}}}}}},g=f("music-metadata:parser:ebml");class v extends I("EBML"){}const c={ReadNext:0,IgnoreElement:2,SkipSiblings:3,TerminateParsing:4,SkipElement:5};class F{constructor(a){this.padding=0,this.parserMap=new Map,this.ebmlMaxIDLength=4,this.ebmlMaxSizeLength=8,this.tokenizer=a,this.parserMap.set(e.uint,t=>this.readUint(t)),this.parserMap.set(e.string,t=>this.readString(t)),this.parserMap.set(e.binary,t=>this.readBuffer(t)),this.parserMap.set(e.uid,async t=>this.readBuffer(t)),this.parserMap.set(e.bool,t=>this.readFlag(t)),this.parserMap.set(e.float,t=>this.readFloat(t))}async iterate(a,t,u){return this.parseContainer(k(a),t,u)}async parseContainer(a,t,u){const s={};for(;this.tokenizer.position<t;){let i;const o=this.tokenizer.position;try{i=await this.readElement()}catch(r){if(r instanceof w)break;throw r}const n=a.container[i.id];if(n)switch(u.startNext(n)){case c.ReadNext:if(i.id,g(`Read element: name=${x(n)}{id=0x${i.id.toString(16)}, container=${!!n.container}} at position=${o}`),n.container){const m=await this.parseContainer(n,i.len>=0?this.tokenizer.position+i.len:-1,u);n.multiple?(s[n.name]||(s[n.name]=[]),s[n.name].push(m)):s[n.name]=m,await u.elementValue(n,m,o)}else{const m=this.parserMap.get(n.value);if(typeof m=="function"){const d=await m(i);s[n.name]=d,await u.elementValue(n,d,o)}}break;case c.SkipElement:g(`Go to next element: name=${x(n)}
1, element.id=0x${i.id}, container=${!!n.container} at position=${o}`);break;case c.IgnoreElement:g(`Ignore element: name=${x(n)}, element.id=0x${i.id}, container=${!!n.container} at position=${o}`),await this.tokenizer.ignore(i.len);break;case c.SkipSiblings:g(`Ignore remaining container, at: name=${x(n)}, element.id=0x${i.id}, container=${!!n.container} at position=${o}`),await this.tokenizer.ignore(t-this.tokenizer.position);break;case c.TerminateParsing:return g(`Terminate parsing at element: name=${x(n)}, element.id=0x${i.id}, container=${!!n.container} at position=${o}`),s}else switch(i.id){case 236:this.padding+=i.len,await this.tokenizer.ignore(i.len);break;default:g(`parseEbml: parent=${x(a)}, unknown child: id=${i.id.toString(16)} at position=${o}`),this.padding+=i.len,await this.tokenizer.ignore(i.len)}}return s}async readVintData(a){const t=await this.tokenizer.peekNumber(S);let u=128,s=1;for(;(t&u)===0;){if(s>a)throw new v("VINT value exceeding maximum size");++s,u>>=1}const i=new Uint8Array(s);return await this.tokenizer.readBuffer(i),i}async readElement(){const a=await this.readVintData(this.ebmlMaxIDLength),t=await this.readVintData(this.ebmlMaxSizeLength);return t[0]^=128>>t.length-1,{id:b(a,a.length),len:b(t,t.length)}}async readFloat(a){switch(a.len){case 0:return 0;case 4:return this.tokenizer.readNumber(T);case 8:return this.tokenizer.readNumber(h);case 10:return this.tokenizer.readNumber(h);default:throw new v(`Invalid IEEE-754 float length: ${a.len}`)}}async readFlag(a){return await this.readUint(a)===1}async readUint(a){const t=await this.readBuffer(a);return b(t,a.len)}async readString(a){return(await this.tokenizer.readToken(new E(a.len,"utf-8"))).replace(/\x00.*$/g,"")}async readBuffer(a){const t=new Uint8Array(a.len);return await this.tokenizer.readBuffer(t),t}}function b(l,a){return Number(M(l,a))}function M(l,a){const t=new Uint8Array(8),u=l.subarray(0,a);try{return t.set(u,8-a),$.get(t,0)}catch{return BigInt(-1)}}function k(l){return l.container&&Object.keys(l.container).map(a=>{const t=l.container[a];return t.id=Number.parseInt(a),t}).forEach(a=>{a.parent=l,k(a)}),l}function x(l){let a="";return l.parent&&l.parent.name!=="dtd"&&(a+=`${x(l.parent)}/`),a+l.name}const p=f("music-metadata:parser:matroska");class V extends z{constructor(){super(...arguments),this.seekHeadOffset=0,this.flagUseIndexToSkipClusters=this.options.mkvUseIndex??!1}async parse(){const a=this.tokenizer.fileInfo.size??Number.MAX_SAFE_INTEGER,t=new F(this.tokenizer);p("Initializing DTD end MatroskaIterator"),await t.iterate(U,a,{startNext:u=>{switch(u.id){case 475249515:return p(`Skip element: name=${u.name}, id=0x${u.id.toString(16)}`),c.IgnoreElement;case 524531317:if(this.flagUseIndexToSkipClusters&&this.seekHead){const s=this.seekHead.seek.find(i=>i.position+this.seekHeadOffset>this.tokenizer.position);if(s){const i=s.position+this.seekHeadOffset-this.tokenizer.position;return p(`Use index to go to next position, ignoring ${i} bytes`),this.tokenizer.ignore(i),c.SkipElement}}return c.IgnoreElement;default:return c.ReadNext}},elementValue:async(u,s,i)=>{switch(p(`Received: name=${u.name}, value=${s}`),u.id){case 17026:this.metadata.setFormat("container",`EBML/${s}`);break;case 290298740:this.seekHead=s,this.seekHeadOffset=i;break;case 357149030:{const o=s,n=o.timecodeScale?o.timecodeScale:1e6;if(typeof o.duration=="number"){const r=o.duration*n/1e9;await this.addTag("segment:title",o.title),this.metadata.setFormat("duration",Number(r))}}break;case 374648427:{const o=s;if(o?.entries){o.entries.forEach(r=>{const m={codecName:r.codecID.replace("A_","").replace("V_",""),codecSettings:r.codecSettings,flagDefault:r.flagDefault,flagLacing:r.flagLacing,flagEnabled:r.flagEnabled,language:r.language,name:r.name,type:r.trackType,audio:r.audio,video:r.video};this.metadata.addStreamInfo(m)});const n=o.entries.filter(r=>r.trackType===N.audio).reduce((r,m)=>!r||m.flagDefault&&!r.flagDefault||m.trackNumber<r.trackNumber?m:r,null);n&&(this.metadata.setFormat("codec",n.codecID.replace("A_","")),this.metadata.setFormat("sampleRate",n.audio.samplingFrequency),this.metadata.setFormat("numberOfChannels",n.audio.channels))}}break;case 307544935:{const o=s;await Promise.all(o.tag.map(async n=>{const r=n.target,m=r?.targetTypeValue?D[r.targetTypeValue]:r?.targetType?r.targetType:"track";await Promise.all(n.simpleTags.map(async d=>{const y=d.string?d.string:d.binary;await this.addTag(`${m}:${d.name}`,y)}
1))}))}break;case 423732329:{const o=s;await Promise.all(o.attachedFiles.filter(n=>n.mimeType.startsWith("image/")).map(n=>this.addTag("picture",{data:n.data,format:n.mimeType,description:n.description,name:n.name})))}break}}})}async addTag(a,t){await this.metadata.addTag("matroska",a,t)}}export{V as MatroskaParser};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.