Hello community,

here is the log from the commit of package vdr for openSUSE:Factory checked in 
at 2019-04-01 12:38:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/vdr (Old)
 and      /work/SRC/openSUSE:Factory/.vdr.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "vdr"

Mon Apr  1 12:38:34 2019 rev:52 rq:689921 version:2.4.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/vdr/vdr.changes  2019-03-10 09:32:13.372222473 
+0100
+++ /work/SRC/openSUSE:Factory/.vdr.new.25356/vdr.changes       2019-04-01 
12:38:34.973920997 +0200
@@ -1,0 +2,31 @@
+Sun Mar 24 16:30:20 UTC 2019 - Stefan Seyfried <seife+...@b1-systems.com>
+
+- add upstream patches:
+  * vdr-2.4.0-22-fix-sort-recordings.diff
+  * vdr-2.4.0-23-fix-patch-16.diff
+  * vdr-2.4.0-24-fix-drop-caps.diff
+  * vdr-2.4.0-25-fix-channels-menu.diff
+  * vdr-2.4.0-26-fix-shared-ca-pids.diff
+- rebase and rename vdr-2.3.9-gcc7.diff => vdr-2.4.0-gcc7+.diff
+
+-------------------------------------------------------------------
+Sat Mar 16 07:31:17 UTC 2019 - seife+...@b1-systems.com
+
+- add upstream patches:
+  * vdr-2.4.0-08-add-multi-frontend-support.diff
+  * vdr-2.4.0-09-fix-multi-frontend-access.diff
+  * vdr-2.4.0-10-fix-missing-epg.diff
+  * vdr-2.4.0-11-fix-peerdemo-udp-port.diff
+  * vdr-2.4.0-12-fix-empty-pat.diff
+  * vdr-2.4.0-13-fix-shutdown-2.diff
+  * vdr-2.4.0-14-fix-eitscan.diff
+  * vdr-2.4.0-15-fix-skincurses.diff
+  * vdr-2.4.0-16-fix-nit-transponder-processing.diff
+  * vdr-2.4.0-17-fix-nit-sdt-trigger.diff
+  * vdr-2.4.0-19-add-eac3-from-other-sources.diff
+  * vdr-2.4.0-20-fix-logging-inactive-transponders.diff
+  * vdr-2.4.0-21-fix-libsi.diff
+- remove obsolete vdr-2.4.0-use-ncurses5.diff, no more ncurses5
+  buildrequires \O/
+
+-------------------------------------------------------------------

Old:
----
  vdr-2.3.9-gcc7.diff
  vdr-2.4.0-use-ncurses5.diff

New:
----
  vdr-2.4.0-08-add-multi-frontend-support.diff
  vdr-2.4.0-09-fix-multi-frontend-access.diff
  vdr-2.4.0-10-fix-missing-epg.diff
  vdr-2.4.0-11-fix-peerdemo-udp-port.diff
  vdr-2.4.0-12-fix-empty-pat.diff
  vdr-2.4.0-13-fix-shutdown-2.diff
  vdr-2.4.0-14-fix-eitscan.diff
  vdr-2.4.0-15-fix-skincurses.diff
  vdr-2.4.0-16-fix-nit-transponder-processing.diff
  vdr-2.4.0-17-fix-nit-sdt-trigger.diff
  vdr-2.4.0-19-add-eac3-from-other-sources.diff
  vdr-2.4.0-20-fix-logging-inactive-transponders.diff
  vdr-2.4.0-21-fix-libsi.diff
  vdr-2.4.0-22-fix-sort-recordings.diff
  vdr-2.4.0-23-fix-patch-16.diff
  vdr-2.4.0-24-fix-drop-caps.diff
  vdr-2.4.0-25-fix-channels-menu.diff
  vdr-2.4.0-26-fix-shared-ca-pids.diff
  vdr-2.4.0-gcc7+.diff

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ vdr.spec ++++++
--- /var/tmp/diff_new_pack.q4hIIF/_old  2019-04-01 12:38:36.045921513 +0200
+++ /var/tmp/diff_new_pack.q4hIIF/_new  2019-04-01 12:38:36.045921513 +0200
@@ -46,11 +46,11 @@
 # from 
https://www.minidvblinux.de/git/?a=blob&p=vdr&h=6c20bf469703971cadd14f723265042968e38d24&n=16_vdr_wareagleicon.patch
 # 
