/// <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); }
/// <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); }