mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-13 09:07:27 -05:00
Compare commits
8 Commits
v0.3.0-bet
...
v0.3.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8621d1c8e2 | ||
|
|
1cd45a1b79 | ||
|
|
8215b78a43 | ||
|
|
f53519ad59 | ||
|
|
e6ab615931 | ||
|
|
0c84984fcc | ||
|
|
b3e493989e | ||
|
|
50e838749d |
11
CHANGELOG
11
CHANGELOG
@@ -1,11 +1,12 @@
|
|||||||
|
|
||||||
0.3.0 2017xxxx (work in progress)
|
0.3.0-beta1 20170129
|
||||||
- FEATURE: audio streaming - adds capability to stream to multiple remote broadcast
|
- FEATURE: audio streaming - adds capability to stream to multiple remote broadcast
|
||||||
servers (Broadcastify, Icecast v2.3 and v2.4+, and Shoutcast V1 and V2). Each
|
servers (Broadcastify, Icecast v2.3 and v2.4+, and Shoutcast V1 and V2). Each
|
||||||
stream can be independently configured with a delay. Audio calls are directed
|
stream can be independently configured with a delay. Audio calls are directed
|
||||||
to one or more streams by attaching one or more stream identifiers to each alias.
|
to one or more streams by attaching one or more stream identifiers to each alias.
|
||||||
- Requires Java 8 (or newer) for compatibility with eventual changeover to JavaFX
|
- Requires Java 8 (or newer) for compatibility and eventual changeover to JavaFX
|
||||||
- Extensive GUI updates for tuner, channel and alias management.
|
- Extensive GUI updates for tuner, channel and alias management. Includes new
|
||||||
|
'Now Playing' channel view and 'Detail' view.
|
||||||
- Updated alias list management of alias id values and wildcards. Weighting is now
|
- Updated alias list management of alias id values and wildcards. Weighting is now
|
||||||
applied to each wildcard so that they can be ordered from most specific to least
|
applied to each wildcard so that they can be ordered from most specific to least
|
||||||
specific for lookup value matching purposes.
|
specific for lookup value matching purposes.
|
||||||
@@ -13,6 +14,10 @@
|
|||||||
patch group aliases that roll-up aliases from each patched talkgroup to support
|
patch group aliases that roll-up aliases from each patched talkgroup to support
|
||||||
audio recording and streaming of patch calls according to the identifiers and
|
audio recording and streaming of patch calls according to the identifiers and
|
||||||
actions defined for each of the patched talkgroups.
|
actions defined for each of the patched talkgroups.
|
||||||
|
- Implemented bounded queues for both tuner and individual channel IQ sample
|
||||||
|
buffers. Bounded queues have ability to enter/exit overflow state when queue
|
||||||
|
size reaches overflow threshold and reset when queue size falls below the reset
|
||||||
|
threshold.
|
||||||
- Updated airspy controller for airspy-mini specific sample rate handling.
|
- Updated airspy controller for airspy-mini specific sample rate handling.
|
||||||
- New developer remez filter designer tool and internal usage
|
- New developer remez filter designer tool and internal usage
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<property name="major" value="0"/>
|
<property name="major" value="0"/>
|
||||||
<property name="minor" value="3"/>
|
<property name="minor" value="3"/>
|
||||||
<property name="patch" value="0"/>
|
<property name="patch" value="0"/>
|
||||||
<property name="release" value="-beta1"/>
|
<property name="release" value="-beta2"/>
|
||||||
<property name="filename" value="sdrtrunk_${major}.${minor}.${patch}${release}"/>
|
<property name="filename" value="sdrtrunk_${major}.${minor}.${patch}${release}"/>
|
||||||
|
|
||||||
<!-- Build properties -->
|
<!-- Build properties -->
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import java.io.UnsupportedEncodingException;
|
|||||||
import java.net.ConnectException;
|
import java.net.ConnectException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.channels.UnresolvedAddressException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
@@ -152,6 +153,10 @@ public class IcecastBroadcastMetadataUpdater implements IBroadcastMetadataUpdate
|
|||||||
{
|
{
|
||||||
//Do nothing, the server is unavailable
|
//Do nothing, the server is unavailable
|
||||||
}
|
}
|
||||||
|
else if(throwableCause instanceof UnresolvedAddressException)
|
||||||
|
{
|
||||||
|
//Do nothing - the server is temporarily unavailable
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!mStackTraceLoggingSuppressed)
|
if(!mStackTraceLoggingSuppressed)
|
||||||
|
|||||||
@@ -59,10 +59,10 @@ public class IcecastHTTPAudioBroadcaster extends IcecastAudioBroadcaster
|
|||||||
private AtomicBoolean mConnecting = new AtomicBoolean();
|
private AtomicBoolean mConnecting = new AtomicBoolean();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an Icecast 2.3.2 compatible broadcaster using TCP and a pseudo HTTP 1.0 protocol. This broadcaster is
|
* Creates an Icecast 2.4.x compatible broadcaster using HTTP 1.1 protocol. This broadcaster is
|
||||||
* compatible with Icecast version 2.3.2 and older versions of the server software.
|
* compatible with Icecast version 2.4.x and newer versions of the server software.
|
||||||
*
|
*
|
||||||
* Note: use @see IcecastHTTPAudioBroadcaster for Icecast version 2.4.x and newer.
|
* Note: use @see IcecastTCPAudioBroadcaster for Icecast version 2.3.x and older.
|
||||||
*
|
*
|
||||||
* This broadcaster uses the Apache Mina library for the streaming socket connection and for metadata updates. The
|
* This broadcaster uses the Apache Mina library for the streaming socket connection and for metadata updates. The
|
||||||
* IcecastHTTPIOHandler manages all interaction with the Icecast server and manages the overall broadcast state.
|
* IcecastHTTPIOHandler manages all interaction with the Icecast server and manages the overall broadcast state.
|
||||||
|
|||||||
@@ -55,15 +55,14 @@ public class OverflowableTransferQueue<E>
|
|||||||
{
|
{
|
||||||
if(!mOverflow)
|
if(!mOverflow)
|
||||||
{
|
{
|
||||||
if(mCounter.get() > mMaximumSize)
|
mQueue.offer(e);
|
||||||
|
|
||||||
|
int size = mCounter.incrementAndGet();
|
||||||
|
|
||||||
|
if(size > mMaximumSize)
|
||||||
{
|
{
|
||||||
setOverflow(true);
|
setOverflow(true);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
mQueue.offer(e);
|
|
||||||
mCounter.incrementAndGet();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +75,12 @@ public class OverflowableTransferQueue<E>
|
|||||||
|
|
||||||
if(drainCount > 0)
|
if(drainCount > 0)
|
||||||
{
|
{
|
||||||
mCounter.addAndGet(-drainCount);
|
int size = mCounter.addAndGet(-drainCount);
|
||||||
|
|
||||||
|
if(mOverflow && size <= mResetThreshold)
|
||||||
|
{
|
||||||
|
setOverflow(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return drainCount;
|
return drainCount;
|
||||||
|
|||||||
@@ -78,14 +78,9 @@ public abstract class RTL2832TunerController extends TunerController
|
|||||||
|
|
||||||
private SampleRate mSampleRate = DEFAULT_SAMPLE_RATE;
|
private SampleRate mSampleRate = DEFAULT_SAMPLE_RATE;
|
||||||
|
|
||||||
private ByteSampleAdapter mSampleAdapter = new ByteSampleAdapter();
|
protected ByteSampleAdapter mSampleAdapter = new ByteSampleAdapter();
|
||||||
|
|
||||||
private Broadcaster<ComplexBuffer> mComplexBufferBroadcaster = new Broadcaster<>();
|
|
||||||
|
|
||||||
protected int mOscillatorFrequency = 28800000; //28.8 MHz
|
protected int mOscillatorFrequency = 28800000; //28.8 MHz
|
||||||
|
protected USBTransferProcessor mUSBTransferProcessor;
|
||||||
private USBTransferProcessor mUSBTransferProcessor;
|
|
||||||
|
|
||||||
protected Descriptor mDescriptor;
|
protected Descriptor mDescriptor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -249,6 +249,11 @@ public class E4KTunerController extends RTL2832TunerController
|
|||||||
throw new SourceException("E4K Tuner Controller - error during "
|
throw new SourceException("E4K Tuner Controller - error during "
|
||||||
+ "init()", e);
|
+ "init()", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String deviceName = getTunerType().getLabel() + " " + getUniqueID();
|
||||||
|
|
||||||
|
mUSBTransferProcessor = new RTL2832USBTransferProcessor(deviceName, mDeviceHandle, mSampleAdapter,
|
||||||
|
USB_TRANSFER_BUFFER_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ public class USBTransferProcessor implements TransferCallback
|
|||||||
|
|
||||||
//Start transferred buffer dispatcher
|
//Start transferred buffer dispatcher
|
||||||
mBufferDispatcherFuture = ThreadPool.SCHEDULED.scheduleAtFixedRate(mBufferDispatcher,
|
mBufferDispatcherFuture = ThreadPool.SCHEDULED.scheduleAtFixedRate(mBufferDispatcher,
|
||||||
20, 20, TimeUnit.MILLISECONDS);
|
0, 11, TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
//Register with LibUSB processor so that it auto-starts LibUSB processing
|
//Register with LibUSB processor so that it auto-starts LibUSB processing
|
||||||
TunerManager.LIBUSB_TRANSFER_PROCESSOR.registerTransferProcessor(this);
|
TunerManager.LIBUSB_TRANSFER_PROCESSOR.registerTransferProcessor(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user