summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2006-01-29 18:00:00 +0100
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2006-01-29 18:00:00 +0100
commitc37734080c45ef7ba60d589df0d88fb9a6064c1b (patch)
tree65bfeeeb3b380356b2da98cc56403ebe5dea76f8
parent446b0e8e0b94b997293aef2f63220c5f8a68bf0f (diff)
downloadvdr-patch-lnbsharing-c37734080c45ef7ba60d589df0d88fb9a6064c1b.tar.gz
vdr-patch-lnbsharing-c37734080c45ef7ba60d589df0d88fb9a6064c1b.tar.bz2
Version 1.3.41vdr-1.3.41
- EPG events from epg.data or SVDRP's PUTE command now have their Title set to "No Title" if none was set. - Fixed checking toFile in cCuttingThread::Action() (found in a larger patch from Artur Skawina). - Fixed a crash when pressing '0' in the "Schedule" menu on a channel that doesn't have any EPG data (reported ny Alexander Hans). - Updated the Danish OSD texts (thanks to Mogens Elneff). - Fixed a missing ',' in the Greek OSD texts (thanks to Arthur Konovalov). - Updated the Estonian OSD texts (thanks to Arthur Konovalov). - Fixed handling the tfRecording flag when reading timers (bug reported by Andreas Mair). - Now checking whether the channel exists before setting the PMT filter in cPatFilter::Process() (thanks to Thomas Bergwinkl). - Now trying to reestablish the connection to the LIRC daemon in case it breaks (thanks to Ville Skyttä). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Fixed channel switching with the Down (Up) key in case the current channel is already the first (last) in the list (reported by Frank Krömmelbein). - Removed the "buffer reserve" in Transfer Mode - it's no longer necessary with recent driver/firmware versions. - The epg.data file is now written when VDR exits (suggested by Daniel Karsubka). - Fixed cTimers::GetNextActiveTimer() so that it won't return an expired timer (reported by Rolf Ahrenberg). - Changed DVBS_TUNE_TIMEOUT and DVBC_TUNE_TIMEOUT to 9000ms to avoid problems with channels that have low symbol rates (reported by Suur Karu). - Fixed displaying the current audio track in the channel display. - When reading epg.data (or data from PUTE), the version number of events with table IDs smaller than 0x50 is now ignored because otherwise the current running status would not be set after a restart of VDR. - Implemented a timeout for remote controls that don't deliver "repeat" keypresses very fast (based on a suggestion by Luca Olivetti; problem with the new handling of k_Repeat keypresses in channel switching reported by Udo Richter). - When looking for the present or following EPG event, the running status is now always taken into account. - Now initializing the channels' schedule pointers when reading the epg.data file, so that the first WhatsOn menu will come up faster. - If a shutdown is requested, but the shutdown script doesn't actually halt the system, it is now tried again after 5 minutes (suggested by Helmut Auer). - Separated the 'install' target into several individual targets; renamed the 'plugins-install' target to 'install-plugins' (thanks to Helmut Auer).
-rw-r--r--CONTRIBUTORS27
-rw-r--r--HISTORY43
-rw-r--r--Makefile28
-rw-r--r--channels.conf8
-rw-r--r--config.h6
-rw-r--r--cutter.c6
-rw-r--r--dvbdevice.c6
-rw-r--r--dvbosd.c9
-rw-r--r--epg.c31
-rw-r--r--epg.h6
-rw-r--r--i18n.c32
-rw-r--r--interface.c2
-rw-r--r--lirc.c41
-rw-r--r--lirc.h5
-rw-r--r--menu.c28
-rw-r--r--pat.c4
-rw-r--r--remote.c10
-rw-r--r--remote.h3
-rw-r--r--thread.c8
-rw-r--r--timers.c5
-rw-r--r--transfer.c37
-rw-r--r--vdr.54
-rw-r--r--vdr.c6
23 files changed, 217 insertions, 138 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 5b460ca..b6234d2 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -269,6 +269,7 @@ Matjaz Thaler <matjaz.thaler@guest.arnes.si>
Artur Skawina <skawina@geocities.com>
for improving the font file generation in the Makefile
for pointing out a problem with the ERR macro defined by ncurses.h
+ for a patch that contained a fix for checking toFile in cCuttingThread::Action()
Werner Fink <werner@suse.de>
for making I/O more robust by handling EINTR
@@ -545,6 +546,8 @@ Helmut Auer <vdr@helmutauer.de>
for suggesting to increase the default value for 'Min. user inactivity' to 300 minutes
for suggesting to add cChannel::LinkChannels() and cChannel::RefChannel()
for suggesting to give a message when an instant recording is started
+ fpr suggesting to retry a shutdown after a while
+ for separating the 'install' target into several individual targets
Jeremy Hall <jhall@UU.NET>
for fixing an incomplete initialization of the filter parameters in eit.c
@@ -882,6 +885,7 @@ Andreas Mair <Andreas.Mair@linogate.com>
for reporting a short display of the main menu if a plugin displays its own OSD and
is started through a user defined key macro
for reporting a problem with extremely long summary fields in timers
+ for reporting a bug in handling the tfRecording flag when reading timers
Olivier Jacques <jacquesolivier@hotmail.com>)
for translating OSD texts to the French language
@@ -939,6 +943,7 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for reporting a crash in the Schedule menu with events that have no title
for a patch that was used to implement automatic cursor advance when entering text
via the numeric keys
+ for reporting a problem with expired timers when shutting down via the Power key
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark
@@ -1165,6 +1170,8 @@ Thomas Bergwinkl <Thomas.Bergwinkl@vr-web.de>
for fixing detecting if there can be any useful further input when entering channel
numbers
for fixing handling the '0' key for switching between the last two channels
+ for making cPatFilter::Process() check whether the channel exists before setting
+ the PMT filter
Stéphane Esté-Gracias <sestegra@free.fr>
for fixing a typo in libsi/si.h
@@ -1322,6 +1329,7 @@ Kimmo Tykkala <tykkala@iki.fi>
Arthur Konovalov <kasjas@hot.ee>
for translating OSD texts to the Estonian language
+ for fixing a missing ',' in the Greek OSD texts
Milos Kapoun <m.kapoun@cra.cz>
for suggesting to skip code table info in SI data
@@ -1341,6 +1349,8 @@ Udo Richter <udo_richter@gmx.de>
no longer exists
for reporting a missing check against MAXOSDAREAS in cOsd::CanHandleAreas()
for making the Makefile report a summary of failed plugins
+ for reporting a problem with the new handling of k_Repeat keypresses in channel
+ switching
Sven Kreiensen <svenk@kammer.uni-hannover.de>
for his help in keeping 'channels.conf.terr' up to date
@@ -1457,6 +1467,8 @@ Luca Olivetti <luca@ventoso.org>
for making cDevice::AttachPlayer() keep the track language codes and descriptions
in Transfer Mode
for suggesting to make the "Menu" key behave consistently
+ for suggesting to implement a timeout for remote controls that don't deliver
+ "repeat" keypresses very fast
Mikko Salo <mikko.salo@ppe.inet.fi>
for suggesting to make the setup option "DVB/Video display format" available only
@@ -1480,6 +1492,8 @@ Ville Skyttä <ville.skytta@iki.fi>
for adding a missing #include <linux/unistd.h> to thread.c
for adding missing i18n entry for the "Timer" button
for removing the obsolete "ca.conf" section from vdr.1
+ for making the cLircRemote try to reestablish the connection to the LIRC daemon
+ in case it breaks
Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next
@@ -1531,6 +1545,8 @@ Matthias Lenk <matthias.lenk@amd.com>
Frank Krömmelbein <kroemmelbein@gmx.de>
for adding missing storing of the MenuScrollPage parameter
+ for reporting a problem with channel switching with the Down (Up) key in case the
+ current channel is already the first (last) in the list
Bernhard Stegmaier <bernhard.stegmaier@in.tum.de>
for reporting a problem in cEITScanner::Process() with forced EPG scans if EPG
@@ -1683,3 +1699,14 @@ Markus Hahn <mhahn@reel-multimedia.com>
Jaroslaw Swierczynski <swiergot@gmail.com>
for updating the Polish OSD texts and the fontosd-iso8859-2.c file
+
+Alexander Hans <cleditor@arcor.de>
+ fpr reporting a crash when pressing '0' in the "Schedule" menu on a channel that
+ doesn't have any EPG data
+
+Daniel Karsubka <dkar@gmx.de>
+ for suggesting to write the epg.data file when VDR exits
+
+Suur Karu <suurkaru@fastmail.fm>
+ for reporting a problem with the tuning timeout for channels that have low symbol
+ rates
diff --git a/HISTORY b/HISTORY
index 18e5636..62ab4db 100644
--- a/HISTORY
+++ b/HISTORY
@@ -4227,3 +4227,46 @@ Video Disk Recorder Revision History
- Updated the Spanish OSD texts (thanks to Jesus Bravo Alvarez).
- Fixed handling the '0' key for switching between the last two channels (thanks
to Thomas Bergwinkl).
+
+2006-01-29: Version 1.3.41
+
+- EPG events from epg.data or SVDRP's PUTE command now have their Title set to
+ "No Title" if none was set.
+- Fixed checking toFile in cCuttingThread::Action() (found in a larger patch from
+ Artur Skawina).
+- Fixed a crash when pressing '0' in the "Schedule" menu on a channel that doesn't
+ have any EPG data (reported ny Alexander Hans).
+- Updated the Danish OSD texts (thanks to Mogens Elneff).
+- Fixed a missing ',' in the Greek OSD texts (thanks to Arthur Konovalov).
+- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
+- Fixed handling the tfRecording flag when reading timers (bug reported by Andreas
+ Mair).
+- Now checking whether the channel exists before setting the PMT filter in
+ cPatFilter::Process() (thanks to Thomas Bergwinkl).
+- Now trying to reestablish the connection to the LIRC daemon in case it breaks
+ (thanks to Ville Skyttä).
+- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
+- Fixed channel switching with the Down (Up) key in case the current channel is
+ already the first (last) in the list (reported by Frank Krömmelbein).
+- Removed the "buffer reserve" in Transfer Mode - it's no longer necessary with
+ recent driver/firmware versions.
+- The epg.data file is now written when VDR exits (suggested by Daniel Karsubka).
+- Fixed cTimers::GetNextActiveTimer() so that it won't return an expired timer
+ (reported by Rolf Ahrenberg).
+- Changed DVBS_TUNE_TIMEOUT and DVBC_TUNE_TIMEOUT to 9000ms to avoid problems with
+ channels that have low symbol rates (reported by Suur Karu).
+- Fixed displaying the current audio track in the channel display.
+- When reading epg.data (or data from PUTE), the version number of events with
+ table IDs smaller than 0x50 is now ignored because otherwise the current
+ running status would not be set after a restart of VDR.
+- Implemented a timeout for remote controls that don't deliver "repeat" keypresses
+ very fast (based on a suggestion by Luca Olivetti; problem with the new handling
+ of k_Repeat keypresses in channel switching reported by Udo Richter).
+- When looking for the present or following EPG event, the running status is now
+ always taken into account.
+- Now initializing the channels' schedule pointers when reading the epg.data file,
+ so that the first WhatsOn menu will come up faster.
+- If a shutdown is requested, but the shutdown script doesn't actually halt the
+ system, it is now tried again after 5 minutes (suggested by Helmut Auer).
+- Separated the 'install' target into several individual targets; renamed the
+ 'plugins-install' target to 'install-plugins' (thanks to Helmut Auer).
diff --git a/Makefile b/Makefile
index f1b61e7..a642751 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
-# $Id: Makefile 1.83 2006/01/13 16:04:56 kls Exp $
+# $Id: Makefile 1.84 2006/01/29 14:50:34 kls Exp $
.DELETE_ON_ERROR:
@@ -199,19 +199,33 @@ plugins-clean:
# Install the files:
-install:
+install: install-bin install-conf install-doc install-plugins
+
+# VDR binary:
+
+install-bin: vdr
@mkdir -p $(BINDIR)
@cp vdr runvdr $(BINDIR)
+
+# Configuration files:
+
+install-conf:
+ @if [ ! -d $(VIDEODIR) ]; then\
+ mkdir -p $(VIDEODIR);\
+ cp *.conf $(VIDEODIR);\
+ fi
+
+# Documentation:
+
+install-doc:
@mkdir -p $(MANDIR)/man1
@mkdir -p $(MANDIR)/man5
@gzip -c vdr.1 > $(MANDIR)/man1/vdr.1.gz
@gzip -c vdr.5 > $(MANDIR)/man5/vdr.5.gz
- @if [ ! -d $(VIDEODIR) ]; then\
- mkdir -p $(VIDEODIR);\
- cp *.conf $(VIDEODIR);\
- fi
-plugins-install:
+# Plugins:
+
+install-plugins: plugins
@mkdir -p $(PLUGINLIBDIR)
@cp $(PLUGINDIR)/lib/libvdr-*.so.$(VDRVERSION) $(PLUGINLIBDIR)
diff --git a/channels.conf b/channels.conf
index e15663d..f1fdbc9 100644
--- a/channels.conf
+++ b/channels.conf
@@ -45,14 +45,14 @@ MDR FERNSEHEN;ARD:12109:hC34:S19.2E:27500:401:402=deu:404:0:28204:1:1073:0
rbb Berlin;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28206:1:1073:0
:Premiere World
PREMIERE START,START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1801,1722,1702:8:133:2:0
-PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1801,1722,1702:10:133:2:0
-PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1801,1722,1702:11:133:2:0
+PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:32:1:10:133:2:0
+PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1:11:133:2:0
PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1722,1702,1801:43:133:2:0
-PREMIERE 4,PREM 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0
+PREMIERE 4,PREM 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1:9:133:2:0
PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1722,1702,1801:29:133:2:0
PREMIERE 6,PREM 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1702,1722,1801:41:133:2:0
PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1801,1702,1722:20:133:2:0
-DISNEY CHANNEL,DISNEY;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:32:1801,1702,1722:34:133:17:0
+DISNEY CHANNEL,DISNEY;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:32:1:34:133:17:0
:Premiere Direkt
PREMIERE DIREKT,DIREKT;PREMIERE:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0
:PW Erotic
diff --git a/config.h b/config.h
index 03e4451..9920d00 100644
--- a/config.h
+++ b/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 1.241 2006/01/15 16:01:48 kls Exp $
+ * $Id: config.h 1.242 2006/01/27 13:27:41 kls Exp $
*/
#ifndef __CONFIG_H
@@ -19,8 +19,8 @@
#include "i18n.h"
#include "tools.h"
-#define VDRVERSION "1.3.40"
-#define VDRVERSNUM 10340 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.3.41"
+#define VDRVERSNUM 10341 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99
#define MAXLIFETIME 99
diff --git a/cutter.c b/cutter.c
index f656bbd..6d3a152 100644
--- a/cutter.c
+++ b/cutter.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: cutter.c 1.11 2005/10/31 12:26:44 kls Exp $
+ * $Id: cutter.c 1.12 2006/01/27 13:45:00 kls Exp $
*/
#include "cutter.h"
@@ -118,7 +118,7 @@ void cCuttingThread::Action(void)
break;
if (FileSize > MEGABYTE(Setup.MaxVideoFileSize)) {
toFile = toFileName->NextFile();
- if (toFile < 0) {
+ if (!toFile) {
error = "toFile 1";
break;
}
@@ -158,7 +158,7 @@ void cCuttingThread::Action(void)
cutIn = true;
if (Setup.SplitEditedFiles) {
toFile = toFileName->NextFile();
- if (toFile < 0) {
+ if (!toFile) {
error = "toFile 2";
break;
}
diff --git a/dvbdevice.c b/dvbdevice.c
index fe32298..ee8c623 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 1.150 2006/01/14 15:57:36 kls Exp $
+ * $Id: dvbdevice.c 1.151 2006/01/28 15:37:01 kls Exp $
*/
#include "dvbdevice.h"
@@ -40,9 +40,9 @@
#define DEV_DVB_AUDIO "audio"
#define DEV_DVB_CA "ca"
-#define DVBS_TUNE_TIMEOUT 2000 //ms
+#define DVBS_TUNE_TIMEOUT 9000 //ms
#define DVBS_LOCK_TIMEOUT 2000 //ms
-#define DVBC_TUNE_TIMEOUT 5000 //ms
+#define DVBC_TUNE_TIMEOUT 9000 //ms
#define DVBC_LOCK_TIMEOUT 2000 //ms
#define DVBT_TUNE_TIMEOUT 9000 //ms
#define DVBT_LOCK_TIMEOUT 2000 //ms
diff --git a/dvbosd.c b/dvbosd.c
index 76afecb..469ef1f 100644
--- a/dvbosd.c
+++ b/dvbosd.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbosd.c 1.29 2005/12/30 15:41:54 kls Exp $
+ * $Id: dvbosd.c 1.30 2006/01/28 14:24:04 kls Exp $
*/
#include "dvbosd.h"
@@ -48,13 +48,6 @@ cDvbOsd::cDvbOsd(int Left, int Top, int OsdDev)
cap.cmd = OSD_CAP_MEMSIZE;
if (ioctl(osdDev, OSD_GET_CAPABILITY, &cap) == 0)
osdMem = cap.val;
- #define FW_NEEDS_BUFFER_RESERVE_FOR_AC3
- #ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
- //XXX This is a very ugly hack to allow cDvbOsd to reduce the buffer
- //XXX requirements in cTransfer if it detects a 4MB full featured DVB card.
- extern bool DvbCardWith4MBofSDRAM;
- DvbCardWith4MBofSDRAM = osdMem >= 1000000;
- #endif
#endif
// must clear all windows here to avoid flashing effects - doesn't work if done
// in Flush() only for the windows that are actually used...
diff --git a/epg.c b/epg.c
index 384f86b..d69158e 100644
--- a/epg.c
+++ b/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 1.51 2006/01/20 14:09:48 kls Exp $
+ * $Id: epg.c 1.57 2006/01/29 14:17:33 kls Exp $
*/
#include "epg.h"
@@ -16,6 +16,8 @@
#include <ctype.h>
#include <time.h>
+#define RUNNINGSTATUSTIMEOUT 30 // seconds before the running status is considered unknown
+
// --- tComponent ------------------------------------------------------------
cString tComponent::ToString(void)
@@ -204,7 +206,7 @@ bool cEvent::HasTimer(void) const
bool cEvent::IsRunning(bool OrAboutToStart) const
{
- return runningStatus >= (OrAboutToStart ? SI::RunningStatusStartsInAFewSeconds : SI::RunningStatusPausing);
+ return SeenWithin(RUNNINGSTATUSTIMEOUT) && runningStatus >= (OrAboutToStart ? SI::RunningStatusStartsInAFewSeconds : SI::RunningStatusPausing);
}
cString cEvent::GetDateString(void) const
@@ -309,7 +311,8 @@ bool cEvent::Read(FILE *f, cSchedule *Schedule)
Event = newEvent = new cEvent(EventID);
if (Event) {
Event->SetTableID(TableID);
- Event->SetVersion(Version);
+ if (TableID >= 0x50) // makes sure the running status flag is set from the actual data stream
+ Event->SetVersion(Version);
Event->SetStartTime(StartTime);
Event->SetDuration(Duration);
if (newEvent)
@@ -318,7 +321,9 @@ bool cEvent::Read(FILE *f, cSchedule *Schedule)
}
}
break;
- case 'e': Event = NULL;
+ case 'e': if (!Event->Title())
+ Event->SetTitle(tr("No title"));
+ Event = NULL;
break;
case 'c': // to keep things simple we react on 'c' here
return true;
@@ -655,25 +660,22 @@ void cSchedule::UnhashEvent(cEvent *Event)
eventsHashStartTime.Del(Event, Event->StartTime());
}
-const cEvent *cSchedule::GetPresentEvent(bool CheckRunningStatus) const
+const cEvent *cSchedule::GetPresentEvent(void) const
{
const cEvent *pe = NULL;
time_t now = time(NULL);
for (cEvent *p = events.First(); p; p = events.Next(p)) {
- if (p->StartTime() <= now && now < p->EndTime()) {
+ if (p->StartTime() <= now && now < p->EndTime())
pe = p;
- if (!CheckRunningStatus)
- break;
- }
- if (CheckRunningStatus && p->SeenWithin(30) && p->RunningStatus() >= SI::RunningStatusPausing)
+ if (p->SeenWithin(RUNNINGSTATUSTIMEOUT) && p->RunningStatus() >= SI::RunningStatusPausing)
return p;
}
return pe;
}
-const cEvent *cSchedule::GetFollowingEvent(bool CheckRunningStatus) const
+const cEvent *cSchedule::GetFollowingEvent(void) const
{
- const cEvent *p = GetPresentEvent(CheckRunningStatus);
+ const cEvent *p = GetPresentEvent();
if (p)
p = events.Next(p);
return p;
@@ -975,6 +977,11 @@ bool cSchedules::Read(FILE *f)
bool result = cSchedule::Read(f, s);
if (OwnFile)
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))
+ s->GetSchedule(Channel);
+ }
return result;
}
return false;
diff --git a/epg.h b/epg.h
index 443b560..ad24524 100644
--- a/epg.h
+++ b/epg.h
@@ -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.h 1.29 2006/01/14 15:45:24 kls Exp $
+ * $Id: epg.h 1.30 2006/01/29 14:03:13 kls Exp $
*/
#ifndef __EPG_H
@@ -137,8 +137,8 @@ public:
void HashEvent(cEvent *Event);
void UnhashEvent(cEvent *Event);
const cList<cEvent> *Events(void) const { return &events; }
- const cEvent *GetPresentEvent(bool CheckRunningStatus = false) const;
- const cEvent *GetFollowingEvent(bool CheckRunningStatus = false) const;
+ const cEvent *GetPresentEvent(void) const;
+ const cEvent *GetFollowingEvent(void) const;
const cEvent *GetEvent(u_int16_t EventID, time_t StartTime = 0) const;
const cEvent *GetEventAround(time_t Time) const;
void Dump(FILE *f, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0) const;
diff --git a/i18n.c b/i18n.c
index 1bd20da..c061a1a 100644
--- a/i18n.c
+++ b/i18n.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: i18n.c 1.240 2006/01/22 15:55:28 kls Exp $
+ * $Id: i18n.c 1.244 2006/01/28 10:38:33 kls Exp $
*
* Translations provided by:
*
@@ -460,7 +460,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"See sündmus - %s",
- "",//TODO
+ "Denne udsendelse - %s",
},
{ "This event - all channels",
"Diese Sendung - alle Kanäle",
@@ -481,7 +481,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"See sündmus - kõik kanalid",
- "",//TODO
+ "Denne udsendelse - alle kanaler",
},
{ "All events - all channels",
"Alle Sendungen - alle Kanäle",
@@ -502,7 +502,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"Kõik sündmused - kõik kanalid",
- "",//TODO
+ "Alle udsendelser - alle kanaler",
},
{ "What's on now?",
"Was läuft jetzt?",
@@ -692,7 +692,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"Taimer",
- "",// TODO
+ "Timer",
},
{ "Button$Record",
"Aufnehmen",
@@ -1597,7 +1597,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"FTA",
- "",//TODO
+ "Free To Air",
},
{ "encrypted",
"verschlüsselt",
@@ -1618,7 +1618,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"krüptitud",
- "",//TODO
+ "kodet",
},
{ "Sid",
"Sid",
@@ -2344,6 +2344,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
+ "Tallennustilan puute estää tallennuksen!",
"",//TODO
"",//TODO
"",//TODO
@@ -2353,9 +2354,8 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
+ "Ebapiisavalt kettaruumi salvestamise alustamiseks!",
+ "For lidt harddisk plads til optagelse!",
},
{ "Low disk space!",
"Platte beinahe voll!",
@@ -2958,7 +2958,7 @@ const tI18nPhrase Phrases[] = {
"ei koskaan",
"nigdy",
"nunca",
- "ÐïôÝ"
+ "ÐïôÝ",
"aldrig",
"niciodatã",
"",// TODO
@@ -3092,7 +3092,7 @@ const tI18nPhrase Phrases[] = {
"", // TODO
"", // TODO
"Kanaliinfo kuvamise ajapiirang",
- "", // TODO
+ "Timeout ved anmodet kanal info",
},
{ "Setup.OSD$Scroll pages",
"Seitenweise scrollen",
@@ -3155,7 +3155,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"Sulgemine Menüü klahviga",
- "",// TODO
+ "Menu taste lukker",
},
{ "Setup.OSD$Sort timers",
"Timer sortieren",
@@ -3616,7 +3616,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"¿àÕÔßÞçØâÐÕÜëÕ ï×ëÚØ (×ÒãÚ)",
"Audio jezici",
- "Audio keeled",
+ "Audio keeli",
"Audio sprog (ant.)",
},
{ "Setup.DVB$Audio language", // note the singular
@@ -4292,7 +4292,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
" 0\t-.#~,/_@1\tabcäå2\tdef3\tghi4\tjkl5\tmnoõö6\tpqrsð7\ttuvü8\twxyzþ9",
- "",//TODO
+ " 0\t-.#~,/_@1\tabcæå2\tdef3\tghi4\tjkl5\tmnoø6\tpqrs7\ttuv8\twxyz9",
},
// Learning keys:
{ "Learning Remote Control Keys",
@@ -5534,7 +5534,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"Salvestamine algas",
- "",//TODO
+ "Optagelse startet",
},
{ "Pausing live video...",
"Live-Signal wird angehalten...",
diff --git a/interface.c b/interface.c
index b2e842d..4b74db9 100644
--- a/interface.c
+++ b/interface.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: interface.c 1.71 2006/01/04 15:44:19 kls Exp $
+ * $Id: interface.c 1.73 2006/01/29 12:35:50 kls Exp $
*/
#include "interface.h"
diff --git a/lirc.c b/lirc.c
index ac9de01..9bb8328 100644
--- a/lirc.c
+++ b/lirc.c
@@ -6,35 +6,28 @@
*
* LIRC support added by Carsten Koch <Carsten.Koch@icem.de> 2000-06-16.
*
- * $Id: lirc.c 1.13 2005/09/02 12:51:35 kls Exp $
+ * $Id: lirc.c 1.14 2006/01/27 15:59:47 kls Exp $
*/
#include "lirc.h"
#include <netinet/in.h>
#include <sys/socket.h>
-#include <sys/un.h>
#define REPEATLIMIT 20 // ms
#define REPEATDELAY 350 // ms
#define KEYPRESSDELAY 150 // ms
+#define RECONNECTDELAY 3000 // ms
cLircRemote::cLircRemote(const char *DeviceName)
:cRemote("LIRC")
,cThread("LIRC remote control")
{
- struct sockaddr_un addr;
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, DeviceName);
- if ((f = socket(AF_UNIX, SOCK_STREAM, 0)) >= 0) {
- if (connect(f, (struct sockaddr *)&addr, sizeof(addr)) >= 0) {
- Start();
- return;
- }
- LOG_ERROR_STR(DeviceName);
- close(f);
+ if (Connect()) {
+ Start();
+ return;
}
- else
- LOG_ERROR_STR(DeviceName);
f = -1;
}
@@ -47,6 +40,20 @@ cLircRemote::~cLircRemote()
close(fh);
}
+bool cLircRemote::Connect(void)
+{
+ if ((f = socket(AF_UNIX, SOCK_STREAM, 0)) >= 0) {
+ if (connect(f, (struct sockaddr *)&addr, sizeof(addr)) >= 0)
+ return true;
+ LOG_ERROR_STR(addr.sun_path);
+ close(f);
+ f = -1;
+ }
+ else
+ LOG_ERROR_STR(addr.sun_path);
+ return false;
+}
+
bool cLircRemote::Ready(void)
{
return f >= 0;
@@ -67,10 +74,16 @@ void cLircRemote::Action(void)
int ret = ready ? safe_read(f, buf, sizeof(buf)) : -1;
if (ready && ret <= 0 ) {
- esyslog("ERROR: lircd connection lost");
+ esyslog("ERROR: lircd connection broken, trying to reconnect every %.1f seconds", float(RECONNECTDELAY) / 1000);
close(f);
f = -1;
- break;
+ while (Running() && f < 0) {
+ cCondWait::SleepMs(RECONNECTDELAY);
+ if (Connect()) {
+ isyslog("reconnected to lircd");
+ break;
+ }
+ }
}
if (ready && ret > 21) {
diff --git a/lirc.h b/lirc.h
index 25b743f..3c4735a 100644
--- a/lirc.h
+++ b/lirc.h
@@ -4,12 +4,13 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: lirc.h 1.3 2005/07/31 10:18:15 kls Exp $
+ * $Id: lirc.h 1.4 2006/01/27 16:00:19 kls Exp $
*/
#ifndef __LIRC_H
#define __LIRC_H
+#include <sys/un.h>
#include "remote.h"
#include "thread.h"
@@ -17,7 +18,9 @@ class cLircRemote : public cRemote, private cThread {
private:
enum { LIRC_KEY_BUF = 30, LIRC_BUFFER_SIZE = 128 };
int f;
+ struct sockaddr_un addr;
virtual void Action(void);
+ bool Connect(void);
public:
cLircRemote(const char *DeviceName);
virtual ~cLircRemote();
diff --git a/menu.c b/menu.c
index ec49b1c..4aa5397 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 1.403 2006/01/22 16:06:39 kls Exp $
+ * $Id: menu.c 1.407 2006/01/29 14:04:37 kls Exp $
*/
#include "menu.h"
@@ -1245,7 +1245,7 @@ void cMenuSchedule::PrepareScheduleAllThis(const cEvent *Event, const cChannel *
if (schedules && Channel) {
const cSchedule *Schedule = schedules->GetSchedule(Channel);
if (Schedule) {
- const cEvent *PresentEvent = Event ? Event : Schedule->GetPresentEvent(Channel->Number() == cDevice::CurrentChannel());
+ const cEvent *PresentEvent = Event ? Event : Schedule->GetPresentEvent();
time_t now = time(NULL) - Setup.EPGLinger * 60;
for (const cEvent *ev = Schedule->Events()->First(); ev; ev = Schedule->Events()->Next(ev)) {
if (ev->EndTime() > now || ev == PresentEvent)
@@ -1352,6 +1352,8 @@ eOSState cMenuSchedule::Number(void)
Event = CurrentItem->event;
Channel = Channels.GetByChannelID(Event->ChannelID(), true);
}
+ else
+ Channel = Channels.GetByNumber(cDevice::CurrentChannel());
switch (cMenuScheduleItem::SortMode()) {
case cMenuScheduleItem::ssmAllThis: PrepareScheduleAllThis(Event, Channel); break;
case cMenuScheduleItem::ssmThisThis: PrepareScheduleThisThis(Event, Channel); break;
@@ -2954,19 +2956,19 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
// --- SetTrackDescriptions --------------------------------------------------
-static void SetTrackDescriptions(bool Live)
+static void SetTrackDescriptions(int LiveChannel)
{
cDevice::PrimaryDevice()->ClrAvailableTracks(true);
const cComponents *Components = NULL;
cSchedulesLock SchedulesLock;
- if (Live) {
- cChannel *Channel = Channels.GetByNumber(cDevice::CurrentChannel());
+ if (LiveChannel) {
+ cChannel *Channel = Channels.GetByNumber(LiveChannel);
if (Channel) {
const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock);
if (Schedules) {
const cSchedule *Schedule = Schedules->GetSchedule(Channel);
if (Schedule) {
- const cEvent *Present = Schedule->GetPresentEvent(true);
+ const cEvent *Present = Schedule->GetPresentEvent();
if (Present)
Components = Present->Components();
}
@@ -3056,10 +3058,10 @@ void cDisplayChannel::DisplayInfo(void)
if (Schedules) {
const cSchedule *Schedule = Schedules->GetSchedule(channel);
if (Schedule) {
- const cEvent *Present = Schedule->GetPresentEvent(true);
- const cEvent *Following = Schedule->GetFollowingEvent(true);
+ const cEvent *Present = Schedule->GetPresentEvent();
+ const cEvent *Following = Schedule->GetFollowingEvent();
if (Present != lastPresent || Following != lastFollowing) {
- SetTrackDescriptions(true);
+ SetTrackDescriptions(channel->Number());
displayChannel->SetEvents(Present, Following);
cStatus::MsgOsdProgramme(Present ? Present->StartTime() : 0, Present ? Present->Title() : NULL, Present ? Present->ShortText() : NULL, Following ? Following->StartTime() : 0, Following ? Following->Title() : NULL, Following ? Following->ShortText() : NULL);
lastPresent = Present;
@@ -3172,13 +3174,15 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
cChannel *ch = NextAvailableChannel(channel, (k == kUp || k == kChanUp) ? 1 : -1);
if (ch)
channel = ch;
+ else if (channel && channel->Number() != cDevice::CurrentChannel())
+ Key = k; // immediately switches channel when hitting the beginning/end of the channel list with k_Repeat
}
// no break here
case kUp|k_Release:
case kDown|k_Release:
case kChanUp|k_Release:
case kChanDn|k_Release:
- if (!(Key & k_Repeat) && channel)
+ if (!(Key & k_Repeat) && channel && channel->Number() != cDevice::CurrentChannel())
NewChannel = channel;
withInfo = true;
group = -1;
@@ -3235,7 +3239,9 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
DisplayInfo();
displayChannel->Flush();
if (NewChannel) {
+ SetTrackDescriptions(NewChannel->Number()); // to make them immediately visible in the channel display
Channels.SwitchTo(NewChannel->Number());
+ SetTrackDescriptions(NewChannel->Number()); // switching the channel has cleared them
channel = NewChannel;
}
return osContinue;
@@ -3320,7 +3326,7 @@ cDisplayTracks::cDisplayTracks(void)
:cOsdObject(true)
{
cDevice::PrimaryDevice()->EnsureAudioTrack();
- SetTrackDescriptions(!cDevice::PrimaryDevice()->Replaying() || cTransferControl::ReceiverDevice());
+ SetTrackDescriptions(!cDevice::PrimaryDevice()->Replaying() || cTransferControl::ReceiverDevice() ? cDevice::CurrentChannel() : 0);
currentDisplayTracks = this;
numTracks = track = 0;
audioChannel = cDevice::PrimaryDevice()->GetAudioChannel();
diff --git a/pat.c b/pat.c
index 83031db..a7216b8 100644
--- a/pat.c
+++ b/pat.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: pat.c 1.14 2005/09/04 14:32:39 kls Exp $
+ * $Id: pat.c 1.15 2006/01/27 15:48:29 kls Exp $
*/
#include "pat.h"
@@ -287,7 +287,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
int Index = 0;
for (SI::Loop::Iterator it; pat.associationLoop.getNext(assoc, it); ) {
if (!assoc.isNITPid()) {
- if (Index++ == pmtIndex) {
+ if (Index++ >= pmtIndex && Channels.GetByServiceID(Source(), Transponder(), assoc.getServiceId())) {
pmtPid = assoc.getPid();
Add(pmtPid, 0x02);
break;
diff --git a/remote.c b/remote.c
index 7d7b4a5..4504533 100644
--- a/remote.c
+++ b/remote.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remote.c 1.48 2006/01/15 15:17:40 kls Exp $
+ * $Id: remote.c 1.49 2006/01/29 14:43:07 kls Exp $
*/
#include "remote.h"
@@ -18,11 +18,13 @@
// --- cRemote ---------------------------------------------------------------
-#define INITTIMEOUT 10000 // ms
+#define INITTIMEOUT 10000 // ms
+#define REPEATTIMEOUT 1000 // ms
eKeys cRemote::keys[MaxKeys];
int cRemote::in = 0;
int cRemote::out = 0;
+cTimeMs cRemote::repeatTimeout;
cRemote *cRemote::learning = NULL;
char *cRemote::unknownCode = NULL;
cMutex cRemote::mutex;
@@ -163,9 +165,11 @@ eKeys cRemote::Get(int WaitMs, char **UnknownCode)
eKeys k = keys[out];
if (++out >= MaxKeys)
out = 0;
+ if ((k & k_Repeat) != 0)
+ repeatTimeout.Set(REPEATTIMEOUT);
return k;
}
- else if (!WaitMs || !keyPressed.TimedWait(mutex, WaitMs)) {
+ else if (!WaitMs || !keyPressed.TimedWait(mutex, WaitMs) && repeatTimeout.TimedOut()) {
if (learning && UnknownCode) {
*UnknownCode = unknownCode;
unknownCode = NULL;
diff --git a/remote.h b/remote.h
index 4fd26d8..0213b0c 100644
--- a/remote.h
+++ b/remote.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remote.h 1.32 2006/01/01 14:00:50 kls Exp $
+ * $Id: remote.h 1.33 2006/01/29 12:27:08 kls Exp $
*/
#ifndef __REMOTE_H
@@ -23,6 +23,7 @@ private:
static eKeys keys[MaxKeys];
static int in;
static int out;
+ static cTimeMs repeatTimeout;
static cRemote *learning;
static char *unknownCode;
static cMutex mutex;
diff --git a/thread.c b/thread.c
index 4fcfc27..5d5e18b 100644
--- a/thread.c
+++ b/thread.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.c 1.51 2006/01/08 16:03:56 kls Exp $
+ * $Id: thread.c 1.52 2006/01/28 11:34:35 kls Exp $
*/
#include "thread.h"
@@ -105,7 +105,7 @@ void cCondVar::Wait(cMutex &Mutex)
if (Mutex.locked) {
int locked = Mutex.locked;
Mutex.locked = 0; // have to clear the locked count here, as pthread_cond_wait
- // does an implizit unlock of the mutex
+ // does an implicit unlock of the mutex
pthread_cond_wait(&cond, &Mutex.mutex);
Mutex.locked = locked;
}
@@ -113,14 +113,14 @@ void cCondVar::Wait(cMutex &Mutex)
bool cCondVar::TimedWait(cMutex &Mutex, int TimeoutMs)
{
- bool r = true; // true = condition signaled false = timeout
+ bool r = true; // true = condition signaled, false = timeout
if (Mutex.locked) {
struct timespec abstime;
if (GetAbsTime(&abstime, TimeoutMs)) {
int locked = Mutex.locked;
Mutex.locked = 0; // have to clear the locked count here, as pthread_cond_timedwait
- // does an implizit unlock of the mutex.
+ // does an implicit unlock of the mutex.
if (pthread_cond_timedwait(&cond, &Mutex.mutex, &abstime) == ETIMEDOUT)
r = false;
Mutex.locked = locked;
diff --git a/timers.c b/timers.c
index a168cc1..ab42680 100644
--- a/timers.c
+++ b/timers.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.c 1.43 2006/01/15 13:31:11 kls Exp $
+ * $Id: timers.c 1.45 2006/01/28 15:09:05 kls Exp $
*/
#include "timers.h"
@@ -245,6 +245,7 @@ bool cTimer::Parse(const char *s)
}
bool result = false;
if (8 <= sscanf(s, "%u :%a[^:]:%a[^:]:%d :%d :%d :%d :%a[^:\n]:%a[^\n]", &flags, &channelbuffer, &daybuffer, &start, &stop, &priority, &lifetime, &filebuffer, &summary)) {
+ ClrFlags(tfRecording);
if (summary && !*skipspace(summary)) {
free(summary);
summary = NULL;
@@ -566,7 +567,7 @@ cTimer *cTimers::GetNextActiveTimer(void)
{
cTimer *t0 = NULL;
for (cTimer *ti = First(); ti; ti = Next(ti)) {
- if ((ti->HasFlags(tfActive)) && (!t0 || ti->Compare(*t0) < 0))
+ if ((ti->HasFlags(tfActive)) && (!t0 || ti->StopTime() > time(NULL) && ti->Compare(*t0) < 0))
t0 = ti;
}
return t0;
diff --git a/transfer.c b/transfer.c
index 8a0db4d..b8313df 100644
--- a/transfer.c
+++ b/transfer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: transfer.c 1.31 2006/01/21 14:13:16 kls Exp $
+ * $Id: transfer.c 1.32 2006/01/28 14:23:38 kls Exp $
*/
#include "transfer.h"
@@ -49,41 +49,12 @@ void cTransfer::Receive(uchar *Data, int Length)
}
}
-#define FW_NEEDS_BUFFER_RESERVE_FOR_AC3
-#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
-//XXX This is a very ugly hack to allow cDvbOsd to reduce the buffer
-//XXX requirements in cTransfer if it detects a 4MB full featured DVB card.
-bool DvbCardWith4MBofSDRAM = false;
-#endif
-
void cTransfer::Action(void)
{
int PollTimeouts = 0;
uchar *p = NULL;
int Result = 0;
-#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
- bool GotBufferReserve = false;
- GotBufferReserve = true; //XXX remove this line if you absolutely need the buffer reserve
- int RequiredBufferReserve = KILOBYTE(DvbCardWith4MBofSDRAM ? 288 : 576);
-#endif
while (Running()) {
-#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
- if (needsBufferReserve && !GotBufferReserve) {
- //XXX For dolby we've to fill the buffer because the firmware does
- //XXX not decode dolby but use a PCM stream for transport, therefore
- //XXX the firmware has not enough buffer for noiseless skipping early
- //XXX PCM samples (each dolby frame requires 6144 bytes in PCM and
- //XXX audio is mostly to early in comparison to video).
- //XXX To resolve this, the remuxer or PlayPes() should synchronize
- //XXX audio with the video frames. 2004/09/09 Werner
- if (ringBuffer->Available() < RequiredBufferReserve) { // used to be MAXFRAMESIZE, but the HDTV value of KILOBYTE(512) is way too much here
- cCondWait::SleepMs(20); // allow the buffer to collect some reserve
- continue;
- }
- else
- GotBufferReserve = true;
- }
-#endif
int Count;
uchar *b = ringBuffer->Get(Count);
if (b) {
@@ -98,9 +69,6 @@ void cTransfer::Action(void)
remux->Clear();
PlayPes(NULL, 0);
p = NULL;
-#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
- GotBufferReserve = false;
-#endif
continue;
}
Count = remux->Put(b, Count);
@@ -133,9 +101,6 @@ void cTransfer::Action(void)
remux->Clear();
PlayPes(NULL, 0);
p = NULL;
-#ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3
- GotBufferReserve = false;
-#endif
}
}
}
diff --git a/vdr.5 b/vdr.5
index caabe51..214aac8 100644
--- a/vdr.5
+++ b/vdr.5
@@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
-.\" $Id: vdr.5 1.47 2006/01/14 10:57:37 kls Exp $
+.\" $Id: vdr.5 1.48 2006/01/29 11:31:58 kls Exp $
.\"
.TH vdr 5 "08 Jan 2006" "1.3.38" "Video Disk Recorder Files"
.SH NAME
@@ -635,7 +635,7 @@ l l.
<start time> @is the time (as a time_t integer) in UTC when this event starts
<duration> @is the time (in seconds) that this event will take
<table id> @is a hex number that indicates the table this event is contained in (if this is left empty or 0 this event will not be overwritten or modified by data that comes from the DVB stream)
-<version> @is a hex number that indicates the event's version number inside its table (optional)
+<version> @is a hex number that indicates the event's version number inside its table (optional, only processed for table IDs smaller than 0x50)
<title> @is the title of the event
<short text> @is the short text of the event (typically the name of the episode etc.)
<description> @is the description of the event (any '|' characters will be interpreted as newlines)
diff --git a/vdr.c b/vdr.c
index 1658590..3913f62 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.cadsoft.de/vdr
*
- * $Id: vdr.c 1.244 2006/01/22 15:59:13 kls Exp $
+ * $Id: vdr.c 1.246 2006/01/29 14:35:31 kls Exp $
*/
#include <getopt.h>
@@ -71,6 +71,7 @@
// in order to react on a possible new CAM menu as soon as possible
#define DEVICEREADYTIMEOUT 30 // seconds to wait until all devices are ready
#define MENUTIMEOUT 120 // seconds of user inactivity after which an OSD display is closed
+#define SHUTDOWNRETRY 300 // seconds before trying again to shut down
#define EXIT(v) { ExitCode = (v); goto Exit; }
@@ -1087,7 +1088,7 @@ int main(int argc, char *argv[])
if (signal(SIGALRM, Watchdog) == SIG_IGN)
signal(SIGALRM, SIG_IGN);
}
- LastActivity = time(NULL); // don't try again too soon
+ LastActivity = time(NULL) - Setup.MinUserInactivity * 60 + SHUTDOWNRETRY; // try again later
UserShutdown = false;
continue; // skip the rest of the housekeeping for now
}
@@ -1122,6 +1123,7 @@ Exit:
}
cDevice::Shutdown();
PluginManager.Shutdown();
+ cSchedules::Cleanup(true);
ReportEpgBugFixStats();
if (WatchdogTimeout > 0)
dsyslog("max. latency time %d seconds", MaxLatencyTime);