https://www.minidvblinux.de/git/?a=tree&p=vdr&h=d6462aa15f34fc9de0b74e4f7a4e9e84e56823e4&hb=d2650f877373711350e837aede55a0b0f87904e9
 Patch3:         16_vdr_wareagleicon.patch
-#Patch4:         vdr-2.2.0-dynamite.diff
+Patch4:         vdr-2.4.0-gcc7+.diff
 Patch5:         vdr-2.3.9-MainMenuHooks-v1_0_1.patch
-Patch7:         vdr-2.4.0-use-ncurses5.diff
-Patch8:         vdr-2.3.9-gcc7.diff
 # "official" patches after release of tarball:
+# curl ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/ | \
+#   awk '{print "ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/"$9}'
 Patch101:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-01-fix-svdrp-modt-recflag.diff
 Patch102:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-02-fix-invalid-locking-sequence.diff
 Patch103:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-03-fix-locking-channel-display.diff
@@ -58,6 +58,24 @@
 Patch105:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-05-fix-shutdown.diff
 Patch106:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-06-fix-channel-switch.diff
 Patch107:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-07-fix-disabling-mtd.diff
+Patch108:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-08-add-multi-frontend-support.diff
+Patch109:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-09-fix-multi-frontend-access.diff
+Patch110:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-10-fix-missing-epg.diff
+Patch111:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-11-fix-peerdemo-udp-port.diff
+Patch112:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-12-fix-empty-pat.diff
+Patch113:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-13-fix-shutdown-2.diff
+Patch114:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-14-fix-eitscan.diff
+Patch115:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-15-fix-skincurses.diff
+Patch116:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-16-fix-nit-transponder-processing.diff
+Patch117:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-17-fix-nit-sdt-trigger.diff
+Patch119:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-19-add-eac3-from-other-sources.diff
+Patch120:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-20-fix-logging-inactive-transponders.diff
+Patch121:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-21-fix-libsi.diff
+Patch122:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-22-fix-sort-recordings.diff
+Patch123:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-23-fix-patch-16.diff
+Patch124:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-24-fix-drop-caps.diff
+Patch125:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-25-fix-channels-menu.diff
+Patch126:       
ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-26-fix-shared-ca-pids.diff
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  doxygen
@@ -70,9 +88,6 @@
 BuildRequires:  libjpeg-devel
 BuildRequires:  linux-glibc-devel
 BuildRequires:  ncurses-devel
-%if 0%{?suse_version} >= 1330
-BuildRequires:  ncurses5-devel
-%endif
 BuildRequires:  pkg-config
 BuildRequires:  systemd-devel
 Requires(pre):  /usr/sbin/useradd
@@ -121,22 +136,30 @@
 %patch105 -p0
 %patch106 -p0
 %patch107 -p0
+%patch108 -p0
+%patch109 -p0
+%patch110 -p0
+%patch111 -p0
+%patch112 -p0
+%patch113 -p0
+%patch114 -p0
+%patch115 -p0
+%patch116 -p0
+%patch117 -p0
+%patch119 -p0
+%patch120 -p0
+%patch121 -p0
+%patch122 -p0
+%patch123 -p0
+%patch124 -p0
+%patch125 -p0
+%patch126 -p0
 #
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
-#patch4 -p1
+%patch4 -p1
 %patch5 -p1
-#
-## hack to apply patch7 either in rpmbuild if ncurses6 or during "quilt setup"
-case "`rpm -q ncurses-devel`" in
-       ncurses-devel-6*) NCURSES6=true ;;
-       *)                NCURSES6=false ;;
-esac
-if $NCURSES6 || [ "$TEXTDOMAIN" = quilt ]; then
-%patch7 -p1
-fi
-%patch8 -p1
 
 #should be a patch, but anyway...
 %if 0%{?suse_version} >= 1330

++++++ vdr-2.4.0-08-add-multi-frontend-support.diff ++++++
++++ 855 lines (skipped)

++++++ vdr-2.4.0-09-fix-multi-frontend-access.diff ++++++
# Fixed accessing the actual frontend on multi frontend devices.
#
--- dvbdevice.c 2018/10/29 12:22:11     5.2
+++ dvbdevice.c 2019/03/10 12:03:20
@@ -571,6 +571,7 @@
   bool ProvidesDeliverySystem(int DeliverySystem) const;
   bool ProvidesModulation(int System, int StreamId, int Modulation) const;
   bool ProvidesFrontend(const cChannel *Channel, bool Activate = false) const;
