public void Read(Stream stream)
        {
            using (var binReader = new BinaryReader(stream))
            {
                //Check that magic number is here.
                if (MAGIC != binReader.ReadUInt32())  //4
                {
                    throw new InvalidFileFormatException("Invalid caption file (not VCCD).");
                }
                if (Version != binReader.ReadUInt32())  //8
                {
                    throw new InvalidFileFormatException("Only VCCD version 2 is supported.");
                }
                uint blockCount = binReader.ReadUInt32();       //12
                BlockSize = binReader.ReadUInt32();             //16
                uint numberOfCaptions = binReader.ReadUInt32(); //20  (match to DirectorySize in VRF)

                uint dataOffset = binReader.ReadUInt32();
                if (dataOffset != (baseHeader + paddingBytes + (numberOfCaptions * headerSize)))
                {
                    //throw new InvalidFileFormatException("Data offset is invalid.");  //Apparently this calculation is wrong.  So, for now we will ignore it.
                }
                for (uint i = 0; i < numberOfCaptions; i++)
                {
                    var caption = new ClosedCaption();
                    caption.SoundEventHash = binReader.ReadUInt32();
                    caption.DefinitionHash = binReader.ReadUInt32();
                    caption.Blocknum       = binReader.ReadUInt32();
                    caption.Offset         = binReader.ReadUInt16();
                    caption.ReadLength     = binReader.ReadUInt16();
                    Captions.Add(caption);
                }
                foreach (var caption in Captions)
                {
                    binReader.BaseStream.Position = dataOffset + (caption.Blocknum * BlockSize) + caption.Offset;
                    var captionText = binReader.ReadNullTermString(Encoding.Unicode);

                    //possibility of validating definitionHash against hash of captiontext here.

                    caption.Definition = captionText;
                }
            }
        }
 public ClosedCaptionDependencyObject(ClosedCaption caption)
 {
     Caption     = caption;
     CaptionText = caption.Definition;
 }
 public ClosedCaptionDependencyObject()
 {
     Caption = new ClosedCaption();
 }
 public void Add(ClosedCaption caption)
 {
     Add(caption.SoundEvent, caption.RawDefinition);
 }
 public void Insert(int index, ClosedCaption caption)
 {
     Insert(index, caption.SoundEvent, caption.RawDefinition);
 }
Esempio n. 6
0
 public CaptionModifierRule()
 {
     Caption = new ClosedCaption();
 }