From 64fee2c71871249ae88e56cab4a14b2e6ba7aca2 Mon Sep 17 00:00:00 2001 From: denny Date: Tue, 29 Mar 2016 20:00:23 -0400 Subject: [PATCH] wip #34 - testing and validating changes and testing decoding. --- src/controller/channel/ChannelEditor.java | 2 + .../channel/ChannelProcessingManager.java | 22 ++- .../channel/TrafficChannelEvent.java | 34 +++++ src/module/ProcessingChain.java | 22 ++- src/module/decode/p25/P25DecoderState.java | 8 +- src/module/decode/state/ChannelState.java | 125 ++++++++---------- src/module/decode/state/State.java | 7 +- .../decode/state/TrafficChannelManager.java | 42 ++---- .../state/TrafficChannelStatusListener.java | 21 --- .../audio/DemodulatedAudioFilterModule.java | 5 +- .../demodulate/fm/FMDemodulatorModule.java | 2 + src/settings/SettingsManager.java | 4 +- src/source/tuner/TunerChannelSource.java | 8 +- 13 files changed, 153 insertions(+), 149 deletions(-) create mode 100644 src/controller/channel/TrafficChannelEvent.java delete mode 100644 src/module/decode/state/TrafficChannelStatusListener.java diff --git a/src/controller/channel/ChannelEditor.java b/src/controller/channel/ChannelEditor.java index 42509675..0b787479 100644 --- a/src/controller/channel/ChannelEditor.java +++ b/src/controller/channel/ChannelEditor.java @@ -173,6 +173,8 @@ public class ChannelEditor extends Editor implements ActionListener, Ch { if( hasItem() ) { + save(); + mChannelEnableRequested = true; mChannelModel.broadcast( new ChannelEvent( getItem(), Event.REQUEST_ENABLE ) ); } diff --git a/src/controller/channel/ChannelProcessingManager.java b/src/controller/channel/ChannelProcessingManager.java index ee4c3766..91ca81f2 100644 --- a/src/controller/channel/ChannelProcessingManager.java +++ b/src/controller/channel/ChannelProcessingManager.java @@ -112,7 +112,7 @@ public class ChannelProcessingManager implements ChannelEventListener if( !mProcessingChains.containsKey( channel.getChannelID() ) || !mProcessingChains.get( channel.getChannelID() ).isProcessing() ) { - startProcessing( channel ); + startProcessing( event ); } break; case REQUEST_DISABLE: @@ -141,7 +141,7 @@ public class ChannelProcessingManager implements ChannelEventListener if( isProcessing( channel ) ) { stopProcessing( channel, false ); - startProcessing( channel ); + startProcessing( event ); } break; default: @@ -149,8 +149,10 @@ public class ChannelProcessingManager implements ChannelEventListener } } - private void startProcessing( Channel channel ) + private void startProcessing( ChannelEvent event ) { + Channel channel = event.getChannel(); + ProcessingChain processingChain = mProcessingChains.get( channel.getChannelID() ); //If we're already processing, ignore the request @@ -256,8 +258,17 @@ public class ChannelProcessingManager implements ChannelEventListener processingChain.setSource( source ); - processingChain.start(); + if( event instanceof TrafficChannelEvent ) + { + TrafficChannelEvent trafficChannelEvent = (TrafficChannelEvent)event; + + processingChain.getChannelState().configureAsTrafficChannel( + trafficChannelEvent.getTrafficChannelManager(), + trafficChannelEvent.getCallEvent() ); + } + processingChain.start(); + channel.setEnabled( true ); mProcessingChains.put( channel.getChannelID(), processingChain ); @@ -276,8 +287,7 @@ public class ChannelProcessingManager implements ChannelEventListener chain.stop(); - mChannelModel.broadcast( new ChannelEvent( channel, - Event.NOTIFICATION_PROCESSING_STOP ) ); + mChannelModel.broadcast( new ChannelEvent( channel, Event.NOTIFICATION_PROCESSING_STOP ) ); if( remove ) { diff --git a/src/controller/channel/TrafficChannelEvent.java b/src/controller/channel/TrafficChannelEvent.java new file mode 100644 index 00000000..20c4aade --- /dev/null +++ b/src/controller/channel/TrafficChannelEvent.java @@ -0,0 +1,34 @@ +package controller.channel; + +import module.decode.event.CallEvent; +import module.decode.state.TrafficChannelManager; + +public class TrafficChannelEvent extends ChannelEvent +{ + private TrafficChannelManager mTrafficChannelManager; + private CallEvent mCallEvent; + + /** + * Call event with traffic channel manager for call back, and original creation event. + */ + public TrafficChannelEvent( TrafficChannelManager trafficChannelManager, + Channel channel, + Event event, + CallEvent callEvent ) + { + super( channel, event ); + + mTrafficChannelManager = trafficChannelManager; + mCallEvent = callEvent; + } + + public TrafficChannelManager getTrafficChannelManager() + { + return mTrafficChannelManager; + } + + public CallEvent getCallEvent() + { + return mCallEvent; + } +} diff --git a/src/module/ProcessingChain.java b/src/module/ProcessingChain.java index 271d1216..3556b897 100644 --- a/src/module/ProcessingChain.java +++ b/src/module/ProcessingChain.java @@ -69,7 +69,6 @@ import audio.squelch.ISquelchStateListener; import audio.squelch.ISquelchStateProvider; import audio.squelch.SquelchState; import controller.NamingThreadFactory; -import controller.ThreadPoolManager; import controller.channel.Channel.ChannelType; import controller.channel.ChannelEvent; import controller.channel.IChannelEventListener; @@ -95,8 +94,7 @@ import controller.channel.IChannelEventProvider; */ public class ProcessingChain implements IChannelEventListener { - private final static Logger mLog = - LoggerFactory.getLogger( ProcessingChain.class ); + private final static Logger mLog = LoggerFactory.getLogger( ProcessingChain.class ); private Broadcaster mAudioPacketBroadcaster = new Broadcaster<>(); private Broadcaster mMetadataBroadcaster = new Broadcaster<>(); @@ -177,6 +175,11 @@ public class ProcessingChain implements IChannelEventListener mMessageBroadcaster.dispose(); mFilteredRealBufferBroadcaster.dispose(); mSquelchStateBroadcaster.dispose(); + + if( mScheduledExecutorService != null ) + { + mScheduledExecutorService.shutdownNow(); + } } /** @@ -356,7 +359,7 @@ public class ProcessingChain implements IChannelEventListener if( module instanceof IUnFilteredRealBufferListener ) { - mFilteredRealBufferBroadcaster.addListener( + mUnFilteredRealBufferBroadcaster.addListener( ((IUnFilteredRealBufferListener)module).getUnFilteredRealBufferListener() ); } } @@ -478,8 +481,11 @@ public class ProcessingChain implements IChannelEventListener } } - mScheduledExecutorService = Executors.newScheduledThreadPool( - 1, new NamingThreadFactory( "channel " + mName ) ); + if( mScheduledExecutorService == null ) + { + mScheduledExecutorService = Executors.newScheduledThreadPool( + 1, new NamingThreadFactory( "channel " + mName ) ); + } /* Start each of the modules */ for( Module module: mModules ) @@ -493,6 +499,8 @@ public class ProcessingChain implements IChannelEventListener mLog.error( "Error starting module", e ); } } + + mSource.start( mScheduledExecutorService ); } else { @@ -511,6 +519,8 @@ public class ProcessingChain implements IChannelEventListener { if( mSource != null ) { + mSource.stop(); + switch( mSource.getSampleType() ) { case COMPLEX: diff --git a/src/module/decode/p25/P25DecoderState.java b/src/module/decode/p25/P25DecoderState.java index 5fce8640..3772c0ad 100644 --- a/src/module/decode/p25/P25DecoderState.java +++ b/src/module/decode/p25/P25DecoderState.java @@ -121,6 +121,7 @@ import module.decode.p25.reference.LinkControlOpcode; import module.decode.p25.reference.Response; import module.decode.p25.reference.Service; import module.decode.p25.reference.Vendor; +import module.decode.state.ChangeChannelTimeoutEvent; import module.decode.state.ChangedAttribute; import module.decode.state.DecoderState; import module.decode.state.DecoderStateEvent; @@ -207,6 +208,10 @@ public class P25DecoderState extends DecoderState @Override public void start( ScheduledExecutorService executor ) { + if( mChannelType == ChannelType.TRAFFIC ) + { + broadcast( new ChangeChannelTimeoutEvent( this, ChannelType.TRAFFIC, 1000 ) ); + } } @Override @@ -2819,8 +2824,7 @@ public class P25DecoderState extends DecoderState broadcast( event ); } - broadcast( new TrafficChannelAllocationEvent( this, - mChannelCallMap.get( channel ) ) ); + broadcast( new TrafficChannelAllocationEvent( this, mChannelCallMap.get( channel ) ) ); if( gvcgu.hasChannelNumber2() ) { diff --git a/src/module/decode/state/ChannelState.java b/src/module/decode/state/ChannelState.java index 42dd2412..d77a62f6 100644 --- a/src/module/decode/state/ChannelState.java +++ b/src/module/decode/state/ChannelState.java @@ -21,30 +21,27 @@ import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; + +import module.Module; +import module.decode.config.DecodeConfiguration; +import module.decode.event.CallEvent; +import module.decode.event.ICallEventProvider; +import module.decode.state.DecoderStateEvent.Event; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sample.Listener; import audio.metadata.IMetadataProvider; import audio.metadata.Metadata; import audio.metadata.MetadataReset; import audio.metadata.MetadataType; import audio.squelch.ISquelchStateProvider; import audio.squelch.SquelchState; -import controller.ThreadPoolManager; -import controller.ThreadPoolManager.ThreadType; import controller.channel.Channel.ChannelType; -import module.Module; -import module.decode.config.DecodeConfiguration; -import module.decode.event.CallEvent; -import module.decode.event.ICallEventProvider; -import module.decode.state.DecoderStateEvent.Event; -import sample.Listener; -public class ChannelState extends Module implements ICallEventProvider, - IChangedAttributeProvider, IDecoderStateEventListener, - IDecoderStateEventProvider, IMetadataProvider, ISquelchStateProvider +public class ChannelState extends Module implements ICallEventProvider, IChangedAttributeProvider, + IDecoderStateEventListener, IDecoderStateEventProvider, IMetadataProvider, ISquelchStateProvider { private final static Logger mLog = LoggerFactory.getLogger( ChannelState.class ); @@ -66,18 +63,16 @@ public class ChannelState extends Module implements ICallEventProvider, private boolean mSelected = false; private long mStandardChannelFadeTimeout = FADE_TIMEOUT_DELAY; - private long mTrafficChannelFadeTimeout = - DecodeConfiguration.DEFAULT_CALL_TIMEOUT_SECONDS * 1000; + private long mTrafficChannelFadeTimeout = DecodeConfiguration.DEFAULT_CALL_TIMEOUT_SECONDS * 1000; private long mFadeTimeout; private long mEndTimeout; private StateMonitor mStateMonitor = new StateMonitor(); - private AtomicBoolean mMonitoring = new AtomicBoolean(); private ScheduledFuture mStateMonitorFuture; private ChannelType mChannelType; - private TrafficChannelStatusListener mTrafficChannelStatusListener; + private TrafficChannelManager mTrafficChannelEndListener; private CallEvent mTrafficChannelCallEvent; /** @@ -127,21 +122,20 @@ public class ChannelState extends Module implements ICallEventProvider, @Override public void start( ScheduledExecutorService executor ) { - //Start a monitoring task to check for FADE and END event timeouts - if( mMonitoring.compareAndSet( false, true ) ) + if( mStateMonitorFuture == null && mStateMonitor != null ) { - if( mStateMonitorFuture == null && mStateMonitor != null ) + if( mTrafficChannelEndListener != null ) { - try - { - mStateMonitorFuture = executor.scheduleAtFixedRate( - mStateMonitor, 0, 20, TimeUnit.MILLISECONDS ); - } - catch( RejectedExecutionException ree ) - { - mLog.error( "state monitor scheduled task rejected", ree ); - mMonitoring.set( false ); - } + setState( State.CALL ); + } + + try + { + mStateMonitorFuture = executor.scheduleAtFixedRate( mStateMonitor, 0, 20, TimeUnit.MILLISECONDS ); + } + catch( RejectedExecutionException ree ) + { + mLog.error( "state monitor scheduled task rejected", ree ); } } } @@ -149,23 +143,29 @@ public class ChannelState extends Module implements ICallEventProvider, @Override public void stop() { - mSquelchLocked = false; - - //Shutdown the state montoring task - if( mMonitoring.compareAndSet( true, false ) ) + if( mStateMonitorFuture != null ) { - if( mStateMonitorFuture != null ) - { - boolean success = mStateMonitorFuture.cancel( true ); - - if( !success ) - { - mLog.error("Couldn't stop monitoring scheduled future" ); - } - } + boolean success = mStateMonitorFuture.cancel( true ); - mStateMonitorFuture = null; + if( !success ) + { + mLog.error("Couldn't stop monitoring scheduled future" ); + } } + + mTrafficChannelEndListener = null; + + if( mTrafficChannelCallEvent != null ) + { + mTrafficChannelCallEvent.end(); + broadcast( mTrafficChannelCallEvent ); + } + + mTrafficChannelCallEvent = null; + + mStateMonitorFuture = null; + + mSquelchLocked = false; } public void dispose() @@ -203,7 +203,7 @@ public class ChannelState extends Module implements ICallEventProvider, if( mChannelType == ChannelType.TRAFFIC ) { - mFadeTimeout = mTrafficChannelFadeTimeout; + mFadeTimeout = System.currentTimeMillis() + mTrafficChannelFadeTimeout; } } @@ -235,6 +235,7 @@ public class ChannelState extends Module implements ICallEventProvider, { mFadeTimeout = System.currentTimeMillis() + mStandardChannelFadeTimeout; } + } /** @@ -387,23 +388,9 @@ public class ChannelState extends Module implements ICallEventProvider, broadcast( ChangedAttribute.CHANNEL_STATE ); - if( mTrafficChannelCallEvent != null ) + if( mTrafficChannelEndListener != null ) { - mTrafficChannelCallEvent.end(); - - broadcast( mTrafficChannelCallEvent ); - mTrafficChannelCallEvent = null; - } - - if( mTrafficChannelStatusListener != null ) - { - mTrafficChannelStatusListener.callEnd(); - mTrafficChannelStatusListener = null; - } - else - { - mLog.error( "Traffic channel status listener was null - couldn't " - + "teardown the channel"); + mTrafficChannelEndListener.callEnd( mTrafficChannelCallEvent.getChannel() ); } } @@ -528,11 +515,11 @@ public class ChannelState extends Module implements ICallEventProvider, * Registers a listener to be notified when a traffic channel call event is * completed, so that the listener can perform call tear-down */ - public void configureAsTrafficChannel( TrafficChannelStatusListener listener, - TrafficChannelAllocationEvent allocationEvent ) + public void configureAsTrafficChannel( TrafficChannelManager manager, CallEvent callEvent ) { - mTrafficChannelStatusListener = listener; - mTrafficChannelCallEvent = allocationEvent.getCallEvent(); + mTrafficChannelEndListener = manager; + + mTrafficChannelCallEvent = callEvent; /* Broadcast the call event details as metadata for the audio manager */ String channel = mTrafficChannelCallEvent.getChannel(); @@ -541,9 +528,9 @@ public class ChannelState extends Module implements ICallEventProvider, { broadcast( new Metadata( MetadataType.CHANNEL_NUMBER, channel, true ) ); } - + broadcast( new Metadata( MetadataType.PROTOCOL, - mTrafficChannelCallEvent.getDecoderType().getDisplayString(), true ) ); + mTrafficChannelCallEvent.getDecoderType().getDisplayString(), true ) ); String details = mTrafficChannelCallEvent.getDetails(); @@ -572,13 +559,12 @@ public class ChannelState extends Module implements ICallEventProvider, if( frequency > 0 ) { - broadcast( new Metadata( MetadataType.FREQUENCY, - String.valueOf( frequency ), true ) ); + broadcast( new Metadata( MetadataType.FREQUENCY, String.valueOf( frequency ), true ) ); } /* Rebroadcast the allocation event so that the internal decoder states * can self-configure with the call event details */ - broadcast( allocationEvent ); + broadcast( mTrafficChannelCallEvent ); } /** @@ -660,7 +646,6 @@ public class ChannelState extends Module implements ICallEventProvider, if( State.CALL_STATES.contains( mState ) && mFadeTimeout <= System.currentTimeMillis() ) { - mState = State.FADE; processFadeState(); } else if( mState == State.FADE && diff --git a/src/module/decode/state/State.java b/src/module/decode/state/State.java index 1f1bc79b..3c9f5189 100644 --- a/src/module/decode/state/State.java +++ b/src/module/decode/state/State.java @@ -103,11 +103,8 @@ public enum State private String mDisplayValue; - public static final EnumSet CALL_STATES = - EnumSet.of( CALL, CONTROL, DATA, ENCRYPTED ); - - public static final EnumSet IDLE_STATES = - EnumSet.of( IDLE, FADE ); + public static final EnumSet CALL_STATES = EnumSet.of( CALL, CONTROL, DATA, ENCRYPTED ); + public static final EnumSet IDLE_STATES = EnumSet.of( IDLE, FADE ); private State( String displayValue ) { diff --git a/src/module/decode/state/TrafficChannelManager.java b/src/module/decode/state/TrafficChannelManager.java index b78b9ea8..452d5680 100644 --- a/src/module/decode/state/TrafficChannelManager.java +++ b/src/module/decode/state/TrafficChannelManager.java @@ -7,7 +7,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; import module.Module; -import module.ProcessingChain; import module.decode.config.DecodeConfiguration; import module.decode.event.CallEvent; import module.decode.event.CallEvent.CallEventType; @@ -29,6 +28,7 @@ import controller.channel.ChannelEvent; import controller.channel.ChannelEvent.Event; import controller.channel.ChannelModel; import controller.channel.ChannelProcessingManager; +import controller.channel.TrafficChannelEvent; public class TrafficChannelManager extends Module implements ICallEventProvider, IDecoderStateEventListener @@ -148,7 +148,7 @@ public class TrafficChannelManager extends Module mTrafficChannelPool.add( channel ); } - /* If we have a configured channel, start it and track it */ + /* If we have a configured channel, update metadata */ if( channel != null ) { channel.setSourceConfiguration( new SourceConfigTuner( tunerChannel ) ); @@ -156,11 +156,7 @@ public class TrafficChannelManager extends Module channel.setSite( mSite ); channel.setName( channelNumber ); - mChannelModel.broadcast( new ChannelEvent( channel, - Event.NOTIFICATION_CONFIGURATION_CHANGE ) ); - - mChannelModel.broadcast( new ChannelEvent( channel, - Event.REQUEST_ENABLE ) ); + mChannelModel.broadcast( new ChannelEvent( channel, Event.NOTIFICATION_CONFIGURATION_CHANGE ) ); } } @@ -201,35 +197,25 @@ public class TrafficChannelManager extends Module } else if( frequency > 0 ) { - Channel channel = getChannel( callEvent.getChannel(), - new TunerChannel( Type.TRAFFIC, frequency, - mDecodeConfiguration.getDecoderType() - .getChannelBandwidth() ) ); + Channel channel = getChannel( callEvent.getChannel(), new TunerChannel( Type.TRAFFIC, + frequency, mDecodeConfiguration.getDecoderType().getChannelBandwidth() ) ); if( channel != null ) { + TrafficChannelEvent trafficChannelEvent = + new TrafficChannelEvent( this, channel, Event.REQUEST_ENABLE, callEvent ); + + //Request to enable the channel + mChannelModel.broadcast( trafficChannelEvent ); + if( channel.getEnabled() ) { - ProcessingChain chain = mChannelProcessingManager - .getProcessingChain( channel ); - - if( chain != null ) - { - ChannelState state = chain.getChannelState(); - - /* Register as a listener to be notified when the call - * is completed */ - state.configureAsTrafficChannel( - new TrafficChannelStatusListener( this, - callEvent.getChannel() ), event ); - - /* Set state to call so that audio squelch state is correct */ - state.setState( State.CALL ); - } + mTrafficChannelsInUse.put( callEvent.getChannel(), channel ); } else { callEvent.setCallEventType( CallEventType.CALL_DETECT ); + callEvent.setDetails( "CHANNEL START REJECTED" ); } } else @@ -394,7 +380,7 @@ public class TrafficChannelManager extends Module if( channelNumber != null && mTrafficChannelsInUse.containsKey( channelNumber ) ) { Channel channel = mTrafficChannelsInUse.get( channelNumber ); - + mChannelModel.broadcast( new ChannelEvent( channel, Event.REQUEST_DISABLE ) ); mTrafficChannelsInUse.remove( channelNumber ); diff --git a/src/module/decode/state/TrafficChannelStatusListener.java b/src/module/decode/state/TrafficChannelStatusListener.java deleted file mode 100644 index e1b31a58..00000000 --- a/src/module/decode/state/TrafficChannelStatusListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package module.decode.state; - -public class TrafficChannelStatusListener -{ - private TrafficChannelManager mTrafficChannelManager; - private String mChannelNumber; - - public TrafficChannelStatusListener( TrafficChannelManager manager, String channelNumber ) - { - mTrafficChannelManager = manager; - mChannelNumber = channelNumber; - } - - public void callEnd() - { - if( mTrafficChannelManager != null ) - { - mTrafficChannelManager.callEnd( mChannelNumber ); - } - } -} diff --git a/src/module/demodulate/audio/DemodulatedAudioFilterModule.java b/src/module/demodulate/audio/DemodulatedAudioFilterModule.java index 7920d9a1..63da95da 100644 --- a/src/module/demodulate/audio/DemodulatedAudioFilterModule.java +++ b/src/module/demodulate/audio/DemodulatedAudioFilterModule.java @@ -51,9 +51,8 @@ public class DemodulatedAudioFilterModule extends Module assert( stop > pass ); //TODO: change this to a band pass filter - mBandPassFilter = new RealFIRFilter_RB_RB( - FilterFactory.getLowPass( 48000, pass, stop, 60, - WindowType.HANNING, true ), 1.0f ); + mBandPassFilter = new RealFIRFilter_RB_RB( FilterFactory.getLowPass( 48000, pass, stop, 60, + WindowType.HANNING, true ), 1.0f ); mDCFilter.setListener( mBandPassFilter ); } diff --git a/src/module/demodulate/fm/FMDemodulatorModule.java b/src/module/demodulate/fm/FMDemodulatorModule.java index f96f9528..0b4033a0 100644 --- a/src/module/demodulate/fm/FMDemodulatorModule.java +++ b/src/module/demodulate/fm/FMDemodulatorModule.java @@ -37,6 +37,8 @@ import dsp.fm.FMDemodulator_CB; public class FMDemodulatorModule extends Module implements IComplexBufferListener, IUnFilteredRealBufferProvider { + private final static Logger mLog = LoggerFactory.getLogger( FMDemodulatorModule.class ); + private static final int SAMPLE_RATE = 48000; private ComplexFIRFilter_CB_CB mIQFilter; diff --git a/src/settings/SettingsManager.java b/src/settings/SettingsManager.java index cc5432b5..0861e303 100644 --- a/src/settings/SettingsManager.java +++ b/src/settings/SettingsManager.java @@ -614,7 +614,6 @@ public class SettingsManager implements Listener private void save() { - mLog.debug( "Saving settings" ); saveTunerConfigurationModel(); JAXBContext context = null; @@ -699,8 +698,7 @@ public class SettingsManager implements Listener if( Files.exists( settingsPath ) ) { - mLog.info( "SettingsManager - loading settings file [" + - settingsPath.toString() + "]" ); + mLog.info( "SettingsManager - loading settings file [" + settingsPath.toString() + "]" ); JAXBContext context = null; diff --git a/src/source/tuner/TunerChannelSource.java b/src/source/tuner/TunerChannelSource.java index 66fba403..ca4a9205 100644 --- a/src/source/tuner/TunerChannelSource.java +++ b/src/source/tuner/TunerChannelSource.java @@ -132,8 +132,7 @@ public class TunerChannelSource extends ComplexSource } else { - mLog.warn( "Attempt to start() and already running tuner channel " - + "source was ignored" ); + mLog.warn( "Attempt to start() and already running tuner channel source was ignored" ); } } @@ -162,8 +161,7 @@ public class TunerChannelSource extends ComplexSource } else { - mLog.warn( "Attempt to stop() and already stopped tuner channel " - + "source was ignored" ); + mLog.warn( "Attempt to stop() and already stopped tuner channel source was ignored" ); } } @@ -374,7 +372,7 @@ public class TunerChannelSource extends ComplexSource } } - mLog.debug( "Processed [" + mSampleBuffers.size() + "] in " + ( System.currentTimeMillis() - start ) ); +// mLog.debug( "Processed [" + mSampleBuffers.size() + "] in " + ( System.currentTimeMillis() - start ) ); mSampleBuffers.clear(); }