mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
39 [WIP] cleans up the reusable buffers and creates both real and
complex variants.
This commit is contained in:
@@ -18,9 +18,9 @@
|
||||
package io.github.dsheirer.source.tuner;
|
||||
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.complex.reusable.IReusableComplexBufferProvider;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableBufferBroadcaster;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.IReusableBufferProvider;
|
||||
import io.github.dsheirer.sample.buffer.ReusableBufferBroadcaster;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.source.ISourceEventListener;
|
||||
import io.github.dsheirer.source.ISourceEventProcessor;
|
||||
import io.github.dsheirer.source.SourceEvent;
|
||||
@@ -33,10 +33,10 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public abstract class TunerController implements Tunable, ISourceEventProcessor, ISourceEventListener,
|
||||
IReusableComplexBufferProvider, Listener<ReusableComplexBuffer>
|
||||
IReusableBufferProvider<ReusableComplexBuffer>, Listener<ReusableComplexBuffer>
|
||||
{
|
||||
private final static Logger mLog = LoggerFactory.getLogger(TunerController.class);
|
||||
protected ReusableBufferBroadcaster mSampleBroadcaster = new ReusableBufferBroadcaster();
|
||||
protected ReusableBufferBroadcaster mReusableBufferBroadcaster = new ReusableBufferBroadcaster();
|
||||
protected FrequencyController mFrequencyController;
|
||||
private int mMiddleUnusableHalfBandwidth;
|
||||
private double mUsableBandwidthPercentage;
|
||||
@@ -263,7 +263,7 @@ public abstract class TunerController implements Tunable, ISourceEventProcessor,
|
||||
@Override
|
||||
public void addBufferListener(Listener<ReusableComplexBuffer> listener)
|
||||
{
|
||||
mSampleBroadcaster.addListener(listener);
|
||||
mReusableBufferBroadcaster.addListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -272,7 +272,7 @@ public abstract class TunerController implements Tunable, ISourceEventProcessor,
|
||||
@Override
|
||||
public void removeBufferListener(Listener<ReusableComplexBuffer> listener)
|
||||
{
|
||||
mSampleBroadcaster.removeListener(listener);
|
||||
mReusableBufferBroadcaster.removeListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -281,7 +281,7 @@ public abstract class TunerController implements Tunable, ISourceEventProcessor,
|
||||
@Override
|
||||
public boolean hasBufferListeners()
|
||||
{
|
||||
return mSampleBroadcaster.hasListeners();
|
||||
return mReusableBufferBroadcaster.hasListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -289,7 +289,7 @@ public abstract class TunerController implements Tunable, ISourceEventProcessor,
|
||||
*/
|
||||
protected void broadcast(ReusableComplexBuffer reusableComplexBuffer)
|
||||
{
|
||||
mSampleBroadcaster.broadcast(reusableComplexBuffer.incrementUserCount());
|
||||
mReusableBufferBroadcaster.broadcast(reusableComplexBuffer);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
package io.github.dsheirer.source.tuner.channel;
|
||||
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.source.ComplexSource;
|
||||
import io.github.dsheirer.source.ISourceEventProcessor;
|
||||
import io.github.dsheirer.source.SourceEvent;
|
||||
|
||||
@@ -20,7 +20,7 @@ package io.github.dsheirer.source.tuner.fcd;
|
||||
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.adapter.ComplexShortAdapter;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.source.SourceException;
|
||||
import io.github.dsheirer.source.mixer.ComplexMixer;
|
||||
import io.github.dsheirer.source.tuner.MixerTunerDataLine;
|
||||
@@ -88,7 +88,7 @@ public abstract class FCDTunerController extends TunerController
|
||||
}
|
||||
|
||||
mComplexMixer = new ComplexMixer( mixerTDL.getTargetDataLine(), audioFormat, tunerName,
|
||||
new ComplexShortAdapter(), mSampleBroadcaster);
|
||||
new ComplexShortAdapter(), mReusableBufferBroadcaster);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -54,7 +54,8 @@ public abstract class ChannelSourceManager implements ISourceEventProcessor
|
||||
*/
|
||||
public abstract TunerChannelSource getSource(TunerChannel tunerChannel);
|
||||
|
||||
public abstract TunerChannelSource getSpecialSource(int index);
|
||||
//TODO: remove this testing method when finished with polyphase channel manager
|
||||
public abstract TunerChannelSource getTestingSource(int index);
|
||||
|
||||
/**
|
||||
* Adds a listener to receive source events
|
||||
|
||||
@@ -50,10 +50,10 @@ public class TunerChannelSourceManager extends ChannelSourceManager
|
||||
}
|
||||
|
||||
@Override
|
||||
public TunerChannelSource getSpecialSource(int index)
|
||||
public TunerChannelSource getTestingSource(int index)
|
||||
{
|
||||
//TODO: remove this debug method
|
||||
return mPolyphaseChannelManager.getSpecialChannel(index);
|
||||
return mPolyphaseChannelManager.getTestChannel(index);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
package io.github.dsheirer.source.tuner.rtl;
|
||||
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.source.SourceException;
|
||||
import io.github.dsheirer.source.tuner.TunerManager;
|
||||
import io.github.dsheirer.source.tuner.TunerType;
|
||||
|
||||
@@ -18,9 +18,9 @@ package io.github.dsheirer.source.tuner.test;
|
||||
import io.github.dsheirer.dsp.mixer.IOscillator;
|
||||
import io.github.dsheirer.dsp.mixer.LowPhaseNoiseOscillator;
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableBufferBroadcaster;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableBufferQueue;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableBufferBroadcaster;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBufferQueue;
|
||||
import io.github.dsheirer.util.ThreadPool;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -185,18 +185,19 @@ public class SampleGenerator
|
||||
public class Generator implements Runnable
|
||||
{
|
||||
private int mTriggerInterval = 0;
|
||||
private ReusableBufferQueue mReusableBufferQueue = new ReusableBufferQueue("** Sample Generator **");
|
||||
private ReusableComplexBufferQueue mReusableComplexBufferQueue = new ReusableComplexBufferQueue("SampleGenerator");
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if(mComplexBufferBroadcaster.hasListeners())
|
||||
{
|
||||
ReusableComplexBuffer reusableComplexBuffer = mReusableBufferQueue.getBuffer(mSamplesPerInterval);
|
||||
ReusableComplexBuffer reusableComplexBuffer = mReusableComplexBufferQueue.getBuffer(mSamplesPerInterval);
|
||||
|
||||
mOscillator.generateComplex(reusableComplexBuffer);
|
||||
|
||||
mComplexBufferBroadcaster.broadcast(reusableComplexBuffer.incrementUserCount());
|
||||
reusableComplexBuffer.incrementUserCount();
|
||||
mComplexBufferBroadcaster.broadcast(reusableComplexBuffer);
|
||||
|
||||
if(mSweepUpdateInterval != 0)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
package io.github.dsheirer.source.tuner.test;
|
||||
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.source.SourceException;
|
||||
import io.github.dsheirer.source.tuner.TunerController;
|
||||
import io.github.dsheirer.source.tuner.configuration.TunerConfiguration;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package io.github.dsheirer.source.tuner.usb;
|
||||
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.source.tuner.TunerManager;
|
||||
import io.github.dsheirer.source.tuner.usb.converter.NativeBufferConverter;
|
||||
import io.github.dsheirer.util.ThreadPool;
|
||||
@@ -394,9 +394,10 @@ public class USBTransferProcessor implements TransferCallback
|
||||
{
|
||||
ByteBuffer nativeBuffer = transfer.buffer();
|
||||
|
||||
ReusableComplexBuffer sampleBuffer = mNativeBufferConverter.convert(nativeBuffer, transfer.actualLength());
|
||||
ReusableComplexBuffer reusableComplexBuffer =
|
||||
mNativeBufferConverter.convert(nativeBuffer, transfer.actualLength());
|
||||
|
||||
mComplexBufferListener.receive(sampleBuffer);
|
||||
mComplexBufferListener.receive(reusableComplexBuffer);
|
||||
}
|
||||
|
||||
transfer.buffer().rewind();
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
package io.github.dsheirer.source.tuner.usb;
|
||||
|
||||
import io.github.dsheirer.sample.Listener;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.source.tuner.TunerController;
|
||||
|
||||
public abstract class USBTunerController extends TunerController
|
||||
|
||||
@@ -15,15 +15,15 @@
|
||||
******************************************************************************/
|
||||
package io.github.dsheirer.source.tuner.usb.converter;
|
||||
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableBufferQueue;
|
||||
import io.github.dsheirer.sample.complex.reusable.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBuffer;
|
||||
import io.github.dsheirer.sample.buffer.ReusableComplexBufferQueue;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
public abstract class NativeBufferConverter
|
||||
{
|
||||
private ReusableBufferQueue mReusableBufferQueue = new ReusableBufferQueue();
|
||||
private ReusableComplexBufferQueue mReusableComplexBufferQueue = new ReusableComplexBufferQueue("NativeBufferConverter");
|
||||
|
||||
/**
|
||||
* Converts native byte buffers into complex float samples and produces reusable complex sample buffers. Tracks
|
||||
@@ -45,10 +45,11 @@ public abstract class NativeBufferConverter
|
||||
{
|
||||
FloatBuffer floatBuffer = convertSamples(byteBuffer, length);
|
||||
|
||||
ReusableComplexBuffer reusableComplexBuffer = mReusableBufferQueue.getBuffer(floatBuffer.capacity());
|
||||
ReusableComplexBuffer reusableComplexBuffer = mReusableComplexBufferQueue.getBuffer(floatBuffer.capacity());
|
||||
|
||||
//The reusable buffer will rewind the float buffer to the beginning
|
||||
reusableComplexBuffer.reloadFrom(floatBuffer, System.currentTimeMillis());
|
||||
reusableComplexBuffer.incrementUserCount();
|
||||
|
||||
return reusableComplexBuffer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user