Exemplo n.º 1
0
        //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
        //ORIGINAL LINE: @Override public AudioFrame provide(long timeout, TimeUnit unit) throws TimeoutException, InterruptedException
        public AudioFrame provide(long timeout, TimeUnit unit)
        {
            AudioFrame frame = frameBuffer.provide(timeout, unit);

            processProvidedFrame(frame);
            return(frame);
        }
Exemplo n.º 2
0
        public AudioFrame provide()
        {
            AudioFrame frame = frameBuffer.provide();

            processProvidedFrame(frame);
            return(frame);
        }
Exemplo n.º 3
0
        public AudioFrame provide(long timeout, TimeUnit unit)
        {
            AudioFrame frame = provideDirectly(timeout, unit);

            if (outputHook != null)
            {
                frame = outputHook.outgoingFrame(this, frame);
            }
            return(frame);
        }
Exemplo n.º 4
0
        private void processProvidedFrame(AudioFrame frame)
        {
            if (frame != null && !frame.Terminator)
            {
                lastFrameTimecode.set(frame.timecode);

                if (pendingSeek.get() == NO_SEEK && !frameBuffer.hasClearOnInsert())
                {
                    markerTracker.checkPlaybackTimecode(frame.timecode);
                }
            }
        }
Exemplo n.º 5
0
        private AudioFrame provideShadowFrame()
        {
            InternalAudioTrack shadow = shadowTrack;
            AudioFrame         frame  = null;

            if (shadow != null)
            {
                frame = shadow.provide();

                if (frame != null && frame.Terminator)
                {
                    shadowTrack = null;
                    frame       = null;
                }
            }

            return(frame);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Provide an audio frame bypassing hooks. </summary>
        /// <param name="timeout"> Specifies the maximum time to wait for data. Pass 0 for non-blocking mode. </param>
        /// <param name="unit"> Specifies the time unit of the maximum wait time. </param>
        /// <returns> An audio frame if available, otherwise null </returns>
        public AudioFrame provideDirectly(long timeout, TimeUnit unit)
        {
            InternalAudioTrack track;

            lastRequestTime = DateTimeHelperClass.CurrentUnixTimeMillis();

            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 = nanoTime();
                    shadowTrack     = null;

                    if (frame.Terminator)
                    {
                        handleTerminator(track);
                        continue;
                    }
                }
                else if (timeout == 0)
                {
                    checkStuck(track);

                    frame = provideShadowFrame();
                }

                return(frame);
            }

            return(null);
        }