mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
cea1e4061f | ||
|
2dc383d362 | ||
|
a16a451c1f | ||
|
26412e8888 | ||
|
2e1b2107e7 | ||
|
ba5eee6cb8 | ||
|
1861074241 | ||
|
178f2cacf9 | ||
|
c276c6883d | ||
|
163945045d | ||
|
5f1e08f606 | ||
|
9f4c5cd785 | ||
|
3211df30df |
14
CONTRIBUTORS
14
CONTRIBUTORS
@ -2445,6 +2445,7 @@ Christoph Haubrich <christoph1.haubrich@arcor.de>
|
||||
for implementing anti-aliasing for cPixmap::DrawSlope() and cPixmap::DrawEllipse()
|
||||
for reporting an unnecessary double call to Display() in cMenuRecording::RefreshRecording()
|
||||
for reporting too much memory being allocated in the cImage constructors
|
||||
for reporting a problem with the call to EpgHandlers.EndSegmentTransfer()
|
||||
|
||||
Pekka Mauno <pekka.mauno@iki.fi>
|
||||
for fixing cSchedule::GetFollowingEvent() in case there is currently no present
|
||||
@ -2773,6 +2774,7 @@ Winfried K
|
||||
for adding initialization of cDvbFrontend::frontendInfo
|
||||
for improving handling missing VDRPluginDestroyer()
|
||||
for fixing a compiler warning
|
||||
for fixing handling $(PKG_CONFIG) in newplugin
|
||||
|
||||
Hans-Werner Hilse <hilse@web.de>
|
||||
for adding the command line option --userdump to enable core dumps in case VDR
|
||||
@ -2938,6 +2940,10 @@ Manuel Reimer <Manuel.Reimer@gmx.de>
|
||||
for reporting a bug in moving channels between number groups in SVDRP's MOVC command
|
||||
for fixing compatibility with current versions of glibc
|
||||
for suggesting to make the SVDRP command DELC accept a channel id
|
||||
for reporting a crash in the SVDRP command CLRE in case a non-existing channel
|
||||
number is given
|
||||
for reporting that LSTE doesn't work after PUTE in case a channel didn't already
|
||||
have EPG data
|
||||
|
||||
Rene van den Braken <rene@vandenbraken.name>
|
||||
for reporting a bug in writing the PCR pid into the PMT in
|
||||
@ -3643,6 +3649,8 @@ Helmut Binder <cco@aon.at>
|
||||
PMT pid were checked any more
|
||||
for reporting a problem with PMT handling in case locking the Channels list times out
|
||||
for avoiding a lengthy lock on the Channels list when starting a recording
|
||||
for fixing a memory leak in handling the NIT
|
||||
for reporting a possible memory leak in creating fonts
|
||||
|
||||
Ulrich Eckhardt <uli@uli-eckhardt.de>
|
||||
for reporting a problem with shutdown after user inactivity in case a plugin is
|
||||
@ -3655,6 +3663,8 @@ J
|
||||
for reporting a possible discrepancy of the primary device number in the LSTD and
|
||||
PRIM commands
|
||||
for adding support for EAC3 audio from other sources
|
||||
for reporting a crash if a pattern timer spawns a timer that uses EPISODE and the
|
||||
event has no short text
|
||||
|
||||
Stefan Verse <Verse@amotronics.de>
|
||||
for fixing an occasional black screen when switching channels
|
||||
@ -3664,3 +3674,7 @@ Jens Schleusener <Jens.Schleusener@fossies.org>
|
||||
|
||||
Bernd Kuhls <bernd.kuhls@t-online.de>
|
||||
for fixing possible compilation errors with libjpeg
|
||||
|
||||
Timo Weingärtner <timo@tiwe.de>
|
||||
for reporting an integer overflow in calculating the disk use percentage if there's
|
||||
more than 20TB of recordings
|
||||
|
24
HISTORY
24
HISTORY
@ -9562,3 +9562,27 @@ Video Disk Recorder Revision History
|
||||
- Fixed a compiler warning (thanks to Winfried Köhler).
|
||||
- Fixed convertCharacterTable() in case iconv_open() fails (thanks to Helmut Binder).
|
||||
- Official release.
|
||||
|
||||
2021-04-21: Version 2.4.7
|
||||
|
||||
- Fixed strreplace() to handle NULL strings (reported by Jürgen Schneider).
|
||||
- Somewhere down the road the 'x' bit of Doxyfile.filter got lost, so the
|
||||
Makefile now makes sure it is set before calling doxygen.
|
||||
- Fixed a crash in the SVDRP command CLRE in case a non-existing channel number is
|
||||
given (reported by Manuel Reimer).
|
||||
- Fixed handling $(PKG_CONFIG) in newplugin (thanks to Winfried Köhler).
|
||||
- Fixed initializing the cChannel::schedule pointer after reading EPG data with PUTE
|
||||
(reported by Manuel Reimer).
|
||||
- Official release.
|
||||
|
||||
2021-12-27: Version 2.4.8
|
||||
|
||||
- Fixed a possible crash in the Schedule menu, in case Setup.EPGLinger is 0.
|
||||
- Fixed cTsPayload::AtPayloadStart() to ignore TS packets from other PIDs.
|
||||
- Fixed unlocking vs. call to EpgHandlers.EndSegmentTransfer() (reported by Christoph
|
||||
Haubrich).
|
||||
- Fixed a memory leak in handling the NIT (thanks to Helmut Binder).
|
||||
- Fixed a possible memory leak in creating fonts (reported by Helmut Binder).
|
||||
- Fixed calculating the disk use percentage if there's more than 20TB of recordings
|
||||
(reported by Timo Weingärtner).
|
||||
- Official release.
|
||||
|
3
Makefile
3
Makefile
@ -4,7 +4,7 @@
|
||||
# See the main source file 'vdr.c' for copyright information and
|
||||
# how to reach the author.
|
||||
#
|
||||
# $Id: Makefile 4.10 2020/06/27 09:13:04 kls Exp $
|
||||
# $Id: Makefile 4.10.1.1 2021/01/02 15:11:20 kls Exp $
|
||||
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
@ -342,6 +342,7 @@ install-pc: vdr.pc
|
||||
srcdoc:
|
||||
@cat $(DOXYFILE) > $(DOXYFILE).tmp
|
||||
@echo PROJECT_NUMBER = $(VDRVERSION) >> $(DOXYFILE).tmp
|
||||
@chmod +x $(DOXYFILE).filter
|
||||
$(DOXYGEN) $(DOXYFILE).tmp
|
||||
@rm $(DOXYFILE).tmp
|
||||
|
||||
|
10
config.h
10
config.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: config.h 4.21 2020/12/22 17:23:51 kls Exp $
|
||||
* $Id: config.h 4.21.1.2 2021/12/27 11:29:58 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
@ -22,13 +22,13 @@
|
||||
|
||||
// VDR's own version number:
|
||||
|
||||
#define VDRVERSION "2.4.6"
|
||||
#define VDRVERSNUM 20406 // Version * 10000 + Major * 100 + Minor
|
||||
#define VDRVERSION "2.4.8"
|
||||
#define VDRVERSNUM 20408 // Version * 10000 + Major * 100 + Minor
|
||||
|
||||
// The plugin API's version number:
|
||||
|
||||
#define APIVERSION "2.4.6"
|
||||
#define APIVERSNUM 20406 // Version * 10000 + Major * 100 + Minor
|
||||
#define APIVERSION "2.4.8"
|
||||
#define APIVERSNUM 20408 // Version * 10000 + Major * 100 + Minor
|
||||
|
||||
// When loading plugins, VDR searches them by their APIVERSION, which
|
||||
// may be smaller than VDRVERSION in case there have been no changes to
|
||||
|
4
eit.c
4
eit.c
@ -8,7 +8,7 @@
|
||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
|
||||
*
|
||||
* $Id: eit.c 4.11 2020/11/28 21:45:05 kls Exp $
|
||||
* $Id: eit.c 4.11.1.1 2021/12/27 11:04:03 kls Exp $
|
||||
*/
|
||||
|
||||
#include "eit.h"
|
||||
@ -361,9 +361,9 @@ cEIT::cEIT(cSectionSyncerHash &SectionSyncerHash, int Source, u_char Tid, const
|
||||
EpgHandlers.DropOutdated(pSchedule, SegmentStart, SegmentEnd, Tid, getVersionNumber());
|
||||
pSchedule->SetModified();
|
||||
}
|
||||
EpgHandlers.EndSegmentTransfer(Modified);
|
||||
SchedulesStateKey.Remove(Modified);
|
||||
ChannelsStateKey.Remove(ChannelsModified);
|
||||
EpgHandlers.EndSegmentTransfer(Modified);
|
||||
}
|
||||
|
||||
// --- cTDT ------------------------------------------------------------------
|
||||
|
11
epg.c
11
epg.c
@ -7,7 +7,7 @@
|
||||
* Original version (as used in VDR before 1.3.0) written by
|
||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||
*
|
||||
* $Id: epg.c 4.9 2019/05/20 09:55:22 kls Exp $
|
||||
* $Id: epg.c 4.9.1.2 2021/12/27 10:52:38 kls Exp $
|
||||
*/
|
||||
|
||||
#include "epg.h"
|
||||
@ -1311,8 +1311,13 @@ bool cSchedules::Read(FILE *f)
|
||||
fclose(f);
|
||||
if (result) {
|
||||
// Initialize the channels' schedule pointers, so that the first WhatsOn menu will come up faster:
|
||||
for (cChannel *Channel = Channels->First(); Channel; Channel = Channels->Next(Channel))
|
||||
for (cChannel *Channel = Channels->First(); Channel; Channel = Channels->Next(Channel)) {
|
||||
if (const cSchedule *Schedule = Channel->schedule) {
|
||||
if (!Schedule->ChannelID().Valid()) // this is the DummySchedule
|
||||
Channel->schedule = NULL;
|
||||
}
|
||||
Schedules->GetSchedule(Channel);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -1342,6 +1347,8 @@ const cSchedule *cSchedules::GetSchedule(const cChannel *Channel, bool AddIfMiss
|
||||
{
|
||||
// This is not very beautiful, but it dramatically speeds up the
|
||||
// "What's on now/next?" menus.
|
||||
if (!Channel)
|
||||
return NULL;
|
||||
static cSchedule DummySchedule(tChannelID::InvalidID);
|
||||
if (!Channel->schedule)
|
||||
Channel->schedule = GetSchedule(Channel->GetChannelID());
|
||||
|
6
font.c
6
font.c
@ -6,7 +6,7 @@
|
||||
*
|
||||
* BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya.
|
||||
*
|
||||
* $Id: font.c 4.2 2016/12/22 12:31:23 kls Exp $
|
||||
* $Id: font.c 4.2.1.1 2021/12/27 11:14:05 kls Exp $
|
||||
*/
|
||||
|
||||
#include "font.h"
|
||||
@ -429,8 +429,10 @@ cFont *cFont::CreateFont(const char *Name, int CharHeight, int CharWidth)
|
||||
{
|
||||
cString fn = GetFontFileName(Name);
|
||||
cFont *f = *fn ? new cFreetypeFont(fn, CharHeight, CharWidth) : NULL;
|
||||
if (!f || !f->Height())
|
||||
if (!f || !f->Height()) {
|
||||
delete f;
|
||||
f = new cDummyFont(CharHeight, CharWidth);
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
# See the main source file 'vdr.c' for copyright information and
|
||||
# how to reach the author.
|
||||
#
|
||||
# $Id: newplugin 4.4 2020/06/22 15:08:46 kls Exp $
|
||||
# $Id: newplugin 4.4.1.1 2021/01/02 15:22:42 kls Exp $
|
||||
|
||||
$PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
|
||||
|
||||
@ -76,7 +76,7 @@ VERSION = \$(shell grep 'static const char \\*VERSION *=' \$(PLUGIN).c | awk '{
|
||||
|
||||
# Use package data if installed...otherwise assume we're under the VDR source directory:
|
||||
PKG_CONFIG ?= pkg-config
|
||||
PKGCFG = \$(if \$(VDRDIR),\$(shell $(PKG_CONFIG) --variable=\$(1) \$(VDRDIR)/vdr.pc),\$(shell PKG_CONFIG_PATH="\$\$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=\$(1) vdr))
|
||||
PKGCFG = \$(if \$(VDRDIR),\$(shell \$(PKG_CONFIG) --variable=\$(1) \$(VDRDIR)/vdr.pc),\$(shell PKG_CONFIG_PATH="\$\$PKG_CONFIG_PATH:../../.." \$(PKG_CONFIG) --variable=\$(1) vdr))
|
||||
LIBDIR = \$(call PKGCFG,libdir)
|
||||
LOCDIR = \$(call PKGCFG,locdir)
|
||||
PLGCFG = \$(call PKGCFG,plgcfg)
|
||||
|
4
nit.c
4
nit.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: nit.c 4.9 2019/05/31 13:25:00 kls Exp $
|
||||
* $Id: nit.c 4.9.1.1 2021/12/27 11:09:16 kls Exp $
|
||||
*/
|
||||
|
||||
#include "nit.h"
|
||||
@ -102,8 +102,10 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
||||
for (SI::Loop::Iterator it2; (d = ts.transportStreamDescriptors.getNext(it2)); ) {
|
||||
if (d->getDescriptorTag() == SI::S2SatelliteDeliverySystemDescriptorTag) {
|
||||
ForceDVBS2 = true;
|
||||
delete d;
|
||||
break;
|
||||
}
|
||||
delete d;
|
||||
}
|
||||
|
||||
for (SI::Loop::Iterator it2; (d = ts.transportStreamDescriptors.getNext(it2)); ) {
|
||||
|
8
remux.c
8
remux.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: remux.c 4.9 2020/06/22 12:15:52 kls Exp $
|
||||
* $Id: remux.c 4.9.1.1 2021/12/27 10:59:22 kls Exp $
|
||||
*/
|
||||
|
||||
#include "remux.h"
|
||||
@ -1292,7 +1292,7 @@ int cMpeg2Parser::Parse(const uchar *Data, int Length, int Pid)
|
||||
tsPayload.Statistics();
|
||||
break;
|
||||
}
|
||||
if (tsPayload.AtPayloadStart() // stop at any new payload start to have the buffer refilled if necessary
|
||||
if (tsPayload.AtPayloadStart() // stop at a new payload start to have the buffer refilled if necessary
|
||||
|| tsPayload.Eof()) // or if we're out of data
|
||||
break;
|
||||
}
|
||||
@ -1445,7 +1445,7 @@ int cH264Parser::Parse(const uchar *Data, int Length, int Pid)
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
if (tsPayload.AtPayloadStart() // stop at any new payload start to have the buffer refilled if necessary
|
||||
if (tsPayload.AtPayloadStart() // stop at a new payload start to have the buffer refilled if necessary
|
||||
|| tsPayload.Eof()) // or if we're out of data
|
||||
break;
|
||||
}
|
||||
@ -1603,7 +1603,7 @@ int cH265Parser::Parse(const uchar *Data, int Length, int Pid)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (tsPayload.AtPayloadStart() // stop at any new payload start to have the buffer refilled if necessary
|
||||
if (tsPayload.AtPayloadStart() // stop at a new payload start to have the buffer refilled if necessary
|
||||
|| tsPayload.Eof()) // or if we're out of data
|
||||
break;
|
||||
}
|
||||
|
4
remux.h
4
remux.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: remux.h 4.6 2020/09/16 13:48:33 kls Exp $
|
||||
* $Id: remux.h 4.6.1.1 2021/12/27 10:58:36 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __REMUX_H
|
||||
@ -249,7 +249,7 @@ public:
|
||||
bool AtTsStart(void) { return index < length && (index % TS_SIZE) == 0; }
|
||||
///< Returns true if this payload handler is currently pointing to first byte
|
||||
///< of a TS packet.
|
||||
bool AtPayloadStart(void) { return AtTsStart() && TsPayloadStart(data + index); }
|
||||
bool AtPayloadStart(void) { return AtTsStart() && TsPayloadStart(data + index) && TsPid(data + index) == pid; }
|
||||
///< Returns true if this payload handler is currently pointing to the first byte
|
||||
///< of a TS packet that starts a new payload.
|
||||
int Available(void) { return length - index; }
|
||||
|
8
svdrp.c
8
svdrp.c
@ -10,7 +10,7 @@
|
||||
* and interact with the Video Disk Recorder - or write a full featured
|
||||
* graphical interface that sits on top of an SVDRP connection.
|
||||
*
|
||||
* $Id: svdrp.c 4.43 2020/06/22 20:59:49 kls Exp $
|
||||
* $Id: svdrp.c 4.43.1.1 2021/01/02 15:18:06 kls Exp $
|
||||
*/
|
||||
|
||||
#include "svdrp.h"
|
||||
@ -1301,8 +1301,10 @@ void cSVDRPServer::CmdCLRE(const char *Option)
|
||||
tChannelID ChannelID = tChannelID::InvalidID;
|
||||
if (isnumber(Option)) {
|
||||
int o = strtol(Option, NULL, 10);
|
||||
if (o >= 1 && o <= cChannels::MaxNumber())
|
||||
ChannelID = Channels->GetByNumber(o)->GetChannelID();
|
||||
if (o >= 1 && o <= cChannels::MaxNumber()) {
|
||||
if (const cChannel *Channel = Channels->GetByNumber(o))
|
||||
ChannelID = Channel->GetChannelID();
|
||||
}
|
||||
}
|
||||
else {
|
||||
ChannelID = tChannelID::FromString(Option);
|
||||
|
4
tools.c
4
tools.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: tools.c 4.13 2020/11/22 13:32:05 kls Exp $
|
||||
* $Id: tools.c 4.13.1.1 2021/01/02 15:05:48 kls Exp $
|
||||
*/
|
||||
|
||||
#include "tools.h"
|
||||
@ -151,6 +151,8 @@ char *strreplace(char *s, char c1, char c2)
|
||||
|
||||
char *strreplace(char *s, const char *s1, const char *s2)
|
||||
{
|
||||
if (!s || !s1 || !s2)
|
||||
return s;
|
||||
char *p = strstr(s, s1);
|
||||
if (p) {
|
||||
int of = p - s;
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: videodir.c 4.1 2015/08/11 13:39:59 kls Exp $
|
||||
* $Id: videodir.c 4.1.1.1 2021/12/27 11:18:40 kls Exp $
|
||||
*/
|
||||
|
||||
#include "videodir.h"
|
||||
@ -158,7 +158,7 @@ int cVideoDirectory::VideoDiskSpace(int *FreeMB, int *UsedMB)
|
||||
*FreeMB = free;
|
||||
if (UsedMB)
|
||||
*UsedMB = used;
|
||||
return (free + used) ? used * 100 / (free + used) : 0;
|
||||
return (free + used) ? round(double(used) * 100 / (free + used)) : 0;
|
||||
}
|
||||
|
||||
cString cVideoDirectory::PrefixVideoFileName(const char *FileName, char Prefix)
|
||||
|
Loading…
x
Reference in New Issue
Block a user