+  int Frontend(void) const { return frontend; }
   int FrontendType(void) const { return frontendType; }
   const char *FrontendName(void) { return dvbFrontend->FrontendName(); }
   int NumProvidedSystems(void) const { return numDeliverySystems + 
numModulations; }
@@ -1869,6 +1870,11 @@
   return fd;
 }
 
+int cDvbDevice::Frontend(void) const
+{
+  return dvbTuner ? dvbTuner->Frontend() : frontend;
+}
+
 bool cDvbDevice::Exists(int Adapter, int Frontend)
 {
   cString FileName = DvbName(DEV_DVB_FRONTEND, Adapter, Frontend);
--- dvbdevice.h 2018/10/20 11:39:11     5.1
+++ dvbdevice.h 2019/03/10 12:01:15
@@ -189,7 +189,7 @@
   cDvbDevice(int Adapter, int Frontend);
   virtual ~cDvbDevice();
   int Adapter(void) const { return adapter; }
-  int Frontend(void) const { return frontend; }
+  int Frontend(void) const;
   virtual cString DeviceType(void) const;
   virtual cString DeviceName(void) const;
   static bool BondDevices(const char *Bondings);
++++++ vdr-2.4.0-10-fix-missing-epg.diff ++++++
# Reverted the change "The EIT filter no longer parses data from "other 
TS"...". It led to
# missing EPG data on channels from Canal Digital Norway.
#
--- eit.c       2018/03/31 13:40:32     5.0
+++ eit.c       2018/11/15 16:33:58     5.1
@@ -388,8 +388,7 @@
 
 cEitFilter::cEitFilter(void)
 {
-//Set(0x12, 0x40, 0xC0);  // event info now&next actual/other TS (0x4E/0x4F), 
future actual/other TS (0x5X/0x6X) // TODO: remove later
-  Set(0x12, 0x40, 0xE0);  // event info now&next actual/other TS (0x4E/0x4F), 
future actual TS (0x5X)
+  Set(0x12, 0x40, 0xC0);  // event info now&next actual/other TS (0x4E/0x4F), 
future actual/other TS (0x5X/0x6X)
   Set(0x14, 0x70);        // TDT
 }
 
@@ -416,8 +415,7 @@
      }
   switch (Pid) {
     case 0x12: {
-       //if (Tid >= 0x4E && Tid <= 0x6F) // TODO: remove later
-         if (Tid == 0x4E || Tid >= 0x50 && Tid <= 0x5F)
+         if (Tid >= 0x4E && Tid <= 0x6F)
             cEIT EIT(sectionSyncerHash, Source(), Tid, Data);
          }
          break;
++++++ vdr-2.4.0-11-fix-peerdemo-udp-port.diff ++++++
# Fixed opening the UDP port in peerdemo.
#
--- peerdemo    2018/04/10 17:20:58     5.0
+++ peerdemo    2019/03/11 10:28:22
@@ -37,7 +37,7 @@
 $UdpPort = $DefaultSvdrpPort;
 
 $TcpSocket = new IO::Socket::INET(Listen => 5, LocalPort => $TcpPort, Proto => 
"tcp", ReusePort => 1) || die "$!";
-$UdpSocket = new IO::Socket::INET(             LocalPort => $UdpPort, Proto => 
"udp", ReusePort => 1) || die "$!";
+$UdpSocket = new IO::Socket::INET(             LocalPort => $UdpPort, Proto => 
"udp", ReuseAddr => 1) || die "$!";
 $SvdrpSelect = new IO::Select($TcpSocket);
 setsockopt($UdpSocket, SOL_SOCKET, SO_RCVTIMEO, pack('L!L!', 0, 1000)); # 1ms 
timeout on UDP socket
 
++++++ vdr-2.4.0-12-fix-empty-pat.diff ++++++
# Fixed handling PATs that contain no PMTs.
#
--- pat.c       2016/12/23 14:02:07     5.0
+++ pat.c       2019/03/11 13:20:27
@@ -372,7 +372,8 @@
                }
            if (numPmtEntries > 0 && pmtIndex < 0)
               pmtIndex = 0;
