summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2004-10-24 18:00:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2004-10-24 18:00:00 +0200
commit6f93a5f7819b3c7030a5b199e502bedd4eb7844c (patch)
tree3be72385cb6433514bf6232f83a6aaacea8a3e76
parentaf483c11aebd8146a978dba3d604bda0951e24ac (diff)
downloadvdr-patch-lnbsharing-6f93a5f7819b3c7030a5b199e502bedd4eb7844c.tar.gz
vdr-patch-lnbsharing-6f93a5f7819b3c7030a5b199e502bedd4eb7844c.tar.bz2
Version 1.3.14vdr-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 permitted' 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 canceling 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.
-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;
}