private AudioFrame provideShadowFrame() { InternalAudioTrack shadow = shadowTrack; AudioFrame frame = null; if (shadow != null) { frame = shadow.provide(); if (frame != null && frame.isTerminator()) { shadowTrack = null; frame = null; } } return frame; }
@Override public AudioFrame provide(long timeout, TimeUnit unit) throws TimeoutException, InterruptedException { AudioFrame frame = audioFrames.poll(); if (frame == null) { AudioFrame terminator = fetchPendingTerminator(); if (terminator != null) { return terminator; } if (timeout > 0) { frame = audioFrames.poll(timeout, unit); if (frame == null || frame.isTerminator()) { terminator = fetchPendingTerminator(); return terminator != null ? terminator : frame; } } } else if (frame.isTerminator()) { fetchPendingTerminator(); return frame; } return filterFrame(frame); }
private void processProvidedFrame(AudioFrame frame) { if (frame != null && !frame.isTerminator()) { lastFrameTimecode.set(frame.getTimecode()); if (pendingSeek.get() == NO_SEEK && !frameBuffer.hasClearOnInsert()) { markerTracker.checkPlaybackTimecode(frame.getTimecode()); } } }
private void processProvidedFrame(AudioFrame frame) { if (frame != null && !frame.isTerminator()) { if (!isPerformingSeek()) { markerTracker.checkPlaybackTimecode(frame.getTimecode()); } lastFrameTimecode.set(frame.getTimecode()); } }
@Override public AudioFrame provide(long timeout, TimeUnit unit) throws TimeoutException, InterruptedException { InternalAudioTrack track; lastRequestTime = System.currentTimeMillis(); if (timeout == 0 && paused.get()) { return null; } while ((track = activeTrack) != null) { AudioFrame frame = timeout > 0 ? track.provide(timeout, unit) : track.provide(); if (frame != null) { lastReceiveTime = System.nanoTime(); shadowTrack = null; if (frame.isTerminator()) { handleTerminator(track); continue; } } else if (timeout == 0) { checkStuck(track); frame = provideShadowFrame(); } return frame; } return null; }
private boolean passToMutable(AudioFrame frame, MutableAudioFrame targetFrame) { if (targetFrame != null) { if (frame.isTerminator()) { targetFrame.setTerminator(true); } else { targetFrame.setTimecode(frame.getTimecode()); targetFrame.setVolume(frame.getVolume()); targetFrame.store(frame.getData(), 0, frame.getDataLength()); targetFrame.setTerminator(false); } return true; } return false; }