internal StreamContainer(StreamInfo streamInfo, int queueSize)
            {
                Info = streamInfo;
                if (queueSize == 0)
                {
                    return;
                }

                Queue = new CircularQueue <FrameData>(queueSize, d => FreeBuffer(d),
                                                      FullBufferEnqueueBehavior.DiscardOldest, EmptyBufferDequeueBehavior.ReturnDefault);
                var settings = BufferPoolSettings.CreateDefault(Info.Size, queueSize / 2);

                MemoryPool = new BufferPool(settings, string.Format("{0} pool", Info.Category));
            }
        public void Initialize(StreamInfo streamInfo, int maxItemsInQueue)
        {
            if (streamInfo == null)
            {
                throw new ArgumentNullException("streamInfo");
            }

            if (maxItemsInQueue < 2)
            {
                throw new ArgumentException("maxItemsInQueue");
            }

            streamInfo.Validate();
            m_videoStreamInfo = streamInfo;
            AddOptions(MediaOptions.ToList());
            m_videoQueue = new BlockingCollection <FrameData>(maxItemsInQueue);
            var settings = BufferPoolSettings.CreateDefault(m_videoStreamInfo.Size, maxItemsInQueue / 2);

            m_videoPool   = new BufferPool(settings, "Video pool");
            m_initilaized = true;
        }