コード例 #1
0
ファイル: BufferExtractor.cs プロジェクト: azzahrah/Droid-Vid
        /// <summary>
        /// Provides a byte buffer of the next sample in the internal FIFO (thread-safe)
        /// </summary>
        /// <returns>byte[].Lenth may =0 if called when internal queue is empty</returns>
        public VideoSample DequeueNextSample()
        {
            //int c;
            //lock(outBuffers)
            //{
            //    c = outBuffers.Count;
            //}
            //Task.Run(() => Debug.WriteLine("buffers ready count: " + c));


            PacketizedElementaryStream pes = DequeueNextPacket();



            byte[] buf    = new byte[0];//empty array
            var    sample = new VideoSample();

            if (pes != null)
            {
                buf = pes.GetPayload();

                if (pes.HasPts)
                {
                    sample.PresentationTimeStamp = pes.PTS;
                }
            }

            sample.Buffer = buf;

            return(sample);
        }
コード例 #2
0
        /// <summary>
        /// Provides a byte buffer of the next sample in the internal FIFO (thread-safe)
        /// </summary>
        /// <returns>byte[].Lenth may =0 if called when internal queue is empty</returns>
        public VideoSample DequeueNextSample()
        {
            PacketizedElementaryStream pes = DequeueNextPacket();

            var sample = new VideoSample();

            byte[] buff = null;

            bool gotPayload = false;

            if (pes != null)
            {
                buff       = GetLargeBuffer(pes.EstimateBufferSize());
                gotPayload = pes.GetPayload(buff);

                if (!gotPayload)
                {
                    ReturnLargeBuffer(buff);
                }

                if (pes.HasPts)
                {
                    sample.PresentationTimeStamp = pes.PTS;
                }

                //this is now handled in pes.Dispose() !
                //// reclaim buffers
                //if (usePool)
                //{
                //    lock (bufferPool)
                //    {
                //        var returnedBuffers = pes.GetBuffers();

                //        foreach (var buffer in returnedBuffers)
                //            bufferPool.Push(buffer);
                //    }
                //}
            }

            sample.Buffer = gotPayload ? buff : null;

            return(sample);
        }