New Upstream Snapshot - vdr-plugin-satip
Ready changes
Summary
Merged new upstream version: 2.4.1+git20230105.1.02a842f (was: 2.4.1).
Diff
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 4e74255..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-.dependencies
-*.o
-*.so
-*~
-po/*.pot
-po/*.mo
-.settings
-.cproject
-.project
diff --git a/debian/changelog b/debian/changelog
index cc9805c..1a7ca05 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+vdr-plugin-satip (2.4.1+git20230105.1.02a842f-1) UNRELEASED; urgency=low
+
+ * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk> Wed, 08 Feb 2023 18:58:10 -0000
+
vdr-plugin-satip (2.4.1-2) unstable; urgency=medium
* Fix debian/watch
diff --git a/debian/patches/configurable-pkg-config.patch b/debian/patches/configurable-pkg-config.patch
index 7998d1e..c4305f5 100644
--- a/debian/patches/configurable-pkg-config.patch
+++ b/debian/patches/configurable-pkg-config.patch
@@ -1,6 +1,8 @@
---- a/Makefile
-+++ b/Makefile
-@@ -20,7 +20,8 @@
+Index: vdr-plugin-satip.git/Makefile
+===================================================================
+--- vdr-plugin-satip.git.orig/Makefile
++++ vdr-plugin-satip.git/Makefile
+@@ -20,7 +20,8 @@ GITTAG = $(shell git describe --always
### The directory environment:
# Use package data if installed...otherwise assume we're under the VDR source directory:
diff --git a/msearch.c b/msearch.c
index b137a05..38a3941 100644
--- a/msearch.c
+++ b/msearch.c
@@ -76,13 +76,13 @@ void cSatipMsearch::Process(void)
if (status) {
// Check the location data
// LOCATION: http://192.168.0.115:8888/octonet.xml
- if (startswith(r, "LOCATION:")) {
+ if (strcasestr(r, "LOCATION:") == r) {
location = compactspace(r + 9);
debug1("%s location='%s'", __PRETTY_FUNCTION__, location);
}
// Check the source type
// ST: urn:ses-com:device:SatIPServer:1
- else if (startswith(r, "ST:")) {
+ else if (strcasestr(r, "ST:") == r) {
char *st = compactspace(r + 3);
if (strstr(st, "urn:ses-com:device:SatIPServer:1"))
valid = true;
diff --git a/sectionfilter.c b/sectionfilter.c
index d497e6a..247e4c4 100644
--- a/sectionfilter.c
+++ b/sectionfilter.c
@@ -18,35 +18,14 @@ cSatipSectionFilter::cSatipSectionFilter(int deviceIndexP, uint16_t pidP, uint8_
secLenM(0),
tsFeedpM(0),
pidM(pidP),
+ tidM(tidP),
+ maskM(maskP),
ringBufferM(new cRingBufferFrame(eDmxMaxSectionCount * eDmxMaxSectionSize)),
deviceIndexM(deviceIndexP)
{
debug16("%s (%d, %d, %d, %d) [device %d]", __PRETTY_FUNCTION__, deviceIndexM, pidM, tidP, maskP, deviceIndexM);
- int i;
memset(secBufBaseM, 0, sizeof(secBufBaseM));
- memset(filterValueM, 0, sizeof(filterValueM));
- memset(filterMaskM, 0, sizeof(filterMaskM));
- memset(filterModeM, 0, sizeof(filterModeM));
- memset(maskAndModeM, 0, sizeof(maskAndModeM));
- memset(maskAndNotModeM, 0, sizeof(maskAndNotModeM));
-
- filterValueM[0] = tidP;
- filterMaskM[0] = maskP;
-
- // Invert the filter
- for (i = 0; i < eDmxMaxFilterSize; ++i)
- filterValueM[i] ^= 0xFF;
-
- uint8_t doneq = 0;
- for (i = 0; i < eDmxMaxFilterSize; ++i) {
- uint8_t mode = filterModeM[i];
- uint8_t mask = filterMaskM[i];
- maskAndModeM[i] = (uint8_t)(mask & mode);
- maskAndNotModeM[i] = (uint8_t)(mask & ~mode);
- doneq |= maskAndNotModeM[i];
- }
- doneqM = doneq ? 1 : 0;
// Create sockets
socketM[0] = socketM[1] = -1;
@@ -89,23 +68,12 @@ void cSatipSectionFilter::New(void)
int cSatipSectionFilter::Filter(void)
{
if (secBufM) {
- int i;
- uint8_t neq = 0;
-
- for (i = 0; i < eDmxMaxFilterSize; ++i) {
- uint8_t calcxor = (uint8_t)(filterValueM[i] ^ secBufM[i]);
- if (maskAndModeM[i] & calcxor)
- return 0;
- neq |= (maskAndNotModeM[i] & calcxor);
- }
-
- if (doneqM && !neq)
- return 0;
-
- if (ringBufferM && (secLenM > 0)) {
- cFrame* section = new cFrame(secBufM, secLenM);
- if (!ringBufferM->Put(section))
- DELETE_POINTER(section);
+ if ((tidM & maskM) == (secBufM[0] & maskM)) {
+ if (ringBufferM && (secLenM > 0)) {
+ cFrame* section = new cFrame(secBufM, secLenM);
+ if (!ringBufferM->Put(section))
+ DELETE_POINTER(section);
+ }
}
}
return 0;
diff --git a/sectionfilter.h b/sectionfilter.h
index e5573d3..c0bca60 100644
--- a/sectionfilter.h
+++ b/sectionfilter.h
@@ -33,18 +33,13 @@ private:
uint16_t secLenM;
uint16_t tsFeedpM;
uint16_t pidM;
+ uint8_t tidM;
+ uint8_t maskM;
cRingBufferFrame *ringBufferM;
int deviceIndexM;
int socketM[2];
- uint8_t filterValueM[eDmxMaxFilterSize];
- uint8_t filterMaskM[eDmxMaxFilterSize];
- uint8_t filterModeM[eDmxMaxFilterSize];
-
- uint8_t maskAndModeM[eDmxMaxFilterSize];
- uint8_t maskAndNotModeM[eDmxMaxFilterSize];
-
inline uint16_t GetLength(const uint8_t *dataP);
void New(void);
int Filter(void);
diff --git a/server.c b/server.c
index 5cdba44..6584230 100644
--- a/server.c
+++ b/server.c
@@ -40,29 +40,43 @@ bool cSatipFrontends::Matches(int deviceIdP, int transponderP)
bool cSatipFrontends::Assign(int deviceIdP, int transponderP)
{
cSatipFrontend *tmp = NULL;
- // Prefer any unused one
+ // Prefer any used one
for (cSatipFrontend *f = First(); f; f = Next(f)) {
- if (!f->Attached() || (f->DeviceId() == deviceIdP)) {
+ if (f->DeviceId() == deviceIdP) { // give deviceID priority, but take detached frontend if deviceID ist not yet attached
tmp = f;
break;
}
+ if (!f->Attached()) {
+ tmp = f;
+ }
}
if (tmp) {
tmp->SetTransponder(transponderP);
+ debug9("%s assigned TP %d to %s/#%d", __PRETTY_FUNCTION__, transponderP, *tmp->Description(), tmp->Index());
return true;
}
+ error("no assignable frontend found [device %u]", deviceIdP);
return false;
}
bool cSatipFrontends::Attach(int deviceIdP, int transponderP)
{
+ cSatipFrontend *tmp = NULL;
for (cSatipFrontend *f = First(); f; f = Next(f)) {
if (f->Transponder() == transponderP) {
- f->Attach(deviceIdP);
- debug9("%s (%d, %d) %s/#%d", __PRETTY_FUNCTION__, deviceIdP, transponderP, *f->Description(), f->Index());
- return true;
+ tmp = f;
+ if (f->DeviceId() == deviceIdP) {
+ break;
+ }
}
}
+
+ if (tmp) {
+ tmp->Attach(deviceIdP);
+ debug9("%s attached deviceId %d (TP %d) to %s/#%d", __PRETTY_FUNCTION__, deviceIdP, transponderP, *tmp->Description(), tmp->Index());
+ return true;
+ }
+ error("%s no Frontend found for attaching deviceID %d (TP %d)", __PRETTY_FUNCTION__, deviceIdP, transponderP);
return false;
}
@@ -71,7 +85,7 @@ bool cSatipFrontends::Detach(int deviceIdP, int transponderP)
for (cSatipFrontend *f = First(); f; f = Next(f)) {
if (f->Transponder() == transponderP) {
f->Detach(deviceIdP);
- debug9("%s (%d, %d) %s/#%d", __PRETTY_FUNCTION__, deviceIdP, transponderP, *f->Description(), f->Index());
+ debug9("%s detached deviceID %d (TP %d) from %s/#%d", __PRETTY_FUNCTION__, deviceIdP, transponderP, *f->Description(), f->Index());
return true;
}
}
diff --git a/tuner.c b/tuner.c
index be7b392..b5af331 100644
--- a/tuner.c
+++ b/tuner.c
@@ -225,7 +225,7 @@ bool cSatipTuner::Connect(void)
if (streamIdM >= 0) {
if (!strcmp(*streamParamM, *lastParamM) && hasLockM) {
debug1("%s Identical parameters [device %d]", __PRETTY_FUNCTION__, deviceIdM);
- return true;
+ //return true; // fall through because detection does not work reliably
}
cString uri = cString::sprintf("%sstream=%d?%s", *connectionUri, streamIdM, *streamParamM);
debug1("%s Retuning [device %d]", __PRETTY_FUNCTION__, deviceIdM);
@@ -244,6 +244,7 @@ bool cSatipTuner::Connect(void)
if (useTcp)
debug1("%s Requesting TCP [device %d]", __PRETTY_FUNCTION__, deviceIdM);
if (rtspM.Setup(*uri, rtpM.Port(), rtcpM.Port(), useTcp)) {
+ lastParamM = streamParamM;
keepAliveM.Set(timeoutM);
if (nextServerM.IsValid()) {
currentServerM = nextServerM;
@@ -552,9 +553,11 @@ bool cSatipTuner::UpdatePids(bool forceP)
tnrParamM = param;
}
}
- pidUpdateCacheM.Set(ePidUpdateIntervalMs);
- if (!rtspM.Play(*uri))
- return false;
+ if (paramadded) {
+ pidUpdateCacheM.Set(ePidUpdateIntervalMs);
+ if (!rtspM.Play(*uri))
+ return false;
+ }
addPidsM.Clear();
delPidsM.Clear();
}