@@ -20,7 +20,11 @@ import type {
2020 IAdaptationSetChildren ,
2121 ISegmentListIntermediateRepresentation ,
2222} from "../../../node_parser_types.ts" ;
23- import type { IAttributeParser , IChildrenParser } from "../parsers_stack.ts" ;
23+ import type {
24+ IAttributeParser ,
25+ IChildrenParser ,
26+ IStaticAttributeParser ,
27+ } from "../parsers_stack.ts" ;
2428import type ParsersStack from "../parsers_stack.ts" ;
2529import { AttributeName , TagName } from "../types.ts" ;
2630import { parseFloatOrBool , parseString } from "../utils.ts" ;
@@ -29,7 +33,7 @@ import { generateContentComponentAttrParser } from "./ContentComponent.ts";
2933import { generateContentProtectionAttrParser } from "./ContentProtection.ts" ;
3034import { generateLabelElementParser } from "./Label.ts" ;
3135import {
32- generateRepresentationAttrParser ,
36+ parseRepresentationAttribute ,
3337 generateRepresentationChildrenParser ,
3438} from "./Representation.ts" ;
3539import { generateSchemeAttrParser } from "./Scheme.ts" ;
@@ -147,11 +151,13 @@ export function generateAdaptationSetChildrenParser(
147151 linearMemory ,
148152 parsersStack ,
149153 ) ;
150- const attributeParser = generateRepresentationAttrParser (
154+ parsersStack . pushParsersWithStaticAttribute (
155+ nodeId ,
156+ childrenParser ,
157+ parseRepresentationAttribute ,
151158 representationObj . attributes ,
152159 linearMemory ,
153160 ) ;
154- parsersStack . pushParsers ( nodeId , childrenParser , attributeParser ) ;
155161 break ;
156162 }
157163
@@ -256,137 +262,136 @@ export function generateAdaptationSetAttrParser(
256262 adaptationAttrs : IAdaptationSetAttributes ,
257263 linearMemory : WebAssembly . Memory ,
258264) : IAttributeParser {
259- const textDecoder = new TextDecoder ( ) ;
260- return function onAdaptationSetAttribute ( attr : number , ptr : number , len : number ) {
261- const dataView = new DataView ( linearMemory . buffer ) ;
262- switch ( attr ) {
263- case AttributeName . Id :
264- adaptationAttrs . id = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
265- break ;
266- case AttributeName . Group :
267- adaptationAttrs . group = dataView . getFloat64 ( ptr , true ) ;
268- break ;
269- case AttributeName . Language :
270- adaptationAttrs . lang = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
271- break ;
272- case AttributeName . ContentType :
273- adaptationAttrs . contentType = parseString (
274- textDecoder ,
275- linearMemory . buffer ,
276- ptr ,
277- len ,
278- ) ;
279- break ;
280- case AttributeName . Par :
281- adaptationAttrs . par = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
282- break ;
283- case AttributeName . MinBandwidth :
284- adaptationAttrs . minBandwidth = dataView . getFloat64 ( ptr , true ) ;
285- break ;
286- case AttributeName . MaxBandwidth :
287- adaptationAttrs . maxBandwidth = dataView . getFloat64 ( ptr , true ) ;
288- break ;
289- case AttributeName . MinWidth :
290- adaptationAttrs . minWidth = dataView . getFloat64 ( ptr , true ) ;
291- break ;
292- case AttributeName . MaxWidth :
293- adaptationAttrs . maxWidth = dataView . getFloat64 ( ptr , true ) ;
294- break ;
295- case AttributeName . MinHeight :
296- adaptationAttrs . minHeight = dataView . getFloat64 ( ptr , true ) ;
297- break ;
298- case AttributeName . MaxHeight :
299- adaptationAttrs . maxHeight = dataView . getFloat64 ( ptr , true ) ;
300- break ;
301- case AttributeName . MinFrameRate :
302- adaptationAttrs . minFrameRate = dataView . getFloat64 ( ptr , true ) ;
303- break ;
304- case AttributeName . MaxFrameRate :
305- adaptationAttrs . maxFrameRate = dataView . getFloat64 ( ptr , true ) ;
306- break ;
307- case AttributeName . SelectionPriority :
308- adaptationAttrs . selectionPriority = dataView . getFloat64 ( ptr , true ) ;
309- break ;
310- case AttributeName . SegmentAlignment :
311- adaptationAttrs . segmentAlignment = parseFloatOrBool (
312- dataView . getFloat64 ( ptr , true ) ,
313- ) ;
314- break ;
315- case AttributeName . SubsegmentAlignment :
316- adaptationAttrs . subsegmentAlignment = parseFloatOrBool (
317- dataView . getFloat64 ( ptr , true ) ,
318- ) ;
319- break ;
320- case AttributeName . BitstreamSwitching :
321- adaptationAttrs . bitstreamSwitching = dataView . getUint8 ( ptr ) !== 0 ;
322- break ;
323- case AttributeName . AudioSamplingRate :
324- adaptationAttrs . audioSamplingRate = parseString (
325- textDecoder ,
326- linearMemory . buffer ,
327- ptr ,
328- len ,
329- ) ;
330- break ;
331- case AttributeName . Codecs :
332- adaptationAttrs . codecs = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
333- break ;
334- case AttributeName . SupplementalCodecs :
335- adaptationAttrs [ "scte214:supplementalCodecs" ] = parseString (
336- textDecoder ,
337- linearMemory . buffer ,
338- ptr ,
339- len ,
340- ) ;
341- break ;
342- case AttributeName . Profiles :
343- adaptationAttrs . profiles = parseString (
344- textDecoder ,
345- linearMemory . buffer ,
346- ptr ,
347- len ,
348- ) ;
349- break ;
350- case AttributeName . SegmentProfiles :
351- adaptationAttrs . segmentProfiles = parseString (
352- textDecoder ,
353- linearMemory . buffer ,
354- ptr ,
355- len ,
356- ) ;
357- break ;
358- case AttributeName . MimeType :
359- adaptationAttrs . mimeType = parseString (
360- textDecoder ,
361- linearMemory . buffer ,
362- ptr ,
363- len ,
364- ) ;
365- break ;
366- case AttributeName . CodingDependency :
367- adaptationAttrs . codingDependency = dataView . getUint8 ( ptr ) !== 0 ;
368- break ;
369- case AttributeName . FrameRate :
370- adaptationAttrs . frameRate = dataView . getFloat64 ( ptr , true ) ;
371- break ;
372- case AttributeName . Height :
373- adaptationAttrs . height = dataView . getFloat64 ( ptr , true ) ;
374- break ;
375- case AttributeName . Width :
376- adaptationAttrs . width = dataView . getFloat64 ( ptr , true ) ;
377- break ;
378- case AttributeName . MaxPlayoutRate :
379- adaptationAttrs . maxPlayoutRate = dataView . getFloat64 ( ptr , true ) ;
380- break ;
381- case AttributeName . MaxSAPPeriod :
382- adaptationAttrs . maximumSAPPeriod = dataView . getFloat64 ( ptr , true ) ;
383- break ;
384- case AttributeName . AvailabilityTimeOffset :
385- adaptationAttrs . availabilityTimeOffset = dataView . getFloat64 ( ptr , true ) ;
386- break ;
387- case AttributeName . AvailabilityTimeComplete :
388- adaptationAttrs . availabilityTimeComplete = dataView . getUint8 ( ptr ) !== 0 ;
389- break ;
390- }
391- } ;
265+ return ( attr : number , ptr : number , len : number ) =>
266+ parseAdaptationSetAttribute ( adaptationAttrs , linearMemory , attr , ptr , len ) ;
392267}
268+
269+ const textDecoder = new TextDecoder ( ) ;
270+
271+ export const parseAdaptationSetAttribute : IStaticAttributeParser = (
272+ target ,
273+ linearMemory ,
274+ attr ,
275+ ptr ,
276+ len ,
277+ ) => {
278+ const adaptationAttrs = target as IAdaptationSetAttributes ;
279+ const dataView = new DataView ( linearMemory . buffer ) ;
280+ switch ( attr ) {
281+ case AttributeName . Id :
282+ adaptationAttrs . id = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
283+ break ;
284+ case AttributeName . Group :
285+ adaptationAttrs . group = dataView . getFloat64 ( ptr , true ) ;
286+ break ;
287+ case AttributeName . Language :
288+ adaptationAttrs . lang = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
289+ break ;
290+ case AttributeName . ContentType :
291+ adaptationAttrs . contentType = parseString (
292+ textDecoder ,
293+ linearMemory . buffer ,
294+ ptr ,
295+ len ,
296+ ) ;
297+ break ;
298+ case AttributeName . Par :
299+ adaptationAttrs . par = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
300+ break ;
301+ case AttributeName . MinBandwidth :
302+ adaptationAttrs . minBandwidth = dataView . getFloat64 ( ptr , true ) ;
303+ break ;
304+ case AttributeName . MaxBandwidth :
305+ adaptationAttrs . maxBandwidth = dataView . getFloat64 ( ptr , true ) ;
306+ break ;
307+ case AttributeName . MinWidth :
308+ adaptationAttrs . minWidth = dataView . getFloat64 ( ptr , true ) ;
309+ break ;
310+ case AttributeName . MaxWidth :
311+ adaptationAttrs . maxWidth = dataView . getFloat64 ( ptr , true ) ;
312+ break ;
313+ case AttributeName . MinHeight :
314+ adaptationAttrs . minHeight = dataView . getFloat64 ( ptr , true ) ;
315+ break ;
316+ case AttributeName . MaxHeight :
317+ adaptationAttrs . maxHeight = dataView . getFloat64 ( ptr , true ) ;
318+ break ;
319+ case AttributeName . MinFrameRate :
320+ adaptationAttrs . minFrameRate = dataView . getFloat64 ( ptr , true ) ;
321+ break ;
322+ case AttributeName . MaxFrameRate :
323+ adaptationAttrs . maxFrameRate = dataView . getFloat64 ( ptr , true ) ;
324+ break ;
325+ case AttributeName . SelectionPriority :
326+ adaptationAttrs . selectionPriority = dataView . getFloat64 ( ptr , true ) ;
327+ break ;
328+ case AttributeName . SegmentAlignment :
329+ adaptationAttrs . segmentAlignment = parseFloatOrBool ( dataView . getFloat64 ( ptr , true ) ) ;
330+ break ;
331+ case AttributeName . SubsegmentAlignment :
332+ adaptationAttrs . subsegmentAlignment = parseFloatOrBool (
333+ dataView . getFloat64 ( ptr , true ) ,
334+ ) ;
335+ break ;
336+ case AttributeName . BitstreamSwitching :
337+ adaptationAttrs . bitstreamSwitching = dataView . getUint8 ( ptr ) !== 0 ;
338+ break ;
339+ case AttributeName . AudioSamplingRate :
340+ adaptationAttrs . audioSamplingRate = parseString (
341+ textDecoder ,
342+ linearMemory . buffer ,
343+ ptr ,
344+ len ,
345+ ) ;
346+ break ;
347+ case AttributeName . Codecs :
348+ adaptationAttrs . codecs = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
349+ break ;
350+ case AttributeName . SupplementalCodecs :
351+ adaptationAttrs [ "scte214:supplementalCodecs" ] = parseString (
352+ textDecoder ,
353+ linearMemory . buffer ,
354+ ptr ,
355+ len ,
356+ ) ;
357+ break ;
358+ case AttributeName . Profiles :
359+ adaptationAttrs . profiles = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
360+ break ;
361+ case AttributeName . SegmentProfiles :
362+ adaptationAttrs . segmentProfiles = parseString (
363+ textDecoder ,
364+ linearMemory . buffer ,
365+ ptr ,
366+ len ,
367+ ) ;
368+ break ;
369+ case AttributeName . MimeType :
370+ adaptationAttrs . mimeType = parseString ( textDecoder , linearMemory . buffer , ptr , len ) ;
371+ break ;
372+ case AttributeName . CodingDependency :
373+ adaptationAttrs . codingDependency = dataView . getUint8 ( ptr ) !== 0 ;
374+ break ;
375+ case AttributeName . FrameRate :
376+ adaptationAttrs . frameRate = dataView . getFloat64 ( ptr , true ) ;
377+ break ;
378+ case AttributeName . Height :
379+ adaptationAttrs . height = dataView . getFloat64 ( ptr , true ) ;
380+ break ;
381+ case AttributeName . Width :
382+ adaptationAttrs . width = dataView . getFloat64 ( ptr , true ) ;
383+ break ;
384+ case AttributeName . MaxPlayoutRate :
385+ adaptationAttrs . maxPlayoutRate = dataView . getFloat64 ( ptr , true ) ;
386+ break ;
387+ case AttributeName . MaxSAPPeriod :
388+ adaptationAttrs . maximumSAPPeriod = dataView . getFloat64 ( ptr , true ) ;
389+ break ;
390+ case AttributeName . AvailabilityTimeOffset :
391+ adaptationAttrs . availabilityTimeOffset = dataView . getFloat64 ( ptr , true ) ;
392+ break ;
393+ case AttributeName . AvailabilityTimeComplete :
394+ adaptationAttrs . availabilityTimeComplete = dataView . getUint8 ( ptr ) !== 0 ;
395+ break ;
396+ }
397+ } ;
0 commit comments