// See QuickTime File Format Specification, 2010-08-03, pg.1 private static void ParseTcmiAtom(QtParser parser, uint size) { long tcmiPosition = (parser.Position - 4); parser.AddAttribute(new FormattedAttribute <QtAtom.Attribute, uint>(QtAtom.Attribute.Size, size)); uint type = parser.GetFourCC(QtAtom.Attribute.Type); parser.CheckAttribute(QtAtom.Attribute.Type, type == Tcmi, false); parser.GetByte(QtAtom.Attribute.Version); parser.GetThreeBytes(QtAtom.Attribute.Flags); parser.GetUShort(Attribute.TextFont); parser.GetUShort(Attribute.TextFace); parser.GetUShort(Attribute.TextSize); parser.GetUShort(Attribute.TcmiReserved); parser.Parse(new Color(Attribute.TextColor)); parser.Parse(new Color(Attribute.BackgroundColor)); parser.GetPascalString(Attribute.FontName, 0); parser.CheckAttribute(QtAtom.Attribute.Size, size == (parser.Position - tcmiPosition), false); }
public override bool Parse(QtParser parser) { if (!base.Parse(parser)) { return(false); } ushort regionSize = parser.GetUShort(Attribute.RegionSize); parser.Parse(new RegionBounderyBox()); parser.CheckAttribute(Attribute.RegionSize, regionSize == parser.BytesRemaining); if (Valid) { parser.GetHexDump(Attribute.ClippingRegionData, regionSize); } return(Valid); }
public override bool Parse(QtParser parser) { if (!base.Parse(parser)) { return(false); } if (!CheckComponentSubType(ComponentSubType.tmcd)) { Valid = false; return(Valid); } uint reserved = parser.GetUInt(); if (reserved == 0) { parser.AddAttribute(new FormattedAttribute <QtSampleDescriptionAtom.Attribute, int>(QtSampleDescriptionAtom.Attribute.Reserved, (int)reserved)); parser.GetShort(QtSampleDescriptionAtom.Attribute.Reserved); parser.GetShort(QtSampleDescriptionAtom.Attribute.DataReferenceIndex); reserved = parser.GetUInt(Attribute.Reserved1); parser.CheckAttribute(Attribute.Reserved1, reserved == 0, true); parser.Parse(new Flags()); parser.GetInt(Attribute.TimeScale); parser.GetInt(Attribute.FrameDuration); parser.GetByte(Attribute.NumberOfFrames); reserved = parser.GetThreeBytes(Attribute.Reserved2); parser.CheckAttribute(Attribute.Reserved2, reserved == 0, false); if (parser.BytesRemaining > 0) { parser.GetHexDump(QtAtom.Attribute.AdditionalData, (int)parser.BytesRemaining); } } else { ParseTcmiAtom(parser, reserved); } return(Valid); }