From 7865e813dedb70a2c33d2e6fd36292075774d703 Mon Sep 17 00:00:00 2001 From: Denny Date: Sun, 8 Jan 2017 05:21:42 -0500 Subject: [PATCH] #66 resolves issue with baseband recorders and loggers not being removed from channel processing chains when processing stops. This is now handled in the channel processing manager where baseband recorders and message/event loggers are added at processing start and removed at processing stop. --- .../channel/ChannelProcessingManager.java | 26 +++++++++---------- src/module/ProcessingChain.java | 8 ++---- src/record/RecorderManager.java | 3 ++- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/controller/channel/ChannelProcessingManager.java b/src/controller/channel/ChannelProcessingManager.java index 9b0e9df1..65aa700e 100644 --- a/src/controller/channel/ChannelProcessingManager.java +++ b/src/controller/channel/ChannelProcessingManager.java @@ -218,8 +218,7 @@ public class ChannelProcessingManager implements ChannelEventListener } /* Setup event logging */ - List loggers = mEventLogManager.getLoggers( - channel.getEventLogConfiguration(), channel.getName()); + List loggers = mEventLogManager.getLoggers(channel.getEventLogConfiguration(), channel.getName()); if (!loggers.isEmpty()) { @@ -232,19 +231,15 @@ public class ChannelProcessingManager implements ChannelEventListener if (!recorders.isEmpty()) { /* Add baseband recorder */ - if ((recorders.contains(RecorderType.BASEBAND) && - channel.getChannelType() == ChannelType.STANDARD)) + if ((recorders.contains(RecorderType.BASEBAND) && channel.getChannelType() == ChannelType.STANDARD)) { - processingChain.addModule(mRecorderManager.getBasebandRecorder( - channel.toString())); + processingChain.addModule(mRecorderManager.getBasebandRecorder(channel.toString())); } /* Add traffic channel baseband recorder */ - if (recorders.contains(RecorderType.TRAFFIC_BASEBAND) && - channel.getChannelType() == ChannelType.TRAFFIC) + if (recorders.contains(RecorderType.TRAFFIC_BASEBAND) && channel.getChannelType() == ChannelType.TRAFFIC) { - processingChain.addModule(mRecorderManager - .getBasebandRecorder(channel.toString())); + processingChain.addModule(mRecorderManager.getBasebandRecorder(channel.toString())); } } @@ -275,9 +270,14 @@ public class ChannelProcessingManager implements ChannelEventListener if (mProcessingChains.containsKey(channel.getChannelID())) { - ProcessingChain chain = mProcessingChains.get(channel.getChannelID()); + ProcessingChain processingChain = mProcessingChains.get(channel.getChannelID()); + + processingChain.stop(); + + processingChain.removeEventLoggingModules(); + + processingChain.removeRecordingModules(); - chain.stop(); mChannelModel.broadcast(new ChannelEvent(channel, Event.NOTIFICATION_PROCESSING_STOP)); @@ -285,7 +285,7 @@ public class ChannelProcessingManager implements ChannelEventListener { mProcessingChains.remove(channel.getChannelID()); - chain.dispose(); + processingChain.dispose(); } } } diff --git a/src/module/ProcessingChain.java b/src/module/ProcessingChain.java index 298ba1e3..6d6f91e7 100644 --- a/src/module/ProcessingChain.java +++ b/src/module/ProcessingChain.java @@ -687,17 +687,13 @@ public class ProcessingChain implements IChannelEventListener { module.stop(); } - - removeEventLoggingModules(); - - removeRecordingModules(); } } /** * Removes any logging modules that are currently registered with this processing chain */ - private void removeEventLoggingModules() + public void removeEventLoggingModules() { List eventLoggingModules = new ArrayList<>(); @@ -718,7 +714,7 @@ public class ProcessingChain implements IChannelEventListener /** * Removes any recording modules that are currently registered with this processing chain */ - private void removeRecordingModules() + public void removeRecordingModules() { List recordingModules = new ArrayList<>(); diff --git a/src/record/RecorderManager.java b/src/record/RecorderManager.java index e71689b7..a35f5c17 100644 --- a/src/record/RecorderManager.java +++ b/src/record/RecorderManager.java @@ -45,7 +45,8 @@ public class RecorderManager implements Listener private boolean mCanStartNewRecorders = true; /** - * Manages starting and stopping all system recorders and distributes channel audio to each of the recorders. + * Manages all audio recording for all processing channels. Reconstructs audio streams and distributes channel + * audio to each of the recorders, starting and stopping the recorders as needed. */ public RecorderManager(ThreadPoolManager threadPoolManager) {