public static OverlayInfo Read(BinaryReader reader)
        {
            var header = reader.ReadInt32();

            if (header != nameof(OverlayInfo).GetHashCode())
            {
                return(null);
            }
            var message  = reader.ReadString();
            var keyFrame = reader.ReadBoolean();
            var info     = format.ReadFrame(reader);

            info.Message  = message;
            info.KeyFrame = keyFrame;
            return(info);
        }
Beispiel #2
0
 public static OverlayInfo FromFrame(VideoFrame frame)
 {
     unsafe
     {
         using (var stream = new UnmanagedMemoryStream((byte *)frame.GetReadPtr().ToPointer(),
                                                       frame.GetRowSize(), frame.GetRowSize(), FileAccess.Read))
             using (var reader = new BinaryReader(stream))
             {
                 var header = reader.ReadString();
                 if (header != nameof(OverlayInfo))
                 {
                     throw new AvisynthException();
                 }
                 return(format.ReadFrame(reader));
             }
     }
 }
 public OverlayInfo this[int frameNumber]
 {
     get
     {
         lock (stream)
         {
             if (stream.Length == 0)
             {
                 return(null);
             }
             CheckHeader();
             stream.Position = 1 + format.FrameSize * frameNumber;
             if (stream.Position >= stream.Length)
             {
                 return(null);
             }
             return(format.ReadFrame(reader));
         }
     }
     set
     {
         lock (stream)
         {
             WriteHeader();
             stream.Position = 1 + format.FrameSize * frameNumber;
             var writer = new BinaryWriter(stream);
             if (value == null)
             {
                 writer.Write(0);
             }
             else
             {
                 value.FrameNumber = frameNumber;
                 format.WriteFrame(writer, value);
             }
             writer.Flush();
         }
     }
 }