public static unsafe Bitmap CreateImageFromFrame(VideoFrame frame) { PixelFormat pixelFormat = ConvertPixelFormat(frame.PixelFormat); var bitmap = new Bitmap(frame.Width, frame.Height, pixelFormat); if (pixelFormat == PixelFormat.Format8bppIndexed) { ColorPalette palette = bitmap.Palette; for (int i = 0; i < palette.Entries.Length; i++) { palette.Entries[i] = Color.FromArgb(i, i, i); } bitmap.Palette = palette; } Rectangle rect = new Rectangle(0, 0, frame.Width, frame.Height); BitmapData data = bitmap.LockBits(rect, ImageLockMode.WriteOnly, pixelFormat); Marshal.Copy(frame.Data, 0, data.Scan0, frame.Data.Length); bitmap.UnlockBits(data); return bitmap; }
public bool TryDecode(ref VideoPacket packet, out VideoFrame frame) { if (_videoDecoder == null) _videoDecoder = new VideoDecoder(); frame = new VideoFrame(); FFmpegNative.AVFrame avFrame; if (_videoDecoder.TryDecode(ref packet.Data, out avFrame)) { if (_videoConverter == null) _videoConverter = new VideoConverter(PixelFormatHelper.ToAVPixelFormat(_pixelFormat)); frame.Timestamp = packet.Timestamp; frame.FrameNumber = packet.FrameNumber; frame.PixelFormat = _pixelFormat; frame.Data = _videoConverter.ConvertFrame(avFrame); return true; } return false; }
public static unsafe Bitmap CreateImageFromFrame(VideoFrame frame) { fixed (void* pData = &frame.Data[0, 0, 0]) { PixelFormat pixelFormat = ConvertPixelFormat(frame.PixelFormat); int height = frame.Data.GetLength(0); int width = frame.Data.GetLength(1); int depth = frame.Data.GetLength(2); var bitmap = new Bitmap(width, height, width*depth, pixelFormat, new IntPtr(pData)); if (pixelFormat == PixelFormat.Format8bppIndexed) { ColorPalette palette = bitmap.Palette; for (int i = 0; i < palette.Entries.Length; i++) { palette.Entries[i] = Color.FromArgb(i, i, i); } bitmap.Palette = palette; } return bitmap; } }
public bool TryDecode(ref VideoPacket packet, out VideoFrame frame) { if (_videoDecoder == null) _videoDecoder = new VideoDecoder(); frame = new VideoFrame(); AVFrame avFrame; if (_videoDecoder.TryDecode(ref packet.Data, out avFrame)) { if (_videoConverter == null) _videoConverter = new VideoConverter(_pixelFormat.ToAVPixelFormat()); frame.Timestamp = packet.Timestamp; frame.FrameNumber = packet.FrameNumber; frame.Width = packet.Width; frame.Height = packet.Height; frame.PixelFormat = _pixelFormat; frame.Data = _videoConverter.ConvertFrame(avFrame); return true; } return false; }
private void OnVideoPacketDecoded(VideoFrame frame) { _frameImage = VideoHelper.CreateImageFromFrame(frame); }