-           Add(GetPmtPid(pmtIndex), SI::TableIdPMT);
+           if (pmtIndex >= 0)
+              Add(GetPmtPid(pmtIndex), SI::TableIdPMT);
            patVersion = pat.getVersionNumber();
            timer.Set(PMT_SCAN_TIMEOUT);
            }
++++++ vdr-2.4.0-13-fix-shutdown-2.diff ++++++
# Fixed shutdown after user inactivity in case a plugin is keeping the OSD open 
(cont'd).
# 
--- vdr.c       2018/07/16 08:52:40     5.2
+++ vdr.c       2019/03/12 10:01:16
@@ -1514,7 +1514,7 @@
               ShutdownHandler.countdown.Cancel();
            }
 
-        if (!cRecordControls::Active() && !RecordingsHandler.Active() && (Now 
- cRemote::LastActivity()) > ACTIVITYTIMEOUT) {
+        if (!cControl::Control() && !cRecordControls::Active() && 
!RecordingsHandler.Active() && (Now - cRemote::LastActivity()) > 
ACTIVITYTIMEOUT) {
            // Shutdown:
            // Check whether VDR will be ready for shutdown in SHUTDOWNWAIT 
seconds:
            time_t Soon = Now + SHUTDOWNWAIT;
++++++ vdr-2.4.0-14-fix-eitscan.diff ++++++
# Fixed processing the last entry in the scan list of the EIT scanner.
#
--- eitscan.c   2015/09/10 11:05:03     5.0
+++ eitscan.c   2019/03/12 11:46:05
@@ -177,7 +177,7 @@
                       }
                   }
                }
