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();
      }

More details

Full run details

Historical runs