コード例 #1
0
        unsafe void OnpDisplay(void *opaque, void *picture)
        {
            lock (m_lock)
            {
                try
                {
                    PixelData *px = (PixelData *)opaque;
                    MemoryHeap.CopyMemory(m_pBuffer, px->pPixelData, px->size);

                    m_frameRate++;
                    if (m_callback != null)
                    {
                        using (Bitmap frame = GetBitmap())
                        {
                            m_callback(frame);
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (m_excHandler != null)
                    {
                        m_excHandler(ex);
                    }
                    else
                    {
                        throw ex;
                    }
                }
            }
        }
コード例 #2
0
        void AppGpuDumpMemoryProps(AppGpu gpu, StreamWriter output)
        {
            PhysicalDeviceMemoryProperties props = gpu.MemoryProps;

            output.WriteLine("VkPhysicalDeviceMemoryProperties:");
            output.WriteLine("=================================");
            output.WriteLine("\tmemoryTypeCount       = {0}", props.MemoryTypeCount);
            for (int i = 0; i < props.MemoryTypeCount; i++)
            {
                MemoryType memoryType = props.MemoryTypes[i];

                output.WriteLine("\tmemoryTypes[{0}] : ", i);
                output.WriteLine("\t\tpropertyFlags = {0}", memoryType.PropertyFlags);
                output.WriteLine("\t\theapIndex     = {0}", memoryType.HeapIndex);
            }
            output.WriteLine("\tmemoryHeapCount       = {0}", props.MemoryHeapCount);

            for (int i = 0; i < props.MemoryHeapCount; i++)
            {
                MemoryHeap memoryHeap = props.MemoryHeaps[i];

                output.WriteLine("\tmemoryHeaps[{0}] : ", i);
                output.WriteLine("\t\tsize          = {0}", memoryHeap.Size);
            }
        }
コード例 #3
0
        private FrameData DeepClone(IntPtr data, int size)
        {
            FrameData clone = new FrameData();

            clone.Data = new IntPtr(MemoryHeap.Alloc(size));
            MemoryHeap.CopyMemory(clone.Data.ToPointer(), data.ToPointer(), size);
            clone.DataSize = size;
            return(clone);
        }
コード例 #4
0
        private FrameData DeepClone(byte[] buffer)
        {
            FrameData clone = new FrameData();

            clone.Data = new IntPtr(MemoryHeap.Alloc(buffer.Length));
            Marshal.Copy(buffer, 0, clone.Data, buffer.Length);
            clone.DataSize = buffer.Length;
            return(clone);
        }
コード例 #5
0
        public void Dispose()
        {
            for (int i = 0; i < Sizes.Length; i++)
            {
                MemoryHeap.Free(Data[i]);
            }

            MemoryHeap.Free(Data);
        }
コード例 #6
0
 public PlanarPixelData(int[] lineSizes)
 {
     Sizes = lineSizes;
     Data  = (byte **)MemoryHeap.Alloc(sizeof(byte *) * Sizes.Length);
     for (int i = 0; i < Sizes.Length; i++)
     {
         Data[i] = (byte *)MemoryHeap.Alloc(sizeof(byte) * Sizes[i]);
     }
 }
コード例 #7
0
        public void SetFormat(BitmapFormat format)
        {
            m_format = format;

            LibVlcMethods.libvlc_video_set_format(m_hMediaPlayer, m_format.Chroma.ToUtf8(), m_format.Width, m_format.Height, m_format.Pitch);
            m_pBuffer = MemoryHeap.Alloc(m_format.ImageSize);

            m_pixelData    = new PixelData(m_format.ImageSize);
            m_pixelDataPtr = GCHandle.Alloc(m_pixelData, GCHandleType.Pinned);
            LibVlcMethods.libvlc_video_set_callbacks(m_hMediaPlayer, pLockCallback, pUnlockCallback, pDisplayCallback, m_pixelDataPtr.AddrOfPinnedObject());
        }
コード例 #8
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                m_timer.Dispose();
            }

            IntPtr zero = IntPtr.Zero;

            LibVlcMethods.libvlc_video_set_callbacks(m_hMediaPlayer, zero, zero, zero, zero);

            m_pixelDataPtr.Free();
            m_pixelData.Dispose();

            MemoryHeap.Free(m_pBuffer);
        }
コード例 #9
0
        unsafe void OnpDisplay(void *opaque, void *picture)
        {
            lock (m_lock)
            {
                PixelData *px = (PixelData *)opaque;
                MemoryHeap.CopyMemory(m_pBuffer, px->pPixelData, px->size);

                m_frameRate++;
                if (m_callback != null)
                {
                    using (Bitmap frame = GetBitmap())
                    {
                        m_callback(frame);
                    }
                }
            }
        }
コード例 #10
0
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                m_callbacks = null;
                if (m_queue != null && m_queue.Count > 0)
                {
                    foreach (var item in m_queue)
                    {
                        MemoryHeap.Free(item.Data.ToPointer());
                    }
                }
                m_queue = null;
            }
        }
コード例 #11
0
        public void SetFormat(BitmapFormat format)
        {
            if (!format.IsRGB)
            {
                string msg = "IMemoryRenderer supports RGB pixel formats only. For YUV and/or planar pixel formats use IMemoryRendererEx";
                throw new InvalidOperationException(msg);
            }

            m_format = format;

            LibVlcMethods.libvlc_video_set_format(m_hMediaPlayer, m_format.Chroma.ToUtf8(), m_format.Width, m_format.Height, m_format.Pitch);
            m_pBuffer = MemoryHeap.Alloc(m_format.ImageSize);

            m_pixelData    = new PixelData(m_format.ImageSize);
            m_pixelDataPtr = GCHandle.Alloc(m_pixelData, GCHandleType.Pinned);
            LibVlcMethods.libvlc_video_set_callbacks(m_hMediaPlayer, pLockCallback, pUnlockCallback, pDisplayCallback, m_pixelDataPtr.AddrOfPinnedObject());
        }
コード例 #12
0
 private void OnImemRelease(void *data, char *cookie, uint dataSize, void *pData)
 {
     try
     {
         MemoryHeap.Free(pData);
     }
     catch (Exception ex)
     {
         if (m_excHandler != null)
         {
             m_excHandler(ex);
         }
         else
         {
             throw new Exception("imem-release callback failed", ex);
         }
     }
 }
コード例 #13
0
ファイル: VideoInputMedia.cs プロジェクト: PlumpMath/nVlc-3.5
        public void AddFrame(Bitmap frame)
        {
            Monitor.Enter(m_lock);

            try
            {
                Rectangle  rect    = new Rectangle(0, 0, frame.Width, frame.Height);
                BitmapData bmpData = frame.LockBits(rect, ImageLockMode.ReadOnly, frame.PixelFormat);

                void *pData = bmpData.Scan0.ToPointer();
                MemoryHeap.CopyMemory(m_data.pPixelData, pData, m_data.size);

                frame.UnlockBits(bmpData);
            }
            finally
            {
                Monitor.Exit(m_lock);
            }
        }
コード例 #14
0
 public void Dispose()
 {
     MemoryHeap.Free(this.pPixelData);
 }
コード例 #15
0
 public PixelData(int size)
 {
     this.size       = size;
     this.pPixelData = (byte *)MemoryHeap.Alloc(size);
 }