Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
 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;
     }
 }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 private void OnVideoPacketDecoded(VideoFrame frame)
 {
     _frameImage = VideoHelper.CreateImageFromFrame(frame);
 }