aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am4
-rw-r--r--doc/advanced.mux12
-rw-r--r--src/DabMux.cpp17
-rw-r--r--src/zmq2edi/zmq2edi.cpp12
4 files changed, 22 insertions, 23 deletions
diff --git a/Makefile.am b/Makefile.am
index fc7f64a..cbffd95 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -160,8 +160,6 @@ odr_dabmux_SOURCES =src/DabMux.cpp \
lib/edioutput/AFPacket.cpp \
lib/edioutput/AFPacket.h \
lib/edioutput/EDIConfig.h \
- lib/edioutput/Interleaver.cpp \
- lib/edioutput/Interleaver.h \
lib/edioutput/PFT.cpp \
lib/edioutput/PFT.h \
lib/edioutput/TagItems.cpp \
@@ -208,8 +206,6 @@ odr_zmq2edi_SOURCES = src/zmq2edi/zmq2edi.cpp \
lib/edioutput/AFPacket.cpp \
lib/edioutput/AFPacket.h \
lib/edioutput/EDIConfig.h \
- lib/edioutput/Interleaver.cpp \
- lib/edioutput/Interleaver.h \
lib/edioutput/PFT.cpp \
lib/edioutput/PFT.h \
lib/edioutput/TagItems.cpp \
diff --git a/doc/advanced.mux b/doc/advanced.mux
index 3aa3a22..16c9bd2 100644
--- a/doc/advanced.mux
+++ b/doc/advanced.mux
@@ -440,12 +440,16 @@ outputs {
; Transportation".
fec 2
- ; Interleave fragments from several ETI frames so as to reduce the
+ ; Spread and interleave fragments from several EDI frames so as to reduce the
; probability of errors when several UDP packets are lost in bursts.
; This comes at the cost of larger overall latency between multiplexing
- ; and modulation. This latency is given in milliseconds, and rounded
- ; to nearest multiple of 24ms. Set to 0 to disable the interleaver.
- interleave 0
+ ; and modulation.
+ ;
+ ; Configure the packet spreader/interleaver through a percentage:
+ ; 0% send all fragments at once,
+ ; 100% spread over 24ms,
+ ; >100% spread and interleave. Default 95%
+ packet_spread 95
; Length of a RS chunk, can be overridden
;default=207
diff --git a/src/DabMux.cpp b/src/DabMux.cpp
index 4265412..70eee69 100644
--- a/src/DabMux.cpp
+++ b/src/DabMux.cpp
@@ -362,18 +362,17 @@ int main(int argc, char *argv[])
edi_conf.fec = pt_edi.get<unsigned int>("fec", 3);
edi_conf.chunk_len = pt_edi.get<unsigned int>("chunk_len", 207);
- double interleave_ms = pt_edi.get<double>("interleave", 0);
- if (interleave_ms != 0.0) {
- if (interleave_ms < 0) {
- throw runtime_error("EDI output: negative interleave value is invalid.");
+ int spread_percent = pt_edi.get<int>("packet_spread", 95);
+ if (spread_percent != 0) {
+ if (spread_percent < 0) {
+ throw std::runtime_error("EDI output: negative packet_spread value is invalid.");
}
- auto latency_rounded = lround(interleave_ms / 24.0);
- if (latency_rounded * 24 > 30000) {
- throw runtime_error("EDI output: interleaving set for more than 30 seconds!");
- }
+ edi_conf.fragment_spreading_factor = (double)spread_percent / 100.0;
- edi_conf.latency_frames = latency_rounded;
+ if (edi_conf.fragment_spreading_factor > 30000) {
+ throw std::runtime_error("EDI output: interleaving set for more than 30 seconds!");
+ }
}
edi_conf.tagpacket_alignment = pt_edi.get<unsigned int>("tagpacket_alignment", 8);
diff --git a/src/zmq2edi/zmq2edi.cpp b/src/zmq2edi/zmq2edi.cpp
index 614723b..bd5a3ae 100644
--- a/src/zmq2edi/zmq2edi.cpp
+++ b/src/zmq2edi/zmq2edi.cpp
@@ -64,7 +64,7 @@ static void usage()
cerr << " -x Drop frames where for which the wait time would be negative, i.e. frames that arrived too late." << endl;
cerr << " -P Disable PFT and send AFPackets." << endl;
cerr << " -f <fec> Set the FEC." << endl;
- cerr << " -i <interleave> Configure the interleaver with given interleave percentage: 0% send all fragments at once, 100% spread over 24ms, >100% spread and interleave. Default 95%\n";
+ cerr << " -i <spread> Configure the UDP packet spread/interleaver with given percentage: 0% send all fragments at once, 100% spread over 24ms, >100% spread and interleave. Default 95%\n";
cerr << " -D Dump the EDI to edi.debug file." << endl;
cerr << " -v Enables verbose mode." << endl;
cerr << " -a <alignement> Set the alignment of the TAG Packet (default 8)." << endl;
@@ -273,13 +273,13 @@ int start(int argc, char **argv)
break;
case 'i':
{
- int interleave_percent = std::stoi(optarg);
- if (interleave_percent != 0) {
- if (interleave_percent < 0) {
- throw std::runtime_error("EDI output: negative interleave value is invalid.");
+ int spread_percent = std::stoi(optarg);
+ if (spread_percent != 0) {
+ if (spread_percent < 0) {
+ throw std::runtime_error("EDI output: negative spread value is invalid.");
}
- edi_conf.fragment_spreading_factor = (double)interleave_percent / 100.0;
+ edi_conf.fragment_spreading_factor = (double)spread_percent / 100.0;
if (edi_conf.fragment_spreading_factor > 30000) {
throw std::runtime_error("EDI output: interleaving set for more than 30 seconds!");
}