-           if (!scanList->Count() || !AnyDeviceSwitched) {
+           if (!AnyDeviceSwitched) {
               delete scanList;
               scanList = NULL;
               if (lastActivity == 0) // this was a triggered scan
++++++ vdr-2.4.0-15-fix-skincurses.diff ++++++
# Changes for ncurses version 6.
#
--- ./PLUGINS/src/skincurses/skincurses.c       2018/04/10 13:01:00     5.0
+++ ./PLUGINS/src/skincurses/skincurses.c       2019/03/12 12:24:34     5.1
@@ -12,7 +12,7 @@
 #include <vdr/skins.h>
 #include <vdr/videodir.h>
 
-static const char *VERSION        = "2.4.0";
+static const char *VERSION        = "2.4.1";
 static const char *DESCRIPTION    = trNOOP("A text only skin");
 static const char *MAINMENUENTRY  = NULL;
 
@@ -127,8 +127,12 @@
 
 void cCursesOsd::RestoreRegion(void)
 {
+  int begy, begx;
+  int maxy, maxx;
+  getmaxyx(savedRegion, maxy,maxx);
+  getbegyx(savedRegion, begy,begx);
   if (savedRegion) {
-     copywin(savedRegion, window, 0, 0, savedRegion->_begy, 
savedRegion->_begx, savedRegion->_maxy - savedRegion->_begy, savedRegion->_maxx 
- savedRegion->_begx, false);
+     copywin(savedRegion, window, 0, 0, begy, begx, maxy - begy, maxx - begx, 
false);
      delwin(savedRegion);
      savedRegion = NULL;
      }
@@ -828,9 +832,13 @@
 {
   // Initialize any background activities the plugin shall perform.
   WINDOW *w = initscr();
+  int begy, begx;
+  int maxy, maxx;
+  getmaxyx(w, maxy,maxx);
+  getbegyx(w, begy,begx);
   if (w) {
-     ScOsdWidth  = w->_maxx - w->_begx + 1;
-     ScOsdHeight = w->_maxy - w->_begy + 1;
+     ScOsdWidth  = maxx - begx + 1;
+     ScOsdHeight = maxy - begy + 1;
      return true;
      }
   return false;
++++++ vdr-2.4.0-16-fix-nit-transponder-processing.diff ++++++
# Fixed processing transponder data in the NIT.
#
--- nit.c       2018/03/18 10:52:21     5.0
+++ nit.c       2019/03/12 13:01:33
@@ -125,7 +125,6 @@
                            dtp.SetStreamId(dtpc.StreamId());
                            //
                            int transponder = Channel->Transponder();
-                           found = true;
                            if (!ISTRANSPONDER(cChannel::Transponder(Frequency, 
dtp.Polarization()), transponder)) {
                               for (int n = 0; n < NumFrequencies; n++) {
                                   if 
(ISTRANSPONDER(cChannel::Transponder(Frequencies[n], dtp.Polarization()), 
transponder)) {
@@ -134,7 +133,10 @@
                                      }
                                   }
                               }
-                           if (ISTRANSPONDER(cChannel::Transponder(Frequency, 
dtp.Polarization()), Transponder())) // only modify channels if we're actually 
receiving this transponder
+                           if (!ISTRANSPONDER(cChannel::Transponder(Frequency, 
dtp.Polarization()), transponder))
+                              continue; // a channel with 
obsolete/wrong/other(?) transponder
+                           found = true;
+                           if (ISTRANSPONDER(transponder, Transponder())) // 
only modify channels if we're actually receiving this transponder
                               ChannelsModified |= 
Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('S'));
                            else if (Channel->Srate() != SymbolRate || 
strcmp(Channel->Parameters(), dtp.ToString('S')))
                               forceTransponderUpdate = true; // get us 
receiving this transponder
@@ -188,7 +190,6 @@
                     for (cChannel *Channel = Channels->First(); Channel; 
Channel = Channels->Next(Channel)) {
                         if (!Channel->GroupSep() && Channel->Source() == 
Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == 
ts.getTransportStreamId()) {
                            int transponder = Channel->Transponder();
-                           found = true;
                            if (!ISTRANSPONDER(Frequency / 1000, transponder)) {
                               for (int n = 0; n < NumFrequencies; n++) {
                                   if (ISTRANSPONDER(Frequencies[n] / 1000, 
transponder)) {
@@ -197,7 +198,10 @@
                                      }
                                   }
                               }
-                           if (ISTRANSPONDER(Frequency / 1000, Transponder())) 
// only modify channels if we're actually receiving this transponder
+                           if (!ISTRANSPONDER(Frequency / 1000000, 
transponder))
+                              continue; // a channel with 
obsolete/wrong/other(?) transponder
+                           found = true;
+                           if (ISTRANSPONDER(transponder, Transponder())) // 
only modify channels if we're actually receiving this transponder
                               ChannelsModified |= 
Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('C'));
                            else if (Channel->Srate() != SymbolRate || 
strcmp(Channel->Parameters(), dtp.ToString('C')))
                               forceTransponderUpdate = true; // get us 
receiving this transponder
@@ -254,7 +258,6 @@
                            dtp.SetTransmission(dtpc.Transmission());
                            //
                            int transponder = Channel->Transponder();
-                           found = true;
                            if (!ISTRANSPONDER(Frequency / 1000000, 
transponder)) {
                               for (int n = 0; n < NumFrequencies; n++) {
                                   if (ISTRANSPONDER(Frequencies[n] / 1000000, 
transponder)) {
@@ -263,7 +266,10 @@
                                      }
                                   }
                               }
-                           if (ISTRANSPONDER(Frequency / 1000000, 
Transponder())) // only modify channels if we're actually receiving this 
transponder
+                           if (!ISTRANSPONDER(Frequency / 1000000, 
transponder))
+                              continue; // a channel with 
obsolete/wrong/other(?) transponder
+                           found = true;
+                           if (ISTRANSPONDER(transponder, Transponder())) // 
only modify channels if we're actually receiving this transponder
                               ChannelsModified |= 
Channel->SetTransponderData(Source, Frequency, 0, dtp.ToString('T'));
                            else if (strcmp(Channel->Parameters(), 
dtp.ToString('T')))
                               forceTransponderUpdate = true; // get us 
receiving this transponder
++++++ vdr-2.4.0-17-fix-nit-sdt-trigger.diff ++++++
# Fixed triggering the SDT filter when parsing the NIT.
#
--- nit.c       2019/03/12 13:01:33     5.1
+++ nit.c       2019/03/12 14:00:52
@@ -153,8 +153,6 @@
                            }
                        }
                     }
-                 if (ISTRANSPONDER(cChannel::Transponder(Frequency, 
dtp.Polarization()), Transponder()))
-                    sdtFilter->Trigger(Source);
                  }
                  break;
             case SI::S2SatelliteDeliverySystemDescriptorTag: {
@@ -218,8 +216,6 @@
                            }
                        }
                     }
