ebml-stream
Version:
Ebml parser and encoder
285 lines (284 loc) • 15.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const EbmlTagId_1 = require("./enums/EbmlTagId");
const EbmlMasterTag_1 = require("./tags/EbmlMasterTag");
const EbmlDataTag_1 = require("./tags/EbmlDataTag");
const Block_1 = require("./tags/Block");
const SimpleBlock_1 = require("./tags/SimpleBlock");
const EbmlElementType_1 = require("./enums/EbmlElementType");
class EbmlTagFactory {
static create(id, type) {
if (EbmlTagId_1.EbmlTagId[id] !== undefined) {
let foundType;
switch (id) {
case EbmlTagId_1.EbmlTagId.Block:
return new Block_1.Block();
case EbmlTagId_1.EbmlTagId.SimpleBlock:
return new SimpleBlock_1.SimpleBlock();
case EbmlTagId_1.EbmlTagId.ChapterDisplay:
case EbmlTagId_1.EbmlTagId.ContentCompression:
case EbmlTagId_1.EbmlTagId.ContentEncryption:
case EbmlTagId_1.EbmlTagId.SilentTracks:
case EbmlTagId_1.EbmlTagId.ContentEncoding:
case EbmlTagId_1.EbmlTagId.TrackTranslate:
case EbmlTagId_1.EbmlTagId.ChapProcessCommand:
case EbmlTagId_1.EbmlTagId.ChapterTranslate:
case EbmlTagId_1.EbmlTagId.ChapProcess:
case EbmlTagId_1.EbmlTagId.Tag:
case EbmlTagId_1.EbmlTagId.Segment:
case EbmlTagId_1.EbmlTagId.SimpleTag:
case EbmlTagId_1.EbmlTagId.Targets:
case EbmlTagId_1.EbmlTagId.Tags:
case EbmlTagId_1.EbmlTagId.ChapterTrack:
case EbmlTagId_1.EbmlTagId.ChapterAtom:
case EbmlTagId_1.EbmlTagId.EditionEntry:
case EbmlTagId_1.EbmlTagId.Chapters:
case EbmlTagId_1.EbmlTagId.AttachedFile:
case EbmlTagId_1.EbmlTagId.Attachments:
case EbmlTagId_1.EbmlTagId.CueReference:
case EbmlTagId_1.EbmlTagId.CueTrackPositions:
case EbmlTagId_1.EbmlTagId.CuePoint:
case EbmlTagId_1.EbmlTagId.Cues:
case EbmlTagId_1.EbmlTagId.ContentEncAESSettings:
case EbmlTagId_1.EbmlTagId.ContentEncodings:
case EbmlTagId_1.EbmlTagId.TrackJoinBlocks:
case EbmlTagId_1.EbmlTagId.TrackPlane:
case EbmlTagId_1.EbmlTagId.TrackCombinePlanes:
case EbmlTagId_1.EbmlTagId.TrackOperation:
case EbmlTagId_1.EbmlTagId.Audio:
case EbmlTagId_1.EbmlTagId.Video:
case EbmlTagId_1.EbmlTagId.TrackEntry:
case EbmlTagId_1.EbmlTagId.Tracks:
case EbmlTagId_1.EbmlTagId.ReferenceFrame:
case EbmlTagId_1.EbmlTagId.TimeSlice:
case EbmlTagId_1.EbmlTagId.Slices:
case EbmlTagId_1.EbmlTagId.BlockMore:
case EbmlTagId_1.EbmlTagId.BlockAdditions:
case EbmlTagId_1.EbmlTagId.BlockGroup:
case EbmlTagId_1.EbmlTagId.Cluster:
case EbmlTagId_1.EbmlTagId.Info:
case EbmlTagId_1.EbmlTagId.Seek:
case EbmlTagId_1.EbmlTagId.SeekHead:
case EbmlTagId_1.EbmlTagId.SignatureElementList:
case EbmlTagId_1.EbmlTagId.SignatureElements:
case EbmlTagId_1.EbmlTagId.SignatureSlot:
case EbmlTagId_1.EbmlTagId.EBML:
foundType = EbmlElementType_1.EbmlElementType.Master;
break;
case EbmlTagId_1.EbmlTagId.TrackType:
case EbmlTagId_1.EbmlTagId.FlagDefault:
case EbmlTagId_1.EbmlTagId.ChapterTrackNumber:
case EbmlTagId_1.EbmlTagId.ChapterTimeStart:
case EbmlTagId_1.EbmlTagId.ChapterTimeEnd:
case EbmlTagId_1.EbmlTagId.CueRefTime:
case EbmlTagId_1.EbmlTagId.CueRefCluster:
case EbmlTagId_1.EbmlTagId.ChapterFlagHidden:
case EbmlTagId_1.EbmlTagId.ContentCompAlgo:
case EbmlTagId_1.EbmlTagId.DocTypeReadVersion:
case EbmlTagId_1.EbmlTagId.EBMLVersion:
case EbmlTagId_1.EbmlTagId.DocTypeVersion:
case EbmlTagId_1.EbmlTagId.TagDefault:
case EbmlTagId_1.EbmlTagId.ChapterFlagEnabled:
case EbmlTagId_1.EbmlTagId.FileUsedStartTime:
case EbmlTagId_1.EbmlTagId.FileUsedEndTime:
case EbmlTagId_1.EbmlTagId.ContentEncodingOrder:
case EbmlTagId_1.EbmlTagId.ContentEncodingScope:
case EbmlTagId_1.EbmlTagId.ContentEncodingType:
case EbmlTagId_1.EbmlTagId.CueBlockNumber:
case EbmlTagId_1.EbmlTagId.BitDepth:
case EbmlTagId_1.EbmlTagId.ChapProcessTime:
case EbmlTagId_1.EbmlTagId.ChapProcessCodecID:
case EbmlTagId_1.EbmlTagId.AttachmentLink:
case EbmlTagId_1.EbmlTagId.TagAttachmentUID:
case EbmlTagId_1.EbmlTagId.TagChapterUID:
case EbmlTagId_1.EbmlTagId.TagEditionUID:
case EbmlTagId_1.EbmlTagId.TagTrackUID:
case EbmlTagId_1.EbmlTagId.TargetTypeValue:
case EbmlTagId_1.EbmlTagId.ChapterPhysicalEquiv:
case EbmlTagId_1.EbmlTagId.ChapterSegmentEditionUID:
case EbmlTagId_1.EbmlTagId.ChapterUID:
case EbmlTagId_1.EbmlTagId.EditionFlagOrdered:
case EbmlTagId_1.EbmlTagId.EditionFlagDefault:
case EbmlTagId_1.EbmlTagId.EditionFlagHidden:
case EbmlTagId_1.EbmlTagId.EditionUID:
case EbmlTagId_1.EbmlTagId.FileUID:
case EbmlTagId_1.EbmlTagId.CueRefCodecState:
case EbmlTagId_1.EbmlTagId.CueRefNumber:
case EbmlTagId_1.EbmlTagId.CueCodecState:
case EbmlTagId_1.EbmlTagId.CueDuration:
case EbmlTagId_1.EbmlTagId.CueRelativePosition:
case EbmlTagId_1.EbmlTagId.CueClusterPosition:
case EbmlTagId_1.EbmlTagId.CueTrack:
case EbmlTagId_1.EbmlTagId.CueTime:
case EbmlTagId_1.EbmlTagId.AESSettingsCipherMode:
case EbmlTagId_1.EbmlTagId.ContentSigHashAlgo:
case EbmlTagId_1.EbmlTagId.ContentSigAlgo:
case EbmlTagId_1.EbmlTagId.ContentEncAlgo:
case EbmlTagId_1.EbmlTagId.TrickMasterTrackUID:
case EbmlTagId_1.EbmlTagId.TrickTrackFlag:
case EbmlTagId_1.EbmlTagId.TrickTrackUID:
case EbmlTagId_1.EbmlTagId.TrackJoinUID:
case EbmlTagId_1.EbmlTagId.TrackPlaneType:
case EbmlTagId_1.EbmlTagId.TrackPlaneUID:
case EbmlTagId_1.EbmlTagId.Channels:
case EbmlTagId_1.EbmlTagId.AspectRatioType:
case EbmlTagId_1.EbmlTagId.DisplayUnit:
case EbmlTagId_1.EbmlTagId.DisplayHeight:
case EbmlTagId_1.EbmlTagId.DisplayWidth:
case EbmlTagId_1.EbmlTagId.PixelCropRight:
case EbmlTagId_1.EbmlTagId.PixelCropLeft:
case EbmlTagId_1.EbmlTagId.PixelCropTop:
case EbmlTagId_1.EbmlTagId.PixelCropBottom:
case EbmlTagId_1.EbmlTagId.PixelHeight:
case EbmlTagId_1.EbmlTagId.PixelWidth:
case EbmlTagId_1.EbmlTagId.OldStereoMode:
case EbmlTagId_1.EbmlTagId.AlphaMode:
case EbmlTagId_1.EbmlTagId.StereoMode:
case EbmlTagId_1.EbmlTagId.FlagInterlaced:
case EbmlTagId_1.EbmlTagId.TrackTranslateCodec:
case EbmlTagId_1.EbmlTagId.TrackTranslateEditionUID:
case EbmlTagId_1.EbmlTagId.SeekPreRoll:
case EbmlTagId_1.EbmlTagId.CodecDelay:
case EbmlTagId_1.EbmlTagId.TrackOverlay:
case EbmlTagId_1.EbmlTagId.CodecDecodeAll:
case EbmlTagId_1.EbmlTagId.MaxBlockAdditionID:
case EbmlTagId_1.EbmlTagId.DefaultDecodedFieldDuration:
case EbmlTagId_1.EbmlTagId.DefaultDuration:
case EbmlTagId_1.EbmlTagId.MaxCache:
case EbmlTagId_1.EbmlTagId.MinCache:
case EbmlTagId_1.EbmlTagId.FlagLacing:
case EbmlTagId_1.EbmlTagId.FlagForced:
case EbmlTagId_1.EbmlTagId.FlagEnabled:
case EbmlTagId_1.EbmlTagId.TrackUID:
case EbmlTagId_1.EbmlTagId.TrackNumber:
case EbmlTagId_1.EbmlTagId.ReferenceTimeCode:
case EbmlTagId_1.EbmlTagId.ReferenceOffset:
case EbmlTagId_1.EbmlTagId.SliceDuration:
case EbmlTagId_1.EbmlTagId.Delay:
case EbmlTagId_1.EbmlTagId.BlockAdditionID:
case EbmlTagId_1.EbmlTagId.FrameNumber:
case EbmlTagId_1.EbmlTagId.LaceNumber:
case EbmlTagId_1.EbmlTagId.ReferencePriority:
case EbmlTagId_1.EbmlTagId.BlockDuration:
case EbmlTagId_1.EbmlTagId.BlockAddID:
case EbmlTagId_1.EbmlTagId.PrevSize:
case EbmlTagId_1.EbmlTagId.Position:
case EbmlTagId_1.EbmlTagId.SilentTrackNumber:
case EbmlTagId_1.EbmlTagId.Timecode:
case EbmlTagId_1.EbmlTagId.TimecodeScaleDenominator:
case EbmlTagId_1.EbmlTagId.TimecodeScale:
case EbmlTagId_1.EbmlTagId.ChapterTranslateCodec:
case EbmlTagId_1.EbmlTagId.ChapterTranslateEditionUID:
case EbmlTagId_1.EbmlTagId.SeekPosition:
case EbmlTagId_1.EbmlTagId.SignatureHash:
case EbmlTagId_1.EbmlTagId.SignatureAlgo:
case EbmlTagId_1.EbmlTagId.EBMLMaxSizeLength:
case EbmlTagId_1.EbmlTagId.EBMLMaxIDLength:
case EbmlTagId_1.EbmlTagId.EBMLReadVersion:
foundType = EbmlElementType_1.EbmlElementType.UnsignedInt;
break;
case EbmlTagId_1.EbmlTagId.TrackOffset:
case EbmlTagId_1.EbmlTagId.DiscardPadding:
case EbmlTagId_1.EbmlTagId.ReferenceVirtual:
case EbmlTagId_1.EbmlTagId.ReferenceBlock:
foundType = EbmlElementType_1.EbmlElementType.Integer;
break;
case EbmlTagId_1.EbmlTagId.CodecID:
case EbmlTagId_1.EbmlTagId.DocType:
case EbmlTagId_1.EbmlTagId.FileMimeType:
case EbmlTagId_1.EbmlTagId.TagLanguage:
case EbmlTagId_1.EbmlTagId.TargetType:
case EbmlTagId_1.EbmlTagId.ChapCountry:
case EbmlTagId_1.EbmlTagId.ChapLanguage:
case EbmlTagId_1.EbmlTagId.CodecDownloadURL:
case EbmlTagId_1.EbmlTagId.CodecInfoURL:
case EbmlTagId_1.EbmlTagId.Language:
foundType = EbmlElementType_1.EbmlElementType.String;
break;
case EbmlTagId_1.EbmlTagId.ChapString:
case EbmlTagId_1.EbmlTagId.TagString:
case EbmlTagId_1.EbmlTagId.ChapterStringUID:
case EbmlTagId_1.EbmlTagId.WritingApp:
case EbmlTagId_1.EbmlTagId.SegmentFilename:
case EbmlTagId_1.EbmlTagId.CodecName:
case EbmlTagId_1.EbmlTagId.TagName:
case EbmlTagId_1.EbmlTagId.FileName:
case EbmlTagId_1.EbmlTagId.FileDescription:
case EbmlTagId_1.EbmlTagId.CodecSettings:
case EbmlTagId_1.EbmlTagId.Name:
case EbmlTagId_1.EbmlTagId.MuxingApp:
case EbmlTagId_1.EbmlTagId.Title:
case EbmlTagId_1.EbmlTagId.NextFilename:
case EbmlTagId_1.EbmlTagId.PrevFilename:
foundType = EbmlElementType_1.EbmlElementType.UTF8;
break;
case EbmlTagId_1.EbmlTagId.ContentCompSettings:
case EbmlTagId_1.EbmlTagId.SegmentFamily:
case EbmlTagId_1.EbmlTagId.TagBinary:
case EbmlTagId_1.EbmlTagId.FileReferral:
case EbmlTagId_1.EbmlTagId.SignedElement:
case EbmlTagId_1.EbmlTagId.ChapProcessData:
case EbmlTagId_1.EbmlTagId.ChapProcessPrivate:
case EbmlTagId_1.EbmlTagId.ChapterSegmentUID:
case EbmlTagId_1.EbmlTagId.FileData:
case EbmlTagId_1.EbmlTagId.ContentSigKeyID:
case EbmlTagId_1.EbmlTagId.ContentSignature:
case EbmlTagId_1.EbmlTagId.ContentEncKeyID:
case EbmlTagId_1.EbmlTagId.TrickMasterTrackSegmentUID:
case EbmlTagId_1.EbmlTagId.TrickTrackSegmentUID:
case EbmlTagId_1.EbmlTagId.ChannelPositions:
case EbmlTagId_1.EbmlTagId.ColourSpace:
case EbmlTagId_1.EbmlTagId.TrackTranslateTrackID:
case EbmlTagId_1.EbmlTagId.CodecPrivate:
case EbmlTagId_1.EbmlTagId.EncryptedBlock:
case EbmlTagId_1.EbmlTagId.CodecState:
case EbmlTagId_1.EbmlTagId.BlockAdditional:
case EbmlTagId_1.EbmlTagId.BlockVirtual:
case EbmlTagId_1.EbmlTagId.ChapterTranslateID:
case EbmlTagId_1.EbmlTagId.NextUID:
case EbmlTagId_1.EbmlTagId.PrevUID:
case EbmlTagId_1.EbmlTagId.SegmentUID:
case EbmlTagId_1.EbmlTagId.SeekID:
case EbmlTagId_1.EbmlTagId.Signature:
case EbmlTagId_1.EbmlTagId.SignaturePublicKey:
case EbmlTagId_1.EbmlTagId.CRC32:
case EbmlTagId_1.EbmlTagId.Void:
foundType = EbmlElementType_1.EbmlElementType.Binary;
break;
case EbmlTagId_1.EbmlTagId.Duration:
case EbmlTagId_1.EbmlTagId.OutputSamplingFrequency:
case EbmlTagId_1.EbmlTagId.SamplingFrequency:
case EbmlTagId_1.EbmlTagId.FrameRate:
case EbmlTagId_1.EbmlTagId.GammaValue:
case EbmlTagId_1.EbmlTagId.TrackTimecodeScale:
foundType = EbmlElementType_1.EbmlElementType.Float;
break;
case EbmlTagId_1.EbmlTagId.DateUTC:
foundType = EbmlElementType_1.EbmlElementType.Date;
break;
}
if (type === undefined) {
type = foundType;
}
else {
if (type !== foundType) {
throw new Error(`Trying to create tag of well-known type "${EbmlTagId_1.EbmlTagId[id]}" using content type "${type}" (which is incorrect). Either pass the correct type or ignore the type parameter to EbmlTag.create()`);
}
}
}
switch (type) {
case EbmlElementType_1.EbmlElementType.Master:
return new EbmlMasterTag_1.EbmlMasterTag(id);
case EbmlElementType_1.EbmlElementType.UTF8:
case EbmlElementType_1.EbmlElementType.Binary:
case EbmlElementType_1.EbmlElementType.Date:
case EbmlElementType_1.EbmlElementType.Float:
case EbmlElementType_1.EbmlElementType.Integer:
case EbmlElementType_1.EbmlElementType.String:
case EbmlElementType_1.EbmlElementType.UnsignedInt:
default:
return new EbmlDataTag_1.EbmlDataTag(id, type);
}
}
}
exports.EbmlTagFactory = EbmlTagFactory;