Exemplo n.º 1
0
        public unsafe bool TryDecode(ref VideoPacket packet, out VideoFrame frame)
        {
            if (_videoDecoder == null)
            {
                _videoDecoder = new VideoDecoder();
                fixed(byte *pData = &packet.Data[0])
                {
                    _avPacket.data = pData;
                    _avPacket.size = packet.Data.Length;
                    if (_videoDecoder.TryDecode(ref _avPacket, ref _avFrame))
                    {
                        if (_videoConverter == null)
                        {
                            _videoConverter = new VideoConverter(_pixelFormat.ToAVPixelFormat());
                        }
                        byte[] data = _videoConverter.ConvertFrame(ref _avFrame);
                        frame = new VideoFrame()
                        {
                            Timestamp   = packet.Timestamp,
                            Number      = packet.FrameNumber,
                            Width       = packet.Width,
                            Height      = packet.Height,
                            Depth       = data.Length / (packet.Width * packet.Height),
                            PixelFormat = _pixelFormat,
                            Data        = data
                        };
                        return(true);
                    }
                }

                frame = null;
                return(false);
        }
 public unsafe bool TryDecode(ref VideoPacket packet, out VideoFrame frame)
 {
   if (_videoDecoder == null)
     _videoDecoder = new VideoDecoder();
   fixed (byte* pData = &packet.Data[0])
   {
     _avPacket.data = pData;
     _avPacket.size = packet.Data.Length;
     if (_videoDecoder.TryDecode(ref _avPacket, ref _avFrame))
     {
       if (_videoConverter == null)
         _videoConverter = new VideoConverter(_pixelFormat.ToAVPixelFormat());
       byte[] data = _videoConverter.ConvertFrame(ref _avFrame);
       frame = new VideoFrame()
       {
         Timestamp = packet.Timestamp,
         Number = packet.FrameNumber,
         Width = packet.Width,
         Height = packet.Height,
         Depth = data.Length / (packet.Width * packet.Height),
         PixelFormat = _pixelFormat,
         Data = data
       };
       return true;
     }
   }
   frame = null;
   return false;
 }