mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
Merge pull request #40 from CvH/vdr-update
vdr-addon: update all addons to latest
This commit is contained in:
commit
6fe95eed43
@ -17,7 +17,7 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
PKG_NAME="vdr-plugin-dvbapi"
|
PKG_NAME="vdr-plugin-dvbapi"
|
||||||
PKG_VERSION="31f409d"
|
PKG_VERSION="c76c24e"
|
||||||
PKG_REV="1"
|
PKG_REV="1"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
|
@ -17,18 +17,17 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
PKG_NAME="vdr-plugin-satip"
|
PKG_NAME="vdr-plugin-satip"
|
||||||
PKG_VERSION="2.2.3"
|
PKG_VERSION="18c9b79"
|
||||||
PKG_REV="1"
|
PKG_REV="1"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="http://www.saunalahti.fi/~rahrenbe/vdr/satip/"
|
PKG_SITE="http://www.saunalahti.fi/~rahrenbe/vdr/satip/"
|
||||||
PKG_URL="http://www.saunalahti.fi/~rahrenbe/vdr/satip/files/${PKG_NAME/-plugin/}-$PKG_VERSION.tgz"
|
PKG_URL="https://github.com/rofafor/vdr-plugin-satip/archive/$PKG_VERSION.tar.gz"
|
||||||
PKG_SOURCE_DIR="satip-${PKG_VERSION}"
|
|
||||||
PKG_DEPENDS_TARGET="toolchain vdr curl tinyxml"
|
PKG_DEPENDS_TARGET="toolchain vdr curl tinyxml"
|
||||||
PKG_PRIORITY="optional"
|
PKG_PRIORITY="optional"
|
||||||
PKG_SECTION="multimedia"
|
PKG_SECTION="multimedia"
|
||||||
PKG_SHORTDESC="vdr-satip: SAT>IP plugin for VDR"
|
PKG_SHORTDESC="VDR-satip: SAT>IP plugin for VDR"
|
||||||
PKG_LONGDESC="vdr-satip is a SAT>IP plugin for VDR"
|
PKG_LONGDESC="This is an SAT>IP plugin for the Video Disk Recorder (VDR)."
|
||||||
|
|
||||||
PKG_IS_ADDON="no"
|
PKG_IS_ADDON="no"
|
||||||
PKG_AUTORECONF="no"
|
PKG_AUTORECONF="no"
|
||||||
|
@ -1,402 +0,0 @@
|
|||||||
From 165fd5b14af2327f3cd5d5b6fbe814737a0ea423 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tobias Grimm <etobi@debian.org>
|
|
||||||
Date: Sat, 5 Dec 2015 16:59:28 +0100
|
|
||||||
Subject: [PATCH 1/5] Reorderd the transponder URL parameter in a way the
|
|
||||||
Panasonic CXW804 expects them (src/freq/pol/ro/msys/mtype/plts/sr/fec)
|
|
||||||
|
|
||||||
This only applies to DVB-S. DVB-C and DVB-T might need further tweaking.
|
|
||||||
It's actually a bug of the Panasonic TV to expect the transponder parameters in
|
|
||||||
a specific order in the query string, but for now this seems to be the most
|
|
||||||
pragmatic workaround.
|
|
||||||
---
|
|
||||||
param.c | 22 +++++++++++-----------
|
|
||||||
1 file changed, 11 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/param.c b/param.c
|
|
||||||
index c71902d..b5eaf1c 100644
|
|
||||||
--- a/param.c
|
|
||||||
+++ b/param.c
|
|
||||||
@@ -163,11 +163,20 @@ cString GetTransponderUrlParameters(const cChannel *channelP)
|
|
||||||
dtp.SetModulation(QPSK);
|
|
||||||
dtp.SetRollOff(ROLLOFF_35);
|
|
||||||
}
|
|
||||||
+ ST(" S *") q += snprintf(q, STBUFLEFT, "src=%d&", ((src > 0) && (src <= 255)) ? src : 1);
|
|
||||||
q += snprintf(q, STBUFLEFT, "freq=%s", *dtoa(freq, "%lg"));
|
|
||||||
- ST(" S *") q += snprintf(q, STBUFLEFT, "&src=%d", ((src > 0) && (src <= 255)) ? src : 1);
|
|
||||||
+ ST(" S *") q += snprintf(q, STBUFLEFT, "&pol=%c", tolower(dtp.Polarization()));
|
|
||||||
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.RollOff(), SatipRollOffValues);
|
|
||||||
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesSat);
|
|
||||||
+ ST("C *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesCable);
|
|
||||||
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesTerrestrial);
|
|
||||||
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
+ ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
+ ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Pilot(), SatipPilotValues);
|
|
||||||
ST(" S *") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
|
|
||||||
+ ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
|
|
||||||
ST("C 1") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
|
|
||||||
- ST(" S *") q += snprintf(q, STBUFLEFT, "&pol=%c", tolower(dtp.Polarization()));
|
|
||||||
ST("C T2") q += snprintf(q, STBUFLEFT, "&plp=%d", dtp.StreamId());
|
|
||||||
ST(" T2") q += snprintf(q, STBUFLEFT, "&t2id=%d", dtp.T2SystemId());
|
|
||||||
ST("C 2") q += snprintf(q, STBUFLEFT, "&c2tft=%d", C2TuningFrequencyType);
|
|
||||||
@@ -177,15 +186,6 @@ cString GetTransponderUrlParameters(const cChannel *channelP)
|
|
||||||
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
|
|
||||||
ST("C 2") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
|
|
||||||
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Guard(), SatipGuardValues);
|
|
||||||
- ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
|
|
||||||
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Pilot(), SatipPilotValues);
|
|
||||||
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
- ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.RollOff(), SatipRollOffValues);
|
|
||||||
- ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesSat);
|
|
||||||
- ST("C *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesCable);
|
|
||||||
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesTerrestrial);
|
|
||||||
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Transmission(), SatipTransmissionValues);
|
|
||||||
if ((channelP->Rid() % 100) > 0)
|
|
||||||
snprintf(q, STBUFLEFT, "&fe=%d", channelP->Rid() % 100);
|
|
||||||
|
|
||||||
From c1a881ba9459146541ef07ea1519fd45e5603d2c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>
|
|
||||||
Date: Sat, 5 Dec 2015 20:23:32 +0200
|
|
||||||
Subject: [PATCH 2/5] Reorder also terrestrial and cable query parameters as
|
|
||||||
introduced in the satip specification 1.2.2, although the ordering shouldn't
|
|
||||||
matter according to it.
|
|
||||||
|
|
||||||
---
|
|
||||||
param.c | 20 ++++++++++----------
|
|
||||||
1 file changed, 10 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/param.c b/param.c
|
|
||||||
index b5eaf1c..c9c4529 100644
|
|
||||||
--- a/param.c
|
|
||||||
+++ b/param.c
|
|
||||||
@@ -163,32 +163,32 @@ cString GetTransponderUrlParameters(const cChannel *channelP)
|
|
||||||
dtp.SetModulation(QPSK);
|
|
||||||
dtp.SetRollOff(ROLLOFF_35);
|
|
||||||
}
|
|
||||||
+ if ((channelP->Rid() % 100) > 0)
|
|
||||||
+ q += snprintf(q, STBUFLEFT, "&fe=%d", channelP->Rid() % 100);
|
|
||||||
ST(" S *") q += snprintf(q, STBUFLEFT, "src=%d&", ((src > 0) && (src <= 255)) ? src : 1);
|
|
||||||
q += snprintf(q, STBUFLEFT, "freq=%s", *dtoa(freq, "%lg"));
|
|
||||||
ST(" S *") q += snprintf(q, STBUFLEFT, "&pol=%c", tolower(dtp.Polarization()));
|
|
||||||
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.RollOff(), SatipRollOffValues);
|
|
||||||
+ ST("C 2") q += snprintf(q, STBUFLEFT, "&c2tft=%d", C2TuningFrequencyType);
|
|
||||||
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
|
|
||||||
+ ST("C 2") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
|
|
||||||
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesSat);
|
|
||||||
ST("C *") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesCable);
|
|
||||||
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.System(), SatipSystemValuesTerrestrial);
|
|
||||||
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Transmission(), SatipTransmissionValues);
|
|
||||||
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Modulation(), SatipModulationValues);
|
|
||||||
ST(" S *") q += PrintUrlString(q, STBUFLEFT, dtp.Pilot(), SatipPilotValues);
|
|
||||||
ST(" S *") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
|
|
||||||
- ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
|
|
||||||
ST("C 1") q += snprintf(q, STBUFLEFT, "&sr=%d", channelP->Srate());
|
|
||||||
+ ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Guard(), SatipGuardValues);
|
|
||||||
+ ST("CST*") q += PrintUrlString(q, STBUFLEFT, dtp.CoderateH(), SatipCodeRateValues);
|
|
||||||
+ ST("C 2") q += snprintf(q, STBUFLEFT, "&ds=%d", DataSlice);
|
|
||||||
ST("C T2") q += snprintf(q, STBUFLEFT, "&plp=%d", dtp.StreamId());
|
|
||||||
ST(" T2") q += snprintf(q, STBUFLEFT, "&t2id=%d", dtp.T2SystemId());
|
|
||||||
- ST("C 2") q += snprintf(q, STBUFLEFT, "&c2tft=%d", C2TuningFrequencyType);
|
|
||||||
- ST("C 2") q += snprintf(q, STBUFLEFT, "&ds=%d", DataSlice);
|
|
||||||
- ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Inversion(), SatipInversionValues);
|
|
||||||
ST(" T2") q += PrintUrlString(q, STBUFLEFT, dtp.SisoMiso(), SatipSisoMisoValues);
|
|
||||||
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
|
|
||||||
- ST("C 2") q += PrintUrlString(q, STBUFLEFT, dtp.Bandwidth(), SatipBandwidthValues);
|
|
||||||
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Guard(), SatipGuardValues);
|
|
||||||
- ST(" T*") q += PrintUrlString(q, STBUFLEFT, dtp.Transmission(), SatipTransmissionValues);
|
|
||||||
- if ((channelP->Rid() % 100) > 0)
|
|
||||||
- snprintf(q, STBUFLEFT, "&fe=%d", channelP->Rid() % 100);
|
|
||||||
+ ST("C 1") q += PrintUrlString(q, STBUFLEFT, dtp.Inversion(), SatipInversionValues);
|
|
||||||
#undef ST
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
From 9d5f7cc7030657f38c56f6041ff7f697774a9624 Mon Sep 17 00:00:00 2001
|
|
||||||
From: chriszero <zerov83@gmail.com>
|
|
||||||
Date: Thu, 7 Jan 2016 20:56:39 +0100
|
|
||||||
Subject: [PATCH 3/5] Make it possible to specify the rtp and rtcp ports this
|
|
||||||
makes it possible to use the satip through a NAT (e.g. a docker bridged
|
|
||||||
network)
|
|
||||||
|
|
||||||
---
|
|
||||||
README | 5 +++++
|
|
||||||
config.c | 2 ++
|
|
||||||
config.h | 6 ++++++
|
|
||||||
satip.c | 40 ++++++++++++++++++++++++++++++++++++++--
|
|
||||||
socket.c | 4 ++--
|
|
||||||
socket.h | 2 +-
|
|
||||||
tuner.c | 7 +++++--
|
|
||||||
7 files changed, 59 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/README b/README
|
|
||||||
index 49b0b38..1c3b610 100644
|
|
||||||
--- a/README
|
|
||||||
+++ b/README
|
|
||||||
@@ -56,6 +56,11 @@ vdr -P 'satip -s <ipaddress>|<model>|<description>;...'
|
|
||||||
vdr -P 'satip -s 192.168.0.1|DVBS2-2,DVBT2-2|Octo1'
|
|
||||||
vdr -P 'satip -s 192.168.0.1|DVBS2-4|Octo1;192.168.0.2|DVBT2-4|Octo2'
|
|
||||||
|
|
||||||
+The plugin accepts a "--portrange" (-p) command-line parameter, that can
|
|
||||||
+be used to manually specify the RTP & RTCP port range and therefore
|
|
||||||
+enables using the plugin through a NAT (e.g. Docker bridged network).
|
|
||||||
+A minimum of 2 ports per device is required.
|
|
||||||
+
|
|
||||||
SAT>IP satellite positions (aka. signal sources) shall be defined via
|
|
||||||
sources.conf. If the source description begins with a number, it's used
|
|
||||||
as SAT>IP signal source selection parameter. A special number zero can
|
|
||||||
diff --git a/config.c b/config.c
|
|
||||||
index 050453c..2243aaa 100644
|
|
||||||
--- a/config.c
|
|
||||||
+++ b/config.c
|
|
||||||
@@ -17,6 +17,8 @@ cSatipConfig::cSatipConfig(void)
|
|
||||||
ciExtensionM(0),
|
|
||||||
eitScanM(1),
|
|
||||||
useBytesM(1),
|
|
||||||
+ portRangeStartM(0),
|
|
||||||
+ portRangeStopM(0),
|
|
||||||
detachedModeM(false),
|
|
||||||
disableServerQuirksM(false),
|
|
||||||
useSingleModelServersM(false)
|
|
||||||
diff --git a/config.h b/config.h
|
|
||||||
index b7745cf..b11b1d8 100644
|
|
||||||
--- a/config.h
|
|
||||||
+++ b/config.h
|
|
||||||
@@ -19,6 +19,8 @@ class cSatipConfig
|
|
||||||
unsigned int ciExtensionM;
|
|
||||||
unsigned int eitScanM;
|
|
||||||
unsigned int useBytesM;
|
|
||||||
+ unsigned int portRangeStartM;
|
|
||||||
+ unsigned int portRangeStopM;
|
|
||||||
bool detachedModeM;
|
|
||||||
bool disableServerQuirksM;
|
|
||||||
bool useSingleModelServersM;
|
|
||||||
@@ -74,6 +76,8 @@ class cSatipConfig
|
|
||||||
int GetDisabledSources(unsigned int indexP) const;
|
|
||||||
unsigned int GetDisabledFiltersCount(void) const;
|
|
||||||
int GetDisabledFilters(unsigned int indexP) const;
|
|
||||||
+ unsigned int GetPortRangeStart(void) const { return portRangeStartM; }
|
|
||||||
+ unsigned int GetPortRangeStop(void) const { return portRangeStopM; }
|
|
||||||
|
|
||||||
void SetOperatingMode(unsigned int operatingModeP) { operatingModeM = operatingModeP; }
|
|
||||||
void SetTraceMode(unsigned int modeP) { traceModeM = (modeP & eTraceModeMask); }
|
|
||||||
@@ -86,6 +90,8 @@ class cSatipConfig
|
|
||||||
void SetUseSingleModelServers(bool onOffP) { useSingleModelServersM = onOffP; }
|
|
||||||
void SetDisabledSources(unsigned int indexP, int sourceP);
|
|
||||||
void SetDisabledFilters(unsigned int indexP, int numberP);
|
|
||||||
+ void SetPortRangeStart(unsigned int rangeStartP) { portRangeStartM = rangeStartP; }
|
|
||||||
+ void SetPortRangeStop(unsigned int rangeStopP) { portRangeStopM = rangeStopP; }
|
|
||||||
};
|
|
||||||
|
|
||||||
extern cSatipConfig SatipConfig;
|
|
||||||
diff --git a/satip.c b/satip.c
|
|
||||||
index 3453c48..35a92fe 100644
|
|
||||||
--- a/satip.c
|
|
||||||
+++ b/satip.c
|
|
||||||
@@ -35,6 +35,7 @@ class cPluginSatip : public cPlugin {
|
|
||||||
unsigned int deviceCountM;
|
|
||||||
cSatipDiscoverServers *serversM;
|
|
||||||
void ParseServer(const char *paramP);
|
|
||||||
+ void ParsePortRange(const char *paramP);
|
|
||||||
int ParseCicams(const char *valueP, int *cicamsP);
|
|
||||||
int ParseSources(const char *valueP, int *sourcesP);
|
|
||||||
int ParseFilters(const char *valueP, int *filtersP);
|
|
||||||
@@ -87,7 +88,9 @@ const char *cPluginSatip::CommandLineHelp(void)
|
|
||||||
" define hard-coded SAT>IP server(s)\n"
|
|
||||||
" -D, --detach set the detached mode on\n"
|
|
||||||
" -S, --single set the single model server mode on\n"
|
|
||||||
- " -n, --noquirks disable all the server quirks\n";
|
|
||||||
+ " -n, --noquirks disable all the server quirks\n"
|
|
||||||
+ " -p, --portrange=<start>-<end> set a range of ports used for the RT[C]P server\n"
|
|
||||||
+ " a minimum of 2 ports per device is required.\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cPluginSatip::ProcessArgs(int argc, char *argv[])
|
|
||||||
@@ -98,6 +101,7 @@ bool cPluginSatip::ProcessArgs(int argc, char *argv[])
|
|
||||||
{ "devices", required_argument, NULL, 'd' },
|
|
||||||
{ "trace", required_argument, NULL, 't' },
|
|
||||||
{ "server", required_argument, NULL, 's' },
|
|
||||||
+ { "portrange",required_argument, NULL, 'p' },
|
|
||||||
{ "detach", no_argument, NULL, 'D' },
|
|
||||||
{ "single", no_argument, NULL, 'S' },
|
|
||||||
{ "noquirks", no_argument, NULL, 'n' },
|
|
||||||
@@ -105,8 +109,9 @@ bool cPluginSatip::ProcessArgs(int argc, char *argv[])
|
|
||||||
};
|
|
||||||
|
|
||||||
cString server;
|
|
||||||
+ cString portrange;
|
|
||||||
int c;
|
|
||||||
- while ((c = getopt_long(argc, argv, "d:t:s:DSn", long_options, NULL)) != -1) {
|
|
||||||
+ while ((c = getopt_long(argc, argv, "d:t:s:p:DSn", long_options, NULL)) != -1) {
|
|
||||||
switch (c) {
|
|
||||||
case 'd':
|
|
||||||
deviceCountM = strtol(optarg, NULL, 0);
|
|
||||||
@@ -126,10 +131,15 @@ bool cPluginSatip::ProcessArgs(int argc, char *argv[])
|
|
||||||
case 'n':
|
|
||||||
SatipConfig.SetDisableServerQuirks(true);
|
|
||||||
break;
|
|
||||||
+ case 'p':
|
|
||||||
+ portrange = optarg;
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ if (!isempty(*portrange))
|
|
||||||
+ ParsePortRange(portrange);
|
|
||||||
// this must be done after all parameters are parsed
|
|
||||||
if (!isempty(*server))
|
|
||||||
ParseServer(*server);
|
|
||||||
@@ -255,6 +265,32 @@ void cPluginSatip::ParseServer(const char *paramP)
|
|
||||||
FREE_POINTER(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
+void cPluginSatip::ParsePortRange(const char *paramP)
|
|
||||||
+{
|
|
||||||
+ char *s, *p = skipspace(paramP);
|
|
||||||
+ char *r = strtok_r(p, "-", &s);
|
|
||||||
+ unsigned int rangeStart = 0;
|
|
||||||
+ unsigned int rangeStop = 0;
|
|
||||||
+ if (r) {
|
|
||||||
+ rangeStart = strtol(r, NULL, 0);
|
|
||||||
+ r = strtok_r(NULL, "-", &s);
|
|
||||||
+ }
|
|
||||||
+ if (r)
|
|
||||||
+ rangeStop = strtol(r, NULL, 0);
|
|
||||||
+ else {
|
|
||||||
+ error("Port range argument not valid '%s'", paramP);
|
|
||||||
+ rangeStart = 0;
|
|
||||||
+ rangeStop = 0;
|
|
||||||
+ }
|
|
||||||
+ if (rangeStop - rangeStart + 1 < deviceCountM * 2) {
|
|
||||||
+ error("The given port range is to small: %d < %d!", rangeStop - rangeStart + 1, deviceCountM * 2);
|
|
||||||
+ rangeStart = 0;
|
|
||||||
+ rangeStop = 0;
|
|
||||||
+ }
|
|
||||||
+ SatipConfig.SetPortRangeStart(rangeStart);
|
|
||||||
+ SatipConfig.SetPortRangeStop(rangeStop);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int cPluginSatip::ParseCicams(const char *valueP, int *cicamsP)
|
|
||||||
{
|
|
||||||
debug1("%s (%s,)", __PRETTY_FUNCTION__, valueP);
|
|
||||||
diff --git a/socket.c b/socket.c
|
|
||||||
index 29c2602..35bc035 100644
|
|
||||||
--- a/socket.c
|
|
||||||
+++ b/socket.c
|
|
||||||
@@ -34,7 +34,7 @@ cSatipSocket::~cSatipSocket()
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
-bool cSatipSocket::Open(const int portP)
|
|
||||||
+bool cSatipSocket::Open(const int portP, const bool reuseAddrP)
|
|
||||||
{
|
|
||||||
// Bind to the socket if it is not active already
|
|
||||||
if (socketDescM < 0) {
|
|
||||||
@@ -46,7 +46,7 @@ bool cSatipSocket::Open(const int portP)
|
|
||||||
ERROR_IF_FUNC(fcntl(socketDescM, F_SETFL, O_NONBLOCK), "fcntl(O_NONBLOCK)",
|
|
||||||
Close(), return false);
|
|
||||||
// Allow multiple sockets to use the same PORT number
|
|
||||||
- int yes = 1;
|
|
||||||
+ int yes = reuseAddrP;
|
|
||||||
ERROR_IF_FUNC(setsockopt(socketDescM, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0,
|
|
||||||
"setsockopt(SO_REUSEADDR)", Close(), return false);
|
|
||||||
// Bind socket
|
|
||||||
diff --git a/socket.h b/socket.h
|
|
||||||
index f9a93d8..79bc991 100644
|
|
||||||
--- a/socket.h
|
|
||||||
+++ b/socket.h
|
|
||||||
@@ -19,7 +19,7 @@ class cSatipSocket {
|
|
||||||
public:
|
|
||||||
cSatipSocket();
|
|
||||||
virtual ~cSatipSocket();
|
|
||||||
- bool Open(const int portP = 0);
|
|
||||||
+ bool Open(const int portP = 0, const bool reuseAddrP = false);
|
|
||||||
virtual void Close(void);
|
|
||||||
int Fd(void) { return socketDescM; }
|
|
||||||
int Port(void) { return socketPortM; }
|
|
||||||
diff --git a/tuner.c b/tuner.c
|
|
||||||
index c12a19e..fc47b51 100644
|
|
||||||
--- a/tuner.c
|
|
||||||
+++ b/tuner.c
|
|
||||||
@@ -50,12 +50,15 @@ cSatipTuner::cSatipTuner(cSatipDeviceIf &deviceP, unsigned int packetLenP)
|
|
||||||
debug1("%s (, %d) [device %d]", __PRETTY_FUNCTION__, packetLenP, deviceIdM);
|
|
||||||
|
|
||||||
// Open sockets
|
|
||||||
- int i = 100;
|
|
||||||
+ int i = SatipConfig.GetPortRangeStart() ? SatipConfig.GetPortRangeStop() - SatipConfig.GetPortRangeStart() - 1 : 100;
|
|
||||||
+ int port = SatipConfig.GetPortRangeStart();
|
|
||||||
while (i-- > 0) {
|
|
||||||
- if (rtpM.Open(0) && rtcpM.Open(rtpM.Port() + 1))
|
|
||||||
+ if (rtpM.Open(port) && rtcpM.Open(rtpM.Port() + 1))
|
|
||||||
break;
|
|
||||||
rtpM.Close();
|
|
||||||
rtcpM.Close();
|
|
||||||
+ if (SatipConfig.GetPortRangeStart())
|
|
||||||
+ ++port;
|
|
||||||
}
|
|
||||||
if ((rtpM.Port() <= 0) || (rtcpM.Port() <= 0)) {
|
|
||||||
error("Cannot open required RTP/RTCP ports [device %d]", deviceIdM);
|
|
||||||
|
|
||||||
From 8f12ce6f55d0db46e516cf9f471438f8ed84c403 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>
|
|
||||||
Date: Sat, 30 Jan 2016 21:41:10 +0200
|
|
||||||
Subject: [PATCH 4/5] Add a missing device name update.
|
|
||||||
|
|
||||||
---
|
|
||||||
device.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/device.c b/device.c
|
|
||||||
index ad96434..4a59291 100644
|
|
||||||
--- a/device.c
|
|
||||||
+++ b/device.c
|
|
||||||
@@ -355,6 +355,7 @@ bool cSatipDevice::SetChannelDevice(const cChannel *channelP, bool liveViewP)
|
|
||||||
}
|
|
||||||
else if (pTunerM) {
|
|
||||||
pTunerM->SetSource(NULL, 0, NULL, deviceIndexM);
|
|
||||||
+ deviceNameM = cString::sprintf("%s %d", *DeviceType(), deviceIndexM);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
From b755dbf318874e4dadc5f4e4c7405e90dc4eeb2e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tobias Grimm <git@e-tobi.net>
|
|
||||||
Date: Sat, 23 Jan 2016 18:38:44 +0100
|
|
||||||
Subject: [PATCH 5/5] C++11 requires a mandatory space when concatenating
|
|
||||||
string literals
|
|
||||||
|
|
||||||
---
|
|
||||||
common.h | 18 +++++++++---------
|
|
||||||
1 file changed, 9 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/common.h b/common.h
|
|
||||||
index ac9ea20..c85404b 100644
|
|
||||||
--- a/common.h
|
|
||||||
+++ b/common.h
|
|
||||||
@@ -48,15 +48,15 @@
|
|
||||||
esyslog("curl_easy_perform() [%s,%d] failed: %s (%d)", __FILE__, __LINE__, curl_easy_strerror(res), res); \
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define ERROR_IF_FUNC(exp, errstr, func, ret) \
|
|
||||||
- do { \
|
|
||||||
- if (exp) { \
|
|
||||||
- char tmp[64]; \
|
|
||||||
- esyslog("[%s,%d]: "errstr": %s", __FILE__, __LINE__, \
|
|
||||||
- strerror_r(errno, tmp, sizeof(tmp))); \
|
|
||||||
- func; \
|
|
||||||
- ret; \
|
|
||||||
- } \
|
|
||||||
+#define ERROR_IF_FUNC(exp, errstr, func, ret) \
|
|
||||||
+ do { \
|
|
||||||
+ if (exp) { \
|
|
||||||
+ char tmp[64]; \
|
|
||||||
+ esyslog("[%s,%d]: " errstr ": %s", __FILE__, __LINE__, \
|
|
||||||
+ strerror_r(errno, tmp, sizeof(tmp))); \
|
|
||||||
+ func; \
|
|
||||||
+ ret; \
|
|
||||||
+ } \
|
|
||||||
} while (0)
|
|
@ -22,7 +22,7 @@ PKG_REV="1"
|
|||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="http://projects.vdr-developer.org/projects/plg-streamdev"
|
PKG_SITE="http://projects.vdr-developer.org/projects/plg-streamdev"
|
||||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
PKG_URL="https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git/snapshot/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||||
PKG_DEPENDS_TARGET="toolchain vdr libressl"
|
PKG_DEPENDS_TARGET="toolchain vdr libressl"
|
||||||
PKG_PRIORITY="optional"
|
PKG_PRIORITY="optional"
|
||||||
PKG_SECTION="multimedia"
|
PKG_SECTION="multimedia"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
PKG_NAME="vdr-plugin-vnsiserver"
|
PKG_NAME="vdr-plugin-vnsiserver"
|
||||||
PKG_VERSION="00b5779"
|
PKG_VERSION="c63d8e8"
|
||||||
PKG_REV="1"
|
PKG_REV="1"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
|
@ -24,7 +24,7 @@ PKG_ARCH="any"
|
|||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="http://www.openelec.tv"
|
PKG_SITE="http://www.openelec.tv"
|
||||||
PKG_URL=""
|
PKG_URL=""
|
||||||
PKG_DEPENDS_TARGET="toolchain attr libcap vdr vdr-plugin-vnsiserver vdr-plugin-iptv vdr-plugin-wirbelscan vdr-plugin-wirbelscancontrol vdr-plugin-dvbapi vdr-plugin-streamdev vdr-plugin-live vdr-plugin-epgsearch vdr-plugin-xmltv2vdr vdr-plugin-eepg vdr-plugin-dummydevice vdr-plugin-satip vdr-plugin-epgfixer vdr-plugin-restfulapi"
|
PKG_DEPENDS_TARGET="toolchain vdr vdr-plugin-dummydevice vdr-plugin-dvbapi vdr-plugin-eepg vdr-plugin-epgfixer vdr-plugin-epgsearch vdr-plugin-iptv vdr-plugin-live vdr-plugin-restfulapi vdr-plugin-satip vdr-plugin-streamdev vdr-plugin-vnsiserver vdr-plugin-wirbelscan vdr-plugin-wirbelscancontrol vdr-plugin-xmltv2vdr"
|
||||||
PKG_PRIORITY="optional"
|
PKG_PRIORITY="optional"
|
||||||
PKG_SECTION="service.multimedia"
|
PKG_SECTION="service.multimedia"
|
||||||
PKG_SHORTDESC="vdr: A powerful DVB TV application"
|
PKG_SHORTDESC="vdr: A powerful DVB TV application"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user