summaryrefslogtreecommitdiff
path: root/vdr.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2005-08-21 18:00:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2005-08-21 18:00:00 +0200
commitdab203efe9e24f1dade33ee1da6a39b26f8501f0 (patch)
tree9399cbee3798f5232eddca484e118275fe8e472e /vdr.c
parentddd1e13e53c4970058884e2af31c2681617e7bf3 (diff)
downloadvdr-patch-lnbsharing-dab203efe9e24f1dade33ee1da6a39b26f8501f0.tar.gz
vdr-patch-lnbsharing-dab203efe9e24f1dade33ee1da6a39b26f8501f0.tar.bz2
Version 1.3.30vdr-1.3.30
- Improved responsiveness inside CAM menus. - Added handling of the 'Close MMI' tag to avoid error log messages with CAMs that actually use it. - Now waiting at startup until all DVB devices are ready. This includes having all CAMs initialized and ready to decrypt, so that no more "channel not available" happens if VDR is started with the current channel being an encrypted one, or a timer on such a channel hits right after starting VDR. - Fixed cVideoRepacker to better handle errors in data (thanks to Reinhard Nissl). - Fixed cDvbTuner to avoid lockups on NPTL systems (thanks to Marcel Wiesweg). - Added 'Service' functions to the plugin interface (thanks to Udo Richter). See PLUGINS.html, section "Custom services" for details. - Replaced the get/put_unaligned() macros from <asm/unaligned.h> with own inline functions to avoid problems on platforms that don't provide these (thanks to David Woodhouse for his help).
Diffstat (limited to 'vdr.c')
-rw-r--r--vdr.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/vdr.c b/vdr.c
index f58d02b..c98ee0d 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.209 2005/07/31 11:25:16 kls Exp $
+ * $Id: vdr.c 1.211 2005/08/21 08:47:06 kls Exp $
*/
#include <getopt.h>
@@ -63,6 +63,9 @@
#define SHUTDOWNWAIT 300 // seconds to wait in user prompt before automatic shutdown
#define MANUALSTART 600 // seconds the next timer must be in the future to assume manual start
#define CHANNELSAVEDELTA 600 // seconds before saving channels.conf after automatic modifications
+#define LASTCAMMENUTIMEOUT 3 // seconds to run the main loop 'fast' after a CAM menu has been closed
+ // 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 EXIT(v) { ExitCode = (v); goto Exit; }
@@ -389,6 +392,7 @@ int main(int argc, char *argv[])
int PreviousChannelIndex = 0;
time_t LastChannelChanged = time(NULL);
time_t LastActivity = 0;
+ time_t LastCamMenu = 0;
int MaxLatencyTime = 0;
bool ForceShutdown = false;
bool UserShutdown = false;
@@ -517,6 +521,8 @@ int main(int argc, char *argv[])
// Channel:
+ if (!cDevice::WaitForAllDevicesReady(DEVICEREADYTIMEOUT))
+ dsyslog("not all devices ready after %d seconds", DEVICEREADYTIMEOUT);
Channels.SwitchTo(Setup.CurrentChannel);
if (MuteAudio)
cDevice::PrimaryDevice()->ToggleMute();
@@ -660,11 +666,16 @@ int main(int argc, char *argv[])
if (!Menu && Recordings.NeedsUpdate())
Recordings.Load();
// CAM control:
- if (!Menu && !cOsd::IsOpen())
+ if (!Menu && !cOsd::IsOpen()) {
Menu = CamControl();
+ if (Menu)
+ LastCamMenu = 0;
+ else if (!LastCamMenu)
+ LastCamMenu = time(NULL);
+ }
// User Input:
cOsdObject *Interact = Menu ? Menu : cControl::Control();
- eKeys key = Interface->GetKey(!Interact || !Interact->NeedsFastResponse());
+ eKeys key = Interface->GetKey((!Interact || !Interact->NeedsFastResponse()) && time(NULL) - LastCamMenu > LASTCAMMENUTIMEOUT);
if (NORMALKEY(key) != kNone) {
EITScanner.Activity();
LastActivity = time(NULL);