private void ReadFrames() { while (true) { if (m_stopReadingFrames) { return; } float queuedAudioDuration; lock (m_audioPlayer) queuedAudioDuration = m_audioPlayer.GetQueuedAudioDuration(m_outputSampleRate); while (queuedAudioDuration < minimalBufferedAudioDuration) { if (m_stopReadingFrames) { return; } MVCommon.SharedRef <MVGraphAPI.Frame> newFrame = null; lock (m_mvxRunner) { if (!m_mvxRunner.ProcessNextFrame()) { break; } newFrame = new MVCommon.SharedRef <MVGraphAPI.Frame>(m_frameAccess.GetRecentProcessedFrame()); } if (newFrame.sharedObj == null) { break; } MvxAudioChunk newAudioChunk = ExtractAudioFromFrame(newFrame); if (newAudioChunk == null) { newFrame.Dispose(); break; } lock (m_audioChunkFramesQueue) { m_audioChunkFramesQueue.Enqueue(new KeyValuePair <MvxAudioChunk, MVCommon.SharedRef <MVGraphAPI.Frame> >(newAudioChunk, newFrame)); m_allocatedAudioChunks.Add(newAudioChunk); } lock (m_audioPlayer) { m_audioPlayer.EnqueueAudioChunk(newAudioChunk); queuedAudioDuration = m_audioPlayer.GetQueuedAudioDuration(m_outputSampleRate); } } Thread.Sleep(10); } }
protected void ReadFrame() { if (!m_mvxRunner.ProcessFrame(frameId)) { return; } lastReceivedFrame = new MVCommon.SharedRef <MVGraphAPI.Frame>(m_frameAccess.GetRecentProcessedFrame()); if (lastReceivedFrame.sharedObj != null) { onNextFrameReceived.Invoke(lastReceivedFrame); } }