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); }
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(); } } }