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