-                 if (ISTRANSPONDER(Frequency / 1000, Transponder()))
-                    sdtFilter->Trigger(Source);
                  }
                  break;
             case SI::TerrestrialDeliverySystemDescriptorTag: {
@@ -286,8 +282,6 @@
                            }
                        }
                     }
-                 if (ISTRANSPONDER(Frequency / 1000000, Transponder()))
-                    sdtFilter->Trigger(Source);
                  }
                  break;
             case SI::ExtensionDescriptorTag: {
@@ -367,5 +361,9 @@
           delete d;
           }
       }
+  if (nit.getSectionNumber() == nit.getLastSectionNumber()) {
+     dbgnit("    trigger sdtFilter for current tp %d\n", Transponder());
+     sdtFilter->Trigger(Source());
+     }
   StateKey.Remove(ChannelsModified);
 }
++++++ vdr-2.4.0-19-add-eac3-from-other-sources.diff ++++++
# Added support for EAC3 audio from other sources.
#
--- pat.c       2019/03/11 13:20:27     5.1
+++ pat.c       2019/03/15 10:14:35
@@ -545,6 +545,7 @@
                          }
                       // fall through
               case 0x81: // STREAMTYPE_USER_PRIVATE
+              case 0x87: // eac3
                       if (Setup.StandardCompliance == STANDARD_ANSISCTE) { // 
ATSC A/53 AUDIO (ANSI/SCTE 57)
                          char lang[MAXLANGCODE1] = { 0 };
                          SI::Descriptor *d;
@@ -575,7 +576,8 @@
                          break;
                          }
                       // fall through
