private void NALUnitVideoAdd(NALUnit cNALUnit) { if (cNALUnit.nStart + cNALUnit.nBytesQty > _cStream.nBytesBuffered) { _cStream.Cache(cNALUnit.nStart + cNALUnit.nBytesQty - _cStream.nBytesBuffered); } double nProgress = 0; lock (_cSyncRoot) { _aVideoNALs.Add(cNALUnit); if (cNALUnit.bFrameStart) { _nFramesBuffered++; if (_bAudioFrameNeeded) { if (1 < (nProgress = (double)(_nFramesBuffered - _nCurrentFrameVideo) / (_nBufferSeconds * 25))) { nProgress = 1; } ReportGetSampleProgress(nProgress); } } } if (0.9 < nProgress) { if (_bAudioFrameNeeded) { GetSampleAsync(MediaStreamType.Audio); } if (_bVideoFrameNeeded) { GetSampleAsync(MediaStreamType.Video); } } }