public void Update(PlayInfraredFrame frame) { if (frame != null) { frame.GetFrameDataAsync().ContinueWith(async (pixels) => { await _bitmap.Dispatcher.InvokeAsync(() => { _bitmap.FromByteArray(pixels.Result); }); }); } }
internal static PlayInfraredFrame FromReader(BinaryReader reader, ICodec codec) { var frame = new PlayInfraredFrame(); frame.FrameType = FrameTypes.Infrared; frame.RelativeTime = TimeSpan.FromMilliseconds(reader.ReadDouble()); frame.FrameSize = reader.ReadInt64(); long frameStartPos = reader.BaseStream.Position; frame.Codec = codec; frame.Codec.ReadInfraredHeader(reader, frame); frame.Stream = reader.BaseStream; frame.StreamPosition = frame.Stream.Position; frame.Stream.Position += frame.FrameDataSize; // Do Frame Integrity Check var isGoodFrame = false; try { if (reader.ReadString() == PlayFrame.EndOfFrameMarker) { isGoodFrame = true; } } catch { } if (!isGoodFrame) { System.Diagnostics.Debug.WriteLine("BAD FRAME...RESETTING"); reader.BaseStream.Position = frameStartPos + frame.FrameSize; try { if (reader.ReadString() != PlayFrame.EndOfFrameMarker) { throw new IOException("The recording appears to be corrupt."); } return null; } catch { throw new IOException("The recording appears to be corrupt."); } } return frame; }
private void infraredPlay_FrameArrived(PlayInfraredFrame frame) { if (InfraredFrameArrived != null) InfraredFrameArrived(this, new PlayFrameArrivedEventArgs<PlayInfraredFrame> { Frame = frame }); }