-              case 0x83 ... 0xFF: // STREAMTYPE_USER_PRIVATE
+              case 0x83 ... 0x86: // STREAMTYPE_USER_PRIVATE
+              case 0x88 ... 0xFF: // STREAMTYPE_USER_PRIVATE
                       {
                       char lang[MAXLANGCODE1] = { 0 };
                       bool IsAc3 = false;
--- remux.c     2017/04/29 12:25:09     5.0
+++ remux.c     2019/03/15 10:14:35
@@ -839,9 +839,11 @@
                       break;
            case 0x81: // STREAMTYPE_USER_PRIVATE - AC3 audio for ATSC and BD
            case 0x82: // STREAMTYPE_USER_PRIVATE - DTS audio for BD
+           case 0x87: // eac3
                       {
                       dbgpatpmt(" %s",
                           stream.getStreamType() == 0x81 ? "AC3" :
+                          stream.getStreamType() == 0x87 ? "AC3" :
                           stream.getStreamType() == 0x82 ? "DTS" : "");
                       char lang[MAXLANGCODE1] = { 0 };
                       SI::Descriptor *d;
++++++ vdr-2.4.0-20-fix-logging-inactive-transponders.diff ++++++
# No longer logging tuning timeouts for transponders that are announced in the 
NIT but
# are not currently broadcasting.
#
--- dvbdevice.c 2019/03/10 12:03:20     5.3
+++ dvbdevice.c 2019/03/15 14:49:44
@@ -1711,7 +1711,8 @@
                   lastDiseqc = NULL;
                   lastSource = 0;
                   if (time(NULL) - lastTimeoutReport > 60) { // let's not get 
too many of these
-                     isyslog("frontend %d/%d timed out while tuning to channel 
%d (%s), tp %d", adapter, frontend, channel.Number(), channel.Name(), 
channel.Transponder());
+                     if (channel.Number()) // no need to log this for 
transponders that are announced in the NIT but are not currently broadcasting
+                        isyslog("frontend %d/%d timed out while tuning to 
channel %d (%s), tp %d", adapter, frontend, channel.Number(), channel.Name(), 
channel.Transponder());
                      lastTimeoutReport = time(NULL);
                      }
                   continue;
++++++ vdr-2.4.0-21-fix-libsi.diff ++++++
# Fixed processing SI::T2DeliverySystemDescriptor when typecasting it over an
# SI::ExtensionDescriptor.
#
--- ./libsi/descriptor.c        2013/10/30 10:16:18     5.0
+++ ./libsi/descriptor.c        2019/03/15 16:12:43
@@ -870,6 +870,11 @@
 void ExtensionDescriptor::Parse() {
    int offset=0;
    data.setPointerAndOffset<const descr_extension>(s, offset);
+   extended_data_flag = s->descriptor_length > 0x04;
+}
+
+int ExtensionDescriptor::getExtendedDataFlag() const {
+  return extended_data_flag;
 }
 
 int ExtensionDescriptor::getExtensionDescriptorTag() const {
--- ./libsi/descriptor.h        2014/02/08 12:44:17     5.0
+++ ./libsi/descriptor.h        2019/03/15 16:12:09
@@ -529,11 +529,13 @@
 
 class ExtensionDescriptor : public Descriptor {
 public:
+   int getExtendedDataFlag() const;
    int getExtensionDescriptorTag() const;
 protected:
    virtual void Parse();
 private:
    const descr_extension *s;
+   int extended_data_flag;
 };
 
 class T2DeliverySystemDescriptor : public Descriptor {
++++++ vdr-2.4.0-22-fix-sort-recordings.diff ++++++
--- recording.c 2018/03/17 10:56:13     5.0
+++ recording.c 2019/03/17 16:01:13
@@ -1022,9 +1022,9 @@
 {
   cRecording *r = (cRecording *)&ListObject;
   if (Setup.RecSortingDirection == rsdAscending)
-     return strcasecmp(SortName(), r->SortName());
+     return strcmp(SortName(), r->SortName());
   else
-     return strcasecmp(r->SortName(), SortName());
+     return strcmp(r->SortName(), SortName());
 }
 
 bool cRecording::IsInPath(const char *Path) const
++++++ vdr-2.4.0-23-fix-patch-16.diff ++++++
# Fixed a copy/paste error in patch #16.
#
--- nit.c       2019/03/12 14:00:52     5.2
+++ nit.c       2019/03/18 10:29:09
@@ -196,7 +196,7 @@
                                      }
                                   }
                               }
-                           if (!ISTRANSPONDER(Frequency / 1000000, 
transponder))
+                           if (!ISTRANSPONDER(Frequency / 1000, transponder))
                               continue; // a channel with 
obsolete/wrong/other(?) transponder
                            found = true;
                            if (ISTRANSPONDER(transponder, Transponder())) // 
only modify channels if we're actually receiving this transponder
++++++ vdr-2.4.0-24-fix-drop-caps.diff ++++++
# Fixed dropping capabilities in case cap_sys_time is not available.
#
--- vdr.c       2019/03/12 10:01:16     5.3
+++ vdr.c       2019/03/18 11:17:07     5.4
@@ -126,7 +126,25 @@
 static bool DropCaps(void)
 {
   // drop all capabilities except selected ones
-  cap_t caps = cap_from_text("= cap_sys_nice,cap_sys_time,cap_net_raw=ep");
+  cap_t caps_all = cap_get_proc();
+  if (!caps_all) {
+     fprintf(stderr, "vdr: cap_get_proc failed: %s\n", strerror(errno));
+     return false;
+     }
+  char *caps_text = cap_to_text(caps_all, NULL);
+  if (!caps_text) {
+     fprintf(stderr, "vdr: cap_to_text failed: %s\n", strerror(errno));
+     return false;
+     }
+  if (cap_free(caps_all)) {
+     fprintf(stderr, "vdr: cap_free failed: %s\n", strerror(errno));
+     return false;
+     }
+  cap_t caps;
+  if (strstr(caps_text,"cap_sys_time"))
+     caps = cap_from_text("= cap_sys_nice,cap_sys_time,cap_net_raw=ep");
+  else
+     caps = cap_from_text("= cap_sys_nice,cap_net_raw=ep");
   if (!caps) {
      fprintf(stderr, "vdr: cap_from_text failed: %s\n", strerror(errno));
      return false;
++++++ vdr-2.4.0-25-fix-channels-menu.diff ++++++
# Fixed updating the cursor position when switching channels with the 
Channel+/- keys
# while the Channels menu is open.
#
--- menu.c      2018/07/16 09:29:57     5.4
+++ menu.c      2019/03/18 16:14:06     5.5
@@ -576,7 +576,7 @@
          break;
     default:
          if (state == osUnknown) {
-            switch (Key) {
+            switch (int(Key)) {
               case k0 ... k9:
                             return Number(Key);
               case kOk:     return Switch();
@@ -586,6 +586,20 @@
               case kBlue:   if (!HasSubMenu())
                                Mark();
                             break;
+              case kChanUp|k_Repeat:
+              case kChanUp:
+              case kChanDn|k_Repeat:
+              case kChanDn: {
+                   LOCK_CHANNELS_READ;
+                   int CurrentChannelNr = cDevice::CurrentChannel();
+                   for (cMenuChannelItem *ci = (cMenuChannelItem *)First(); 
ci; ci = (cMenuChannelItem *)ci->Next()) {
+                       if (!ci->Channel()->GroupSep() && 
ci->Channel()->Number() == CurrentChannelNr) {
+                          SetCurrent(ci);
+                          Display();
+                          break;
+                          }
+                       }
+                   }
               default: break;
               }
             }
++++++ vdr-2.4.0-26-fix-shared-ca-pids.diff ++++++
# Fixed handling shared CA pids.
#
--- ci.c        2018/09/23 10:17:20     5.1
+++ ci.c        2019/03/19 14:58:06
@@ -2505,8 +2505,10 @@
                   if (GetCaPids(source, transponder, p->programNumber, 
CaSystemIds, MAXRECEIVEPIDS + 1, CaPids) > 0) {
                      if (Active)
                         caPidReceiver->AddPids(CaPids);
-                     else
+                     else {
+                        KeepSharedCaPids(p->programNumber, CaSystemIds, 
CaPids);
                         caPidReceiver->DelPids(CaPids);
+                        }
                      }
                   }
                if (RepliesToQuery())
@@ -2522,6 +2524,43 @@
      }
 }
 
+void cCamSlot::KeepSharedCaPids(int ProgramNumber, const int *CaSystemIds, int 
*CaPids)
+{
+  int numPids = 0;
+  int *pCaPids = CaPids;
+  while (*pCaPids) {
+        numPids++;
+        pCaPids++;
+        }
+  if (numPids <= 0)
+     return;
+  int CaPids2[MAXRECEIVEPIDS + 1];
+  for (cCiCaProgramData *p = caProgramList.First(); p; p = 
caProgramList.Next(p)) {
+      if (p->programNumber != ProgramNumber) {
+         if (GetCaPids(source, transponder, p->programNumber, CaSystemIds, 
MAXRECEIVEPIDS + 1, CaPids2) > 0) {
+            int *pCaPids2 = CaPids2;
+            while (*pCaPids2) {
+                  pCaPids = CaPids;
+                  while (*pCaPids) {
+                        if (*pCaPids == *pCaPids2) {
+                           dsyslog("CAM %d: keeping shared CA pid %d", 
SlotNumber(), *pCaPids);
+                           // To remove *pCaPids from CaPids we overwrite it 
with the last valie in the list, and then strip the last value:
+                           *pCaPids = CaPids[numPids - 1];
+                           numPids--;
+                           CaPids[numPids] = 0;
+                           if (numPids <= 0)
+                              return;
+                           }
+                        else
+                           pCaPids++;
+                        }
+                  pCaPids2++;
+                  }
+            }
+         }
+      }
+}
+
 void cCamSlot::SendCaPmts(cCiCaPmtList &CaPmtList)
 {
   cMutexLock MutexLock(&mutex);
--- ci.h        2018/03/17 12:17:37     5.0
+++ ci.h        2019/03/17 17:41:17
@@ -254,6 +254,7 @@
   cList<cCiCaProgramData> caProgramList;
   bool mtdAvailable;
   cMtdHandler *mtdHandler;
+  void KeepSharedCaPids(int ProgramNumber, const int *CaSystemIds, int 
*CaPids);
   void NewConnection(void);
   void DeleteAllConnections(void);
   void Process(cTPDU *TPDU = NULL);
++++++ vdr-2.4.0-gcc7+.diff ++++++
Index: b/osdbase.c
===================================================================
--- a/osdbase.c
+++ b/osdbase.c
@@ -519,7 +519,7 @@ eOSState cOsdMenu::HotKey(eKeys Key)
       const char *s = item->Text();
       i = 0;
       item_nr = 0;
-      if (s && (s = skipspace(s)) != '\0' && '0' <= s[i] && s[i] <= '9') {
+      if (s && (s = skipspace(s))[0] != '\0' && '0' <= s[i] && s[i] <= '9') {
          do {
             item_nr = item_nr * 10 + (s[i] - '0');
             }

Reply via email to