summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS22
-rw-r--r--HISTORY43
-rw-r--r--INSTALL9
-rw-r--r--channels.c16
-rw-r--r--channels.conf18
-rw-r--r--channels.h8
-rw-r--r--config.h6
-rw-r--r--device.c4
-rw-r--r--diseqc.c5
-rw-r--r--diseqc.conf11
-rw-r--r--dvbdevice.c75
-rw-r--r--dvbplayer.c4
-rw-r--r--eit.c7
-rw-r--r--epg.c18
-rw-r--r--epg.h11
-rw-r--r--font.c16
-rw-r--r--font.h5
-rw-r--r--fontosd-iso8859-2.c363
-rw-r--r--fontsml-iso8859-2.c68
-rw-r--r--genfontfile.c2
-rw-r--r--i18n.c360
-rw-r--r--libsi/util.h4
-rw-r--r--remux.c8
-rw-r--r--sections.c5
-rw-r--r--thread.c56
-rw-r--r--thread.h10
-rw-r--r--timers.c54
-rw-r--r--timers.h6
-rw-r--r--transfer.c4
-rw-r--r--vdr.c68
30 files changed, 696 insertions, 590 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 0874cf4..86f1e28 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -257,6 +257,7 @@ Werner Fink <werner@suse.de>
for modifying handling of audio packets in cDvbPlayer for better sync with external
AC3 replay
for changing thread handling to make it work with NPTL ("Native Posix Thread Library")
+ for suggesting to replace usleep() calls with a pthread_cond_timedwait() based wait
Rolf Hakenes <hakenes@hippomi.de>
for providing 'libdtv' and adapting the EIT mechanisms to it
@@ -530,6 +531,7 @@ Oliver Endriss <o.endriss@gmx.de>
for reporting that the "Classic VDR" skin wrongly displayed unused color buttons
for reporting some missing cStatus::MsgOsdTextItem() calls
for reporting a missing "Editing process finished" message with skins
+ for adding a sample setup for 'DisiCon-4 Single Cable Network' to 'diseqc.conf'
Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
@@ -741,6 +743,8 @@ Ludwig Nussel <ludwig.nussel@web.de>
for reporting a problem on systems that have UTF-8 enabled
for pointing out a flaw in the the description of cRingBufferLinear
for reporting a bug in cRingBufferLinear::Get() in case the buffer wraps around
+ for adding some checks when cancelling a thread and removing the usleep() in
+ cThread::Start()
Thomas Koch <tom@harhar.net>
for his support in keeping the Premiere World channels up to date in 'channels.conf'
@@ -797,6 +801,8 @@ Alfred Zastrow <vdr@zastrow4u.de>
the recordings created when pausing live video
for reporting two warnings when compiling with gcc 3.3.1
for reporting a bug in handling menu status messages when the list contents is scrolled
+ for reporting that without the usleep() call in cDvbPlayer::Action() VDR runs on NPTL
+ systems
Matthias Raus <matthias-raus@web.de>
for reporting a problem with starting the editing process if no marks have been set
@@ -870,6 +876,8 @@ Reinhard Nissl <rnissl@gmx.de>
for suggesting to make sure the OSD reports oeWrongAlignment errors before any
oeAreasOverlap error
for reporting a a crash in the time search mechanism
+ for taking the complete size of available data into account when deciding whether
+ to clear the transfer buffer to avoid overflows
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the
@@ -1021,6 +1029,7 @@ Drazen Dupor <drazen.dupor@dupor.com>
Prakash K. Cheemplavam <PrakashKC@gmx.de>
for fixing some issues with gcc 3.4
+ for some minor code cleanups
Miko Wohlgemuth <weak@chello.at>
for reporting a problem with the OSD alignment in the SPU decoder
@@ -1053,6 +1062,8 @@ Marco Schlüßler <marco@lordzodiac.de>
for avoiding unnecessary section filter start/stops
for pointing out that if one PID can't be added, the whole cDevice::AttachReceiver()
should fail and all PIDs added so far should be deleted
+ for fixing attaching a cPlayer to a cDevice, so that 'Operation not permited'
+ errors don't occur any more
Jürgen Schmitz <j.schmitz@web.de>
for reporting a bug in displaying the current channel when switching via the SVDRP
@@ -1100,3 +1111,14 @@ Udo Richter <udo_richter@gmx.de>
Sven Kreiensen <svenk@kammer.uni-hannover.de>
for his help in keeping 'channels.conf.terr' up to date
+
+Stefan Meyknecht <stefan@meyknecht.org>
+ for a patch that fixed detecting transponder lock in cDvbTuner
+
+Lucian Muresan <lucianm@users.sourceforge.net>
+ for updating the Romanian language texts and the iso8859-2 fonts
+ for making VDR actually use the iso8859-15 fonts
+
+Mattias Grönlund <Mattias@Gronlund.net>
+ for pointing out a missing cleanup at program exit in case there is a problem
+ with a plugin
diff --git a/HISTORY b/HISTORY
index 3baa1b9..f6d6c20 100644
--- a/HISTORY
+++ b/HISTORY
@@ -3003,7 +3003,7 @@ Video Disk Recorder Revision History
- The cRingBuffer now does EnableGet()/EnablePut() only if the buffer is more than
one third full or empty, respectively. This dramatically improves recording
performance and reduces system load (thanks to Marco Schlüßler for doing some
- testing regarding buffer performance and giving me some hints that finally lead
+ testing regarding buffer performance and giving me some hints that finally led
to finding out that this was the basic problem causing buffer overflows).
- Improved Transfer Mode (thanks to Marco Schlüßler for suggestions and testing).
- Fixed a possible crash with inconsistent SI data (thanks to Marcel Wiesweg).
@@ -3036,3 +3036,44 @@ Video Disk Recorder Revision History
- Removed the 'Log' parameter from the cChannel::Set... functions. Instead
checking if the channel has a non-zero number.
- Updated 'channels.conf.terr' for Hannover (thanks to Sven Kreiensen).
+
+2004-10-24: Version 1.3.14
+
+- Fixed detecting transponder lock in cDvbTuner (based on a patch from Stefan
+ Meyknecht).
+- What was previously marked with WAIT_FOR_LOCK_AFTER_TUNING is now permanently
+ active and uses a cCondVar to signal when a transponder is locked.
+- Added some missing 'const' to cChannel.
+- Added a sample setup for 'DisiCon-4 Single Cable Network' to 'diseqc.conf'
+ (thanks to Oliver Endriss).
+- Fixed attaching a cPlayer to a cDevice, so that 'Operation not permited'
+ errors don't occur any more (thanks to Marco Schlüßler).
+- Fixed a case where the resultBuffer in cRemux ran full before getting a sync.
+- Removed the usleep() call from cDvbPlayer::Action() to make VDR run on NPTL
+ systems (thanks to Alfred Zastrow). The NPTL check at startup has also been
+ removed.
+- Taking the complete size of available data into account when deciding whether
+ to clear the transfer buffer to avoid overflows (thanks to Reinhard Nissl).
+- Updated Romanian language texts and the iso8859-2 fonts (thanks to Lucian Muresan).
+- Now actually using the iso8859-15 fonts (thanks to Lucian Muresan).
+- Some minor code cleanups (thanks to Prakash K. Cheemplavam).
+- Fixed missing cleanup at program exit in case there is a problem with a plugin
+ (thanks to Mattias Grönlund for pointing this out).
+- Increased the required free buffer space in the resultBuffer of cRemux to
+ 2 * IPACKS to avoid a buffer overflow in case a cTS2PES writes one complete
+ packet and then (within processing the same TS packet) wants to write another
+ small packet.
+- Removed the signal handler and WakeUp() call from cThread (it is no longer
+ needed).
+- Added some checks when cancelling a thread and removed the usleep() in
+ cThread::Start() (suggested by Ludwig Nussel). Also removed 'running' from
+ cThread and using only childTid to indicate whether a thread is actually
+ running.
+- Added cCondWait::Sleep() and using it to replace all usleep() calls (based
+ on a suggestion by Werner Fink).
+- Only assigning events to timers if the related schedule has actually been
+ modified.
+- When searching for the present event, the running status is now only taken
+ into account if the event has been "seen" within the past 30 seconds.
+ This avoids shortly seeing the wrong events in the channel display when
+ switching to a channel that hasn't been tuned to in a while.
diff --git a/INSTALL b/INSTALL
index f054d7a..2b363d4 100644
--- a/INSTALL
+++ b/INSTALL
@@ -7,14 +7,7 @@ Version 1.3
IMPORTANT NOTES:
----------------
-VDR currently doesn't work with NPTL ("Native Posix Thread Library").
-Either don't use NPTL, or set the environment variable
-
- LD_ASSUME_KERNEL=2.4.1
-
-before running VDR.
-
-Also, please make sure your environment is NOT set to use UTF-8 or
+Please make sure your environment is NOT set to use UTF-8 or
any other multibyte character representation. Check the value of your
$LANG or $LC_CTYPE environment variable, and if it contains something
like "de_DE.UTF-8", make sure you set it to something like "de_DE.iso8859-1"
diff --git a/channels.c b/channels.c
index ad3ca7f..ad8156d 100644
--- a/channels.c
+++ b/channels.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.c 1.27 2004/10/17 12:20:56 kls Exp $
+ * $Id: channels.c 1.28 2004/10/22 14:11:07 kls Exp $
*/
#include "channels.h"
@@ -503,7 +503,7 @@ static int PrintParameter(char *p, char Name, int Value)
return Value >= 0 && Value != 999 ? sprintf(p, "%c%d", Name, Value) : 0;
}
-const char *cChannel::ParametersToString(void)
+const char *cChannel::ParametersToString(void) const
{
char type = *cSource::ToString(source);
if (isdigit(type))
@@ -563,14 +563,12 @@ bool cChannel::StringToParameters(const char *s)
return true;
}
-const char *cChannel::ToText(cChannel *Channel)
+const char *cChannel::ToText(const cChannel *Channel)
{
char buf[MaxChannelName * 2];
- char *s = Channel->name;
- if (strchr(s, ':')) {
- s = strcpy(buf, s);
- strreplace(s, ':', '|');
- }
+ const char *s = Channel->name;
+ if (strchr(s, ':'))
+ s = strreplace(strcpy(buf, s), ':', '|');
free(buffer);
if (Channel->groupSep) {
if (Channel->number)
@@ -602,7 +600,7 @@ const char *cChannel::ToText(cChannel *Channel)
return buffer;
}
-const char *cChannel::ToText(void)
+const char *cChannel::ToText(void) const
{
return ToText(this);
}
diff --git a/channels.conf b/channels.conf
index 008f732..d7f7db0 100644
--- a/channels.conf
+++ b/channels.conf
@@ -32,7 +32,7 @@ Sky News;BSkyB:11597:vC56:S19.2E:22000:305+131:306=eng:0:0:28707:1:1026:0
Veronica/FoxKids;CANAL+:12574:hC56:S19.2E:22000:518+8190:92=dut:38:622,602,100:5020:53:1109:0
BVN;CANAL+:12574:hC56:S19.2E:22000:515+8190:96=dut:36:0:5025:53:1109:0
CNBC Europe;CNBC:12610:vC56:S19.2E:22000:944:945=eng:946:0:12200:1:1112:0
-n-tv;n-tv:12669:vC56:S19.2E:22000:162:96=deu:55:0:12730:1:1116:0
+n-tv;RTL World:12187:hC34:S19.2E:27500:169:73=deu:80:0:12090:1:1089:0
Al Jazeera;CANALSATELLITE:11567:vC56:S19.2E:22000:55:56=ara:0:0:9021:1:1024:0
TW1;ORF:12692:hC56:S19.2E:22000:166:167=deu:168:0:13013:1:1117:0
Eurosport;ZDFvision:11953:hC34:S19.2E:27500:410:420=deu:430:0:28009:1:1079:0
@@ -45,22 +45,22 @@ 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
START,PREMIERE START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1702,1801,1722:8:133:2:0
-PREM 1,PREMIERE 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:32:1702,1801,1722:10:133:2:0
-PREM 2,PREMIERE 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1702,1801,1722:11:133:2:0
+PREM 1,PREMIERE 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1702,1801,1722:10:133:2:0
+PREM 2,PREMIERE 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1702,1722,1801:11:133:2:0
PREM 3,PREMIERE 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1722,1801,1702:43:133:2:0
PREM 4,PREMIERE 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0
-PREM 5,PREMIERE 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu,1281=deu:32:1722,1702,1801:29:133:2:0
-PREM 6,PREMIERE 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1702,1801,1722:41:133:2:0
-PREM 7,PREMIERE 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1722,1801,1702:20:133:2:0
+PREM 5,PREMIERE 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1722,1702,1801:29:133:2:0
+PREM 6,PREMIERE 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1702,1722,1801:41:133:2:0
+PREM 7,PREMIERE 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1722,1702,1801:20:133:2:0
DISNEY,DISNEY CHANNEL;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:0:1722,1702,1801:34:133:17:0
:Premiere Direkt
DIREKT,PREMIERE DIREKT;PREMIERE:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0
:PW Erotic
B-UHSE,BEATE-UHSE.TV;PREMIERE:12070:hC34:S19.2E:27500:1023:1024=deu:32:1801,1702,1722:21:133:1:0
-EROTIK,DIREKT EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:0:0:1722,1801,1702:513:133:4:0
+EROTIK,DIREKT EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:0:0:1722,1702,1801:513:133:4:0
:Sportsworld
-SPORT 1,PREMIERE SPORT 1;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu:32:1801,1702,1722:17:133:3:0
-SPORT 2,PREMIERE SPORT 2;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu,3841=deu:32:1722,1702,1801:27:133:4:0
+Konferenz:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1801,1702,1722:17:133:3:0
+Formel 1:12031:hC34:S19.2E:27500:3839:3840=deu,3841=deu:32:1702,1722,1801:27:133:4:0
:Beta Digital
N24;ProSiebenSat.1:12480:vC34:S19.2E:27500:2047:2048=deu:36:0:47:133:33:0
Liberty TV.com;Maastricht Multimedia:12610:vC56:S19.2E:22000:941:943=deu:0:0:12199:1:1112:0
diff --git a/channels.h b/channels.h
index 666e91b..a2530f1 100644
--- a/channels.h
+++ b/channels.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.h 1.19 2004/10/17 11:52:07 kls Exp $
+ * $Id: channels.h 1.20 2004/10/22 14:09:47 kls Exp $
*/
#ifndef __CHANNELS_H
@@ -88,7 +88,7 @@ class cChannel : public cListObject {
friend class cMenuEditChannel;
private:
static char *buffer;
- static const char *ToText(cChannel *Channel);
+ static const char *ToText(const cChannel *Channel);
enum { MaxChannelName = 64 }; // 63 chars + terminating 0!
int __BeginData__;
char name[MaxChannelName];
@@ -122,14 +122,14 @@ private:
int modification;
cLinkChannels *linkChannels;
cChannel *refChannel;
- const char *ParametersToString(void);
+ const char *ParametersToString(void) const;
bool StringToParameters(const char *s);
public:
cChannel(void);
cChannel(const cChannel &Channel);
~cChannel();
cChannel& operator= (const cChannel &Channel);
- const char *ToText(void);
+ const char *ToText(void) const;
bool Parse(const char *s, bool AllowNonUniqueID = false);
bool Save(FILE *f);
const char *Name(void) const { return name; }
diff --git a/config.h b/config.h
index d61f1d1..c3372a8 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.200 2004/07/27 07:22:46 kls Exp $
+ * $Id: config.h 1.201 2004/10/22 13:29:38 kls Exp $
*/
#ifndef __CONFIG_H
@@ -20,8 +20,8 @@
#include "i18n.h"
#include "tools.h"
-#define VDRVERSION "1.3.13"
-#define VDRVERSNUM 10313 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.3.14"
+#define VDRVERSNUM 10314 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99
#define MAXLIFETIME 99
diff --git a/device.c b/device.c
index b53c0ab..5a57faf 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 1.60 2004/10/17 09:39:10 kls Exp $
+ * $Id: device.c 1.61 2004/10/23 10:15:31 kls Exp $
*/
#include "device.h"
@@ -595,8 +595,8 @@ bool cDevice::AttachPlayer(cPlayer *Player)
if (player)
Detach(player);
player = Player;
- player->device = this;
SetPlayMode(player->playMode);
+ player->device = this;
player->Activate(true);
return true;
}
diff --git a/diseqc.c b/diseqc.c
index 0766db8..801e1cd 100644
--- a/diseqc.c
+++ b/diseqc.c
@@ -4,12 +4,13 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: diseqc.c 1.2 2002/12/07 13:44:56 kls Exp $
+ * $Id: diseqc.c 1.3 2004/10/24 11:04:56 kls Exp $
*/
#include "diseqc.h"
#include <ctype.h>
#include "sources.h"
+#include "thread.h"
// -- cDiseqc ----------------------------------------------------------------
@@ -61,7 +62,7 @@ char *cDiseqc::Wait(char *s)
int n = strtol(s, &p, 10);
if (!errno && p != s && n >= 0) {
if (!parsing)
- usleep(n * 1000);
+ cCondWait::SleepMs(n);
return p;
}
esyslog("ERROR: illegal value for wait time in '%s'", s - 1);
diff --git a/diseqc.conf b/diseqc.conf
index 135089e..d4526d8 100644
--- a/diseqc.conf
+++ b/diseqc.conf
@@ -60,3 +60,14 @@ S21.5E 99999 H 10600 t V W15 [E0 10 38 F7] W15 B W15 T
# S21.5E 99999 V 10600 [E0 10 38 F5]
# S21.5E 11700 H 9750 [E0 10 38 F6]
# S21.5E 99999 H 10600 [E0 10 38 F7]
+#
+# DisiCon-4 Single Cable Network:
+#
+# horizontal: 11.704 - 12.205 GHz (1. IF: 1144 - 1645 MHz) - LOF 1 (10,56 GHz)
+# horizontal: 12.676 - 12.709 GHz (1. IF: 2116 - 2148 MHz) - LOF 1 (10,56 GHz)
+# vertical: 12.035 - 12.107 GHz (1. IF: 955 - 1027 MHz) - LOF 3 (11,08 GHz)
+# vertical: 12.464 - 12.716 GHz (1. IF: 1744 - 1996 MHz) - LOF 2 (10,72 GHz)
+#
+# S19.2E 99999 H 10560 t v
+# S19.2E 12110 V 11080 t v
+# S19.2E 99999 V 10720 t v
diff --git a/dvbdevice.c b/dvbdevice.c
index 561b6c6..3f38a0a 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.97 2004/10/17 09:10:43 kls Exp $
+ * $Id: dvbdevice.c 1.100 2004/10/24 11:06:37 kls Exp $
*/
#include "dvbdevice.h"
@@ -35,7 +35,7 @@ extern "C" {
#define DO_REC_AND_PLAY_ON_PRIMARY_DEVICE 1
#define DO_MULTIPLE_RECORDINGS 1
-//#define WAIT_FOR_LOCK_AFTER_TUNING 1
+#define TUNER_LOCK_TIMEOUT 5000 // ms
#define DEV_VIDEO "/dev/video"
#define DEV_DVB_ADAPTER "/dev/dvb/adapter"
@@ -78,6 +78,8 @@ private:
bool useCa;
time_t startTime;
eTunerStatus tunerStatus;
+ cMutex mutex;
+ cCondVar locked;
cCondWait newSet;
bool SetFrontend(void);
virtual void Action(void);
@@ -86,7 +88,7 @@ public:
virtual ~cDvbTuner();
bool IsTunedTo(const cChannel *Channel) const;
void Set(const cChannel *Channel, bool Tune, bool UseCa);
- bool Locked(void) { return tunerStatus >= tsLocked; }
+ bool Locked(int TimeoutMs = 0);
};
cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType, cCiHandler *CiHandler)
@@ -125,7 +127,7 @@ void cDvbTuner::Set(const cChannel *Channel, bool Tune, bool UseCa)
if (Tune)
tunerStatus = tsSet;
else if (tunerStatus == tsCam)
- tunerStatus = tsTuned;
+ tunerStatus = tsLocked;
useCa = UseCa;
if (Channel->Ca() && tunerStatus != tsCam)
startTime = time(NULL);
@@ -134,6 +136,14 @@ void cDvbTuner::Set(const cChannel *Channel, bool Tune, bool UseCa)
newSet.Signal();
}
+bool cDvbTuner::Locked(int TimeoutMs)
+{
+ cMutexLock MutexLock(&mutex);
+ if (TimeoutMs && tunerStatus < tsLocked)
+ locked.TimedWait(mutex, TimeoutMs);
+ return tunerStatus >= tsLocked;
+}
+
static unsigned int FrequencyToHz(unsigned int f)
{
while (f && f < 1000000)
@@ -253,22 +263,25 @@ void cDvbTuner::Action(void)
active = true;
while (active) {
Lock();
- if (tunerStatus == tsSet)
+ if (tunerStatus == tsSet) {
+ dvb_frontend_event event;
+ while (ioctl(fd_frontend, FE_GET_EVENT, &event) == 0)
+ ; // discard stale events
tunerStatus = SetFrontend() ? tsTuned : tsIdle;
- if (tunerStatus == tsTuned) {
- fe_status_t status = fe_status_t(0);
- CHECK(ioctl(fd_frontend, FE_READ_STATUS, &status));
- if (status & FE_HAS_LOCK)
- tunerStatus = tsLocked;
}
if (tunerStatus != tsIdle) {
dvb_frontend_event event;
- if (ioctl(fd_frontend, FE_GET_EVENT, &event) == 0) {
- if (event.status & FE_REINIT) {
- tunerStatus = tsSet;
- esyslog("ERROR: frontend %d was reinitialized - re-tuning", cardIndex);
+ while (ioctl(fd_frontend, FE_GET_EVENT, &event) == 0) {
+ if (event.status & FE_REINIT) {
+ tunerStatus = tsSet;
+ esyslog("ERROR: frontend %d was reinitialized - re-tuning", cardIndex);
+ }
+ if (event.status & FE_HAS_LOCK) {
+ cMutexLock MutexLock(&mutex);
+ tunerStatus = tsLocked;
+ locked.Broadcast();
+ }
}
- }
}
if (ciHandler) {
if (ciHandler->Process() && useCa) {
@@ -293,7 +306,7 @@ void cDvbTuner::Action(void)
}
Unlock();
// in the beginning we loop more often to let the CAM connection start up fast
- newSet.Wait((ciHandler && (time(NULL) - startTime < 20)) ? 100 : 1000);
+ newSet.Wait((tunerStatus == tsTuned || ciHandler && (time(NULL) - startTime < 20)) ? 100 : 1000);
}
}
@@ -735,25 +748,29 @@ bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
StartTransferMode = false;
#endif
- // XXX 1.3: use the same mechanism as below (!EITScanner.UsesDevice(this))
- if (EITScanner.Active()) {
- StartTransferMode = false;
- TurnOnLivePIDs = false;
- }
-
// Turn off live PIDs if necessary:
if (TurnOffLivePIDs)
TurnOffLiveMode();
+ // Set the tuner:
+
dvbTuner->Set(Channel, DoTune, !EITScanner.UsesDevice(this)); //XXX 1.3: this is an ugly hack - find a cleaner solution//XXX
-#ifdef WAIT_FOR_LOCK_AFTER_TUNING
- //XXX TODO preliminary fix for the "Unknown picture type" error
- time_t t0 = time(NULL);
- while (!dvbTuner->Locked() && time(NULL) - t0 < 5)
- usleep(100);
-#endif
+ // If this channel switch was requested by the EITScanner we don't wait for
+ // a lock and don't set any live PIDs (the EITScanner will wait for the lock
+ // by itself before setting any filters):
+
+ if (EITScanner.UsesDevice(this))
+ return true;
+
+ // Wait for a lock:
+
+ if (!dvbTuner->Locked(TUNER_LOCK_TIMEOUT)) {
+ esyslog("ERROR: no lock for channel %d on device %d", Channel->Number(), CardIndex() + 1);
+ return false;
+ }
+
// PID settings:
if (TurnOnLivePIDs) {
@@ -1058,7 +1075,7 @@ void cDvbDevice::StillPicture(const uchar *Data, int Length)
#define MIN_IFRAME 400000
for (int i = MIN_IFRAME / Length + 1; i > 0; i--) {
safe_write(fd_video, Data, Length);
- usleep(1); // allows the buffer to be displayed in case the progress display is active
+ cCondWait::SleepMs(1); // allows the buffer to be displayed in case the progress display is active
}
#endif
}
diff --git a/dvbplayer.c b/dvbplayer.c
index c9cdc1a..d583fe6 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbplayer.c 1.25 2004/10/15 13:07:55 kls Exp $
+ * $Id: dvbplayer.c 1.26 2004/10/23 12:39:35 kls Exp $
*/
#include "dvbplayer.h"
@@ -490,8 +490,6 @@ void cDvbPlayer::Action(void)
break;
}
}
- else//XXX
- usleep(1); // this keeps the CPU load low
}
// Store the frame in the buffer:
diff --git a/eit.c b/eit.c
index b0cbfdf..8ff51d3 100644
--- a/eit.c
+++ b/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 1.97 2004/10/16 09:49:13 kls Exp $
+ * $Id: eit.c 1.98 2004/10/24 14:56:39 kls Exp $
*/
#include "eit.h"
@@ -59,6 +59,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data)
}
else {
// We have found an existing event, either through its event ID or its start time.
+ pEvent->SetSeen();
// If the existing event has a zero table ID it was defined externally and shall
// not be overwritten.
if (pEvent->TableID() == 0x00)
@@ -215,8 +216,10 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data)
if (Empty && Tid == 0x4E && getSectionNumber() == 0)
// ETR 211: an empty entry in section 0 of table 0x4E means there is currently no event running
pSchedule->ClrRunningStatus(channel);
- if (Modified)
+ if (Modified) {
pSchedule->Sort();
+ Schedules->SetModified(pSchedule);
+ }
}
// --- cTDT ------------------------------------------------------------------
diff --git a/epg.c b/epg.c
index 2768db2..39b029e 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.19 2004/05/22 12:37:07 kls Exp $
+ * $Id: epg.c 1.20 2004/10/24 15:01:50 kls Exp $
*/
#include "epg.h"
@@ -99,6 +99,11 @@ void cEvent::SetVps(time_t Vps)
vps = Vps;
}
+void cEvent::SetSeen(void)
+{
+ seen = time(NULL);
+}
+
bool cEvent::HasTimer(void) const
{
for (cTimer *t = Timers.First(); t; t = Timers.Next(t)) {
@@ -478,6 +483,7 @@ cSchedule::cSchedule(tChannelID ChannelID)
{
channelID = ChannelID;
hasRunning = false;;
+ modified = 0;
}
cEvent *cSchedule::AddEvent(cEvent *Event)
@@ -496,7 +502,7 @@ const cEvent *cSchedule::GetPresentEvent(bool CheckRunningStatus) const
if (!CheckRunningStatus)
break;
}
- if (CheckRunningStatus && p->RunningStatus() >= SI::RunningStatusPausing)
+ if (CheckRunningStatus && time(NULL) - p->Seen() < 30 && p->RunningStatus() >= SI::RunningStatusPausing)
return p;
}
return pe;
@@ -643,6 +649,7 @@ bool cSchedule::Read(FILE *f, cSchedules *Schedules)
if (!cEvent::Read(f, p))
return false;
p->Sort();
+ Schedules->SetModified(p);
}
}
else {
@@ -680,6 +687,7 @@ cSchedules cSchedules::schedules;
const char *cSchedules::epgDataFileName = NULL;
time_t cSchedules::lastCleanup = time(NULL);
time_t cSchedules::lastDump = time(NULL);
+time_t cSchedules::modified = 0;
const cSchedules *cSchedules::Schedules(cSchedulesLock &SchedulesLock)
{
@@ -693,6 +701,12 @@ void cSchedules::SetEpgDataFileName(const char *FileName)
epgDataFileName = strdup(FileName);
}
+void cSchedules::SetModified(cSchedule *Schedule)
+{
+ Schedule->SetModified();
+ modified = time(NULL);
+}
+
void cSchedules::Cleanup(bool Force)
{
if (Force)
diff --git a/epg.h b/epg.h
index 9a6547e..6c31049 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.15 2004/03/14 13:25:39 kls Exp $
+ * $Id: epg.h 1.16 2004/10/24 13:56:00 kls Exp $
*/
#ifndef __EPG_H
@@ -36,6 +36,7 @@ private:
time_t startTime; // Start time of this event
int duration; // Duration of this event in seconds
time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
+ time_t seen; // When this event was last seen in the data stream
public:
cEvent(tChannelID ChannelID, u_int16_t EventID);
~cEvent();
@@ -52,6 +53,7 @@ public:
time_t EndTime(void) const { return startTime + duration; }
int Duration(void) const { return duration; }
time_t Vps(void) const { return vps; }
+ time_t Seen(void) const { return seen; }
bool HasTimer(void) const;
bool IsRunning(bool OrAboutToStart = false) const;
const char *GetDateString(void) const;
@@ -68,6 +70,7 @@ public:
void SetStartTime(time_t StartTime);
void SetDuration(int Duration);
void SetVps(time_t Vps);
+ void SetSeen(void);
void Dump(FILE *f, const char *Prefix = "") const;
static bool Read(FILE *f, cSchedule *Schedule);
void FixEpgBugs(void);
@@ -80,9 +83,12 @@ private:
tChannelID channelID;
cList<cEvent> events;
bool hasRunning;
+ time_t modified;
public:
cSchedule(tChannelID ChannelID);
tChannelID ChannelID(void) const { return channelID; }
+ time_t Modified(void) const { return modified; }
+ void SetModified(void) { modified = time(NULL); }
void SetRunningStatus(cEvent *Event, int RunningStatus, cChannel *Channel = NULL);
void ClrRunningStatus(cChannel *Channel = NULL);
void ResetVersions(void);
@@ -117,12 +123,15 @@ private:
static const char *epgDataFileName;
static time_t lastCleanup;
static time_t lastDump;
+ static time_t modified;
public:
static void SetEpgDataFileName(const char *FileName);
static const cSchedules *Schedules(cSchedulesLock &SchedulesLock);
///< Caller must provide a cSchedulesLock which has to survive the entire
///< time the returned cSchedules is accessed. Once the cSchedules is no
///< longer used, the cSchedulesLock must be destroyed.
+ static time_t Modified(void) { return modified; }
+ static void SetModified(cSchedule *Schedule);
static void Cleanup(bool Force = false);
static void ResetVersions(void);
static bool ClearAll(void);
diff --git a/font.c b/font.c
index eeabd33..29f9494 100644
--- a/font.c
+++ b/font.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: font.c 1.8 2004/05/31 09:55:37 kls Exp $
+ * $Id: font.c 1.9 2004/10/23 14:06:01 kls Exp $
*/
#include "config.h"
@@ -28,13 +28,18 @@
#include "fontosd-iso8859-7.c"
#include "fontsml-iso8859-7.c"
+#include "fontfix-iso8859-15.c"
+#include "fontosd-iso8859-15.c"
+#include "fontsml-iso8859-15.c"
+
// --- cFont -----------------------------------------------------------------
static void *FontData[eDvbCodeSize][eDvbFontSize] = {
- { FontOsd_iso8859_1, FontFix_iso8859_1, FontSml_iso8859_1 },
- { FontOsd_iso8859_2, FontFix_iso8859_2, FontSml_iso8859_2 },
- { FontOsd_iso8859_5, FontFix_iso8859_5, FontSml_iso8859_5 },
- { FontOsd_iso8859_7, FontFix_iso8859_7, FontSml_iso8859_7 },
+ { FontOsd_iso8859_1, FontFix_iso8859_1, FontSml_iso8859_1 },
+ { FontOsd_iso8859_2, FontFix_iso8859_2, FontSml_iso8859_2 },
+ { FontOsd_iso8859_5, FontFix_iso8859_5, FontSml_iso8859_5 },
+ { FontOsd_iso8859_7, FontFix_iso8859_7, FontSml_iso8859_7 },
+ { FontOsd_iso8859_15, FontFix_iso8859_15, FontSml_iso8859_15 },
};
static const char *FontCode[eDvbCodeSize] = {
@@ -42,6 +47,7 @@ static const char *FontCode[eDvbCodeSize] = {
"iso8859-2",
"iso8859-5",
"iso8859-7",
+ "iso8859-15",
};
eDvbCode cFont::code = code_iso8859_1;
diff --git a/font.h b/font.h
index b90daf6..5d74f66 100644
--- a/font.h
+++ b/font.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: font.h 1.8 2004/05/31 09:52:46 kls Exp $
+ * $Id: font.h 1.9 2004/10/23 14:06:37 kls Exp $
*/
#ifndef __FONT_H
@@ -24,7 +24,8 @@ enum eDvbCode {
code_iso8859_2,
code_iso8859_5,
code_iso8859_7,
-#define eDvbCodeSize (code_iso8859_7 + 1)
+ code_iso8859_15,
+#define eDvbCodeSize (code_iso8859_15 + 1)
};
class cFont {
diff --git a/fontosd-iso8859-2.c b/fontosd-iso8859-2.c
index c478361..bf9c0fb 100644
--- a/fontosd-iso8859-2.c
+++ b/fontosd-iso8859-2.c
@@ -419,8 +419,8 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000000, // .............
0x00000000, // .............
0x00000000, // .............
- 0x00001FFE, // .************
- 0x00001FFE, // .************
+ 0x000007F8, // ...********..
+ 0x000007F8, // ...********..
0x00000000, // .............
0x00000000, // .............
0x00000000, // .............
@@ -2473,33 +2473,33 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
},
{ // 114
8, 27,
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x0000001C, // ....***.
- 0x0000007C, // ..*****.
- 0x00000070, // ..***...
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000060, // ..**....
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x000000CE, // ..**..***.
+ 0x000000FE, // ..*******.
+ 0x000000E0, // ..***.....
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x000000C0, // ..**......
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
+ 0x00000000, // ..........
},
{ // 115
12, 27,
@@ -4151,35 +4151,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000000, // ...............
0x00000000, // ...............
},
- { // 170
- 9, 27,
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x000000F0, // ..****...
- 0x000001F8, // .******..
- 0x00000018, // .....**..
- 0x00000078, // ...****..
- 0x00000198, // .**..**..
- 0x00000198, // .**..**..
- 0x000001FC, // .*******.
- 0x000000EC, // ..***.**.
- 0x000001F8, // .******..
- 0x000001F8, // .******..
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
- 0x00000000, // .........
+ { // 170 iso8859-2
+ 15, 27,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00001838, // ...**.....***..
+ 0x00003018, // ..**.......**..
+ 0x00003008, // ..**........*..
+ 0x00003000, // ..**...........
+ 0x00003800, // ..***..........
+ 0x00001F00, // ...*****.......
+ 0x00000FF0, // ....********...
+ 0x000000F8, // ........*****..
+ 0x0000001C, // ...........***.
+ 0x0000000C, // ............**.
+ 0x0000600C, // .**.........**.
+ 0x0000300C, // ..**........**.
+ 0x00003018, // ..**.......**..
+ 0x00001FF0, // ...*********...
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00000180, // .......**......
+ 0x00000F80, // ....*****......
+ 0x00000700, // .....***.......
},
{ // 171
14, 27,
@@ -4631,36 +4631,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000000, // ............
0x00000000, // ............
},
-
- { // 186
- 8, 27,
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000078, // ..****..
- 0x0000007C, // ..*****.
- 0x000000C6, // .**...**
- 0x000000C6, // .**...**
- 0x000000C6, // .**...**
- 0x000000C6, // .**...**
- 0x0000007C, // ..*****.
- 0x00000038, // ...***..
- 0x000000FC, // .******.
- 0x000000FC, // .******.
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
- 0x00000000, // ........
+ { // 186 iso8859-2
+ 12, 27,
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x00000000, // .............
+ 0x000003F0, // ...******....
+ 0x000007F8, // ..********...
+ 0x00000C18, // .**.....**...
+ 0x00000C00, // .**..........
+ 0x00000E00, // .***.........
+ 0x000007E0, // ..******.....
+ 0x000001F8, // ....******...
+ 0x0000001C, // ........***..
+ 0x00000C0C, // .**......**..
+ 0x00000C0C, // .**......**..
+ 0x00000FF8, // .*********...
+ 0x000003F0, // ...******....
+ 0x00000000, // .............
+ 0x000001E0, // ....****.....
+ 0x00000060, // ......**.....
+ 0x000003E0, // ...*****.....
+ 0x000001C0, // ....***......
},
{ // 187
6, 27,
@@ -4902,12 +4901,12 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000000, // ...............
0x00000000, // ...............
},
- { // 195
+ { // 195 iso8859-2
15, 27,
0x00000000, // ...............
- 0x00000720, // .....***..*....
- 0x00000FE0, // ....*******....
- 0x00000040, // .........*.....
+ 0x00000C30, // ....**...**....
+ 0x00000660, // .....**.**.....
+ 0x00000380, // ......***......
0x00000000, // ...............
0x00000380, // ......***......
0x000003C0, // ......****.....
@@ -5233,34 +5232,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000000, // .......
},
{ // 206
- 6, 27,
- 0x00000030, // ..**...
- 0x00000078, // .****..
- 0x0000004C, // .*..**.
- 0x000000C4, // **...*.
- 0x00000000, // .......
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000030, // ..**...
- 0x00000000, // .......
- 0x00000000, // .......
- 0x00000000, // .......
- 0x00000000, // .......
- 0x00000000, // .......
+ 7, 27,
+ 0x00000030, // ..**....
+ 0x00000078, // .****...
+ 0x00000048, // .*..*...
+ 0x000000CC, // **..**..
+ 0x00000000, // ........
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000030, // ..**....
+ 0x00000000, // ........
+ 0x00000000, // ........
+ 0x00000000, // ........
+ 0x00000000, // ........
+ 0x00000000, // ........
},
{ // 207
6, 27,
@@ -5712,35 +5711,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000000, // ...............
0x00000000, // ...............
},
- { // 222
- 15, 27,
- 0x00000000, // ...............
- 0x00000000, // ...............
- 0x00000000, // ...............
- 0x00000000, // ...............
- 0x00000000, // ...............
- 0x00003000, // ..**...........
- 0x00003000, // ..**...........
- 0x00003000, // ..**...........
- 0x00003FF0, // ..**********...
- 0x00003FF8, // ..***********..
- 0x0000301C, // ..**.......***.
- 0x0000300C, // ..**........**.
- 0x0000300C, // ..**........**.
- 0x0000300C, // ..**........**.
- 0x0000300C, // ..**........**.
- 0x00003038, // ..**......***..
- 0x00003FF8, // ..***********..
- 0x00003FF0, // ..**********...
- 0x00003000, // ..**...........
- 0x00003000, // ..**...........
- 0x00003000, // ..**...........
- 0x00003000, // ..**...........
- 0x00000000, // ...............
- 0x00000000, // ...............
- 0x00000000, // ...............
- 0x00000000, // ...............
- 0x00000000, // ...............
+ { // 222 iso8859-2
+ 14, 27,
+ 0x00000000, // ..............
+ 0x00000000, // ..............
+ 0x00000000, // ..............
+ 0x00000000, // ..............
+ 0x00000000, // ..............
+ 0x00007FFE, // **************
+ 0x00007FFE, // **************
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000180, // ......**......
+ 0x00000000, // ..............
+ 0x000003C0, // .....****.....
+ 0x000000C0, // .......**.....
+ 0x000006C0, // ....**.**.....
+ 0x00000380, // .....***......
},
{ // 223
14, 27,
@@ -5862,16 +5861,16 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000000, // .............
0x00000000, // .............
},
- { // 227
+ { // 227 iso8859-2
13, 27,
0x00000000, // .............
0x00000000, // .............
0x00000000, // .............
0x00000000, // .............
0x00000000, // .............
- 0x00000300, // ....**.......
- 0x000007F0, // ...*******...
- 0x000004E0, // ...*..***....
+ 0x00000630, // ...**...**...
+ 0x00000360, // ....**.**....
+ 0x000001C0, // .....***.....
0x00000000, // .............
0x00000000, // .............
0x000003E0, // ....*****....
@@ -6672,35 +6671,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = {
0x00000F00, // .****.......
0x00000E00, // .***........
},
- { // 254
- 13, 27,
- 0x00000000, // .............
- 0x00000000, // .............
- 0x00000000, // .............
- 0x00000000, // .............
- 0x00000000, // .............
- 0x00000000, // .............
- 0x00001800, // .**..........
- 0x00001800, // .**..........
- 0x00001800, // .**..........
- 0x00001800, // .**..........
- 0x00001BE0, // .**.*****....
- 0x00001FF8, // .**********..
- 0x00001E38, // .****...***..
- 0x00001C1C, // .***.....***.
- 0x0000180C, // .**.......**.
- 0x0000180C, // .**.......**.
- 0x0000180C, // .**.......**.
- 0x0000180C, // .**.......**.
- 0x00001C1C, // .***.....***.
- 0x00001E38, // .****...***..
- 0x00001FF8, // .**********..
- 0x000019E0, // .**..****....
- 0x00001800, // .**..........
- 0x00001800, // .**..........
- 0x00001800, // .**..........
- 0x00001800, // .**..........
- 0x00001800, // .**..........
+ { // 254 iso8859-2
+ 6, 27,
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x0000007E, // ******
+ 0x0000007E, // ******
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x00000018, // ..**..
+ 0x0000001E, // ..****
+ 0x0000001E, // ..****
+ 0x00000000, // ......
+ 0x0000001E, // ..****
+ 0x00000006, // ....**
+ 0x00000036, // .**.**
+ 0x0000001C, // ..***.
},
{ // 255
12, 27,
diff --git a/fontsml-iso8859-2.c b/fontsml-iso8859-2.c
index f33afd6..ce5b35e 100644
--- a/fontsml-iso8859-2.c
+++ b/fontsml-iso8859-2.c
@@ -2132,30 +2132,30 @@ cFont::tPixelData FontSml_iso8859_2[][25] = {
0x0000000C, // ........**.
},
{ // 114
- 6, 23,
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000036, // .**.**
- 0x00000036, // .**.**
- 0x00000038, // .***..
- 0x00000030, // .**...
- 0x00000030, // .**...
- 0x00000030, // .**...
- 0x00000030, // .**...
- 0x00000030, // .**...
- 0x00000030, // .**...
- 0x00000030, // .**...
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
- 0x00000000, // ......
+ 9, 23,
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x000000CC, // .**..**..
+ 0x000000F8, // .*****...
+ 0x000000E0, // .***.....
+ 0x000000C0, // .**......
+ 0x000000C0, // .**......
+ 0x000000C0, // .**......
+ 0x000000C0, // .**......
+ 0x000000C0, // .**......
+ 0x000000C0, // .**......
+ 0x000000C0, // .**......
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
+ 0x00000000, // .........
},
{ // 115
9, 23,
@@ -5356,12 +5356,12 @@ cFont::tPixelData FontSml_iso8859_2[][25] = {
0x00000000, // ....
},
{ // 238
- 4, 23,
- 0x00000000, // .....
- 0x00000000, // .....
- 0x00000000, // .....
- 0x00000000, // .....
- 0x00000000, // .....
+ 6, 23,
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
0x00000018, // ..**..
0x0000003C, // .****.
0x00000066, // **..**
@@ -5376,10 +5376,10 @@ cFont::tPixelData FontSml_iso8859_2[][25] = {
0x00000018, // ..**..
0x00000018, // ..**..
0x00000018, // ..**..
- 0x00000000, // .....
- 0x00000000, // .....
- 0x00000000, // .....
- 0x00000000, // .....
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
+ 0x00000000, // ......
},
{ // 239
14, 23,
diff --git a/genfontfile.c b/genfontfile.c
index 41d87b7..bc171cf 100644
--- a/genfontfile.c
+++ b/genfontfile.c
@@ -179,7 +179,7 @@ SuckGlyphsFromServer(Display * dpy, Font font)
charHeight = charinfo->ascent + charinfo->descent;
spanLength = (charWidth + 7) / 8;
}
- bitmapData = calloc(height * spanLength, sizeof(char));
+ bitmapData = (unsigned char *)calloc(height * spanLength, sizeof(char));
if (!bitmapData)
goto FreeFontAndReturn;
DEBUG_GLYPH4("index %d, glyph %d (%d by %d)\n",
diff --git a/i18n.c b/i18n.c
index e3f4637..f325d57 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.159 2004/10/16 13:20:56 kls Exp $
+ * $Id: i18n.c 1.160 2004/10/23 13:57:38 kls Exp $
*
* Translations provided by:
*
@@ -19,7 +19,7 @@
* Spanish Ruben Nunez Francisco <ruben.nunez@tang-it.com>
* Greek Dimitrios Dimitrakos <mail@dimitrios.de>
* Swedish Tomas Prybil <tomas@prybil.se> and Jan Ekholm <chakie@infa.abo.fi>
- * Romanian Paul Lacatus <paul@campina.iiruc.ro>
+ * Romanian Paul Lacatus <paul@campina.iiruc.ro>, Lucian Muresan <lucianm@users.sourceforge.net>
* Hungarian Istvan Koenigsberger <istvnko@hotmail.com> and Guido Josten <guido.josten@t-online.de>
* Catalanian Marc Rovira Vall <tm05462@salleURL.edu>, Ramon Roca <ramon.roca@xcombo.com> and Jordi Vilà <jvila@tinet.org>
* Russian Vyacheslav Dikonov <sdiconov@mail.ru>
@@ -92,7 +92,7 @@ const tI18nPhrase Phrases[] = {
"Español",
"ÅëëçíéêÜ", // Greek
"Svenska",
- "Romaneste",
+ "Românã",
"Magyar",
"Català",
"ÀãááÚØÙ", // Russian
@@ -113,7 +113,7 @@ const tI18nPhrase Phrases[] = {
"iso8859-1",
"iso8859-7",
"iso8859-1",
- "iso8859-1",
+ "iso8859-2",
"iso8859-1",
"iso8859-1",
"iso8859-5",
@@ -134,7 +134,7 @@ const tI18nPhrase Phrases[] = {
"esl,spa",
"ell,gre",
"sve,swe",
- "ron,rum",
+ "rom,rum",
"hun",
"cat,cln",
"rus",
@@ -175,7 +175,7 @@ const tI18nPhrase Phrases[] = {
"Guía de Programación",
"Ðñüãñáììá",
"Program",
- "Program",
+ "Program (EPG)",
"Program",
"Guia de Programació",
"ÂÕÛÕÓØÔ",
@@ -215,7 +215,7 @@ const tI18nPhrase Phrases[] = {
"Timer",
"×ñïíïäéáêüðôçò",
"Timers",
- "Timere",
+ "Timer-e",
"Felvétel beprogramozása",
"Temporitzadors",
"ÂÐÙÜÕàë",
@@ -235,7 +235,7 @@ const tI18nPhrase Phrases[] = {
"Grabaciones",
"ÅããñáöÝò",
"Inspelningar",
- "Inregistrari",
+ "Înregistrãri",
"Felvett adások",
"Veure programes gravats",
"·ÐßØáØ",
@@ -255,7 +255,7 @@ const tI18nPhrase Phrases[] = {
"Configuración",
"Ñõèìéóåéò",
"Inställningar",
- "Setari",
+ "Configuraþie",
"Beállítások",
"Configuració",
"½ÐáâàÞÙÚÐ",
@@ -295,7 +295,7 @@ const tI18nPhrase Phrases[] = {
"Órdenes de grabación",
"ÅíôïëÝò ãéÜ åããñáöÝò",
"Inspelningskommandon",
- "",// TODO
+ "Comenzi înregistrare",
"Parancsok a felvett filmekhez",
"Ordres de gravació",
"ºÞÜÐÝÔë ×ÐßØáØ",
@@ -315,7 +315,7 @@ const tI18nPhrase Phrases[] = {
"Modificar canal",
"ÐñïóáñìïãÝò Êáíáëéïý",
"Ändra kanal",
- "Editare canale",
+ "Modificare canal",
"Csatornák beállítása",
"Editar canal",
"ÀÕÔÐÚâØàÞÒÐÝØÕ ÚÐÝÐÛÐ",
@@ -335,7 +335,7 @@ const tI18nPhrase Phrases[] = {
"Modificar timer",
"ÐñïóáñìïãÞ ÷ñïíïäéáêüðôç",
"Ändra timer",
- "Editare timere",
+ "Modificare timer",
"Felvétel beprogramozásának megváltoztatása",
"Editar temporitzador",
"ÃáâÐÝÞÒÚÐ âÐÙÜÕàÐ",
@@ -355,7 +355,7 @@ const tI18nPhrase Phrases[] = {
"Evento",
"ÅêðïìðÞ",
"Sändning",
- "Evenimente",
+ "Emisiune",
"Adás",
"Esdeveniment",
"¿ÕàÕÔÐçÐ",
@@ -375,7 +375,7 @@ const tI18nPhrase Phrases[] = {
"Resúmen",
"Ðåñéå÷üìåíï",
"Sammanfattning",
- "Cuprins",
+ "Detalii",
"Tartalom",
"Sinopsi",
"¾ßØáÐÝØÕ",
@@ -395,7 +395,7 @@ const tI18nPhrase Phrases[] = {
"Programa - %s",
"Ðñüãñáììá - %s",
"Program - %s",
- "Program - %s",
+ "Programul canalului %s",
"Program - %s",
"Guia de Programació - %s",
"¿àÞÓàÐÜÜÐ - %s",
@@ -415,7 +415,7 @@ const tI18nPhrase Phrases[] = {
"¿Qué hay ahora?",
"ÔñÝ÷ïí ðñüãñáììá",
"Vilket program sänds nu?",
- "Programul actual?",
+ "Ce emisiuni sunt acum?",
"Mi megy most?",
"Què fan ara?",
"ÁÕÙçÐá Ò íäØàÕ:",
@@ -435,7 +435,7 @@ const tI18nPhrase Phrases[] = {
"¿Qué hay proximo?",
"Åðüìåíï ðñüãñáììá",
"Vilket är nästa program?",
- "Programul urmator?",
+ "Ce emisiuni urmeazã?",
"Mi következik?",
"Què fan després?",
"´ÐÛÕÕ Ò ßàÞÓàÐÜÜÕ:",
@@ -456,7 +456,7 @@ const tI18nPhrase Phrases[] = {
"Modificar",
"ÐñïóáñìïãÞ",
"Ändra",
- "Modificare",
+ "Modificã",
"Beállítani",
"Editar",
"ÀÕÔÐÚâØàÞÒÐâì",
@@ -496,7 +496,7 @@ const tI18nPhrase Phrases[] = {
"Borrar",
"ÄéáãñáöÞ",
"Ta bort",
- "Sterge",
+ "ªterge",
"Törölni",
"Esborrar",
"ÃÔÐÛØâì",
@@ -516,7 +516,7 @@ const tI18nPhrase Phrases[] = {
"Marcar",
"ÅðéëïãÞ",
"Märk",
- "Marcheaza",
+ "Marcheazã",
"Megjelölni",
"Marcar",
"¿ÕàÕÜÕáâØâì",
@@ -536,7 +536,7 @@ const tI18nPhrase Phrases[] = {
"On/Off",
"Aíïé÷/Këåéóôü",
"På/Av",
- "Pornit/Oprit",
+ "Act./Inact.",
"Be/Ki",
"On/Off",
"²ÚÛ/²ëÚÛ",
@@ -556,7 +556,7 @@ const tI18nPhrase Phrases[] = {
"Grabar",
"ÅããñáöÞ",
"Inspelning",
- "Inregistrare",
+ "Înregistr.",
"Felvenni",
"Gravar",
"·ÐßØáì",
@@ -596,7 +596,7 @@ const tI18nPhrase Phrases[] = {
"Rebobinar",
"Áñ÷Þ",
"Återspolning",
- "Inapoi",
+ "Înapoi",
"Vissza az elejére",
"Enrera",
"½Ð×ÐÔ",
@@ -636,7 +636,7 @@ const tI18nPhrase Phrases[] = {
"Continuar",
"ÓõíÝ÷åéá",
"Fortsätt",
- "Reia",
+ "Revenire",
"Tovább",
"Continuar",
"¿àÞÔÞÛÖØâì",
@@ -696,7 +696,7 @@ const tI18nPhrase Phrases[] = {
"Cambiar",
"AëëáãÞ",
"Byt",
- "Schimba",
+ "Comutã",
"Átkapcsolni",
"Canviar",
"¿ÕàÕÚÛîçØâì",
@@ -736,7 +736,7 @@ const tI18nPhrase Phrases[] = {
"Siguiente",
"Åðüìåíï",
"Nästa",
- "Urmator",
+ "Urmãtor",
"Következö",
"Següent",
"´ÐÛÕÕ",
@@ -796,7 +796,7 @@ const tI18nPhrase Phrases[] = {
"Expulsar",
"ÅîáãùãÞ",
"Mata ut",
- "Ejecteaza",
+ "Ejecteazã",
"Kidobni",
"Expulsar",
"¸×ÒÛÕçì",
@@ -836,7 +836,7 @@ const tI18nPhrase Phrases[] = {
"Insertar",
"ÅéóáãùãÞ",
"Infoga",
- "Insereaza",
+ "Insereazã",
"Beilleszteni",
"Inserir",
"²áâÐÒÚÐ",
@@ -896,7 +896,7 @@ const tI18nPhrase Phrases[] = {
"Reiniciar",
"ÅðáíáöïñÜ",
"Återställ",
- "",//TODO
+ "Resetare",
"Reset",
"Reiniciar",
"ÁÑàÞá",
@@ -916,7 +916,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
+ "Cãutare canale",
"",//TODO
"",//TODO
"ÁÚÐÝØàÞÒÐâì",
@@ -937,7 +937,7 @@ const tI18nPhrase Phrases[] = {
"¿Eliminar canal?",
"ÄéáãñáöÞ êáíáëéïý?",
"Ta bort kanalen?",
- "Sterg canalul?",
+ "ªterg canalul?",
"Csatorna törlése?",
"Esborrar el canal?",
"ÃÔÐÛØâì ÚÐÝÐÛ?",
@@ -957,7 +957,7 @@ const tI18nPhrase Phrases[] = {
"¿Eliminar timer?",
"ÄéáãñáöÞ ÷ñïíïäéáêüðôç?",
"Ta bort timern?",
- "Sterg timer-ul?",
+ "ªterg timer-ul?",
"Felvétel beprogramozásának törlése?",
"Esborrar el temporitzador?",
"ÃÔÐÛØâì âÐÙÜÕà?",
@@ -977,7 +977,7 @@ const tI18nPhrase Phrases[] = {
"¿Eliminar grabacion?",
"ÄéáãñáöÞ áñ÷åßïõ?",
"Ta bort inspelningen?",
- "Sterg inregistrarea?",
+ "ªterg înregistrarea?",
"Felvétel törlése?",
"Esborrar gravació?",
"ÁâÕàÕâì ×ÐßØáì?",
@@ -997,7 +997,7 @@ const tI18nPhrase Phrases[] = {
"¿Timer activo - de verdad eliminarlo?",
"×ñïíïäéáêüðôçò óÝ åîÝëéîç - ÄéáãñáöÞ óßãïõñá?",
"Timerstyrd inspelning pågår - Avbryta ändå?",
- "Timer-ul in inregistrare - sterg?",
+ "Timer-ul tocmai înregistreazã - ºterg, totuºi?",
"Felvétel folyamatban van - mégis törölni?",
"Temporitzador activat - Esborrar de totes maneres?",
"¸Ôñâ ×ÐßØáì ßÞ âÐÙÜÕàã - ÔÕÙáâÒØâÕÛìÝÞ ãÔÐÛØâì?",
@@ -1017,7 +1017,7 @@ const tI18nPhrase Phrases[] = {
"¿Parar grabación?",
"Áêýñùóç åããñáöÞò?",
"Stanna inspelning?",
- "Opresc inregistrarea?",
+ "Opresc înregistrarea?",
"Felvétel befejezni?",
"Aturar la gravació?",
"¿àÕÚàÐâØâì ×ÐßØáì?",
@@ -1037,7 +1037,7 @@ const tI18nPhrase Phrases[] = {
"en interface primario",
"óôÞí êýñéá êÜñôá",
"från den första enheten?",
- "pe prima interfata",
+ "pe prima interfaþã",
"az elsö kártyán",
"a la interfície primària",
"ÝÐ ÞáÝÞÒÝÞÜ ãáâàÞÙáâÒÕ",
@@ -1057,7 +1057,7 @@ const tI18nPhrase Phrases[] = {
"¿Cancelar modificación?",
"Aêýñùóç åðåîåñãáóßáò?",
"Avbryta redigeringen?",
- "Opresc editarea?",
+ "Opresc montajul înregistrãrii?",
"Vágást befejezni?",
"Cancel·lar l'edició?",
"¿àÕàÒÐâì àÕÔÐÚâØàÞÒÐÝØÕ?",
@@ -1077,7 +1077,7 @@ const tI18nPhrase Phrases[] = {
"¿De verdad reiniciar?",
"Ná ãßíåé óßãïõñá åðáíåêêßíçóç?",
"Vill du verkligen starta om?",
- "Esti sigur de repornire?",
+ "Sigur repornesc?",
"Tényleg újraindítani?",
"Segur que voleu reiniciar?",
"´ÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?",
@@ -1097,7 +1097,7 @@ const tI18nPhrase Phrases[] = {
"Grabando - ¿reiniciar?",
"Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé åðáíåêêßíçóç?",
"Inspelning pågår, vill du ändå starta om?",
- "In inregistrare - repornesc?",
+ "Tocmai se înregistreazã - repornesc, totuºi?",
"Felvétel folyamatban van - mégis újraindítani?",
"Gravant - Reiniciar de totes maneres?",
"¸Ôñâ ×ÐßØáì - ÔÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?",
@@ -1117,7 +1117,7 @@ const tI18nPhrase Phrases[] = {
"Grabando - ¿apagar?",
"Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé ôåñìáôéóìüò?",
"Inspelning pågår, vill du ändå avbryta?",
- "In inregistrare - opresc?",
+ "Tocmai se înregistreazã - închid, totuºi?",
"Felvétel folyamatban van - mégis kikapcsolni?",
"Gravant - Apagar de totes maneres?",
"¸Ôñâ ×ÐßØáì - ÔÕÙáâÒØâÕÛìÝÞ ÒëÚÛîçØâì?",
@@ -1137,7 +1137,7 @@ const tI18nPhrase Phrases[] = {
"Grabando en %d minutos, ¿de verdad apagar?",
"ÁíáìÝíåôáé åããñáöÞ óÝ %d ëåðôÜ - ÔåëéêÜ íá ôåñìáôéóôåé?",
"Inspelning startar om %d minuter, vill du avsluta?",
- "Inregistrez in %d minute, opresc?",
+ "Înregistrez peste %d minute - închid, totuºi?",
"Felvétel %d perc mulva kezdödik - mégis kikapcsolni?",
"Hi ha una gravació en %d minuts - Apagar de totes maneres?",
"ÇÕàÕ× %d ÜØÝãâ ÝÐçÝñâáï ×ÐßØáì - ÔÕÙáâÒØâÕÛìÝÞ ÒëÚÛîçØâì?",
@@ -1157,7 +1157,7 @@ const tI18nPhrase Phrases[] = {
"Pulse una tecla para interrumpir apagar",
"Ðßåóå Ýíá ðëÞêôñï ãéÜ áêýñùäç ôåñìáôéóìïý",
"Tryck valfri knapp för att återkalla avstängningen",
- "Apasa orice tasta pentru a anula inchiderea",
+ "Apasã orice tastã pentru a anula închiderea",
"Nyomj egy gombot a leállás megállításához",
"Prem qualsevol tecla per cancel·lar l'aturada",
"½ÐÖÜØâÕ ÛîÑãî ÚÝÞßÚã çâÞÑë ÞâÜÕÝØâì ÒëÚÛîçÕÝØÕ.",
@@ -1198,7 +1198,7 @@ const tI18nPhrase Phrases[] = {
"Frecuencia",
"Óõ÷íüôçôá",
"Frekvens",
- "Frecventa",
+ "Frecvenþã",
"Frekvencia",
"Freqüència",
"ÇÐáâÞâÐ",
@@ -1238,7 +1238,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"Äéåñåýíçóç",
"Källa",
- "",//TODO
+ "Sursã",
"Forrás",
"Origen",
"¸áâÞçÝØÚ",
@@ -1258,7 +1258,7 @@ const tI18nPhrase Phrases[] = {
"Srate",
"Srate",
"Symbolrate",
- "Rata simboluri",
+ "Ratã simboluri",
"Srate",
"Srate",
"ÁØÜÒ. áÚÞàÞáâì",
@@ -1418,7 +1418,7 @@ const tI18nPhrase Phrases[] = {
"CA",
"CA",
"Kortläsare",
- "Criptare",
+ "CA (Acces Condiþional)",
"CA",
"Accés Condicional",
"CA (ÔÕÚÞÔÕà)",
@@ -1458,7 +1458,7 @@ const tI18nPhrase Phrases[] = {
"Inversion",
"Inversion",
"Inversion",
- "Inversion",
+ "Inversiune",
"Inversion",
"Inversió",
"¸ÝÒÕàáØï",
@@ -1478,7 +1478,7 @@ const tI18nPhrase Phrases[] = {
"Bandwidth",
"Bandwidth",
"Bandbredd",
- "Bandwidth",
+ "Lãrgime de bandã",
"Bandwidth",
"Amplada de banda",
"´ØÐßÐ×ÞÝ",
@@ -1538,7 +1538,7 @@ const tI18nPhrase Phrases[] = {
"Modulation",
"Modulation",
"Modulation",
- "Modulation",
+ "Modulaþie",
"Modulation",
"Modulació",
"¼ÞÔãÛïæØï",
@@ -1558,7 +1558,7 @@ const tI18nPhrase Phrases[] = {
"Transmission",
"Transmission",
"Transmission",
- "Transmission",
+ "Transmisiune",
"Transmission",
"Transmissió",
"¿ÕàÕÔÐçÐ",
@@ -1598,7 +1598,7 @@ const tI18nPhrase Phrases[] = {
"Hierarchy",
"Hierarchy",
"Hierarchy",
- "Hierarchy",
+ "Ierarhie",
"Hierarchy",
"Jerarquia",
"¸ÕàÐàåØï",
@@ -1679,7 +1679,7 @@ const tI18nPhrase Phrases[] = {
"Comienzo",
"Áñ÷Þ",
"Börjar",
- "Start",
+ "Început",
"Kezdet",
"Inici",
"½ÐçÐÛÞ",
@@ -1699,7 +1699,7 @@ const tI18nPhrase Phrases[] = {
"Fin",
"ÔÝëïò",
"Slutar",
- "Stop",
+ "Sfârºit",
"Vége",
"Fi",
"ºÞÝÕæ",
@@ -1719,7 +1719,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "VPS",
"",// TODO
"",// TODO
"VPS ßÞßàÐÒÚÐ",
@@ -1759,7 +1759,7 @@ const tI18nPhrase Phrases[] = {
"Durabilidad",
"ÄéÝñêåéá ÐáñáìïíÞò",
"Livstid",
- "Durata",
+ "Timp de pãstrare",
"Élettartam",
"Durada",
"ÁàÞÚ åàÐÝÕÝØï",
@@ -1779,7 +1779,7 @@ const tI18nPhrase Phrases[] = {
"Fichero",
"Áñ÷åßï",
"Filnamn",
- "Fisier",
+ "Fiºier",
"File",
"Arxiu",
"ÄÐÙÛ",
@@ -1860,7 +1860,7 @@ const tI18nPhrase Phrases[] = {
"¡Timer esta grabando!",
"Ãßíåôáé ðñïãñáìáôéóìÝíç åããñáöÞ!",
"Timerstyrd inspelning pågår!",
- "Timer-ul este in inregistrare!",
+ "Timer-ul tocmai înregistreazã!",
"Felvétel folyamatban van!",
"El temporitzador està gravant!",
"¸Ôñâ ×ÐßØáì ßÞ âÐÙÜÕàã!",
@@ -1880,7 +1880,7 @@ const tI18nPhrase Phrases[] = {
"¡Error al acceder a la grabación!",
"Ðñüâëçìá óôÞí ðñïóðÝëáóç åããñáöÞò!",
"Inspelningen går inte att läsa!",
- "Eroare in timpul accesarii inregistrarii",
+ "Eroare la accesarea înregistrãrii",
"Hiba a felvétel hozzáférésénél",
"Error a l'accedir a la gravació!",
"¾èØÑÚÐ ÔÞáâãßÐ Ú ×ÐßØáØ!",
@@ -1900,7 +1900,7 @@ const tI18nPhrase Phrases[] = {
"¡Error al borrar la grabación!",
"ËÜèïò êáôÜ ôÞí äéáãñáöÞ ôïõ áñ÷åßïõ!",
"Inspelningen går inte att ta bort!",
- "Eroare in timpul stergerii inregistrarii!",
+ "Eroare la ºtergerea înregistrãrii!",
"Hiba a felvétel törlésénél!",
"Error a l'esborrar la gravació!",
"¾èØÑÚÐ ãÔÐÛÕÝØï ×ÐßØáØ!",
@@ -1940,7 +1940,7 @@ const tI18nPhrase Phrases[] = {
"¡No hay dispositivo DVB disponible para grabar!",
"ÁíåðÜñêåéá DVB ÊÜñôáò ãéÜ åããñáöÞ!",
"Det finns ingen ledig DVB enhet för inspelning!",
- "Nu mai sunt dispozitive DVB pentru inregistrare!",
+ "Nu mai sunt dispozitive DVB disponibile pentru înregistrare!",
"Nincs szabad DVB kártya a felvételhez!",
"No hi ha cap dispositiu DVB lliure per gravar!",
"½Õâ áÒÞÑÞÔÝÞÓÞ DVB-ãáâàÞÙáâÒÐ ÔÛï ×ÐßØáØ!",
@@ -1960,7 +1960,7 @@ const tI18nPhrase Phrases[] = {
"!Canal no disponible!",
"Ôï êáíÜëç äÝí åßíáé äéáèÝóéìï!",
"Kanalen ej tillgänglig!",
- "",//TODO
+ "Canal indisponibil",
"A csatorna nem elérhetö",
"Canal no disponible!",
"ºÐÝÐÛ ÝÕÔÞáâãßÕÝ!",
@@ -1980,7 +1980,7 @@ const tI18nPhrase Phrases[] = {
"!Propiedades de canal duplicadas!",
"Ïé ñéèìýóåéò ôïí êáíáëéþí áëëõëïóõìðßðôïõí!",
"Kanalinställningarna är ej unika!",
- "",//TODO
+ "Parametrii canalului nu sunt univoci!",
"A csatornabeállítások nem egyértelmüek",
"Propietats del canal duplicades!",
"½ÐáâàÞÙÚØ ÚÐÝÐÛÐ ÝÕ ãÝØÚÐÛìÝë!",
@@ -2000,7 +2000,7 @@ const tI18nPhrase Phrases[] = {
"¡Canal bloqueado (grabando)!",
"Ôï êáíÜëé åßíáé áðïó÷ïëéìÝíï (Ãßíåôå åããñáöÞ)!",
"Kanalen är låst (inspelning pågår)!",
- "Canal blocat (inregistrare)!",
+ "Canal blocat (înregistrare)!",
"Csatorna hozzáférhetetlen (felvétel)!",
"Canal bloquejat (gravant)!",
"ºÐÝÐÛ ×ÐÑÛÞÚØàÞÒÐÝ (ØÔñâ ×ÐßØáì)!",
@@ -2020,7 +2020,7 @@ const tI18nPhrase Phrases[] = {
"¡No puedo iniciar modo de transferencia!",
"Áäõíáìßá åêêßíçóçò êáôÜóôáóçò ìåôáöïñÜò!",
"Kan inte starta Transfer Mode!",
- "Nu pot porni Modul de Transfer!",
+ "Nu pot porni modul de transfer!",
"Transfer-Mode nem indítható!",
"No puc iniciar el mode de transferència!",
"½ÕÒÞ×ÜÞÖÝÞ ÒÚÛîçØâì àÕÖØÜ ßàÞßãáÚÐ!", // ???
@@ -2040,7 +2040,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"ÄÝí Ý÷ïõí ïñéóôåß óçìåßá åðåîåñãáóßáò",
"Det finns inga redigeringsmärken",//TODO
- "",//TODO
+ "Nu s-au pus marcaje de montaj pentru aceastã înregistrare",
"A vágópont nincs kijelölve",//TODO
"No hi ha marques d'edició definides",
"½Õ ×ÐÔÐÝë ÜÕâÚØ ÔÛï ÜÞÝâÐÖÐ!",
@@ -2060,7 +2060,7 @@ const tI18nPhrase Phrases[] = {
"¡No puedo iniciar proceso de modificación!",
"Áäõíáìßá åêêßíçóçò ôçò åðåîåñãáóßáò!",
"Kan inte starta redigering!",
- "Nu pot porni procesul de editare!",
+ "Nu pot porni montajul înregistrãrii!",
"A vágás nem indítható!",
"No puc iniciar el procés d'edició!",
"½ÕÒÞ×ÜÞÖÝÞ ÝÐçÐâì ÜÞÝâÐÖ ×ÐßØáØ!",
@@ -2080,7 +2080,7 @@ const tI18nPhrase Phrases[] = {
"¡Proceso de modificación ya fue iniciado!",
"Åðåîåñãáóßá âñßóêåôáé óÝ åîÝëéîç!",
"Redigeringen är redan aktiv!",
- "Procesul de editare este activ!",
+ "Montajul înregistrãrii este deja activ!",
"A vágás már aktivált!",
"Procés d'edició iniciat anteriorment!",
"¿àÞæÕáá ÒØÔÕÞÜÞÝâÐÖÐ ãÖÕ ×ÐßãéÕÝ!",
@@ -2100,7 +2100,7 @@ const tI18nPhrase Phrases[] = {
"¡No puedo apagar - opción '-s' ausente!",
"Áäýíáôïí íá ãßíåé ôåñìáôéóìüò. Áíýðáñêôç ç ðáñÜìåôñïò '-s'!",
"Kan inte avsluta, måste använda parameter '-s'",
- "Nu pot opri calculatorul - vezi optiunea '-s'",
+ "Nu pot închide - vezi opþiunea '-s'",
"A leállítás nem lehetséges - Opció '-s' hiányzik!",
"No puc apagar, falta la opció -s !",
"²ëÚÛîçÕÝØÕ ÝÕÒÞ×ÜÞÖÝÞ - ÝÕ ×ÐÔÐÝ ßÐàÐÜÕâà '-s'!",
@@ -2120,7 +2120,7 @@ const tI18nPhrase Phrases[] = {
"¡Disco casi lleno",
"Ï óêëçñüò êïíôåýåé íÜ ãåìßóåé!",
"Lågt diskutrymme!",
- "Spatiu scazut pe disc!",
+ "Spaþiul pe disc e foarte scãzut!",
"A merev lemez majdnem tele!",
"Disc gairebé ple!",
"½ÕÔÞáâÐâÞçÝÞ ÜÕáâÐ ÝÐ ÔØáÚÕ!",
@@ -2140,7 +2140,7 @@ const tI18nPhrase Phrases[] = {
"¡No pudeo acceder al menú de la CAM!",
"Áäýíáôç ç ðñüóâáóç óôü CAM ìåíïý!",
"Det går inte att öppna CAM menyn!",
- "",//TODO
+ "Nu pot deschide meniul CAM",
"A CAM-Menü nem nyitható",
"No puc obrir el menú de la CAM!",
"¼ÕÝî CAM-ÜÞÔãÛï ÝÕÔÞáâãßÝÞ!",
@@ -2160,7 +2160,7 @@ const tI18nPhrase Phrases[] = {
"¡No puedo reiniciar la CAM!",
"Áäýíáôï íá ãßíåé åðáíáöïñÜ óôü CAM",
"Kan inte återställa CAM!",
- "",//TODO
+ "Nu pot reseta CAM",
"A CAM-Reset nem sikerült",
"No puc reiniciar la CAM!",
"¾èØÑÚÐ ßÕàÕ×ÐßãáÚÐ CAM-ÜÞÔãÛï!",
@@ -2180,7 +2180,7 @@ const tI18nPhrase Phrases[] = {
"CAM reiniciada",
"Óôï CAM Ýãéíå åðáíáöïñÜ",
"CA modulen har återställts",
- "",//TODO
+ "CAM-ul a fost resetat",
"A CAM vissza lett állítva",
"CAM reiniciada",
"CAM-ÜÞÔãÛì ßÕàÕ×ÐßãéÕÝ!",
@@ -2241,7 +2241,7 @@ const tI18nPhrase Phrases[] = {
"DVB",
"DVB",
"DVB",
- "Placa DVB",
+ "Dispozitiv DVB",
"DVB",
"Tarja DVB",
"DVB",
@@ -2281,7 +2281,7 @@ const tI18nPhrase Phrases[] = {
"CICAM",
"CICAM",
"CICAM",
- "Acces conditionat",
+ "CICAM",
"CICAM",
"CI Accés condicional",
"ÃáÛÞÒÝëÙ ÔÞáâãß",
@@ -2301,7 +2301,7 @@ const tI18nPhrase Phrases[] = {
"Opciones de Grabación",
"ÅããñáöÞ",
"Inspelning",
- "Inregistrare",
+ "Înregistrare",
"Felvétel",
"Opcions de Gravació",
"·ÐßØáì",
@@ -2361,7 +2361,7 @@ const tI18nPhrase Phrases[] = {
"Plugins",
"Âßóìáôá",
"Moduler",
- "Plugins",
+ "Plugin-uri",
"Plugins",
"Plugins",
"¼ÞÔãÛØ àÐáèØàÕÝØï",
@@ -2381,7 +2381,7 @@ const tI18nPhrase Phrases[] = {
"Plugin",
"Âßóìá",
"Modul",
- "Plugin",
+ "Plugin (modul adiþional)",
"Plugin",
"Plugin",
"¼ÞÔãÛì",
@@ -2401,7 +2401,7 @@ const tI18nPhrase Phrases[] = {
"Reiniciar",
"Åðáíåêêßíçóç",
"Omstart",
- "Restart",
+ "Repornire",
"Ùjraindítás",
"Reiniciar",
"¿ÕàÕ×ÐßãáâØâì",
@@ -2442,7 +2442,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Skin",
"",// TODO
"",// TODO
"ÁâØÛì",
@@ -2462,7 +2462,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Temã",
"",// TODO
"",// TODO
"¿ÐÛØâàÐ",
@@ -2482,7 +2482,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Stânga",
"",// TODO
"",// TODO
"¾âáâãß áÛÕÒÐ",
@@ -2502,7 +2502,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Sus",
"",// TODO
"",// TODO
"¾âáâãß áÒÕàåã",
@@ -2522,7 +2522,7 @@ const tI18nPhrase Phrases[] = {
"Anchura",
"ÌÜêñïò",
"Bredd",
- "Latime OSD",
+ "Lãþime OSD",
"Szélesség",
"Amplada",
"ÈØàØÝÐ",
@@ -2542,7 +2542,7 @@ const tI18nPhrase Phrases[] = {
"Altura",
"¾øïò",
"Höjd",
- "Inaltime OSD",
+ "Înãlþime OSD",
"Magasság",
"Alçada",
"²ëáÞâÐ",
@@ -2562,7 +2562,7 @@ const tI18nPhrase Phrases[] = {
"Duración muestra mensajes (s)",
"×ñüíïò Ýíäåéîçò ìõíçìÜôùí (ä)",
"Tid för meddelanden (sek)",
- "Timp afisare mesaj (sec)",
+ "Timp afiºare mesaje (sec)",
"Információ feltüntetésének idötartama",
"Durada dels missatges (s)",
"´ÛØâÕÛìÝÞáâì ßÞÚÐ×Ð áÞÞÑéÕÝØÙ (áÕÚ)",
@@ -2582,7 +2582,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Utilizare fonturi mici",
"",// TODO
"",// TODO
"¸áßÞÛì×ÞÒÐâì ÜÕÛÚØÙ èàØäâ",
@@ -2602,7 +2602,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "niciodatã",
"",// TODO
"",// TODO
"ÝØÚÞÓÔÐ",
@@ -2622,7 +2622,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "dep. de skin",
"",// TODO
"",// TODO
"áÞÓÛÐáÝÞ âÕÜÕ",
@@ -2642,7 +2642,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "întotdeauna",
"",// TODO
"",// TODO
"ÒáÕÓÔÐ",
@@ -2662,7 +2662,7 @@ const tI18nPhrase Phrases[] = {
"Posición para información canal",
"ÈÝóç ðëçñïöïñßáò êáíáëéþí",
"Placering av kanalinformation",
- "Pozitie info canal",
+ "Poziþia informaþiilor despre canal",
"Csatorna-Infó poziciója",
"Posició de la informació del canal",
"¿ÞÛÞÖÕÝØÕ ÞÚÝÐ ØÝäÞàÜÐæØØ Þ ÚÐÝÐÛÕ",
@@ -2682,7 +2682,7 @@ const tI18nPhrase Phrases[] = {
"Información para cambio de canal",
"Ðëçñïöïñßåò óôÞí áëëáãÞ êáíáëéïý",
"Information vid kanalbyte",
- "Info despre comutare canal",
+ "Informaþii la comutarea canalului",
"Infó a csatorna váltásánál",
"Informació del canvi de canal",
"¿ÞÚÐ×ëÒÐâì ØÝäÞàÜÐæØî Þ ÚÐÝÐÛÕ",
@@ -2702,7 +2702,7 @@ const tI18nPhrase Phrases[] = {
"Desplazar página entera",
"Êßëéóç óåëßäáò",
"Bläddra sidor",
- "Deruleaza pagini",
+ "Deruleazã pagini",
"Oldalanként léptetmi",
"Desplaçar pàgina sencera",
"¿àÞÚàãâÚÐ áâàÐÝØæ ÜÕÝî",
@@ -2722,7 +2722,7 @@ const tI18nPhrase Phrases[] = {
"Ordenar timers",
"ÏñãÜíùóç ðñïãñáìáôéóìÝíùí",
"Sortera timers",
- "Sortare timere",
+ "Sortare timer-e",
"A beprogramozott felvételek elrendezése",
"Ordenar gravacions programades",
"ÁÞàâØàÞÒÚÐ âÐÙÜÕàÞÒ",
@@ -2742,7 +2742,7 @@ const tI18nPhrase Phrases[] = {
"Gracaciones en directorios",
"ÖÜêåëïé åããñáöþí",
"Kataloger för inspelningar",
- "Directoare inregistrari",
+ "Directoare înregistrãri",
"Felvételek listája",
"Gravacions en subcarpetes",
"ºÐâÐÛÞÓØ åàÐÝÕÝØï ×ÐßØáÕÙ",
@@ -2762,7 +2762,7 @@ const tI18nPhrase Phrases[] = {
"Tiempo hasta exploración EPG (h)",
"×ñüíïò ìÝ÷ñé åîÝôáóç EPG óå þñåò",
"EPG sökning timeout",
- "Timeout EPG",
+ "Interval achiziþie EPG (h)",
"Fennmaradt idö az EPG-g (h)",
"Màxim d'Hores a cercar per la Guia",
"·ÐÔÕàÖÚÐ áÚÐÝØàÞÒÐÝØï âÕÛÕÓØÔÐ (ç)",
@@ -2782,7 +2782,7 @@ const tI18nPhrase Phrases[] = {
"Nivel para arreglar EPG",
"Âáèìüò äéüñèïóçò ïäçãïý EPG",
"Nivå för EPG bugfix",
- "Nivel corectie EPG",
+ "Nivel corecþie EPG",
"EPG hibaelhárítás",
"Nivell de correcció de la Guia",
"ÃàÞÒÕÝì ÚÞààÕÚæØØ ÞèØÑÞÚ",
@@ -2802,7 +2802,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"Visa gammal info (min)",
- "",// TODO
+ "Date EPG expirate cel mult (min)",
"",// TODO
"",// TODO
"ÅàÐÝÕÝØÕ ãáâÐàÕÒèØå ÔÐÝÝëå (ÜØÝ)",
@@ -2822,7 +2822,7 @@ const tI18nPhrase Phrases[] = {
"Ajustar reloj de sistema",
"Óõíôïíéóìüò þñáò õðïëïãéóôÞ",
"Ställ in systemtid",
- "Seteaza ceasul sistem",
+ "Potriveºte ceasul sistem",
"Az idö beállítása",
"Ajustar l'hora del sistema",
"ÃáâÐÝÞÒØâì áØáâÕÜÝÞÕ ÒàÕÜï",
@@ -2842,7 +2842,7 @@ const tI18nPhrase Phrases[] = {
"Transponder para reloj de sistema",
"Áíáìåôáäüôçò óõíôïíéóìïý þñáò",
"Använd klockan från transponder",
- "Preia ceasul din transponder",
+ "Preia ora din transponder",
"Idöhöz tartozó Transponder",
"Usar el temps del múltiplex",
"¸áßÞÛì×ÞÒÐâì ÒàÕÜï âàÐÝáßÞÝÔÕàÐ",
@@ -2862,7 +2862,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Limbi preferate",
"",// TODO
"",// TODO
"¿àÕÔßÞçØâÐÕÜëÕ ï×ëÚØ",
@@ -2882,7 +2882,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Limba preferatã",
"",// TODO
"",// TODO
"²ëÑàÐÝ",
@@ -2902,7 +2902,7 @@ const tI18nPhrase Phrases[] = {
"Primer interface DVB",
"Êýñéá DVB êÜñôá",
"Primär DVB enhet",
- "Placa DVB primara",
+ "Dispozitiv DVB primar",
"Elsö DVB interface",
"Tarja DVB primària",
"¾áÝÞÒÝÞÕ DVB-ãáâàÞÙáâÒÞ",
@@ -2922,7 +2922,7 @@ const tI18nPhrase Phrases[] = {
"Formato Vídeo",
"Ó÷Þìá ïèüíçò",
"Video format",
- "Format Video",
+ "Format video",
"Video formátum",
"Format del vídeo",
"ÄÞàÜÐâ ÒØÔÕÞ",
@@ -2942,7 +2942,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Actualizare canale",
"",// TODO
"",// TODO
"¾ÑÝÞÒÛïâì ÝÐáâàÞÙÚØ ÚÐÝÐÛÞÒ",
@@ -2962,7 +2962,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "doar numele",
"",// TODO
"",// TODO
"âÞÛìÚÞ ÝÐ×ÒÐÝØï",
@@ -2982,7 +2982,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "nume si PID-uri",
"",// TODO
"",// TODO
"ÝÐ×ÒÐÝØï Ø PIDë",
@@ -3002,7 +3002,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "adãugare canale noi",
"",// TODO
"",// TODO
"ÝÞÒëÕ ÚÐÝÐÛë",
@@ -3022,7 +3022,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "adãugare transpondere noi",
"",// TODO
"",// TODO
"ÝÞÒ. âàÐÝáßÞÝÔÕàë",
@@ -3042,7 +3042,7 @@ const tI18nPhrase Phrases[] = {
"SLOF (MHz)",
"SLOF (MHz)",
"SLOF (MHz)",
- "SLOF (MHz)",
+ "Frecvenþã comutare bandã, SLOF (MHz)",
"SLOF (MHz)",
"SLOF (MHz)",
"ÇÐáâÞâÐ ßÕàÕÚÛîçÕÝØï (SLOF) (¼³æ)",
@@ -3062,7 +3062,7 @@ const tI18nPhrase Phrases[] = {
"Frecuencia baja LNB (MHz)",
"ÊÜôù LNB-Óõ÷íüôçôá (MHz)",
"Undre LNB frekvens (MHz)",
- "Frecvnta LO LNB (Mhz)",
+ "Frecvnþã LNB inferioarã (Mhz)",
"Alsó LNB-frekvencia (MHZ)",
"Freqüència LNB baixa (MHz)",
"½ØÖÝïï çÐáâÞâÐ ÚÞÝÒÕàâÕàÐ (¼³æ)",
@@ -3082,7 +3082,7 @@ const tI18nPhrase Phrases[] = {
"Frecuencia alta LNB (MHz)",
"¢íù LNB-Óõ÷íüôçôá (MHz)",
"Övre LNB frekvens (MHz)",
- "Feecventa HI LNB (MHz)",
+ "Frecvnþã LNB superioarã (MHz)",
"Felsö LNB-frekvencia (MHZ)",
"Freqüència LNB alta (MHz)",
"²ÕàåÝïï çÐáâÞâÐ ÚÞÝÒÕàâÕàÐ (¼³æ)",
@@ -3102,7 +3102,7 @@ const tI18nPhrase Phrases[] = {
"Utilizar DiSEqC",
"Åíåñãïðïßçóç DiSEqC",
"Använd DiSEqC",
- "Utilizez DiSEqC",
+ "Utilizare DiSEqC",
"DiSEqC használata",
"Utilitzar DiSEqC",
"¸áßÞÛì×ÞÒÐâì DiSEqC",
@@ -3122,7 +3122,7 @@ const tI18nPhrase Phrases[] = {
"CICAM DVB",
"CICAM DVB",
"CICAM DVB",
- "Setare acces conditional",
+ "CICAM DVB",
"CICAM DVB",
"Accés condicional CICAM",
"CAM-ÜÞÔãÛì DVB",
@@ -3142,7 +3142,7 @@ const tI18nPhrase Phrases[] = {
"Comenzar grabación antes (min)",
"Ðñüóèåôïò ÷ñüíïò ðñßí áñ÷Þ (ëåðôÜ)",
"Marginal för start (min)",
- "Margine la pornire (min)",
+ "Marjã la pornire (min)",
"Idöeltolódás a kezdésnél (min)",
"Marge d'inici de gravació (min)",
"¾ßÕàÕÖÕÝØÕ ÝÐçÐÛÐ ×ÐßØáØ (ÜØÝ)",
@@ -3162,7 +3162,7 @@ const tI18nPhrase Phrases[] = {
"Cortar grabación después (min)",
"Ðñüóèåôïò ÷ñüíïò óôü ôÝëïò (ëåðôÜ)",
"Marginal för stopp (min)",
- "Margine la oprire (min)",
+ "Marjã la oprire (min)",
"Idöeltolódás a befejezésnél",
"Marge de fi de gravació (min)",
"·ÐßÐ×ÔëÒÐÝØÕ ÞáâÐÝÞÒÚØ ×ÐßØáØ (ÜØÝ)",
@@ -3182,7 +3182,7 @@ const tI18nPhrase Phrases[] = {
"Límite primario",
"Ðñïôåýïí üñéï",
"Primär gräns",
- "Limita Primara",
+ "Limitã primarã",
"Primér-határ",
"Límit primari",
"¼ØÝ. ßàØÞàØâÕâ ×ÐåÒÐâÐ ÞáÝ. ãáâàÞÙáâÒÐ",
@@ -3202,7 +3202,7 @@ const tI18nPhrase Phrases[] = {
"Prioridad predefinida",
"Ðñïôåñáéüôçôá",
"Normal prioritet",
- "Prioritate implicita",
+ "Prioritate implicitã",
"Default priority",
"Prioritat per defecte",
"¿àØÞàØâÕâ âÐÙÜÕàÐ ßÞ ãÜÞÛçÐÝØî",
@@ -3222,7 +3222,7 @@ const tI18nPhrase Phrases[] = {
"Duración predefinida",
"ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)",
"Normal livstid (dagar)",
- "Durata predefinita",
+ "Timp de pãstrare predefinit (zile)",
"Default élettartam",
"Durada predefinida",
"ÁàÞÚ åàÐÝÕÝØï ×ÐßØáØ ßÞ ãÜÞÛçÐÝØî (Ô)",
@@ -3242,7 +3242,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Ðñïôåñáéüôçôá äéáëåßììáôïò",
"Prioritet för direktinspelning",
- "",// TODO
+ "Prioritate pauzã",
"Szünet prioritás",
"Prioritat de la pausa",
"¿àØÞàØâÕâ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ",
@@ -3262,7 +3262,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"ÄéÜñêåéá äéáëåßìáôïò",
"Livstid för direktinspelning (dagar)",
- "",// TODO
+ "Pãstrarea emisiunilor 'pauzate' (zile)",
"Szünet élettartama",
"Durada de la pausa (d)",
"ÅàÐÝÕÝØÕ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ (Ô)",
@@ -3282,7 +3282,7 @@ const tI18nPhrase Phrases[] = {
"Utilizar nombre de episodo",
"×ñÞóç ïíüìáôïò åðåéóïäßïõ",
"Använd episodnamn",
- "Utilizeaza numele episodului",
+ "Utilizeazã numele episodului",
"Epizódnév felhasználása",
"Utilitzar el nom de l'episodi",
"³àãßßØàÞÒÐâì äÐÙÛë ßÞ íßØ×ÞÔÐÜ",
@@ -3302,7 +3302,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Utilizeazã VPS",
"",// TODO
"",// TODO
"¸áßÞÛì×ÞÒÐâì áØÓÝÐÛë VPS",
@@ -3322,7 +3322,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Marjã de timp la utilizare VPS (s)",
"",// TODO
"",// TODO
"±ãäÕàÝÞÕ ÒàÕÜï VPS (áÕÚ)",
@@ -3342,7 +3342,7 @@ const tI18nPhrase Phrases[] = {
"Marcar grabaciones instantáneas",
"ÅðéëïãÞ ôñÝ÷ïõóáò åããñáöÞò",
"Märk direktinspelning",
- "Inregistrare imediata",
+ "Marcheazã înregistrare imediatã",
"Direktfelvétel megjelölése",
"Marcar gravació instantània",
"¾âÜÕçÐâì áÔÕÛÐÝÝëÕ ÒàãçÝãî ×ÐßØáØ",
@@ -3362,7 +3362,7 @@ const tI18nPhrase Phrases[] = {
"Nombrar grabaciones instantáneas",
"Ïíïìáóßá ôñÝ÷ïõóáò åããñáöÞò",
"Namnge direktinspelning",
- "Nume inregistrare imediata",
+ "Nume înregistrare imediatã",
"Direktfelvétel megnevezése",
"Anomenar gravacions instantànies",
"ÁåÕÜÐ ØÜÕÝÞÒÐÝØï àãçÝëå ×ÐßØáÕÙ",
@@ -3382,7 +3382,7 @@ const tI18nPhrase Phrases[] = {
"Tiempo de grabación instantánea (min)",
"ÄéÜñêåéá óôãìéáßáò åããñáöÞò (ëåðôÜ)",
"Direktinspelning längd (min)",
- "Timpul de inregistarea imediata (min)",
+ "Timpul de înregistare imediatã (min)",
"Felvétel idötartama",
"Temps de gravació instantània (min)",
"´ÛØâÕÛìÝÞáâì àãçÝÞÙ ×ÐßØáØ (ÜØÝ)",
@@ -3402,7 +3402,7 @@ const tI18nPhrase Phrases[] = {
"Grabar sonido Dolby Digital",
"ÅããñáöÞ ôïõ Dolby Digital Þ÷ïõ",
"Spela in ljudet med Dolby Digital",
- "Inregistreaza Dolby Digital",
+ "Înregistreazã Dolby Digital",
"Dolby Digitál felvétel",
"Gravar el so en Dolby Digital",
"·ÐßØáëÒÐâì ×ÒãÚ Dolby Digital",
@@ -3422,7 +3422,7 @@ const tI18nPhrase Phrases[] = {
"Tamaño máx. de fichero (MB)",
"ÌÝãéóôï ìÝãåèïò áñ÷åßïõ (MB)",
"Maximal filstorlek för inspelning (MB)",
- "Dimensiune maxima a fisierului video (MB)",
+ "Dimensiune maximã a fiºierului video (MB)",
"Max. video File-terjedelem (MB)",
"Mida màxima de l'arxiu (MB)",
"¼ÐÚá. àÐ×ÜÕà ÒØÔÕÞäÐÙÛÐ (¼Ñ)",
@@ -3442,7 +3442,7 @@ const tI18nPhrase Phrases[] = {
"Quebrar ficheros",
"ÄéáìÝëéóìüò åðåîåñãáóìÝíùí áñ÷åßùí",
"Dela upp redigerade filer",
- "Separare fisiere editate",
+ "Separare fiºiere montate",
"Feldolgozott File-k felosztása",
"Separar arxius",
"´ÕÛØâì ÞâàÕÔÐÚâØàÞÒÐÝÝëÕ äÐÙÛë",
@@ -3462,7 +3462,7 @@ const tI18nPhrase Phrases[] = {
"Modo multi-velocidad",
"Ìåèïäïò ðïëëáðëÞò ôá÷ýôçôáò",
"Multispeed mode",
- "Mod multi-rata",
+ "Mod multi-vitezã",
"MultiSpeed funkció",
"Mode de multivelocitat",
"¼ÝÞÓÞáÚÞàÞáâÝÞÙ àÕÖØÜ",
@@ -3482,7 +3482,7 @@ const tI18nPhrase Phrases[] = {
"Mostrar modo de replay",
"¸íäåéîç êáôÜóôáóçò áíáìåôÜäïóçò",
"Visa uppspelnings läge",
- "Afiseaza modul de redare",
+ "Afiºeazã redarea",
"Lejátszás feltüntetése",
"Mostrar mode de reproducció",
"¾âÞÑàÐÖÐâì àÕÖØÜ ÒÞáßàÞØ×ÒÕÔÕÝØï", // ???
@@ -3502,7 +3502,7 @@ const tI18nPhrase Phrases[] = {
"Continuar ID",
"ID áíáìåôÜäïóçò",
"Återuppta ID",
- "Resume ID",// TODO
+ "Identificator continuare",
"Lejátszás ID",
"ID de Continuar",
"ID ÒÞáßàÞØ×ÒÕÔÕÝØï", // ???
@@ -3522,7 +3522,7 @@ const tI18nPhrase Phrases[] = {
"Tiempo mínimo pausa (min)",
"ÅëÜ÷éóôïò ÷ñÜíïò ðáñåìâïëÞò (ëåðôÜ)",
"Minsta händelse-pause (min)",
- "MinEventTimeout (min)",
+ "Duratã minimã emisiuni (min)",
"Min. esemény szünet (min)",
"Temps mínim en pausa (min)",
"¼ØÝ. ÒàÕÜï ÞÖØÔÐÝØï áÞÑëâØï (ÜØÝ)",
@@ -3542,7 +3542,7 @@ const tI18nPhrase Phrases[] = {
"Tiempo mínimo inactividad (min)",
"ÅëÜ÷éóôïò ÷ñüíïò áíáìïíÞò (ëåðôÜ)",
"Minsta anändar-inaktivitet (min)",
- "Durata minima de inactivitate (min)",
+ "Durata minimã de inactivitate (min)",
"Min. kezelési aktivitás (min)",
"Temps mínim d'inactivitat (min)",
"¼ØÝ. ÒàÕÜï ÞÖØÔÐÝØï ÒÒÞÔÐ (ÜØÝ)",
@@ -3582,7 +3582,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"ÆÜðéíãê äéáêïðÞ (ä)",
"",// TODO
- "",// TODO
+ "Interval zapping (s)",
"",// TODO
"",// TODO
"·ÐÔÕàÖÚÐ ßÕàÕÚÛîçÕÝØï ÚÐÝÐÛÐ (áÕÚ)",
@@ -3623,7 +3623,7 @@ const tI18nPhrase Phrases[] = {
"LunMarMieJueVieSabDom",
"ÄåõÔñßÔåôÐÝìÐáñÓÜâKõñ",
"MånTisOnsTorFreLörSön",
- "LunMarMieJoiVinSimDum",
+ "LunMarMieJoiVinSâmDum",
"HétKedSzeCsüPénSzoVas",
"Dl Dm Dc Dj Dv Ds Dg ",
"¿ÞݲâàÁàÔÇâÒ¿âÝÁãѲáÚ",
@@ -3644,7 +3644,7 @@ const tI18nPhrase Phrases[] = {
" aábcdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~",
" áÜâãäåÝæçÞèéßêëìíîïüðñóòôõýö÷øùþ0123456789-.#~abcdefghijklmnopqrstuvwxyz",
" abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~",
- " abcdefghijklmnopqrstuvwxyz0123456789-.#~",
+ " aãâbcdefghiîjklmnopqrsºtþuvwxyz0123456789-.#~",
" aábcdeéfghiíjklmnoóöpqrstuúüvwxyz0123456789-.,#~",
" aàbcçdeéèfghiíjklmnoòpqrstuúvwxyz0123456789-.,#~_·",
" abcdefghijklmnopqrstuvwxyzÐÑÒÓÔÕñÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìîï0123456789-.#~",
@@ -3665,7 +3665,7 @@ const tI18nPhrase Phrases[] = {
"Aprendiendo teclas del telemando (%s)",
"ÅêìÜèçóç ðëÞêôñùí ôçëå÷åéñéóìïý (%s)",
"Inlärning av fjärrkontrollsknappar (%s)",
- "Invatare taste telecomanda (%s)",
+ "Învãþare taste telecomandã (%s)",
"Távirányító betanítása (%s)",
"Aprenent les tecles del comandament a distància (%s)",
"²ÒÞÔ ÚÞÔÞÒ ÚÝÞßÞÚ ßãÛìâÐ (%s)",
@@ -3685,7 +3685,7 @@ const tI18nPhrase Phrases[] = {
"Fase 1: Detectando tipo de receptor",
"ÖÜóç 1: Áíß÷íåõóç êþäéêá RC",
"Steg1: identifiering av RC kod",
- "Faza 1: Detectie tip telecomanda",
+ "Faza 1: Detecþia tipului telecomenzii",
"Elsö lépés: távirányító kódjának meghatározása",
"Fase 1: Detectant el tipus de receptor",
"ÈÐÓ 1: ¾ßàÕÔÕÛÕÝØÕ âØßÐ ÚÞÔÐ ßãÛìâÐ",
@@ -3705,7 +3705,7 @@ const tI18nPhrase Phrases[] = {
"Pulse una tecla en el telemando",
"Ðßåóå Ýíá ðëÞêôñï óôï ôçëå÷åéñéóôÞñéï",
"Tryck valfri tangent på fjärrkontrollen",
- "Apasati o tasta pe telecomanda",
+ "Apãsaþi o tastã pe telecomandã",
"Nyomjon meg egy gombot a távirányítón",
"Premeu qualsevol tecla del comandament",
"½ÐÖÜØâÕ ÛîÑãî ÚÝÞßÚã ÝÐ ßãÛìâÕ",
@@ -3745,7 +3745,7 @@ const tI18nPhrase Phrases[] = {
"No pulse ninguna tecla...",
"ÌÞí ðéÝæåéò ðëÞêôñá...",
"Tryck inte på någon knapp...",
- "Nu apasati nicio tasta...",
+ "Nu apãsaþi nici o tastã...",
"Ne nyomjon meg gombot...",
"No premeu cap tecla...",
"½Õ ÝÐÖØÜÐÙâÕ ÚÝÞßÚØ...",
@@ -3765,7 +3765,7 @@ const tI18nPhrase Phrases[] = {
"Fase 2: Aprendiendo códigos específicos",
"Öáóç 2: ÅêìÜèçóç ìåìïíïìÝíùí ðëÞêôñùí",
"Fas 2: Inlärning av specifika knapp koder",
- "Faza 2: Invatarea codurilor specifice tastelor",
+ "Faza 2: Învãþarea codurilor anumitor taste",
"Második lépés: az egyes gombok betanítása",
"Fase 2: Aprenentantge de les funcions",
"ÈÐÓ 2: ·ÐÔÐÝØÕ ÚÞÔÞÒ ÞâÔÕÛìÝëå ÚÝÞßÞÚ",
@@ -3785,7 +3785,7 @@ const tI18nPhrase Phrases[] = {
"Pulsar tecla para '%s'",
"Ðßåóå ôï ðëÞêôñï ãéÜ '%s'",
"Tryck på knappen för '%s'",
- "Apasati tasta pentru '%s'",
+ "Apãsaþi tasta pentru '%s'",
"'%s' gomb megnyomása",
"Premeu una tecla per '%s'",
"½ÐÖÜØâÕ ÚÝÞßÚã '%s'",
@@ -3805,7 +3805,7 @@ const tI18nPhrase Phrases[] = {
"Pulse 'Arriba' para confirmar",
"Ðßåóå 'ðÜíù' ãéÜ áðïäï÷Þ",
"Tryck 'Upp' för att bekräfta",
- "Apsati 'Sus' pentru confirmare",
+ "Apãsaþi 'Sus' pentru confirmare",
"'Fel' megnyomása az elfogadáshoz",
"Premeu 'Amunt' per confirmar",
"½ÐÖÜØâÕ '²ÒÕàå' çâÞÑë ßÞÔâÒÕàÔØâì",
@@ -3825,7 +3825,7 @@ const tI18nPhrase Phrases[] = {
"Pulse 'Abajo' para confirmar",
"Ðßåóå 'êÜôù' ãéÜ óõíÝ÷åéá",
"Tryck 'Ner' för att bekräfta",
- "Apasati jos pentru continuare",
+ "Apãsaþi 'Jos' pentru continuare",
"'Le' megnyomása a folytatáshoz",
"Premeu 'Avall' per continuar",
"½ÐÖÜØâÕ '²ÝØ×' çâÞÑë ßàÞÔÞÛÖØâì",
@@ -3845,7 +3845,7 @@ const tI18nPhrase Phrases[] = {
"(Pulse 'Arriba' para retornar)",
"(Ðßåóå 'ðÜíù' ãéÜ åðéóôñïöÞ",
"(Tryck 'Upp' för att backa)",
- "(Apsati 'Sus' pentru revenire)",
+ "(Apãsaþi 'Sus' pentru revenire)",
"(´Fel' megnyomása a visszatéréshez)",
"(Premeu 'Amunt' per retornar)",
"(½ÐÖÜØâÕ '²ÒÕàå' çâÞÑë ÒÕàÝãâìáï)",
@@ -3865,7 +3865,7 @@ const tI18nPhrase Phrases[] = {
"(Pulse 'Abajo' para terminar programación teclas)",
"(Ðßåóå 'êÜôù' ãéÜ ôåñìáôéóìü äçëþóåùí ðëÞêôñùí)",
"(Tryck 'Ner' för att avsluta knapp definition)",
- "(Apasati 'Jos' pentru terminare)",
+ "(Apãsaþi 'Jos' pentru terminare)",
"('Le' megnyomása a befejezéshez)",
"(Premeu 'Avall' per finalitzar l'aprenentatge)",
"(½ÐÖÜØâÕ '²ÝØ×' çâÞÑë ×ÐÚÞÝçØâì ÝÐáâàÞÙÚã ßãÛìâÐ)",
@@ -3885,7 +3885,7 @@ const tI18nPhrase Phrases[] = {
"Pulse 'Menu' para saltarse esta tecla",
"ÐÜôá 'ìåíïý' ãéá ðñïóðÝñáóç áõôïý ôïý ðëÞêôñïõ",
"Tryck 'Meny' för att hoppa över denna knapp.",
- "",// TODO
+ "Apãsaþi 'Meniu' pentru a sãri peste aceastã tastã",
"A Menü gombot nyomni ennek a gombnak a kihagyásához",
"Premeu 'Menú' per obviar aquesta tecla",
"(½ÐÖÜØâÕ '¼ÕÝî' çâÞÑë ßàÞßãáâØâì ÚÝÞßÚã)",
@@ -3925,7 +3925,7 @@ const tI18nPhrase Phrases[] = {
"Pulse 'Arriba' para guardar, 'Abajo' para anular",
"'ÐÜíù' áðïèßêåõóç, 'ÊÜôù' áêýñùóç",
"Tryck 'Upp' för att spara, 'Ner' för att avsluta",
- "Apsati 'Sus' pentru salvare, 'Jos' pentru anulare",
+ "Apãsaþi 'Sus' pentru salvare, 'Jos' pentru anulare",
"'Fel' mentés, 'Le´ mégse",
"Premeu 'Amunt' per guardar, 'Avall' per anul·lar",
"½ÐÖÜØâÕ '²ÒÕàå' çâÞÑë ×ÐßÞÜÝØâì, '²ÝØ×' çâÞÑë ÞâÚÐ×Ðâìáï",
@@ -4006,7 +4006,7 @@ const tI18nPhrase Phrases[] = {
"Ok",
"Ïê",
"Ok",
- "Ok",
+ "OK",
"Ok",
"D'acord",
"Ok",
@@ -4026,7 +4026,7 @@ const tI18nPhrase Phrases[] = {
"Retornar",
"Ðßóù",
"Tillbaka",
- "Inapoi",
+ "Înapoi",
"Vissza",
"Retornar",
"½Ð×ÐÔ",
@@ -4046,7 +4046,7 @@ const tI18nPhrase Phrases[] = {
"Izquierda",
"ÁñéóôåñÜ",
"Vänster",
- "Stinga",
+ "Stânga",
"Balra",
"Esquerra",
"½ÐÛÕÒÞ",
@@ -4086,7 +4086,7 @@ const tI18nPhrase Phrases[] = {
"Rojo",
"Êüêêéíï",
"Röd",
- "Rosu",
+ "Roºu",
"Piros",
"Vermell",
"ºàÐáÝëÙ",
@@ -4166,7 +4166,7 @@ const tI18nPhrase Phrases[] = {
"Reproducir",
"AíáìåôÜäïóç",
"Spela upp",
- "",// TODO
+ "Redare",
"Lejátszás",
"Reproduir",
"²ÞáßàÞØ×ÒÕÔÕÝØÕ",
@@ -4186,7 +4186,7 @@ const tI18nPhrase Phrases[] = {
"Pausa",
"ÄéÜëåéììá",
"Pausa",
- "",// TODO
+ "Pauzã",
"Szünet",
"Pausa",
"¿Ðã×Ð",
@@ -4206,7 +4206,7 @@ const tI18nPhrase Phrases[] = {
"Parar",
"TÝñìá",
"Stoppa",
- "",// TODO
+ "Stop",
"Stop",
"Aturar",
"ÁâÞß",
@@ -4226,7 +4226,7 @@ const tI18nPhrase Phrases[] = {
"Grabar",
"EããñáöÞ",
"Spela in",
- "",// TODO
+ "Înregistrare",
"Felvenni",
"Gravar",
"·ÐßØáì",
@@ -4246,7 +4246,7 @@ const tI18nPhrase Phrases[] = {
"Adelante rápido",
"Ðñïüèéóç åìðñüò",
"Snabbspolning framåt",
- "",// TODO
+ "Derulare înainte",
"Elöre pörgetni",
"Endavant ràpidament",
"²ßÕàñÔ",
@@ -4266,7 +4266,7 @@ const tI18nPhrase Phrases[] = {
"Atrás rápido",
"Ðñïüèéóç ðßóù",
"Snabbspolning bakåt",
- "",// TODO
+ "Derulare înapoi",
"Vissza pörgetni",
"Enrera ràpidament",
"½Ð×ÐÔ",
@@ -4286,7 +4286,7 @@ const tI18nPhrase Phrases[] = {
"Corriente",
"Këåßóéìï",
"På/Av",
- "Pornit",
+ "Închidere",
"Kikapcsolni",
"Aturar",
"²ëÚÛîçØâì",
@@ -4306,7 +4306,7 @@ const tI18nPhrase Phrases[] = {
"Canal +",
"ÊáíÜëé+",
"Kanal+",
- "",// TODO
+ "Canal+",
"Csatorna+",
"Canal +",
"ºÐÝÐÛ +",
@@ -4326,7 +4326,7 @@ const tI18nPhrase Phrases[] = {
"Canal -",
"ÊáíÜëç-",
"Kanal-",
- "",// TODO
+ "Canal-",
"Csatorna-",
"Canal -",
"ºÐÝÐÛ -",
@@ -4386,7 +4386,7 @@ const tI18nPhrase Phrases[] = {
"Mudo",
"Óéùðçëü",
"Ljud Av",
- "Mut(e)",
+ "Fãrã sunet",
"Csend",
"En silenci",
"²ëÚÛîçØâì ×ÒãÚ",
@@ -4447,7 +4447,7 @@ const tI18nPhrase Phrases[] = {
"off",
"êëåéóôü",
"av",
- "",// TODO
+ "inactiv",
"ki",
"off",
"ÒëÚÛ",
@@ -4467,7 +4467,7 @@ const tI18nPhrase Phrases[] = {
"ninguno",
"êáíÝíá",
"ingen",
- "",// TODO
+ "niciuna(ul)",
"semmi",
"cap",
"ÝØçÕÓÞ",
@@ -4487,7 +4487,7 @@ const tI18nPhrase Phrases[] = {
"auto",
"áõôüìáôï",
"automatisk",
- "",// TODO
+ "automat",
"auto",
"auto",
"ÐÒâÞ",
@@ -4587,7 +4587,7 @@ const tI18nPhrase Phrases[] = {
"Salta a: ",
"ÔïðïèÝôçóç: ",
"Hopp: ",
- "Salt: ",
+ "Salt la: ",
"Ugrás: ",
"Salta a:",
"¿ÕàÕÙâØ: ",
@@ -4627,7 +4627,7 @@ const tI18nPhrase Phrases[] = {
" Parar reprodución",
" ÔÝëïò áíáìåôÜäïóçò",
" Avsluta uppspelning",
- " Opreste redare",
+ " Opreºte redarea",
" Lejátszást befejzni",
" Aturar la reproducció",
" ¿àÕÚàÐâØâì ÒÞáßàÞØ×ÒÕÔÕÝØÕ",
@@ -4647,7 +4647,7 @@ const tI18nPhrase Phrases[] = {
" Parar grabación ",
" ÔÝëïò åããáöÞò ",
" Avsluta inspelning ",
- " Opreste inregistrarea ",
+ " Opreºte înregistrarea ",
" Felvételt befejezni ",
" Aturar la gravació ",
" ¿àÕÚàÐâØâì ×ÐßØáì ",
@@ -4667,7 +4667,7 @@ const tI18nPhrase Phrases[] = {
" Anular modificación ",
" Áêýñùóç åðåîåñãáóßáò",
" Avbryt redigering",
- " Opreste editare",
+ " Opreºte montajul înregistrãrii",
" Vágást megszakítani",
" Cancel·lar l'edició ",
" ¿àÕàÒÐâì ÜÞÝâÐÖ ×ÐßØáØ",
@@ -4687,7 +4687,7 @@ const tI18nPhrase Phrases[] = {
"Cambio al interface DVB primario...",
"Ç êýñéá DVB êÜñôá áëëÜæåé...",
"Byter primär DVB enhet...",
- "Comuta interfata primara DVB...",
+ "Comut dispozitiv DVB primar...",
"Primér Interface átkapcsolva...",
"Canviant a la interfície DVB primària...",
"ÁÜÕÝÐ ÞáÝÞÒÝÞÓÞ DVB-ãáâàÞÙáâÒÐ...",
@@ -4707,7 +4707,7 @@ const tI18nPhrase Phrases[] = {
"Arriba/Abajo para el nuevo lugar - OK para mover",
"ÐÜíù/ÊÜôù ãéÜ íÝá èÝóç. ÌåôÜ ÏÊ",
"Upp/Ner för ny plats - OK för att flytta",
- "Sus/Jos pentru noua locatie - OK pentru a muta",
+ "Sus/Jos pentru noua locaþie - OK pentru a muta",
"Fel/Le egy uj opcióért - aztán OK",
"Amunt/Avall per una nova localització - OK per moure",
"½ÐÖØÜÐÙâÕ \"²ÒÕàå\"/\"²ÝØ×\" ÔÛï ÒëÑÞàÐ ßÞ×ØæØØ, Ð ×ÐâÕÜ \"OK\"",
@@ -4727,7 +4727,7 @@ const tI18nPhrase Phrases[] = {
"Proceso modificación iniciado",
"Áñ÷Þ åðåîåñãáóßáò",
"Redigering startad",
- "Procesul de editare a inceput",
+ "Montajul înregistrãrii a început",
"Vágás elindítva",
"Procés d'edició iniciat",
"½ÐçÐâ ÜÞÝâÐÖ ×ÐßØáØ",
@@ -4747,7 +4747,7 @@ const tI18nPhrase Phrases[] = {
"Proceso de modificación terminado",
"Ç åðåîåñãáóßá ôåëåßùóå",
"Redigering avslutad",
- "Procesul de editare s-a terminat",
+ "Montajul înregistrãrii s-a terminat",
"Vágás befejezve",
"Procés d'edició finalitzat",
"¼ÞÝâÐÖ ÞÚÞÝçÕÝ",
@@ -4767,7 +4767,7 @@ const tI18nPhrase Phrases[] = {
"Modificación ha fallado!",
"Ç åðåîåñãáóßá áðÝôõ÷å!",
"Redigeringsprocessen misslyckades",
- "Proces de editare nereusit",
+ "Montajul înregistrãrii a eºuat",
"Vágás sikertelen!",
"Procés d'edició fallit!",
"¾èØÑÚÐ ÒÞ ÒàÕÜï ÜÞÝâÐÖÐ ×ÐßØáØ!",
@@ -4787,7 +4787,7 @@ const tI18nPhrase Phrases[] = {
"buscando grabaciones...",
"ÅîÝôáóç åããñáöþí...",
"Söker igenom inspelningarna...",
- "Caut inregistrari...",
+ "Caut înregistrãri...",
"Felvett adások böngészése...",
"cercant gravacions...",
"ÁÚÐÝØàÞÒÐÝØÕ ×ÐßØáÕÙ...",
@@ -4807,7 +4807,7 @@ const tI18nPhrase Phrases[] = {
"Emisión en directo parada...",
"ÄéÜëåéììá æùíôáíïý óÞìáôïò",
"Pausar direktinspelningen",
- "",// TODO
+ "Trec în pauzã emisiunea transmisã...",
"Az élö adás megállítva...",
"Pausa d'emissió en directe...",
"ÀÕÖØÜ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ...",
@@ -4827,7 +4827,7 @@ const tI18nPhrase Phrases[] = {
"Este plugin no admite configuración",
"Áõôü ôï âßóìá äåí Ý÷åé ðáñÜìåôñïõò",
"Den här modulen har inga parametrar",
- "",// TODO
+ "Acest plugin nu se configureazã!",
"Ennek a plugin-nak nincs setup-parametere!",
"Aquest plugin no admet configuració!",
"¼ÞÔãÛì ÝÕ ØÜÕÕâ ßÐàÐÜÕâàÞÒ ÝÐáâàÞÙÚØ!",
@@ -4847,7 +4847,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "VDR clasic",
"",// TODO
"",// TODO
"ºÛÐááØçÕáÚØÙ",
@@ -4867,7 +4867,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Cons. ST:TNG",
"",// TODO
"",// TODO
"ST:TNG ßÐÝÕÛØ",
diff --git a/libsi/util.h b/libsi/util.h
index db2a0a1..da188ad 100644
--- a/libsi/util.h
+++ b/libsi/util.h
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: util.h 1.4 2004/10/16 09:59:48 kls Exp $
+ * $Id: util.h 1.5 2004/10/23 14:22:40 kls Exp $
* *
***************************************************************************/
@@ -140,7 +140,7 @@ namespace DVBTime {
time_t getTime(unsigned char date_hi, unsigned char date_lo, unsigned char timehr, unsigned char timemi, unsigned char timese);
time_t getDuration(unsigned char timehr, unsigned char timemi, unsigned char timese);
inline unsigned char bcdToDec(unsigned char b) { return ((b >> 4) & 0x0F) * 10 + (b & 0x0F); }
-};
+}
//taken and adapted from libdtv, (c) Rolf Hakenes
class CRC32 {
diff --git a/remux.c b/remux.c
index 9b3b286..e096f9c 100644
--- a/remux.c
+++ b/remux.c
@@ -8,7 +8,7 @@
* the Linux DVB driver's 'tuxplayer' example and were rewritten to suit
* VDR's needs.
*
- * $Id: remux.c 1.19 2004/10/16 09:11:52 kls Exp $
+ * $Id: remux.c 1.21 2004/10/24 09:25:33 kls Exp $
*/
#include "remux.h"
@@ -491,8 +491,8 @@ int cRemux::Put(const uchar *Data, int Count)
break;
if (Data[i] != TS_SYNC_BYTE)
break;
- if (resultBuffer->Free() < IPACKS)
- break;
+ if (resultBuffer->Free() < 2 * IPACKS)
+ break; // A cTS2PES might write one full packet and also a small rest
int pid = GetPid(Data + i + 1);
if (Data[i + 3] & 0x10) { // got payload
if (pid == vPid) vTS2PES->ts_to_pes(Data + i);
@@ -597,7 +597,7 @@ uchar *cRemux::Get(int &Count, uchar *PictureType)
Count += l;
}
else
- resultSkipped = i;
+ resultSkipped = i + l;
if (l > 0)
i += l - 1; // the loop increments, too
}
diff --git a/sections.c b/sections.c
index 6492336..7c42a6e 100644
--- a/sections.c
+++ b/sections.c
@@ -4,13 +4,14 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: sections.c 1.9 2004/10/16 13:45:02 kls Exp $
+ * $Id: sections.c 1.10 2004/10/24 11:05:12 kls Exp $
*/
#include "sections.h"
#include <unistd.h>
#include "channels.h"
#include "device.h"
+#include "thread.h"
// --- cFilterHandle----------------------------------------------------------
@@ -185,7 +186,7 @@ void cSectionHandler::Action(void)
if (poll(pfd, NumFilters, 1000) > 0) {
bool DeviceHasLock = device->HasLock();
if (!DeviceHasLock)
- usleep(100000);
+ cCondWait::SleepMs(100);
for (int i = 0; i < NumFilters; i++) {
if (pfd[i].revents & POLLIN) {
cFilterHandle *fh = NULL;
diff --git a/thread.c b/thread.c
index 64b944b..144563d 100644
--- a/thread.c
+++ b/thread.c
@@ -4,13 +4,12 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.c 1.32 2004/10/15 13:15:02 kls Exp $
+ * $Id: thread.c 1.35 2004/10/24 11:05:56 kls Exp $
*/
#include "thread.h"
#include <errno.h>
#include <malloc.h>
-#include <signal.h>
#include <stdarg.h>
#include <sys/resource.h>
#include <sys/time.h>
@@ -33,6 +32,12 @@ cCondWait::~cCondWait()
pthread_mutex_destroy(&mutex);
}
+void cCondWait::SleepMs(int TimeoutMs)
+{
+ cCondWait w;
+ w.Wait(TimeoutMs);
+}
+
bool cCondWait::Wait(int TimeoutMs)
{
pthread_mutex_lock(&mutex);
@@ -186,19 +191,10 @@ void cMutex::Unlock(void)
// --- cThread ---------------------------------------------------------------
-// The signal handler is necessary to be able to use SIGIO to wake up any
-// pending 'select()' call.
-
-bool cThread::signalHandlerInstalled = false;
bool cThread::emergencyExitRequested = false;
cThread::cThread(const char *Description)
{
- if (!signalHandlerInstalled) {
- signal(SIGIO, SignalHandler);
- signalHandlerInstalled = true;
- }
- running = false;
parentTid = childTid = 0;
description = NULL;
SetDescription(Description);
@@ -221,11 +217,6 @@ void cThread::SetDescription(const char *Description, ...)
}
}
-void cThread::SignalHandler(int signum)
-{
- signal(signum, SignalHandler);
-}
-
void *cThread::StartThread(cThread *Thread)
{
Thread->childTid = pthread_self();
@@ -240,13 +231,11 @@ void *cThread::StartThread(cThread *Thread)
bool cThread::Start(void)
{
- if (!running) {
- running = true;
+ if (!childTid) {
parentTid = pthread_self();
pthread_create(&childTid, NULL, (void *(*) (void *))&StartThread, (void *)this);
pthread_detach(childTid); // auto-reap
pthread_setschedparam(childTid, SCHED_RR, 0);
- usleep(10000); // otherwise calling Active() immediately after Start() causes a "pure virtual method called" error
}
return true; //XXX return value of pthread_create()???
}
@@ -277,21 +266,20 @@ bool cThread::Active(void)
void cThread::Cancel(int WaitSeconds)
{
- running = false;
- if (WaitSeconds > 0) {
- for (time_t t0 = time(NULL) + WaitSeconds; time(NULL) < t0; ) {
- if (!Active())
- return;
- usleep(10000);
- }
- esyslog("ERROR: thread %ld won't end (waited %d seconds) - cancelling it...", childTid, WaitSeconds);
+ if (childTid) {
+ if (WaitSeconds > 0) {
+ for (time_t t0 = time(NULL) + WaitSeconds; time(NULL) < t0; ) {
+ if (!Active())
+ return;
+ cCondWait::SleepMs(10);
+ }
+ esyslog("ERROR: thread %ld won't end (waited %d seconds) - cancelling it...", childTid, WaitSeconds);
+ }
+ if (childTid) {
+ pthread_cancel(childTid);
+ childTid = 0;
+ }
}
- pthread_cancel(childTid);
-}
-
-void cThread::WakeUp(void)
-{
- pthread_kill(parentTid, SIGIO); // makes any waiting 'select()' call return immediately
}
bool cThread::EmergencyExit(bool Request)
@@ -451,7 +439,7 @@ int cPipe::Close(void)
else if (ret == pid)
break;
i--;
- usleep(100000);
+ cCondWait::SleepMs(100);
}
if (!i) {
kill(pid, SIGKILL);
diff --git a/thread.h b/thread.h
index 7d9254c..2cc623b 100644
--- a/thread.h
+++ b/thread.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.h 1.21 2004/10/15 13:16:39 kls Exp $
+ * $Id: thread.h 1.24 2004/10/24 11:00:32 kls Exp $
*/
#ifndef __THREAD_H
@@ -22,6 +22,10 @@ private:
public:
cCondWait(void);
~cCondWait();
+ static void SleepMs(int TimeoutMs);
+ ///< Creates a cCondWait object and uses it to sleep for TimeoutMs
+ ///< milliseconds, immediately giving up the calling thread's time
+ ///< slice and thus avoiding a "busy wait".
bool Wait(int TimeoutMs = 0);
///< Waits at most TimeoutMs milliseconds for a call to Signal(), or
///< forever if TimeoutMs is 0.
@@ -71,16 +75,12 @@ class cThread {
private:
pthread_t parentTid, childTid;
cMutex mutex;
- bool running;
char *description;
static bool emergencyExitRequested;
- static bool signalHandlerInstalled;
- static void SignalHandler(int signum);
static void *StartThread(cThread *Thread);
protected:
void Lock(void) { mutex.Lock(); }
void Unlock(void) { mutex.Unlock(); }
- void WakeUp(void);
virtual void Action(void) = 0;
void Cancel(int WaitSeconds = 0);
public:
diff --git a/timers.c b/timers.c
index ab1690a..4c4ba21 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.13 2004/07/17 12:46:27 kls Exp $
+ * $Id: timers.c 1.14 2004/10/24 14:56:55 kls Exp $
*/
#include "timers.h"
@@ -456,6 +456,12 @@ void cTimer::OnOff(void)
cTimers Timers;
+cTimers::cTimers(void)
+{
+ beingEdited = 0;;
+ lastSetEvents = 0;
+}
+
cTimer *cTimers::GetTimer(cTimer *Timer)
{
for (cTimer *ti = First(); ti; ti = Next(ti)) {
@@ -507,29 +513,35 @@ cTimer *cTimers::GetNextActiveTimer(void)
void cTimers::SetEvents(void)
{
+ if (time(NULL) - lastSetEvents < 5)
+ return;
cSchedulesLock SchedulesLock(false, 100);
const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock);
if (Schedules) {
- for (cTimer *ti = First(); ti; ti = Next(ti)) {
- const cSchedule *Schedule = Schedules->GetSchedule(ti->Channel()->GetChannelID());
- const cEvent *Event = NULL;
- if (Schedule) {
- //XXX what if the Schedule doesn't have any VPS???
- int Match = tmNone;
- for (const cEvent *e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e)) {
- if (cRemote::HasKeys())
- return; // react immediately on user input
- int m = ti->Matches(e);
- if (m > Match) {
- Match = m;
- Event = e;
- if (Match == tmFull)
- break;
- //XXX what if there's another event with the same VPS time???
- }
- }
+ if (!lastSetEvents || Schedules->Modified() >= lastSetEvents) {
+ for (cTimer *ti = First(); ti; ti = Next(ti)) {
+ const cSchedule *Schedule = Schedules->GetSchedule(ti->Channel()->GetChannelID());
+ if (Schedule) {
+ if (!lastSetEvents || Schedule->Modified() >= lastSetEvents) {
+ const cEvent *Event = NULL;
+ int Match = tmNone;
+ for (const cEvent *e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e)) {
+ if (cRemote::HasKeys())
+ return; // react immediately on user input
+ int m = ti->Matches(e);
+ if (m > Match) {
+ Match = m;
+ Event = e;
+ if (Match == tmFull)
+ break;
+ //XXX what if there's another event with the same VPS time???
+ }
+ }
+ ti->SetEvent(Event);
+ }
+ }
}
- ti->SetEvent(Event);
- }
+ }
}
+ lastSetEvents = time(NULL);
}
diff --git a/timers.h b/timers.h
index ce4bff6..cbc6a92 100644
--- a/timers.h
+++ b/timers.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.h 1.7 2004/02/29 14:18:17 kls Exp $
+ * $Id: timers.h 1.8 2004/10/24 14:40:37 kls Exp $
*/
#ifndef __TIMERS_H
@@ -93,14 +93,16 @@ public:
class cTimers : public cConfig<cTimer> {
private:
int beingEdited;
+ time_t lastSetEvents;
public:
+ cTimers(void);
cTimer *GetTimer(cTimer *Timer);
cTimer *GetMatch(time_t t);
cTimer *GetMatch(const cEvent *Event, int *Match = NULL);
cTimer *GetNextActiveTimer(void);
int BeingEdited(void) { return beingEdited; }
void IncBeingEdited(void) { beingEdited++; }
- void DecBeingEdited(void) { beingEdited--; }
+ void DecBeingEdited(void) { if (!--beingEdited) lastSetEvents = 0; }
void SetEvents(void);
};
diff --git a/transfer.c b/transfer.c
index a791439..d4ccee2 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.17 2004/10/16 09:22:58 kls Exp $
+ * $Id: transfer.c 1.18 2004/10/23 13:35:08 kls Exp $
*/
#include "transfer.h"
@@ -65,7 +65,7 @@ void cTransfer::Action(void)
int Count;
uchar *b = ringBuffer->Get(Count);
if (b) {
- if (Count > TRANSFERBUFSIZE * 2 / 3) {
+ if (ringBuffer->Available() > TRANSFERBUFSIZE * 9 / 10) {
// If the buffer runs full, we have no chance of ever catching up
// since the data comes in at the same rate as it goes out (it's "live").
// So let's clear the buffer instead of suffering from permanent
diff --git a/vdr.c b/vdr.c
index 6d76f17..033f186 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.187 2004/10/17 11:50:21 kls Exp $
+ * $Id: vdr.c 1.190 2004/10/24 14:01:11 kls Exp $
*/
#include <getopt.h>
@@ -64,6 +64,8 @@
#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 EXIT(v) { ExitCode = (v); goto Exit; }
+
static int Interrupted = 0;
static void SignalHandler(int signum)
@@ -85,17 +87,6 @@ static void Watchdog(int signum)
int main(int argc, char *argv[])
{
-#ifdef _CS_GNU_LIBPTHREAD_VERSION
- // Check for NPTL and exit if present - VDR apparently doesn't run well with NPTL:
- char LibPthreadVersion[128];
- if (confstr(_CS_GNU_LIBPTHREAD_VERSION, LibPthreadVersion, sizeof(LibPthreadVersion)) > 0) {
- if (strstr(LibPthreadVersion, "NPTL")) {
- fprintf(stderr, "vdr: please turn off NPTL by setting 'export LD_ASSUME_KERNEL=2.4.1' before starting VDR\n");
- return 2;
- }
- }
-#endif
-
// Check for UTF-8 and exit if present - asprintf() will fail if it encounters 8 bit ASCII codes
char *LangEnv;
if ((LangEnv = getenv("LANG")) != NULL && strcasestr(LangEnv, "utf") ||
@@ -133,6 +124,7 @@ int main(int argc, char *argv[])
const char *Terminal = NULL;
const char *Shutdown = NULL;
cPluginManager PluginManager(DEFAULTPLUGINDIR);
+ int ExitCode = 0;
static struct option long_options[] = {
{ "audio", required_argument, NULL, 'a' },
@@ -358,7 +350,7 @@ int main(int argc, char *argv[])
// Load plugins:
if (!PluginManager.LoadPlugins(true))
- return 2;
+ EXIT(2);
// Configuration data:
@@ -380,7 +372,7 @@ int main(int argc, char *argv[])
Keys.Load(AddDirectory(ConfigDirectory, "remote.conf")) &&
KeyMacros.Load(AddDirectory(ConfigDirectory, "keymacros.conf"), true)
))
- return 2;
+ EXIT(2);
cFont::SetCode(I18nCharSets()[Setup.OSDLanguage]);
@@ -402,7 +394,7 @@ int main(int argc, char *argv[])
// Initialize plugins:
if (!PluginManager.InitializePlugins())
- return 2;
+ EXIT(2);
// Primary device:
@@ -425,12 +417,12 @@ int main(int argc, char *argv[])
fprintf(stderr, "vdr: %s\n", msg);
esyslog("ERROR: %s", msg);
if (!cDevice::SetPrimaryDevice(1))
- return 2;
+ EXIT(2);
if (!cDevice::PrimaryDevice()) {
const char *msg = "no primary device found - giving up!";
fprintf(stderr, "vdr: %s\n", msg);
esyslog("ERROR: %s", msg);
- return 2;
+ EXIT(2);
}
}
}
@@ -442,7 +434,7 @@ int main(int argc, char *argv[])
// Start plugins:
if (!PluginManager.StartPlugins())
- return 2;
+ EXIT(2);
// Skins:
@@ -498,18 +490,18 @@ int main(int argc, char *argv[])
// Main program loop:
- cOsdObject *Menu = NULL;
- cOsdObject *Temp = NULL;
- int LastChannel = -1;
- int LastTimerChannel = -1;
- int PreviousChannel[2] = { 1, 1 };
- int PreviousChannelIndex = 0;
- time_t LastChannelChanged = time(NULL);
- time_t LastActivity = 0;
- int MaxLatencyTime = 0;
- bool ForceShutdown = false;
- bool UserShutdown = false;
- bool TimerInVpsMargin = false;
+ static cOsdObject *Menu = NULL;
+ static cOsdObject *Temp = NULL;
+ static int LastChannel = -1;
+ static int LastTimerChannel = -1;
+ static int PreviousChannel[2] = { 1, 1 };
+ static int PreviousChannelIndex = 0;
+ static time_t LastChannelChanged = time(NULL);
+ static time_t LastActivity = 0;
+ static int MaxLatencyTime = 0;
+ static bool ForceShutdown = false;
+ static bool UserShutdown = false;
+ static bool TimerInVpsMargin = false;
while (!Interrupted) {
// Handle emergency exits:
@@ -589,14 +581,9 @@ int main(int argc, char *argv[])
// Timers and Recordings:
if (!Timers.BeingEdited()) {
// Assign events to timers:
- if (time(NULL) - LastActivity > 10) {
- static time_t LastSetEvents = 0;//XXX trigger by actual EPG data modification???
- if (time(NULL) - LastSetEvents > 5) {
- Timers.SetEvents();
- LastSetEvents = time(NULL);
- }
- }
- time_t Now = time(NULL); // must do all following calls with the exact same time!
+ Timers.SetEvents();
+ // Must do all following calls with the exact same time!
+ time_t Now = time(NULL);
// Process ongoing recordings:
cRecordControls::Process(Now);
// Start new recordings:
@@ -898,6 +885,9 @@ int main(int argc, char *argv[])
}
if (Interrupted)
isyslog("caught signal %d", Interrupted);
+
+Exit:
+
cRecordControls::Shutdown();
cCutter::Stop();
delete Menu;
@@ -924,5 +914,5 @@ int main(int argc, char *argv[])
esyslog("emergency exit!");
return 1;
}
- return 0;
+ return ExitCode;
}