Beispiel #1
0
 // 返却
 public void Push(FramePacket packet)
 {
     lock (this)
     {
         pool.AddFront(packet);
     }
 }
Beispiel #2
0
 // リクエストされたサイズ以上のバッファを返す。
 public FramePacket GetDataBuffer(int size)
 {
     lock (this)
     {
         // TODO: 1回だけでいいの?
         if (pool.Count > 0)
         {
             FramePacket candidate = pool.RemoveFront();
             if (candidate == null)
             {
                 Debug.LogError("candidate is null! returns new buffer.");
                 return(GetNewBuffer(size));
             }
             else
             {
                 if (candidate.Buffer == null)
                 {
                     Debug.LogError("candidate.Buffer is null!");
                 }
             }
             if (candidate.Buffer.Length > size)
             {
                 return(candidate);
             }
         }
     }
     return(GetNewBuffer(size));
 }
Beispiel #3
0
        // バッファをプールから取り出し、さらにデータをコピーして渡す
        public FramePacket GetDataBufferWithContents(int width, int height, byte[] src, int size)
        {
            FramePacket dest = GetDataBuffer(size);

            System.Array.Copy(src, 0, dest.Buffer, 0, size);
            dest.width  = width;
            dest.height = height;
            return(dest);
        }
        public void Push(FramePacket frame)
        {
            frameLoad.Track();
            FramePacket trashBuf = null;

            lock (this)
            {
                frames.AddFront(frame);
                if (frames.Count >= maxQueueCount)
                {
                    frameSkip.Track();
                    trashBuf = frames.RemoveBack();
                }
            }
            // lock内でPushしないのは、thisとbufferPoolの両方のlockを同時にとらないようにする配慮。
            if (trashBuf != null)
            {
                bufferPool.Push(trashBuf);
            }
        }
 public void Pool(FramePacket buf)
 {
     bufferPool.Push(buf);
 }
Beispiel #6
0
        private FramePacket GetNewBuffer(int neededSize)
        {
            FramePacket packet = new FramePacket((int)(neededSize * 1.2));

            return(packet);
        }