summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2003-05-18 18:00:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2003-05-18 18:00:00 +0200
commit3bd9a7ccf355e445685ff115464a4e684a8c4211 (patch)
tree8b0a44d0c40e939967c73ec6ebe18776b51c9dcb
parentc84022554aaacc9b1c3d9627501cdbb8276871f6 (diff)
downloadvdr-patch-lnbsharing-3bd9a7ccf355e445685ff115464a4e684a8c4211.tar.gz
vdr-patch-lnbsharing-3bd9a7ccf355e445685ff115464a4e684a8c4211.tar.bz2
Version 1.1.32vdr-1.1.32
- Removed a faulty parameter initialization in menu.c (thanks to Lauri Tischler for reporting this one). - Re-implemented the WaitForPut/WaitForGet stuff in cRingBuffer, since some plugins actually need this. By default the buffer does not wait; if a plugin needs the waiting functionality it can call the new SetTimeouts() function. - Moved the call to cPlugin::Start() further up in vdr.c, to make sure it gets called before trying to learn the keys (problem reported by Oliver Endriss). - No longer starting the editing process if no marks have been set (thanks to Matthias Raus for reporting this one). - Added Catalanian language texts (thanks to Marc Rovira Vall and Ramon Roca). Plugin authors may want to add the new entries to their I18N texts and contact the translators to have their texts translated. Note that there are now 16 different OSD languages, so please make sure you have 16 versions for each of your texts. - Moved the detection of a broken video data stream from the cDevice into the cRecorder to avoid problems with cReceivers that want to receive from PIDs that are currently not transmitting (thanks to Marcel Wiesweg for reporting this one). - Fixed setting the locking pid after a timed wait (thanks to Andreas Schultz). - Avoiding spurious section filter settings after a channel switch. - Updated 'channels.conf.cable' (thanks to Stefan Hußfeldt). - Fixed reading 'epg.data' for channels with non-zero RID (thanks to Oliver Endriss for reporting this one). - Fixed EPG bugfix statistics to avoid log entires for undefined channels (thanks to Lars Bläser for reporting this one). - No longer waiting inside cIndexFile::CatchUp() to avoid shortly blocking replay at the end of a recording.
-rw-r--r--CONTRIBUTORS17
-rw-r--r--HISTORY32
-rw-r--r--PLUGINS.html38
-rw-r--r--channels.conf4
-rw-r--r--channels.conf.cable11
-rw-r--r--config.h6
-rw-r--r--device.c15
-rw-r--r--eit.c43
-rw-r--r--eit.h3
-rw-r--r--i18n.c340
-rw-r--r--i18n.h4
-rw-r--r--menu.c8
-rw-r--r--recorder.c13
-rw-r--r--recording.c90
-rw-r--r--ringbuffer.c51
-rw-r--r--ringbuffer.h11
-rw-r--r--thread.c3
-rw-r--r--transfer.c4
-rw-r--r--vdr.c12
19 files changed, 521 insertions, 184 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 42b074d..d31a118 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -204,6 +204,7 @@ Andreas Schultz <aschultz@warp10.net>
for suggesting to separate the startup of a plugin into an "early" and a "late" phase
for changing C++ style comments in libdtv into C style to avoid warnings in gcc 3.x
for implementing the TerrestrialDeliverySystemDescriptor in libdtv
+ for fixing setting the locking pid after a timed wait
Aaron Holtzman
for writing 'ac3dec'
@@ -467,6 +468,9 @@ Oliver Endriss <o.endriss@gmx.de>
the Main menu
for reporting a bug in setting the PCR-PID in case it is equal to one of the other
PIDs
+ for reporting a problem with cPlugin::Start() being called after trying to learn
+ the remote control keys
+ for reporting a bug in reading 'epg.data' for channels with non-zero RID
Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
@@ -475,6 +479,7 @@ Reinhard Walter Buchner <rw.buchner@freenet.de>
Lauri Tischler <lauri.tischler@efore.fi>
for helping to test and debug the new channel source and DiSEqC handling
+ for reporting a faulty parameter initialization in menu.c
Andy Carter <fruit@ukgateway.net>
for helping to test new DVB-T handling
@@ -572,6 +577,8 @@ Jan Ekholm <chakie@infa.abo.fi>
Marcel Wiesweg <marcel.wiesweg@gmx.de>
for pointing out a problem with high CPU load during replay
for reporting broken support for raw OSDs of plugins
+ for reporting a problem with cReceivers that want to receive from PIDs that are
+ currently not transmitting
Torsten Herz <torsten.herz@web.de>
for fixing a possible deadlock when using the "Blue" button in the "Schedules" menu
@@ -652,3 +659,13 @@ Juri Haberland <juri@koschikode.com>
Alfred Zastrow <vdr@zastrow4u.de>
for suggesting to implement separate PausePriority and PauseLifetime parameters for
the recordings created when pausing live video
+
+Matthias Raus <matthias-raus@web.de>
+ for reporting a problem with starting the editing process if no marks have been set
+
+Marc Rovira Vall <tm05462@salleURL.edu> and Ramon Roca <ramon.roca@xcombo.com>
+ for translating OSD texts to the Catalanian language
+
+Lars Bl�ser <LBlaeser@hofheim.de>
+ for reporting a bug in EPG bugfix statistics which made log entires for undefined
+ channels
diff --git a/HISTORY b/HISTORY
index 098c10d..0f46d7e 100644
--- a/HISTORY
+++ b/HISTORY
@@ -2116,7 +2116,7 @@ Video Disk Recorder Revision History
(suggested by Andreas Schultz). Plugin authors should please read the section
about "Getting started" in PLUGINS.html and adapt their code if applicable.
- Implemented the CableDeliverySystemDescriptor and TerrestrialDeliverySystemDescriptor
- in libdtv (thanks to Sven Grothklags and Andreas Schultz)
+ in libdtv (thanks to Sven Grothklags and Andreas Schultz).
- Fixed keeping live video active in case the primary device doesn't have an MPEG
decoder (thanks to Wolfgang Goeller for reporting this one).
- Implemented cDevice::ActualDevice(), which returns the actual receiving device in
@@ -2142,3 +2142,33 @@ Video Disk Recorder Revision History
created when pausing live video (suggested by Alfred Zastrow).
- Changed C++ style comments in libdtv into C style to avoid warnings in gcc 3.x
(thanks to Andreas Schultz).
+
+2003-05-18: Version 1.1.32
+
+- Removed a faulty parameter initialization in menu.c (thanks to Lauri Tischler for
+ reporting this one).
+- Re-implemented the WaitForPut/WaitForGet stuff in cRingBuffer, since some plugins
+ actually need this. By default the buffer does not wait; if a plugin needs the
+ waiting functionality it can call the new SetTimeouts() function.
+- Moved the call to cPlugin::Start() further up in vdr.c, to make sure it gets
+ called before trying to learn the keys (problem reported by Oliver Endriss).
+- No longer starting the editing process if no marks have been set (thanks to
+ Matthias Raus for reporting this one).
+- Added Catalanian language texts (thanks to Marc Rovira Vall and Ramon Roca).
+ Plugin authors may want to add the new entries to their I18N texts and contact
+ the translators to have their texts translated. Note that there are now 16
+ different OSD languages, so please make sure you have 16 versions for each of
+ your texts.
+- Moved the detection of a broken video data stream from the cDevice into the
+ cRecorder to avoid problems with cReceivers that want to receive from PIDs
+ that are currently not transmitting (thanks to Marcel Wiesweg for reporting
+ this one).
+- Fixed setting the locking pid after a timed wait (thanks to Andreas Schultz).
+- Avoiding spurious section filter settings after a channel switch.
+- Updated 'channels.conf.cable' (thanks to Stefan Hu�feldt).
+- Fixed reading 'epg.data' for channels with non-zero RID (thanks to Oliver
+ Endriss for reporting this one).
+- Fixed EPG bugfix statistics to avoid log entires for undefined channels (thanks
+ to Lars Bl�ser for reporting this one).
+- No longer waiting inside cIndexFile::CatchUp() to avoid shortly blocking replay
+ at the end of a recording.
diff --git a/PLUGINS.html b/PLUGINS.html
index bd1a0d0..b632b61 100644
--- a/PLUGINS.html
+++ b/PLUGINS.html
@@ -21,18 +21,18 @@ VDR program and present itself to the user.
The <i>internal</i> interface provides the plugin code access to VDR's internal data
structures and allows it to hook itself into specific areas to perform special actions.
<p>
-<!--X1.1.15--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
-Important modifications introduced in version 1.1.15 are marked like this.
-<!--X1.1.15--></td></tr></table>
-<!--X1.1.17--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
+<!--X1.1.17--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.17 are marked like this.
<!--X1.1.17--></td></tr></table>
-<!--X1.1.27--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
+<!--X1.1.27--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.27 are marked like this.
<!--X1.1.27--></td></tr></table>
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.31 are marked like this.
<!--X1.1.31--></td></tr></table>
+<!--X1.1.32--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+Important modifications introduced in version 1.1.32 are marked like this.
+<!--X1.1.32--></td></tr></table>
<hr>
<h1>Table Of Contents</h1>
@@ -284,7 +284,7 @@ The <b>constructor</b> shall initialize any member variables the plugin defines,
<b>must not access any global structures of VDR</b>.
It also must not create any threads or other large data structures. These things
are done in the
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<a href="#Getting started"><tt>Initialize()</tt></a> or
<a href="#Getting started"><tt>Start()</tt></a>
<!--X1.1.31--></td></tr></table>
@@ -460,18 +460,20 @@ thread of its own), or wants to make use of <a href="#Internationalization">inte
it needs to implement one of the functions
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%><pre>
+<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%><pre>
virtual bool Initialize(void);
<!--X1.1.31--></pre></td></tr></table>
virtual bool Start(void);
</pre></td></tr></table><p>
which are called once for each plugin at program startup.
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
+<!--X1.1.32--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
The difference between these two functions is that <tt>Initialize()</tt> is
-called early at program startup, while <tt>Start()</tt> is called after everything
-else has been set up, right before the main program loop is entered. Inside the
-<tt>Start()</tt> function of any plugin it is guaranteed that the <tt>Initialize()</tt>
+called early at program startup, while <tt>Start()</tt> is called after the primary
+device and user interface has been set up, but before the main program loop is entered.
+<!--X1.1.32--></td></tr></table>
+Inside the <tt>Start()</tt> function of any plugin it is guaranteed that the <tt>Initialize()</tt>
functions of all plugins have already been called. For many plugins it probably
doesn't matter which of these functions they implement, but it may be of importance
for, e.g., plugins that implement devices. Such plugins should create their cDevice
@@ -527,7 +529,7 @@ in the call to VDR.
If the user selects the main menu entry of a plugin, VDR calls the function
-<!--X1.1.17--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
+<!--X1.1.17--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
virtual cOsdObject *MainMenuAction(void);
</pre></td></tr></table><p>
@@ -1044,7 +1046,6 @@ virtual void SetAudioTrack(int Index);
</pre></td></tr></table><p>
<p>
-<!--X1.1.15--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
If there is an additional audio track that has to be replayed with external hardware,
the player shall call its member function
@@ -1053,7 +1054,6 @@ void PlayAudio(const uchar *Data, int Length);
</pre></td></tr></table><p>
where <tt>Data</tt> points to a complete audio PES packet of <tt>Length</tt> bytes.
-<!--X1.1.15--></td></tr></table>
<p>
The second part needed here is a control object that receives user input from the main
program loop and reacts on this by telling the player what to do:
@@ -1200,7 +1200,7 @@ a <tt>cDevice</tt>:
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
cMyReceiver *Receiver = new cMyReceiver(123);
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
cDevice::ActualDevice()-&gt;AttachReceiver(Receiver);
<!--X1.1.31--></td></tr></table>
</pre></td></tr></table><p>
@@ -1372,7 +1372,7 @@ needed.
<p>
<b>Initializing new devices</b>
<p>
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
A derived cDevice class shall implement a static function
in which it determines whether the necessary hardware to run this sort of
device is actually present in this machine (or whatever other prerequisites
@@ -1391,7 +1391,6 @@ shut down (delete) all devices when the program terminates. It is therefore
important that the devices are created on the heap, using the <tt>new</tt>
operator!
-<!--X1.1.15--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<a name="Dolby Digital"><hr><h2>Dolby Digital</h2>
<center><i><b>"The stereo effect may only be experienced if stereo equipment is used!"</b></i></center><p>
@@ -1434,7 +1433,6 @@ will need to copy it for later processing in your thread.
<p>
The <tt>Mute()</tt> and <tt>Clear()</tt> functions will be called whenever the audio shall
be muted, or any buffered data shall be cleared, respectively.
-<!--X1.1.15--></td></tr></table>
<a name="Remote Control"><hr><h2>Remote Control</h2>
@@ -1502,7 +1500,7 @@ the incoming data (by calling your <tt>Action()</tt> function).
In case you need to do any other setup steps, like opening a file or initializing
member variables, you should do so before calling <tt>Start()</tt>.
<p>
-<!--X1.1.27--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
+<!--X1.1.27--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
If your remote control for some reason can't work (maybe because it was unable to
open some file handle it requires) it can implement the virtual function
diff --git a/channels.conf b/channels.conf
index fb73f57..03b71aa 100644
--- a/channels.conf
+++ b/channels.conf
@@ -44,8 +44,8 @@ EinsMuXx:12110:h:S19.2E:27500:301:302:0:0:28203:0:0:0
ZDF Theaterkanal:11954:h:S19.2E:27500:1110:1120:0:0:28016:0:0:0
ZDF.doku:11954:h:S19.2E:27500:660:670:0:0:28014:0:0:0
MDR:12110:h:S19.2E:27500:401:402:404:0:28204:0:0:0
-ORB:12110:h:S19.2E:27500:501:502:504:0:28205:0:0:0
-B1:12110:h:S19.2E:27500:601:602:604:0:28206:0:0:0
+RBB Brandenburg:12110:h:S19.2E:27500:501:502:504:0:28205:0:0:0
+RBB Berlin:12110:h:S19.2E:27500:601:602:604:0:28206:0:0:0
:Premiere World
Premiere Start:11797:h:S19.2E:27500:255:256:0:101:8:0:0:0
Premiere 1:11797:h:S19.2E:27500:511:512,513;515:0:101:10:0:0:0
diff --git a/channels.conf.cable b/channels.conf.cable
index a5567d5..aed98d1 100644
--- a/channels.conf.cable
+++ b/channels.conf.cable
@@ -45,19 +45,12 @@ DISCOVERY CHANNEL:354:M64:C:6900:1023:1024:0:101:14:0:0:0
PLANET:354:M64:C:6900:1535:1536:0:101:13:0:0:0
Fox Kids:354:M64:C:6900:1279:1280:0:101:28:0:0:0
Junior:354:M64:C:6900:255:256:0:101:19:0:0:0
-K-TOON:354:M64:C:6900:511:512:0:101:12:0:0:0
HEIMATKANAL:386:M64:C:6900:1279:1280:0:101:22:0:0:0
GOLDSTAR TV:386:M64:C:6900:3839:3840:0:101:518:0:0:0
CLASSICA:386:M64:C:6900:767:768:0:101:15:0:0:0
:Premiere Sport
PREMIERE SPORT 1:362:M64:C:6900:255:256,257:0:101:17:0:0:0
PREMIERE SPORT 2:378:M64:C:6900:3839:3840,3841:0:101:27:0:0:0
-:Premiere Bundesliga
-Spiel 1:362:M64:C:6900:255:256:0:101:17:0:0:1
-:Premiere CL
-UEFA CL 1:362:M64:C:6900:255:256,257:0:101:17:0:0:2
-:Premiere Formel 1
-F1 Portal 1:362:M64:C:6900:255:256:0:101:17:0:0:3
:Premiere Direkt
PREMIERE DIREKT:378:M64:C:6900:2815:2816,2817;2819:0:101:18:0:0:0
:Premiere Direkt 1
@@ -65,14 +58,14 @@ PREMIERE DIREKT 1A:362:M64:C:6900:2047:2048,2049;2051:0:101:240:0:0:0
PREMIERE DIREKT 1B:362:M64:C:6900:2303:2304,2305;2307:0:101:241:0:0:0
PREMIERE DIREKT 1C:362:M64:C:6900:2559:2560,2561;2563:0:101:242:0:0:0
:Premiere Direkt 2
-PREMIERE DIREKT 2A:362:M64:C:6900:2815:2816,2817;2819:0:101:243:0:0:0
+PREMIERE DIREKT 2A:354:M64:C:6900:511:512,513;515:0:101:211:0:0:0
PREMIERE DIREKT 2B:362:M64:C:6900:3071:3072,3073;3075:0:101:244:0:0:0
PREMIERE DIREKT 2C:362:M64:C:6900:3327:3328,3329;3331:0:101:245:0:0:0
PREMIERE DIREKT 2D:378:M64:C:6900:3071:3072,3073;3075:0:101:208:0:0:0
:Premiere Direkt 3
PREMIERE DIREKT 3A:378:M64:C:6900:3327:3328,3329;3331:0:101:209:0:0:0
PREMIERE DIREKT 3B:378:M64:C:6900:2303:2304,2305;2307:0:101:210:0:0:0
-PREMIERE DIREKT 3C:354:M64:C:6900:511:512,513;515:0:101:211:0:0:0
+PREMIERE DIREKT 3C:362:M64:C:6900:2815:2816,2817;2819:0:101:243:0:0:0
PREMIERE DIREKT 3D:386:M64:C:6900:511:512,513;515:0:101:212:0:0:0
:Premiere Erotik
BEATE-UHSE.TV:386:M64:C:6900:1023:1024:0:101:21:0:0:0
diff --git a/config.h b/config.h
index f474ef9..4d265ff 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.158 2003/05/11 13:45:44 kls Exp $
+ * $Id: config.h 1.159 2003/05/16 12:27:58 kls Exp $
*/
#ifndef __CONFIG_H
@@ -19,8 +19,8 @@
#include "device.h"
#include "tools.h"
-#define VDRVERSION "1.1.31"
-#define VDRVERSNUM 10131 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.1.32"
+#define VDRVERSNUM 10132 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99
#define MAXLIFETIME 99
diff --git a/device.c b/device.c
index b248114..7562a32 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.42 2003/05/11 08:53:09 kls Exp $
+ * $Id: device.c 1.43 2003/05/16 13:26:43 kls Exp $
*/
#include "device.h"
@@ -25,10 +25,6 @@
// The default priority for non-primary devices:
#define DEFAULTPRIORITY -2
-// The maximum time we wait before assuming that a recorded video data stream
-// is broken:
-#define MAXBROKENTIMEOUT 30 // seconds
-
int cDevice::numDevices = 0;
int cDevice::useDevice = 0;
int cDevice::nextCardIndex = 0;
@@ -656,7 +652,6 @@ void cDevice::Action(void)
dsyslog("receiver thread started on device %d (pid=%d)", CardIndex() + 1, getpid());
if (OpenDvr()) {
- time_t t = time(NULL);
active = true;
for (; active;) {
// Read data from the DVR device:
@@ -671,18 +666,10 @@ void cDevice::Action(void)
receiver[i]->Receive(b, TS_SIZE);
}
Unlock();
- t = time(NULL);
}
}
else
break;
-
- //XXX+ put this into the recorder??? or give the receiver a flag whether it wants this?
- if (time(NULL) - t > MAXBROKENTIMEOUT) {
- esyslog("ERROR: video data stream broken on device %d", CardIndex() + 1);
- cThread::EmergencyExit(true);
- t = time(NULL);
- }
}
CloseDvr();
}
diff --git a/eit.c b/eit.c
index 76da266..a5b14e7 100644
--- a/eit.c
+++ b/eit.c
@@ -16,7 +16,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: eit.c 1.75 2003/05/11 11:25:04 kls Exp $
+ * $Id: eit.c 1.78 2003/05/18 14:10:25 kls Exp $
***************************************************************************/
#include "eit.h"
@@ -434,27 +434,33 @@ static void ReportEpgBugFixStats(bool Reset = false)
const char *delim = "\t";
tEpgBugFixStats *p = &EpgBugFixStats[i];
if (p->hits) {
- if (!GotHits) {
- dsyslog("=====================");
- dsyslog("EPG bugfix statistics");
- dsyslog("=====================");
- dsyslog("IF SOMEBODY WHO IS IN CHARGE OF THE EPG DATA FOR ONE OF THE LISTED");
- dsyslog("CHANNELS READS THIS: PLEASE TAKE A LOOK AT THE FUNCTION cEventInfo::FixEpgBugs()");
- dsyslog("IN VDR/eit.c TO LEARN WHAT'S WRONG WITH YOUR DATA, AND FIX IT!");
- dsyslog("=====================");
- dsyslog("Fix\tHits\tChannels");
- GotHits = true;
- }
+ bool PrintedStats = false;
char *q = buffer;
- q += snprintf(q, sizeof(buffer) - (q - buffer), "%d\t%d", i, p->hits);
+ *buffer = 0;
for (int c = 0; c < p->n; c++) {
cChannel *channel = Channels.GetByChannelID(p->channelIDs[c], true);
if (channel) {
+ if (!GotHits) {
+ dsyslog("=====================");
+ dsyslog("EPG bugfix statistics");
+ dsyslog("=====================");
+ dsyslog("IF SOMEBODY WHO IS IN CHARGE OF THE EPG DATA FOR ONE OF THE LISTED");
+ dsyslog("CHANNELS READS THIS: PLEASE TAKE A LOOK AT THE FUNCTION cEventInfo::FixEpgBugs()");
+ dsyslog("IN VDR/eit.c TO LEARN WHAT'S WRONG WITH YOUR DATA, AND FIX IT!");
+ dsyslog("=====================");
+ dsyslog("Fix\tHits\tChannels");
+ GotHits = true;
+ }
+ if (!PrintedStats) {
+ q += snprintf(q, sizeof(buffer) - (q - buffer), "%d\t%d", i, p->hits);
+ PrintedStats = true;
+ }
q += snprintf(q, sizeof(buffer) - (q - buffer), "%s%s", delim, channel->Name());
delim = ", ";
}
}
- dsyslog("%s", buffer);
+ if (*buffer)
+ dsyslog("%s", buffer);
}
if (Reset)
p->hits = p->n = 0;
@@ -807,6 +813,7 @@ cSchedules::~cSchedules()
/** */
const cSchedule *cSchedules::AddChannelID(tChannelID channelid)
{
+ channelid.ClrRid();
const cSchedule *p = GetSchedule(channelid);
if (!p) {
Add(new cSchedule(channelid));
@@ -1073,6 +1080,7 @@ cSIProcessor::cSIProcessor(const char *FileName)
masterSIProcessor = numSIProcessors == 0; // the first one becomes the 'master'
currentSource = 0;
currentTransponder = 0;
+ statusCount = 0;
pmtIndex = 0;
pmtPid = 0;
filters = NULL;
@@ -1150,6 +1158,7 @@ const char *cSIProcessor::GetEpgDataFileName(void)
void cSIProcessor::SetStatus(bool On)
{
LOCK_THREAD;
+ statusCount++;
ShutDownFilters();
pmtIndex = 0;
pmtPid = 0;
@@ -1176,6 +1185,7 @@ void cSIProcessor::Action()
time_t lastCleanup = time(NULL);
time_t lastPmtScan = time(NULL);
+ int oldStatusCount = 0;
active = true;
while(active)
@@ -1208,6 +1218,7 @@ void cSIProcessor::Action()
}
// set up pfd structures for all active filter
+ Lock();
pollfd pfd[MAX_FILTERS];
int NumUsedFilters = 0;
for (int a = 0; a < MAX_FILTERS ; a++)
@@ -1219,6 +1230,8 @@ void cSIProcessor::Action()
NumUsedFilters++;
}
}
+ oldStatusCount = statusCount;
+ Unlock();
// wait until data becomes ready from the bitfilter
if (poll(pfd, NumUsedFilters, 1000) != 0)
@@ -1239,6 +1252,8 @@ void cSIProcessor::Action()
//dsyslog("Received pid 0x%04X with table ID 0x%02X and length of %4d\n", pid, buf[0], seclen);
cMutexLock MutexLock(&schedulesMutex); // since the xMem... stuff is not thread safe, we need to use a "global" mutex
LOCK_THREAD;
+ if (statusCount != oldStatusCount)
+ break;
switch (pid)
{
case 0x00:
diff --git a/eit.h b/eit.h
index 3773334..96bf1ff 100644
--- a/eit.h
+++ b/eit.h
@@ -16,7 +16,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: eit.h 1.28 2003/04/21 13:22:06 kls Exp $
+ * $Id: eit.h 1.29 2003/05/17 09:15:56 kls Exp $
***************************************************************************/
#ifndef __EIT_H
@@ -148,6 +148,7 @@ private:
bool masterSIProcessor;
int currentSource;
int currentTransponder;
+ int statusCount;
int pmtIndex;
int pmtPid;
SIP_FILTER *filters;
diff --git a/i18n.c b/i18n.c
index 34b2423..64194fc 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.108 2003/05/11 13:54:23 kls Exp $
+ * $Id: i18n.c 1.110 2003/05/16 13:02:08 kls Exp $
*
* Translations provided by:
*
@@ -21,6 +21,7 @@
* Swedish Tomas Prybil <tomas@prybil.se> and Jan Ekholm <chakie@infa.abo.fi>
* Romanian Paul Lacatus <paul@campina.iiruc.ro>
* Hungarian Istvan Koenigsberger <istvnko@hotmail.com> and Guido Josten <guido.josten@t-online.de>
+ * Catalanian Marc Rovira Vall <tm05462@salleURL.edu> and Ramon Roca <ramon.roca@xcombo.com>
*
*/
@@ -85,6 +86,7 @@ const tI18nPhrase Phrases[] = {
"Svenska",
"Romaneste",
"Magyar",
+ "Catal�",
},
// Menu titles:
{ "VDR",
@@ -102,6 +104,7 @@ const tI18nPhrase Phrases[] = {
"VDR",
"VDR",
"VDR",
+ "VDR",
},
{ "Schedule",
"Programm",
@@ -113,11 +116,12 @@ const tI18nPhrase Phrases[] = {
"Programmer",
"Ohjelmat",
"Program",
- "Programa",
+ "Gu�a de Programaci�n",
"Programma",
"Program",
"Program",
"Program",
+ "Guia de Programaci�",
},
{ "Channels",
"Kan�le",
@@ -134,6 +138,7 @@ const tI18nPhrase Phrases[] = {
"Kanaler",
"Canale",
"Csatorn�k",
+ "Canals",
},
{ "Timers",
"Timer",
@@ -150,6 +155,7 @@ const tI18nPhrase Phrases[] = {
"Timers",
"Timere",
"Felv�tel beprogramoz�sa",
+ "Temporitzadors",
},
{ "Recordings",
"Aufzeichnungen",
@@ -166,6 +172,7 @@ const tI18nPhrase Phrases[] = {
"Inspelningar",
"Inregistrari",
"Felvett ad�sok",
+ "Veure programes gravats",
},
{ "Setup",
"Einstellungen",
@@ -182,6 +189,7 @@ const tI18nPhrase Phrases[] = {
"Inst�llningar",
"Setari",
"Be�ll�t�sok",
+ "Configuraci�",
},
{ "Commands",
"Befehle",
@@ -198,6 +206,7 @@ const tI18nPhrase Phrases[] = {
"Kommandon",
"Comenzi",
"Parancsok",
+ "Ordres",
},
{ "Recording commands",
"Befehle f�r Aufzeichnungen",
@@ -209,11 +218,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Nauhoituskomennot",
"",// TODO
- "",// TODO
+ "�rdenes de grabaci�n",
"Entoles gia egrafes",// TODO
"Inspelningskommandon",
"",// TODO
"",// TODO
+ "Ordres de gravaci�",
},
{ "Edit channel",
"Kanal editieren",
@@ -230,6 +240,7 @@ const tI18nPhrase Phrases[] = {
"�ndra kanal",
"Editare canale",
"Csatorn�k be�ll�t�sa",
+ "Editar canal",
},
{ "Edit timer",
"Timer editieren",
@@ -246,6 +257,7 @@ const tI18nPhrase Phrases[] = {
"�ndra timer",
"Editare timere",
"Felv�tel beprogramoz�s�nak megv�ltoztat�sa",
+ "Editar temporitzador",
},
{ "Event",
"Sendung",
@@ -262,6 +274,7 @@ const tI18nPhrase Phrases[] = {
"S�ndning",
"Evenimente",
"Ad�s",
+ "Event",
},
{ "Summary",
"Inhalt",
@@ -278,6 +291,7 @@ const tI18nPhrase Phrases[] = {
"Sammandrag",
"Cuprins",
"Tartalom",
+ "Sinopsi",
},
{ "Schedule - %s",
"Programm - %s",
@@ -294,6 +308,7 @@ const tI18nPhrase Phrases[] = {
"Program - %s",
"Program - %s",
"Program - %s",
+ "Guia de Programaci� - %s",
},
{ "What's on now?",
"Was l�uft jetzt?",
@@ -310,6 +325,7 @@ const tI18nPhrase Phrases[] = {
"Vilket program s�nds nu?",
"Programul actual?",
"Mi megy most?",
+ "Que fan ara?",
},
{ "What's on next?",
"Was l�uft als n�chstes?",
@@ -326,6 +342,7 @@ const tI18nPhrase Phrases[] = {
"Vilket �r n�sta program?",
"Programul urmator?",
"Mi k�vetkezik?",
+ "Que fan despr�s?",
},
// Button texts (should not be more than 10 characters!):
{ "Edit",
@@ -343,6 +360,7 @@ const tI18nPhrase Phrases[] = {
"�ndra",
"Modificare",
"Be�ll�tani",
+ "Editar",
},
{ "New",
"Neu",
@@ -359,6 +377,7 @@ const tI18nPhrase Phrases[] = {
"Ny",
"Nou",
"�j",
+ "Nou",
},
{ "Delete",
"L�schen",
@@ -375,6 +394,7 @@ const tI18nPhrase Phrases[] = {
"Ta bort",
"Sterge",
"T�r�lni",
+ "Esborrar",
},
{ "Mark",
"Markieren",
@@ -391,6 +411,7 @@ const tI18nPhrase Phrases[] = {
"M�rk",
"Marcheaza",
"Megjel�lni",
+ "Marcar",
},
{ "On/Off",
"Ein/Aus",
@@ -407,6 +428,7 @@ const tI18nPhrase Phrases[] = {
"P�/Av",
"Pornit/Oprit",
"Be/Ki",
+ "On/Off",
},
{ "Record",
"Aufnehmen",
@@ -423,6 +445,7 @@ const tI18nPhrase Phrases[] = {
"Inspelning",
"Inregistrare",
"Felvenni",
+ "Gravar",
},
{ "Play",
"Wiedergabe",
@@ -439,6 +462,7 @@ const tI18nPhrase Phrases[] = {
"Spela upp",
"Redare",
"Lej�tszani",
+ "Reproduir",
},
{ "Rewind",
"Anfang",
@@ -455,6 +479,7 @@ const tI18nPhrase Phrases[] = {
"�terspolning",
"Inapoi",
"Vissza az elej�re",
+ "Enrera",
},
{ "Button$Stop",
"Beenden",
@@ -471,6 +496,7 @@ const tI18nPhrase Phrases[] = {
"Stopp",
"Stop",
"Stop",
+ "Parar",
},
{ "Resume",
"Weiter",
@@ -487,6 +513,7 @@ const tI18nPhrase Phrases[] = {
"Forts�tt",
"Reia",
"Tov�bb",
+ "Continuar",
},
{ "Summary",
"Inhalt",
@@ -503,6 +530,7 @@ const tI18nPhrase Phrases[] = {
"Sammandrag",
"Cuprins",
"Tartalom",
+ "Resum",
},
{ "Open",
"�ffnen",
@@ -519,6 +547,7 @@ const tI18nPhrase Phrases[] = {
"�ppna",
"Deschide",
"Kinyitni",
+ "Obrir",
},
{ "Switch",
"Umschalten",
@@ -535,6 +564,7 @@ const tI18nPhrase Phrases[] = {
"Byt",
"Schimba",
"�tkapcsolni",
+ "Canviar",
},
{ "Now",
"Jetzt",
@@ -551,6 +581,7 @@ const tI18nPhrase Phrases[] = {
"Nu",
"Acum",
"Most",
+ "Ara",
},
{ "Next",
"N�chste",
@@ -567,6 +598,7 @@ const tI18nPhrase Phrases[] = {
"N�sta",
"Urmator",
"K�vetkez�",
+ "Seg�ent",
},
{ "Button$Schedule",
"Programm",
@@ -583,6 +615,7 @@ const tI18nPhrase Phrases[] = {
"Program",
"Program",
"Program",
+ "Programar",
},
{ "Language",
"Sprache",
@@ -594,11 +627,12 @@ const tI18nPhrase Phrases[] = {
"Spr�k",
"Kieli",
"Jezyk",
- "Lengua",
+ "Idioma",
"Glosa",
"Spr�k",
"Limba",
"Nyelv",
+ "Idioma",
},
{ "Eject",
"Auswerfen",
@@ -610,11 +644,12 @@ const tI18nPhrase Phrases[] = {
"Eject",
"Avaa",
"Wyrzucenie",
- "Eyectar",
+ "Expulsar",
"Exsagogi",
"Mata ut",
"Ejecteaza",
"Kidobni",
+ "Expulsar",
},
{ "ABC/abc",
"ABC/abc",
@@ -631,6 +666,7 @@ const tI18nPhrase Phrases[] = {
"ABC/abc",
"ABC/abc",
"ABC/abc",
+ "ABC/abc",
},
{ "Insert",
"Einf�gen",
@@ -642,11 +678,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Lis��",
"",// TODO
- "",// TODO
+ "Insertar",
"Isodos",
"Infoga",
"Insereaza",
"Beilleszteni",
+ "Insertar",
},
{ "Overwrite",
"�berschreiben",
@@ -658,11 +695,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Korvaa",
"",// TODO
- "",// TODO
+ "Sobreescribir",
"Epanagrafi",
"Skriv �ver",
"Suprascrie",
"�t�rni",
+ "Sobrescriure",
},
{ "Menu",
"Men�",
@@ -674,11 +712,12 @@ const tI18nPhrase Phrases[] = {
"Meny",
"Valikko",
"Menu",
- "Menu",
+ "Men�",
"Menou",
"Meny",
"Meniu",
"Men�",
+ "Men�",
},
{ "Reset",
"Reset",
@@ -690,11 +729,12 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
+ "Reiniciar",
"Epanafora",
"",//TODO
"",//TODO
"",//TODO
+ "Reiniciar",
},
// Confirmations:
{ "Delete channel?",
@@ -712,6 +752,7 @@ const tI18nPhrase Phrases[] = {
"Ta bort kanalen?",
"Sterg canalul?",
"Csatorna t�rl�se?",
+ "Esborrar el canal?",
},
{ "Delete timer?",
"Timer l�schen?",
@@ -728,6 +769,7 @@ const tI18nPhrase Phrases[] = {
"Ta bort timern?",
"Sterg timer-ul?",
"Felv�tel beprogramoz�s�nak t�rl�se?",
+ "Esborrar el temporitzador?",
},
{ "Delete recording?",
"Aufzeichnung l�schen?",
@@ -744,6 +786,7 @@ const tI18nPhrase Phrases[] = {
"Ta bort inspelningen?",
"Sterg inregistrarea?",
"Felv�tel t�rl�se?",
+ "Esborrar gravaci�?"
},
{ "Timer still recording - really delete?",
"Timer zeichnet auf - trotzdem l�schen?",
@@ -760,6 +803,7 @@ const tI18nPhrase Phrases[] = {
"Timerstyrd inspelning p�g�r - Avbryta �nd�?",
"Timer-ul in inregistrare - sterg?",
"Felv�tel folyamatban van - m�gis t�r�lni?",
+ "Temporitzador activat - Esborrar de totes maneres?",
},
{ "Stop recording?",
"Aufzeichnung beenden?",
@@ -776,6 +820,7 @@ const tI18nPhrase Phrases[] = {
"Stanna inspelning?",
"Opresc inregistrarea?",
"Felv�tel befejezni?",
+ "Parar la gravaci�?",
},
{ "on primary interface",
"auf dem prim�ren Interface",
@@ -792,6 +837,7 @@ const tI18nPhrase Phrases[] = {
"fr�n det f�rsta enheten?",
"pe prima interfata",
"az els� k�rty�n",
+ "a la interf�cie prim�ria",
},
{ "Cancel editing?",
"Schneiden abbrechen?",
@@ -808,6 +854,7 @@ const tI18nPhrase Phrases[] = {
"Avbryta editeringen?",
"Opresc editarea?",
"V�g�st befejezni?",
+ "Cancel.lar l'edici�?",
},
{ "Really restart?",
"Wirklich neu starten?",
@@ -824,6 +871,7 @@ const tI18nPhrase Phrases[] = {
"Vill du verkligen starta om?",
"Esti sigur de repornire?",
"T�nyleg �jraind�tani?",
+ "Segur que vols reiniciar?",
},
{ "Recording - restart anyway?",
"Aufnahme l�uft - trotzdem neu starten?",
@@ -835,11 +883,12 @@ const tI18nPhrase Phrases[] = {
"Gj�r opptak - starte p� nytt likevel?",
"Nauhoitus k�ynniss� - aloitetaanko alusta?",
"Nagrywanie w trakcie - rzeczywiscie nowy start?",
- "�Grabando - reiniciar?",
+ "Grabando - �reiniciar?",
"Ginete egrafi - Telika na ginei epanekinisi?",
"Inspelning p�g�r, vill du starta om i alla fall?",
"In inregistrare - repornesc?",
"Felv�tel folyamatban van - m�gis �jraind�tani?",
+ "Estic gravant - reiniciar de totes maneres?"
},
{ "Recording - shut down anyway?",
"Aufnahme l�uft - trotzdem ausschalten?",
@@ -851,11 +900,12 @@ const tI18nPhrase Phrases[] = {
"Gj�r opptak - sl� av likevel?",
"Nauhoitus kesken - lopetetaanko se?",
"Nagrywanie w trakcie - mimo to wylaczyc?",
- "�Grabando - apagar?",
+ "Grabando - �apagar?",
"Ginete egrafi - Telika na ginei termatismos?",
"Inspelning p�g�r, vill du avbryta i alla fall?",
"In inregistrare - opresc?",
"Felv�tel folyamatban van - m�gis kikapcsolni?",
+ "Gravant - Apagar de totes maneres?",
},
{ "Recording in %d minutes, shut down anyway?",
"Aufnahme in %d Minuten - trotzdem ausschalten?",
@@ -867,11 +917,12 @@ const tI18nPhrase Phrases[] = {
"Skal gj�re opptak om %d minutter - sl� av likevel?",
"Nauhoitus alkaisi %d min. kuluttua - sammutetaanko silti?",
"Nagrywanie za %d minut - mimo to wylaczyc?",
- "�Grabando en %d minutos, de verdad cortar?",
+ "Grabando en %d minutos, �de verdad apagar?",
"Anamenete egrafi se %d lepta - Telika na termatistei?",
"Inspelning startar om %d minuter, vill du avsluta?",
"Inregistrez in %d minute, opresc?",
"Felv�tel %d perc mulva kezd�dik - m�gis kikapcsolni?",
+ "Hi ha una gravaci� en %d minuts - Apagar de totes maneres?",
},
{ "Press any key to cancel shutdown",
"Taste dr�cken um Shutdown abzubrechen",
@@ -883,11 +934,12 @@ const tI18nPhrase Phrases[] = {
"Trykk en tast for ikke � sl� av",
"Peruuta pys�ytys painamalla jotakin n�pp�int�",
"Dowolny przycisk zatrzyma wylaczanie",
- "Pulse una tecla para interrumpir corte",
+ "Pulse una tecla para interrumpir apagar",
"Piese ena pliktro na akirothei o termatismos",
"Tryck valfri knapp f�r att avbryta nedst�ngning",
"Apasa orice tasta pentru a anula inchiderea",
"Nyomj egy gombot a le�ll�s meg�ll�t�s�hoz",
+ "Prem qualsevol tecla per cancel.lar l'aturada",
},
// Channel parameters:
{ "Name",
@@ -905,6 +957,7 @@ const tI18nPhrase Phrases[] = {
"Namn",
"Nume",
"N�v",
+ "Nom",
},
{ "Frequency",
"Frequenz",
@@ -921,6 +974,7 @@ const tI18nPhrase Phrases[] = {
"Frekvens",
"Frecventa",
"Frekvencia",
+ "Freq��ncia",
},
{ "Polarization",
"Polarisation",
@@ -937,6 +991,7 @@ const tI18nPhrase Phrases[] = {
"Polarisation",
"Polarizare",
"Polariz�ci�",
+ "Polaritzaci�",
},
{ "Source",
"Quelle",
@@ -953,6 +1008,7 @@ const tI18nPhrase Phrases[] = {
"K�lla",
"",//TODO
"",//TODO
+ "Origen",
},
{ "Srate",
"Srate",
@@ -969,6 +1025,7 @@ const tI18nPhrase Phrases[] = {
"Srate",
"Rata simboluri",
"Srate",
+ "Srate",
},
{ "Vpid",
"Vpid",
@@ -985,6 +1042,7 @@ const tI18nPhrase Phrases[] = {
"Vpid",
"PID Video",
"Vpid",
+ "PID V�deo",
},
{ "Apid1",
"Apid1",
@@ -1001,6 +1059,7 @@ const tI18nPhrase Phrases[] = {
"Apid1",
"PID Audio (1)",
"Apid1",
+ "PID �udio (1)",
},
{ "Apid2",
"Apid2",
@@ -1017,6 +1076,7 @@ const tI18nPhrase Phrases[] = {
"Apid2",
"PID Audio (2)",
"Apid2",
+ "PID �udio (2)",
},
{ "Dpid1",
"Dpid1",
@@ -1033,6 +1093,7 @@ const tI18nPhrase Phrases[] = {
"Dpid1",
"PID AC3 (1)",
"Dpid1",
+ "PID AC3 (1)",
},
{ "Dpid2",
"Dpid2",
@@ -1049,6 +1110,7 @@ const tI18nPhrase Phrases[] = {
"Dpid2",
"PID AC3 (2)",
"Dpid2",
+ "PID AC3 (2)",
},
{ "Tpid",
"Tpid",
@@ -1065,6 +1127,7 @@ const tI18nPhrase Phrases[] = {
"Tpid",
"PID Teletext",
"Tpid",
+ "PID Teletext",
},
{ "CA",
"CA",
@@ -1081,6 +1144,7 @@ const tI18nPhrase Phrases[] = {
"CA",
"Criptare",
"CA",
+ "Acc�s Condicional",
},
{ "Sid",
"Sid",
@@ -1097,6 +1161,7 @@ const tI18nPhrase Phrases[] = {
"Sid",
"Sid",
"Sid",
+ "Sid",
},
{ "Inversion",
"Inversion",
@@ -1113,6 +1178,7 @@ const tI18nPhrase Phrases[] = {
"Inversion",
"Inversion",
"Inversion",
+ "Inversi�",
},
{ "Bandwidth",
"Bandwidth",
@@ -1129,6 +1195,7 @@ const tI18nPhrase Phrases[] = {
"Bandbredd",
"Bandwidth",
"Bandwidth",
+ "Ampla de banda",
},
{ "CoderateH",
"CoderateH",
@@ -1145,6 +1212,7 @@ const tI18nPhrase Phrases[] = {
"CoderateH",
"CoderateH",
"CoderateH",
+ "CoderateH",
},
{ "CoderateL",
"CoderateL",
@@ -1161,6 +1229,7 @@ const tI18nPhrase Phrases[] = {
"CoderateL",
"CoderateL",
"CoderateL",
+ "CoderateL",
},
{ "Modulation",
"Modulation",
@@ -1177,6 +1246,7 @@ const tI18nPhrase Phrases[] = {
"Modulation",
"Modulation",
"Modulation",
+ "Modulaci�",
},
{ "Transmission",
"Transmission",
@@ -1193,6 +1263,7 @@ const tI18nPhrase Phrases[] = {
"Transmission",
"Transmission",
"Transmission",
+ "Transmissi�",
},
{ "Guard",
"Guard",
@@ -1209,6 +1280,7 @@ const tI18nPhrase Phrases[] = {
"Guard",
"Guard",
"Guard",
+ "Protegir",
},
{ "Hierarchy",
"Hierarchy",
@@ -1225,6 +1297,7 @@ const tI18nPhrase Phrases[] = {
"Hierarchy",
"Hierarchy",
"Hierarchy",
+ "Jerarquia",
},
// Timer parameters:
{ "Active",
@@ -1242,6 +1315,7 @@ const tI18nPhrase Phrases[] = {
"Aktiv",
"Activ",
"Aktiv",
+ "Actiu",
},
{ "Channel",
"Kanal",
@@ -1258,6 +1332,7 @@ const tI18nPhrase Phrases[] = {
"Kanal",
"Canal",
"Csatorna",
+ "Canal",
},
{ "Day",
"Tag",
@@ -1274,6 +1349,7 @@ const tI18nPhrase Phrases[] = {
"Dag",
"Ziua",
"Nap",
+ "Dia",
},
{ "Start",
"Anfang",
@@ -1290,6 +1366,7 @@ const tI18nPhrase Phrases[] = {
"B�rjar",
"Start",
"Kezdet",
+ "Inici",
},
{ "Stop",
"Ende",
@@ -1306,6 +1383,7 @@ const tI18nPhrase Phrases[] = {
"Slutar",
"Stop",
"V�ge",
+ "Final",
},
{ "Priority",
"Priorit�t",
@@ -1322,6 +1400,7 @@ const tI18nPhrase Phrases[] = {
"Prioritet",
"Prioritate",
"Priorit�s",
+ "Prioritat",
},
{ "Lifetime",
"Lebensdauer",
@@ -1338,6 +1417,7 @@ const tI18nPhrase Phrases[] = {
"Speltid",
"Durata",
"�lettartam",
+ "Duraci�",
},
{ "File",
"Datei",
@@ -1354,6 +1434,7 @@ const tI18nPhrase Phrases[] = {
"Filnamn",
"Fisier",
"File",
+ "Arxiu",
},
{ "First day",
"Erster Tag",
@@ -1370,6 +1451,7 @@ const tI18nPhrase Phrases[] = {
"F�rsta dag",
"Prima zi",
"Els� nap",
+ "Primer dia",
},
// Error messages:
{ "Channel is being used by a timer!",
@@ -1387,6 +1469,7 @@ const tI18nPhrase Phrases[] = {
"Kanalen anv�nds av en timer!",
"Canalul este utilizat de un timer!",
"Csatorn�t m�s haszn�lja!",
+ "Canal en �s per un temporitzador!",
},
{ "Can't switch channel!",
"Kanal kann nicht umgeschaltet werden!",
@@ -1403,6 +1486,7 @@ const tI18nPhrase Phrases[] = {
"Om�jligt att byta kanal!",
"Nu pot comuta canalul!",
"Csatorn�t nem lehet �tkapcsolni!",
+ "No puc canviar de canal!",
},
{ "Timer is recording!",
"Timer zeichnet gerade auf!",
@@ -1419,6 +1503,7 @@ const tI18nPhrase Phrases[] = {
"Timerstyrd inspelning p�g�r!",
"Timer-ul este in inregistrare!",
"Felv�tel folyamatban van!",
+ "El temporitzador est� gravant!",
},
{ "Error while accessing recording!",
"Fehler beim Ansprechen der Aufzeichnung!",
@@ -1430,11 +1515,12 @@ const tI18nPhrase Phrases[] = {
"Feil under lesing av opptak!",
"Nauhoituksen toistaminen ep�onnistui!",
"Blad - brak dostepu do nagrania!",
- "�Error al accesar la grabaci�n!",
+ "�Error al acceder a la grabaci�n!",
"Provlima stin prospelasi egrafis!",
"Det g�r inte att l�sa inspelningen",
"Eroare in timpul accesarii inregistrarii",
"Hiba a felv�tel hozz�f�r�s�n�l",
+ "Error a l'accedir a la gravaci�!",
},
{ "Error while deleting recording!",
"Fehler beim L�schen der Aufzeichnung!",
@@ -1451,6 +1537,7 @@ const tI18nPhrase Phrases[] = {
"Det g�r inte att ta bort inspelningen",
"Eroare in timpul stergerii inregistrarii!",
"Hiba a felv�tel t�rl�s�n�l!",
+ "Error a l'esborrar la gravaci�!",
},
{ "*** Invalid Channel ***",
"*** Ung�ltiger Kanal ***",
@@ -1467,6 +1554,7 @@ const tI18nPhrase Phrases[] = {
"*** Felaktig kanal ***",
"*** Canal invalid ***",
"*** �rv�nytelen csatorna ***",
+ "*** Canal incorrecte ***",
},
{ "No free DVB device to record!",
"Keine freie DVB-Karte zum Aufnehmen!",
@@ -1483,6 +1571,7 @@ const tI18nPhrase Phrases[] = {
"Det finns ingen ledig DVB enhet f�r inspelning!",
"Nu mai sunt dispozitive DVB pentru inregistrare!",
"Nincs szabad DVB k�rtya a felv�telhez!",
+ "No hi ha cap dispositiu DVB lliure per gravar!",
},
{ "Channel not available!",
"Kanal nicht verf�gbar!",
@@ -1494,11 +1583,12 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"Kanavaa ei voi katsoa nyt!",
"",//TODO
- "",//TODO
+ "!Canal no disponible!",
"To kanali den ine diathesimo",
"Kanalen ej tillg�nglig!",
"",//TODO
"",//TODO
+ "Canal no disponible!",
},
{ "Channel settings are not unique!",
"Kanaleinstellungen sind nicht eindeutig!",
@@ -1510,11 +1600,12 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
+ "!Propiedades de canal duplicadas!",
"Ta kanalia stin lista den ine monadika!",
"Kanalinst�llningarna �r ej unika!",
"",//TODO
"",//TODO
+ "Propietats del canal duplicades!",
},
{ "Channel locked (recording)!",
"Kanal blockiert (zeichnet auf)!",
@@ -1531,6 +1622,7 @@ const tI18nPhrase Phrases[] = {
"Kanalen �r l�st (inspelning p�g�r)!",
"Canal blocat (inregistrare)!",
"Csatorna hozz�f�rhetetlen (felv�tel)!",
+ "Canal bloquejat (gravant)!",
},
{ "Can't start Transfer Mode!",
"Transfer-Mode kann nicht gestartet werden!",
@@ -1547,6 +1639,24 @@ const tI18nPhrase Phrases[] = {
"Kan inte starta Transfer Mode!",
"Nu pot porni Modul de Transfer!",
"Transfer-Mode nem ind�that�!",
+ "No puc iniciar el mode de transfer�ncia!",
+ },
+ { "No editing marks defined!",
+ "Keine Schnittmarken gesetzt!",
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
},
{ "Can't start editing process!",
"Schnitt kann nicht gestartet werden!",
@@ -1563,6 +1673,7 @@ const tI18nPhrase Phrases[] = {
"Kan inte starta editering!",
"Nu pot porni procesul de editare!",
"A v�g�s nem ind�that�!",
+ "No puc iniciar el proc�s d'edici�!",
},
{ "Editing process already active!",
"Schnitt bereits aktiv!",
@@ -1579,6 +1690,7 @@ const tI18nPhrase Phrases[] = {
"Editering �r redan aktiv!",
"Procesul de editare este activ!",
"A v�g�s m�r aktiv�lt!",
+ "Proc�s d'edici� iniciat anteriorment!",
},
{ "Can't shutdown - option '-s' not given!",
"Shutdown unm�glich - Option '-s' fehlt!",
@@ -1590,11 +1702,12 @@ const tI18nPhrase Phrases[] = {
"Kan ikke sl� av - startet uten parameteret '-s'!",
"Ei voida sammuttaa '-s' parametria ei annettu!",
"Wylaczenie niemozliwe - brak opcji '-s'!",
- "�No puedo cortar - opci�n '-s' absente!",
+ "�No puedo apagar - opci�n '-s' ausente!",
"Adinaton na ginei termatismos. Aniparkti i parametros '-s'!",
"Kan inte avsluta, m�ste anv�nda flagga '-s'",
"Nu pot opri calculatorul - vezi optiunea '-s'",
"A le�ll�t�s nem lehets�ges - Opci� '-s' hi�nyzik!",
+ "No puc apagar, falta la opci� -s !"
},
{ "Low disk space!",
"Platte beinahe voll!",
@@ -1611,6 +1724,7 @@ const tI18nPhrase Phrases[] = {
"L�gt diskutrymme!",
"Spatiu scazut pe disc!",
"A merev lemez majdnem tele!",
+ "Disc gaireb� pl�!",
},
{ "Can't open CAM menu!",
"CAM-Men� kann nicht ge�ffnet werden!",
@@ -1622,11 +1736,12 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
+ "�No pudeo acceder al men� de la CAM!",
"Den mpori na aniksi to CAM menou!",
"",//TODO
"",//TODO
"",//TODO
+ "No puc obrir el men� de la CAM!",
},
{ "Can't reset CAM!",
"CAM-Reset fehlgeschlagen!",
@@ -1638,11 +1753,12 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
+ "�No puedo reiniciar la CAM!",
"Adinato na gini epanafora sto CAM",
"",//TODO
"",//TODO
"",//TODO
+ "No puc reiniciar la CAM!",
},
{ "CAM has been reset",
"CAM wurde zur�ckgesetzt!",
@@ -1654,11 +1770,12 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
+ "CAM reiniciada",
"Sto CAM egine apanafora",
"",//TODO
"",//TODO
"",//TODO
+ "CAM reiniciada",
},
// Setup pages:
{ "OSD",
@@ -1671,11 +1788,12 @@ const tI18nPhrase Phrases[] = {
"OSD",
"Tekstin�ytt�",
"OSD",
+ "Men�s en pantalla",
"OSD",
"OSD",
"OSD",
"OSD",
- "OSD",
+ "Informaci� en pantalla",
},
{ "EPG",
"EPG",
@@ -1687,11 +1805,12 @@ const tI18nPhrase Phrases[] = {
"Programoversikt",
"Ohjelmaopas",
"EPG",
- "EPG",
+ "Gu�a de Programaci�n",
"EPG",
"Elektronisk programguide",
"EPG",
"EPG",
+ "Guia de Programes",
},
{ "DVB",
"DVB",
@@ -1708,6 +1827,7 @@ const tI18nPhrase Phrases[] = {
"DVB",
"Placa DVB",
"DVB",
+ "Tarja DVB",
},
{ "LNB",
"LNB",
@@ -1724,6 +1844,7 @@ const tI18nPhrase Phrases[] = {
"LNB",
"LNB",
"LNB",
+ "Configuraci� de l'LNB",
},
{ "CICAM",
"CICAM",
@@ -1740,6 +1861,7 @@ const tI18nPhrase Phrases[] = {
"CICAM",
"Acces conditionat",
"CICAM",
+ "CI Acc�s condicional",
},
{ "Recording",
"Aufnahme",
@@ -1751,11 +1873,12 @@ const tI18nPhrase Phrases[] = {
"Opptak",
"Nauhoita",
"Nagranie",
- "Grabaci�n",
+ "Opciones de Grabaci�n",
"Egrafi",
"Inspelning",
"Inregistrare",
"Felv�tel",
+ "Opcions de Gravaci�",
},
{ "Replay",
"Wiedergabe",
@@ -1767,11 +1890,12 @@ const tI18nPhrase Phrases[] = {
"Spill av",
"Toista",
"Odtwarzanie",
- "Poner",
+ "Opciones de Reproducci�n",
"Anametadosi",
"Repris",
"Redare",
"Lej�tsz�s",
+ "Opcions de Reproducci�",
},
{ "Miscellaneous",
"Sonstiges",
@@ -1788,6 +1912,7 @@ const tI18nPhrase Phrases[] = {
"Diverse",
"Diverse",
"Egy�b",
+ "Miscel�l�nia",
},
{ "Plugins",
"Plugins",
@@ -1804,6 +1929,7 @@ const tI18nPhrase Phrases[] = {
"Plugins",
"Plugins",
"Plugins",
+ "Plugins",
},
{ "Plugin",
"Plugin",
@@ -1820,6 +1946,7 @@ const tI18nPhrase Phrases[] = {
"Plugin",
"Plugin",
"Plugin",
+ "Plugin",
},
{ "Restart",
"Neustart",
@@ -1836,6 +1963,7 @@ const tI18nPhrase Phrases[] = {
"Omstart",
"Restart",
"�jraind�t�s",
+ "Reiniciar",
},
// Setup parameters:
{ "Setup.OSD$Language",
@@ -1848,11 +1976,12 @@ const tI18nPhrase Phrases[] = {
"Spr�k",
"Kieli",
"Jezyk",
- "Lengua",
+ "Idioma",
"Glosa",
"Spr�k",
"Limba OSD",
"Nyelv",
+ "Idioma",
},
{ "Setup.OSD$Width",
"Breite",
@@ -1869,6 +1998,7 @@ const tI18nPhrase Phrases[] = {
"Bredd",
"Latime OSD",
"Sz�less�g",
+ "Amplada",
},
{ "Setup.OSD$Height",
"H�he",
@@ -1885,6 +2015,7 @@ const tI18nPhrase Phrases[] = {
"H�jd",
"Inaltime OSD",
"Magass�g",
+ "Al�ada",
},
{ "Setup.OSD$Message time (s)",
"Anzeigedauer f�r Nachrichten (s)",
@@ -1901,6 +2032,7 @@ const tI18nPhrase Phrases[] = {
"Tid f�r meddelanden (sek)",
"Timp afisare mesaj (sec)",
"Inform�ci� felt�ntet�s�nek id�tartama",
+ "Duraci� dels missatges (s)",
},
{ "Setup.OSD$Channel info position",
"Kanal-Info Position",
@@ -1917,6 +2049,7 @@ const tI18nPhrase Phrases[] = {
"Placering av kanalinformation",
"Pozitie info canal",
"Csatorna-Inf� pozici�ja",
+ "Posici� de la informaci� del canal",
},
{ "Setup.OSD$Info on channel switch",
"Info beim Kanalwechsel",
@@ -1933,6 +2066,7 @@ const tI18nPhrase Phrases[] = {
"Information vid kanalbyte",
"Info despre comutare canal",
"Inf� a csatorna v�lt�s�n�l",
+ "Informaci� del canvi de canal",
},
{ "Setup.OSD$Scroll pages",
"Seitenweise scrollen",
@@ -1949,6 +2083,7 @@ const tI18nPhrase Phrases[] = {
"Bl�ddra sidor",
"Deruleaza pagini",
"Oldalank�nt l�ptetmi",
+ "Despla�ar p�gina sencera",
},
{ "Setup.OSD$Sort timers",
"Timer sortieren",
@@ -1960,11 +2095,12 @@ const tI18nPhrase Phrases[] = {
"Sorter timere",
"J�rjest� ajastimet",
"Sortowanie timerow",
- "Ordenar timer",
+ "Ordenar timers",
"Organosi programmatismenon",
"Sortera timers",
"Sortare timere",
"A beprogramozott felv�telek elrendez�se",
+ "Ordenar gravacions programades",
},
{ "Setup.OSD$Recording directories",
"Aufnahmeverzeichnisse",
@@ -1976,11 +2112,12 @@ const tI18nPhrase Phrases[] = {
"Kataloger til opptak",
"Nauhoitushakemistot",
"Wykaz nagran",
- "Directorios para grabaci�n",
+ "Gracaciones en directorios",
"Fakeloi egrafon",
"Kataloger f�r inspelningar",
"Directoare inregistrari",
"Felv�telek list�ja",
+ "Gravacions en sub-carpetes",
},
{ "Setup.EPG$EPG scan timeout (h)",
"Zeit bis EPG Scan (h)",
@@ -1997,6 +2134,7 @@ const tI18nPhrase Phrases[] = {
"EPG s�kning timeout",
"Timeout EPG",
"Fennmaradt id� az EPG-g (h)",
+ "M�xim d'Hores a cercar per la Guia",
},
{ "Setup.EPG$EPG bugfix level",
"EPG Fehlerbereinigung",
@@ -2013,6 +2151,7 @@ const tI18nPhrase Phrases[] = {
"Niv� f�r EPG bugfix",
"Nivel corectie EPG",
"EPG hibaelh�r�t�s",
+ "Nivell de correcci� de la Guia",
},
{ "Setup.EPG$Set system time",
"Systemzeit stellen",
@@ -2029,6 +2168,7 @@ const tI18nPhrase Phrases[] = {
"St�ll in systemtid",
"Seteaza ceasul sistem",
"Az id� be�ll�t�sa",
+ "Ajustar l'hora del sistema",
},
{ "Setup.EPG$Use time from transponder",
"Transponder f�r Systemzeit",
@@ -2045,6 +2185,7 @@ const tI18nPhrase Phrases[] = {
"Anv�nd klockan fr�n transponder",
"Preia ceasul din transponder",
"Id�h�z tartoz� Transponder",
+ "Usar el temps del m�ltiplex",
},
{ "Setup.DVB$Primary DVB interface",
"Prim�res DVB Interface",
@@ -2061,6 +2202,7 @@ const tI18nPhrase Phrases[] = {
"Prim�r DVB enhet",
"Placa DVB primara",
"Els� DVB interface",
+ "Tarja DVB prim�ria",
},
{ "Setup.DVB$Video format",
"Video Format",
@@ -2077,6 +2219,7 @@ const tI18nPhrase Phrases[] = {
"Video format",
"Format Video",
"Video form�tum",
+ "Format del v�deo",
},
{ "Setup.LNB$SLOF (MHz)",
"SLOF (MHz)",
@@ -2093,6 +2236,7 @@ const tI18nPhrase Phrases[] = {
"SLOF (MHz)",
"SLOF (MHz)",
"SLOF (MHz)",
+ "SLOF (MHz)",
},
{ "Setup.LNB$Low LNB frequency (MHz)",
"Untere LNB-Frequenz (MHz)",
@@ -2109,6 +2253,7 @@ const tI18nPhrase Phrases[] = {
"Undre LNB frekvens (MHz)",
"Frecvnta LO LNB (Mhz)",
"Als� LNB-frekvencia (MHZ)",
+ "Freq��ncia LNB baixa (MHz)",
},
{ "Setup.LNB$High LNB frequency (MHz)",
"Obere LNB-Frequenz (MHz)",
@@ -2125,6 +2270,7 @@ const tI18nPhrase Phrases[] = {
"�vre LNB frekvens (MHz)",
"Feecventa HI LNB (MHz)",
"Fels� LNB-frekvencia (MHZ)",
+ "Freq��ncia LNB alta (MHz)",
},
{ "Setup.LNB$Use DiSEqC",
"DiSEqC benutzen",
@@ -2141,6 +2287,7 @@ const tI18nPhrase Phrases[] = {
"Anv�nd DiSEqC",
"Utilizez DiSEqC",
"DiSEqC haszn�lata",
+ "Utilitzar DiSEqC",
},
{ "Setup.CICAM$CICAM DVB",
"CICAM DVB",
@@ -2157,6 +2304,7 @@ const tI18nPhrase Phrases[] = {
"CICAM DVB",
"Setare acces conditional",
"CICAM DVB",
+ "Acc�s condicional CICAM",
},
{ "Setup.Recording$Margin at start (min)",
"Zeitpuffer bei Anfang (min)",
@@ -2173,6 +2321,7 @@ const tI18nPhrase Phrases[] = {
"Marginal f�r start (min)",
"Margine la pornire (min)",
"Id�eltol�d�s a kezd�sn�l (min)",
+ "Iniciar la gravaci� avans de (min)",
},
{ "Setup.Recording$Margin at stop (min)",
"Zeitpuffer bei Ende (min)",
@@ -2189,6 +2338,7 @@ const tI18nPhrase Phrases[] = {
"Marginal f�r stopp (min)",
"Margine la oprire (min)",
"Id�eltol�d�s a befejez�sn�l",
+ "Acavar la gravaci� despr�s de (min)",
},
{ "Setup.Recording$Primary limit",
"Prim�r-Limit",
@@ -2200,11 +2350,12 @@ const tI18nPhrase Phrases[] = {
"Prioritetsgrense HovedDVB",
"PrimaryLimit",
"Pierwotny limit",
- "L'mite primario",
+ "L�mite primario",
"Protevon orio",
"Prim�r gr�ns",
"Limita Primara",
"Prim�r-hat�r",
+ "L�mit primari",
},
{ "Setup.Recording$Default priority",
"Default Priorit�t",
@@ -2221,6 +2372,7 @@ const tI18nPhrase Phrases[] = {
"Normal prioritet",
"Prioritate implicita",
"Default priority",
+ "Prioritat per defecte",
},
{ "Setup.Recording$Pause lifetime (d)",
"Pause Lebensdauer (d)",
@@ -2237,6 +2389,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
+ "Duraci� de la pausa (d)",
},
{ "Setup.Recording$Pause priority",
"Pause Priorit�t",
@@ -2253,6 +2406,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
+ "Prioritat de la pausa",
},
{ "Setup.Recording$Default lifetime (d)",
"Default Lebensdauer (d)",
@@ -2269,6 +2423,7 @@ const tI18nPhrase Phrases[] = {
"Normal livstid",
"Durata predefinita",
"Default �lettartam",
+ "Duraci� predefinida",
},
{ "Setup.Recording$Use episode name",
"Episodenname verwenden",
@@ -2285,6 +2440,7 @@ const tI18nPhrase Phrases[] = {
"Anv�nd episodnamn",
"Utilizeaza numele episodului",
"Epiz�dn�v felhaszn�l�sa",
+ "Utilitzar el nom de l'episodi",
},
{ "Setup.Recording$Mark instant recording",
"Direktaufzeichnung markieren",
@@ -2301,6 +2457,7 @@ const tI18nPhrase Phrases[] = {
"M�rk direktinspelning",
"Inregistrare imediata",
"Direktfelv�tel megjel�l�se",
+ "Marcar gravaci� instant�nia",
},
{ "Setup.Recording$Name instant recording",
"Direktaufzeichnung benennen",
@@ -2317,6 +2474,7 @@ const tI18nPhrase Phrases[] = {
"Namnge direktinspelning",
"Nume inregistrare imediata",
"Direktfelv�tel megnevez�se",
+ "Anomenar gravacions instant�nies",
},
{ "Setup.Recording$Instant rec. time (min)",
"Dauer der Direktaufzeichnung (min)",
@@ -2328,11 +2486,12 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"Pikanauhoituksen pituus (min)",
"",//TODO
- "",//TODO
+ "Tiempo de grabaci�n instant�nea (min)",
"Stigmiees egrafes xronos (lepta)",
"Direktinspelning l�ngd (min)",
"Timpul de inregistarea imediata (min)",
"Felv�tel id�tartama",
+ "Temps de gravaci� instant�nia (min)",
},
{ "Setup.Recording$Record Dolby Digital",
"Dolby Digital Ton aufzeichnen",
@@ -2349,6 +2508,7 @@ const tI18nPhrase Phrases[] = {
"Spela in ljud med Dolby Digital",
"Inregistreaza Dolby Digital",
"Dolby Digit�l felv�tel",
+ "Gravar el s� en Dolby Digital",
},
{ "Setup.Recording$Max. video file size (MB)",
"Max. Video Dateigr��e (MB)",
@@ -2360,11 +2520,12 @@ const tI18nPhrase Phrases[] = {
"Maksimal st�rrelse p� videofiler (MB)",
"Maksimi tiedoston koko (MB)",
"Maks. wielkosc pliku (MB)",
- "Tama�o m�x. ficheros (MB)",
+ "Tama�o m�x. de fichero (MB)",
"Megisto megethos arxeiou (MB)",
"Maximal filstorlek f�r inspelning (MB)",
"Dimensiune maxima a fisierului video (MB)",
"Max. video File-terjedelem (MB)",
+ "Tamany m�xim de l'arxiu (MB)",
},
{ "Setup.Recording$Split edited files",
"Editierte Dateien aufteilen",
@@ -2381,6 +2542,7 @@ const tI18nPhrase Phrases[] = {
"Dela upp editerade filer",
"Separare fisiere editate",
"Feldolgozott File-k feloszt�sa",
+ "Separar arxius",
},
{ "Setup.Replay$Multi speed mode",
"MultiSpeed Modus",
@@ -2397,6 +2559,7 @@ const tI18nPhrase Phrases[] = {
"Multispeed mode",
"Mod multi-rata",
"MultiSpeed funkci�",
+ "Mode de multi-velocitat",
},
{ "Setup.Replay$Show replay mode",
"Wiedergabestatus anzeigen",
@@ -2413,6 +2576,7 @@ const tI18nPhrase Phrases[] = {
"Visa uppspelnings mode",
"Afiseaza modul de redare",
"Lej�tsz�s felt�ntet�se",
+ "Mostrar mode de reproducci�",
},
{ "Setup.Replay$Resume ID",
"Wiedergabe ID",
@@ -2424,11 +2588,12 @@ const tI18nPhrase Phrases[] = {
"Resume ID",// TODO
"Resume ID",// TODO
"Resume ID",// TODO
+ "Continuar ID",
"Resume ID",// TODO
"Resume ID",// TODO
"Resume ID",// TODO
"Resume ID",// TODO
- "Resume ID",// TODO
+ "Continuar ID",
},
{ "Setup.Miscellaneous$Min. event timeout (min)",
"Mindest Event Pause (min)",
@@ -2445,6 +2610,7 @@ const tI18nPhrase Phrases[] = {
"Minsta h�ndelse-pause (min)",
"MinEventTimeout (min)",
"Min. esem�ny sz�net (min)",
+ "Temps m�nim en pausa (min)",
},
{ "Setup.Miscellaneous$Min. user inactivity (min)",
"Mindest Benutzer-Inaktivit�t (min)",
@@ -2461,6 +2627,7 @@ const tI18nPhrase Phrases[] = {
"Minsta an�ndar-inaktivitet (min)",
"Durata minima de inactivitate (min)",
"Min. kezel�si aktivit�s (min)",
+ "Temps m�nim d'inactivitat (min)",
},
{ "Setup.Miscellaneous$SVDRP timeout (s)",
"SVDRP Timeout (s)",
@@ -2472,11 +2639,12 @@ const tI18nPhrase Phrases[] = {
"Ubrukt SVDRP-levetid (s)",
"SVDRP odotusaika (s)",
"Min. brak aktywnosci SVDRP (s)",
- "SVDRP interrupci�n (s)",
+ "SVDRP Timeout (s)",
"SVDRP Timeout (d)",
"SVDRP Timeout (d)",
"Timeout SVDRP (sec)",
"SVDRP Timeout (s)",
+ "SVDRP Timeout (s)",
},
// The days of the week:
{ "MTWTFSS",
@@ -2494,6 +2662,7 @@ const tI18nPhrase Phrases[] = {
"MTOTFLS",
"LMMJVSD",
"HKSCPSV",
+ "LMXJVSU",
},
{ "MonTueWedThuFriSatSun", // must all be 3 letters!
"MonDieMitDonFreSamSon",
@@ -2510,6 +2679,7 @@ const tI18nPhrase Phrases[] = {
"M�nTisOnsTorFreL�rS�n",
"LunMarMieJoiVinSimDum",
"H�tKedSzeCs�P�nSzoVas",
+ "DllDimDmcDijDivDisDiu",
},
// The allowed characters in strings:
{ " abcdefghijklmnopqrstuvwxyz0123456789-.#~",
@@ -2527,6 +2697,7 @@ const tI18nPhrase Phrases[] = {
" abcdefghijklmnopqrstuvxyz���0123456789-.#~",
" abcdefghijklmnopqrstuvwxyz0123456789-.#~",
" a�bcde�fghijklmno��pqrstu��vwxyz0123456789-.,#~",
+ " a�bc�de��fghi�jklmno�pqrstu�vwxyz0123456789-.,#~_�",
},
// Learning keys:
{ "Learning Remote Control Keys (%s)",
@@ -2544,6 +2715,7 @@ const tI18nPhrase Phrases[] = {
"Inl�rning av fj�rrkontrollsknappar (%s)",
"Invatare taste telecomanda (%s)",
"T�vir�ny�t� betan�t�sa (%s)",
+ "Aprenent les tecles del comandament a dist�ncia (%s)",
},
{ "Phase 1: Detecting RC code type",
"Phase 1: FB Code feststellen",
@@ -2560,6 +2732,7 @@ const tI18nPhrase Phrases[] = {
"Steg1: identifiering av RC kod",
"Faza 1: Detectie tip telecomanda",
"Els� l�p�s: t�vir�ny�t� k�dj�nak meghat�roz�sa",
+ "Fase 1: Detectant el tipus de receptor",
},
{ "Press any key on the RC unit",
"Eine Taste auf der FB dr�cken",
@@ -2576,6 +2749,7 @@ const tI18nPhrase Phrases[] = {
"Tryck valfri tangent p� fj�rrkontrollen",
"Apasati o tasta pe telecomanda",
"Nyomjon meg egy gombot a t�vir�ny�t�n",
+ "Premi qualsevol tecla del comandament",
},
{ "RC code detected!",
"FB Code erkannt!",
@@ -2592,6 +2766,7 @@ const tI18nPhrase Phrases[] = {
"RC koden detekterad!",
"S-a detectat tipul telecomenzii!",
"T�vir�ny�t� k�dja felismerve!",
+ "Codi detectat!",
},
{ "Do not press any key...",
"Keine Taste dr�cken...",
@@ -2603,11 +2778,12 @@ const tI18nPhrase Phrases[] = {
"Ikke trykk p� noen av tastene...",
"�l� paina mit��n n�pp�int�...",
"Nie naciskac klawiszy...",
- "No pulse tecla...",
+ "No pulse ninguna tecla...",
"Min piezeis pliktra...",
"Tryck inte p� n�gon knapp...",
"Nu apasati nicio tasta...",
"Ne nyomjon meg gombot...",
+ "No premi cap tecla...",
},
{ "Phase 2: Learning specific key codes",
"Phase 2: Einzelne Tastencodes lernen",
@@ -2624,6 +2800,7 @@ const tI18nPhrase Phrases[] = {
"Fas 2: Inl�rning av specifika knapp koder",
"Faza 2: Invatarea codurilor specifice tastelor",
"M�sodik l�p�s: az egyes gombok betan�t�sa",
+ "Fase 2: Aprenentantge de les funcions",
},
{ "Press key for '%s'",
"Taste f�r '%s' dr�cken",
@@ -2640,6 +2817,7 @@ const tI18nPhrase Phrases[] = {
"Tryck p� knappen f�r '%s'",
"Apasati tasta pentru '%s'",
"'%s' gomb megnyom�sa",
+ "Premi una tecla per '%s'",
},
{ "Press 'Up' to confirm",
"'Auf' dr�cken zum Best�tigen",
@@ -2656,6 +2834,7 @@ const tI18nPhrase Phrases[] = {
"Tryck 'Upp' f�r att bekr�fta",
"Apsati 'Sus' pentru confirmare",
"'Fel' megnyom�sa az elfogad�shoz",
+ "Premi 'Amunt' per confirmar",
},
{ "Press 'Down' to continue",
"'Ab' dr�cken zum Weitermachen",
@@ -2672,6 +2851,7 @@ const tI18nPhrase Phrases[] = {
"Tryck 'Ner' f�r att bekr�fta",
"Apasati jos pentru continuare",
"'Le' megnyom�sa a folytat�shoz",
+ "Premi 'Avall' per continuar",
},
{ "(press 'Up' to go back)",
"('Auf' dr�cken um zur�ckzugehen)",
@@ -2688,6 +2868,7 @@ const tI18nPhrase Phrases[] = {
"(Tryck 'Upp' f�r att backa)",
"(Apsati 'Sus' pentru revenire)",
"(�Fel' megnyom�sa a visszat�r�shez)",
+ "(Premi 'Amunt' per retornar)",
},
{ "(press 'Down' to end key definition)",
"('Ab' dr�cken zum Beenden)",
@@ -2704,6 +2885,7 @@ const tI18nPhrase Phrases[] = {
"(Tryck 'Ner' f�r att avsluta knapp definition)",
"(Apasati 'Jos' pentru terminare)",
"('Le' megnyom�sa a befejez�shez)",
+ "(Premi 'Avall' per finalitzar l'aprenentatge)",
},
{ "(press 'Menu' to skip this key)",
"('Men�' dr�cken zum �berspringen)",
@@ -2715,11 +2897,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"(Paina 'Valikko' jos n�pp�int� ei ole)",
"",// TODO
- "",// TODO
+ "Pulse 'Menu' para saltarse esta tecla",
"Pata 'Menou' gia prosperasi aftou tou pliktrou",
"",// TODO
"",// TODO
"",// TODO
+ "Premi 'Menu' per obviar aquesta tecla",
},
{ "Phase 3: Saving key codes",
"Phase 3: Codes abspeichern",
@@ -2736,6 +2919,7 @@ const tI18nPhrase Phrases[] = {
"Fas 3: Spara knappkoder",
"Faza 3: Salvarea codurilor de taste",
"Harmadik l�p�s: k�d ment�se",
+ "Fase 3: Guardant els codis de les tecles",
},
{ "Press 'Up' to save, 'Down' to cancel",
"'Auf' speichert, 'Ab' bricht ab",
@@ -2747,11 +2931,12 @@ const tI18nPhrase Phrases[] = {
"Trykk 'Opp' for � lagre, 'Ned' for � avbryte",
"Paina 'Yl�s' tallettaaksesi ja 'Alas' peruuttaaksesi",
"'Gora' zapamietuje, 'Dol' przerywa",
- "Pulse 'Arriba' para guarder, 'Abajo' para anular",
+ "Pulse 'Arriba' para guardar, 'Abajo' para anular",
"'Pano' apothikevsi, 'Kato' akirosi",
"Tryck 'Upp' f�r att spara, 'Ner' f�r att avsluta",
"Apsati 'Sus' pentru salvare, 'Jos' pentru anulare",
"'Fel' ment�s, 'Le� m�gse",
+ "Premi 'Amunt' per guardar, 'Avall' per anul.lar",
},
// Key names:
{ "Up",
@@ -2769,6 +2954,7 @@ const tI18nPhrase Phrases[] = {
"Upp",
"Sus",
"Fel",
+ "Amunt",
},
{ "Down",
"Ab",
@@ -2785,6 +2971,7 @@ const tI18nPhrase Phrases[] = {
"Ner",
"Jos",
"Le",
+ "Avall",
},
{ "Menu",
"Men�",
@@ -2801,6 +2988,7 @@ const tI18nPhrase Phrases[] = {
"Meny",
"Meniu",
"Men�",
+ "Men�",
},
{ "Ok",
"Ok",
@@ -2817,6 +3005,7 @@ const tI18nPhrase Phrases[] = {
"Ok",
"Ok",
"Ok",
+ "Ok",
},
{ "Back",
"Zur�ck",
@@ -2833,6 +3022,7 @@ const tI18nPhrase Phrases[] = {
"Tillbaka",
"Inapoi",
"Vissza",
+ "Retornar",
},
{ "Left",
"Links",
@@ -2849,6 +3039,7 @@ const tI18nPhrase Phrases[] = {
"V�nster",
"Stinga",
"Balra",
+ "Esquerra",
},
{ "Right",
"Rechts",
@@ -2865,6 +3056,7 @@ const tI18nPhrase Phrases[] = {
"H�ger",
"Dreapta",
"Jobbra",
+ "Dreta"
},
{ "Red",
"Rot",
@@ -2881,6 +3073,7 @@ const tI18nPhrase Phrases[] = {
"R�d",
"Rosu",
"Piros",
+ "Vermell"
},
{ "Green",
"Gr�n",
@@ -2897,6 +3090,7 @@ const tI18nPhrase Phrases[] = {
"Gr�n",
"Verde",
"Z�ld",
+ "Verd",
},
{ "Yellow",
"Gelb",
@@ -2913,6 +3107,7 @@ const tI18nPhrase Phrases[] = {
"Gul",
"Galben",
"S�rga",
+ "Groc",
},
{ "Blue",
"Blau",
@@ -2929,6 +3124,7 @@ const tI18nPhrase Phrases[] = {
"Bl�",
"Albastru",
"K�k",
+ "Blau",
},
{ "Play",
"Wiedergabe",
@@ -2940,11 +3136,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Reproducir",
"Anametadosi",
"Spela upp",
"",// TODO
"",// TODO
+ "Reproduir",
},
{ "Pause",
"Pause",
@@ -2956,11 +3153,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Pausa",
"Dialima",
"Pausa",
"",// TODO
"",// TODO
+ "Pausa",
},
{ "Stop",
"Stop",
@@ -2972,11 +3170,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Parar",
"Terma",
"Stoppa",
"",// TODO
"",// TODO
+ "Parar",
},
{ "Record",
"Aufnehmen",
@@ -2988,11 +3187,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Grabar",
"Egrafi",
"Spela in",
"",// TODO
"",// TODO
+ "Gravar",
},
{ "FastFwd",
"Vorlauf",
@@ -3004,11 +3204,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Adelante r�pido",
"Girisma mprosta",
"Spola fram�t",
"",// TODO
"",// TODO
+ "Endavant r�pidament",
},
{ "FastRew",
"R�cklauf",
@@ -3020,11 +3221,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Atr�s r�pido",
"Girisma piso",
"Spola bak�t",
"",// TODO
"",// TODO
+ "Enrera r�pidament",
},
{ "Power",
"Ausschalten",
@@ -3041,6 +3243,7 @@ const tI18nPhrase Phrases[] = {
"P�/Av",
"Pornit",
"Kikapcsolni",
+ "Parar",
},
{ "Channel+",
"Kanal+",
@@ -3052,11 +3255,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Canal +",
"Kanali+",
"Kanal+",
"",// TODO
"",// TODO
+ "Canal +",
},
{ "Channel-",
"Kanal-",
@@ -3068,11 +3272,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Canal -",
"Kanali-",
"Kanal-",
"",// TODO
"",// TODO
+ "Canal -",
},
{ "Volume+",
"Lautst�rke+",
@@ -3089,6 +3294,7 @@ const tI18nPhrase Phrases[] = {
"Volym+",
"Volum+",
"Hanger�+",
+ "Volum +",
},
{ "Volume-",
"Lautst�rke-",
@@ -3105,6 +3311,7 @@ const tI18nPhrase Phrases[] = {
"Volym-",
"Volum-",
"Hanger�-",
+ "Volum -",
},
{ "Mute",
"Stumm",
@@ -3121,6 +3328,7 @@ const tI18nPhrase Phrases[] = {
"Ljud Av",
"Mut(e)",
"Csend",
+ "En silenci",
},
// Miscellaneous:
{ "yes",
@@ -3138,6 +3346,7 @@ const tI18nPhrase Phrases[] = {
"ja",
"da",
"igen",
+ "s�",
},
{ "no",
"nein",
@@ -3154,6 +3363,7 @@ const tI18nPhrase Phrases[] = {
"nej",
"nu",
"nem",
+ "no",
},
{ "off",
"aus",
@@ -3165,11 +3375,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "off",
"klisto",
"av",
"",// TODO
"",// TODO
+ "off",
},
{ "none",
"keine",
@@ -3181,11 +3392,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "ninguno"
"kanena",
"",// TODO
"",// TODO
"",// TODO
+ "cap",
},
{ "auto",
"auto",
@@ -3197,11 +3409,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "auto",
"aftomato",
"",// TODO
"",// TODO
"",// TODO
+ "auto",
},
{ "top",
"oben",
@@ -3213,11 +3426,12 @@ const tI18nPhrase Phrases[] = {
"�vre",
"yl�",
"gora",
- "parte sup.",
+ "parte superior",
"pano",
"�vre",
"sus",
"Fent",
+ "a dalt",
},
{ "bottom",
"unten",
@@ -3229,11 +3443,12 @@ const tI18nPhrase Phrases[] = {
"nedre",
"ala",
"dol",
- "fondo",
+ "parte inferior",
"kato",
"nedre",
"jos",
"lent",
+ "a baix",
},
{ "Disk",
"Disk",
@@ -3250,6 +3465,7 @@ const tI18nPhrase Phrases[] = {
"Disk",
"Disc",
"Lemez",
+ "Disc"
},
{ "free",
"frei",
@@ -3266,6 +3482,7 @@ const tI18nPhrase Phrases[] = {
"ledigt",
"liber",
"szabad",
+ "lliure"
},
{ "Jump: ", // note the trailing blank
"Springen: ",
@@ -3277,11 +3494,12 @@ const tI18nPhrase Phrases[] = {
"Hopp: ",
"Hypp��: ",
"Skok: ",
- "Saltar: ",
+ "Salta a: ",
"Pidima: ",
"Hopp: ",
"Salt: ",
"Ugr�s: ",
+ "Salta a:"
},
{ "Volume ", // note the trailing blank
"Lautst�rke ",
@@ -3298,6 +3516,7 @@ const tI18nPhrase Phrases[] = {
"Volym ",
"Volum ",
"Hanger� ",
+ "Volum ",
},
{ " Stop replaying", // note the leading blank!
" Wiedergabe beenden",
@@ -3314,6 +3533,7 @@ const tI18nPhrase Phrases[] = {
" Avsluta uppspelning",
" Opreste redare",
" Lej�tsz�st befejzni",
+ " Parar la reproducci�",
},
{ " Stop recording ", // note the leading and trailing blanks!
" Aufzeichnung beenden ",
@@ -3330,6 +3550,7 @@ const tI18nPhrase Phrases[] = {
" Avsluta inspelning ",
" Opreste inregistrarea ",
" Felv�telt befejezni ",
+ " Parar la gravaci� ",
},
{ " Cancel editing", // note the leading blank!
" Schneiden abbrechen",
@@ -3341,11 +3562,12 @@ const tI18nPhrase Phrases[] = {
" Avbryt redigering",
" Peruuta muokkaus",
" Przerwac montaz",
- " Anular modificaci�n",
+ " Anular modificaci�n ",
" Akirosi epexsergasias",
" Avbryt editering",
" Opreste editare",
" V�g�st megszak�tani",
+ " Cancel�lar l'edici� ",
},
{ "Switching primary DVB...",
"Prim�res Interface wird umgeschaltet...",
@@ -3357,11 +3579,12 @@ const tI18nPhrase Phrases[] = {
"Bytter f�rste DVB-enhet...",
"Vaihdetaan ensisijainen vastaanotin...",
"Pierwszy interfejs DVB przelacza...",
- "Cambio interface primario...",
+ "Cambio al interface DVB primario...",
"I protevon DVB Karta alazi...",
"Byter prim�r DVB enhet...",
"Comuta interfata primara DVB...",
"Prim�r Interface �tkapcsolva...",
+ "Canviant a la interf�cie DVB prim�ria...",
},
{ "Up/Dn for new location - OK to move",
"Auf/Ab f�r neue Position - dann OK",
@@ -3373,11 +3596,12 @@ const tI18nPhrase Phrases[] = {
"Opp/Ned for ny plass - OK for � flytte",
"Yl�s/Alas = liiku, OK = siirr�",
"Gora/Dol na nowa pozycje - Ok zmienia",
- "Arriba/Abajo para nuevo lugar - OK para mover",
+ "Arriba/Abajo para el nuevo lugar - OK para mover",
"Pano/Kato gia nea thesi. meta OK",
"Upp/Ner f�r ny plats - OK f�r att flytta",
"Sus/Jos pentru noua locatie - OK pentru a muta",
"Fel/Le egy uj opci��rt - azt�n OK",
+ "Amunt/Avall per una nova localitzaci� - OK per moure",
},
{ "Editing process started",
"Schnitt gestartet",
@@ -3394,6 +3618,7 @@ const tI18nPhrase Phrases[] = {
"Editering startad",
"Procesul de editare a inceput",
"V�g�s elind�tva",
+ "Proc�s d'edici� iniciat",
},
{ "Editing process finished",
"Schnitt beendet",
@@ -3405,11 +3630,12 @@ const tI18nPhrase Phrases[] = {
"Redigeringsprosess avsluttet",
"Muokkaus lopetettu",
"Proces montazu zakonczony",
- "Proceso modificacion terminado",
+ "Proceso de modificaci�n terminado",
"I epexsergasia teliose",
"Editering avslutad",
"Procesul de editare s-a terminat",
"V�g�s befejezve",
+ "Proc�s d'edici� finalitzat",
},
{ "Editing process failed!",
"Schnitt gescheitert!",
@@ -3426,6 +3652,7 @@ const tI18nPhrase Phrases[] = {
"Editeringsprocessen misslyckades",
"Proces de editare nereusit",
"V�g�s sikertelen!",
+ "Proc�s d'edici� fallit!",
},
{ "scanning recordings...",
"Aufzeichnungen werden durchsucht...",
@@ -3442,6 +3669,7 @@ const tI18nPhrase Phrases[] = {
"S�ker igenom inspelningarna...",
"Caut inregistrari...",
"Felvett ad�sok b�ng�sz�se...",
+ "cercant gravacions...",
},
{ "Pausing live video...",
"Live-Signal wird angehalten...",
@@ -3453,11 +3681,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
+ "Emisi�n en directo parada...",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
+ "Pausa d'emissi� en directe..."
},
{ "This plugin has no setup parameters!",
"Dieses Plugin hat keine Setup-Parameter!",
@@ -3469,11 +3698,12 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"T�ll� laajennoksella ei ole asetuksia!",
"",// TODO
- "",// TODO
+ "Este plugin no admite configuraci�n",
"Afto to plugin den exi parametrous",
"",// TODO
"",// TODO
"",// TODO
+ "Aquest plugin no admet configuraci�!",
},
{ NULL }
};
diff --git a/i18n.h b/i18n.h
index f7ff268..cb8a088 100644
--- a/i18n.h
+++ b/i18n.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: i18n.h 1.5 2002/06/22 09:12:21 kls Exp $
+ * $Id: i18n.h 1.6 2003/05/16 12:48:52 kls Exp $
*/
#ifndef __I18N_H
@@ -12,7 +12,7 @@
#include <stdio.h>
-const int I18nNumLanguages = 15;
+const int I18nNumLanguages = 16;
typedef const char *tI18nPhrase[I18nNumLanguages];
diff --git a/menu.c b/menu.c
index b8dbf5b..f4c58b3 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 1.243 2003/05/11 13:58:13 kls Exp $
+ * $Id: menu.c 1.245 2003/05/16 12:40:12 kls Exp $
*/
#include "menu.h"
@@ -2909,7 +2909,7 @@ eOSState cDisplayVolume::ProcessKey(eKeys Key)
// --- cRecordControl --------------------------------------------------------
-cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause = false)
+cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause)
{
eventInfo = NULL;
instantId = NULL;
@@ -3494,7 +3494,9 @@ void cReplayControl::EditCut(void)
if (fileName) {
Hide();
if (!cCutter::Active()) {
- if (!cCutter::Start(fileName))
+ if (!marks.Count())
+ Interface->Error(tr("No editing marks defined!"));
+ else if (!cCutter::Start(fileName))
Interface->Error(tr("Can't start editing process!"));
else
Interface->Info(tr("Editing process started"));
diff --git a/recorder.c b/recorder.c
index 15e8646..d7cc9c3 100644
--- a/recorder.c
+++ b/recorder.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recorder.c 1.5 2003/01/25 16:23:36 kls Exp $
+ * $Id: recorder.c 1.6 2003/05/16 13:33:04 kls Exp $
*/
#include <stdarg.h>
@@ -16,6 +16,10 @@
// (must be larger than MINVIDEODATA - see remux.h)
#define VIDEOBUFSIZE MEGABYTE(5)
+// The maximum time we wait before assuming that a recorded video data stream
+// is broken:
+#define MAXBROKENTIMEOUT 30 // seconds
+
#define MINFREEDISKSPACE (512) // MB
#define DISKCHECKINTERVAL 100 // seconds
@@ -110,6 +114,7 @@ void cRecorder::Action(void)
{
dsyslog("recording thread started (pid=%d)", getpid());
+ time_t t = time(NULL);
active = true;
while (active) {
int r;
@@ -134,6 +139,12 @@ void cRecorder::Action(void)
else
break;
}
+ t = time(NULL);
+ }
+ else if (time(NULL) - t > MAXBROKENTIMEOUT) {
+ esyslog("ERROR: video data stream broken");
+ cThread::EmergencyExit(true);
+ t = time(NULL);
}
else
usleep(1); // this keeps the CPU load low
diff --git a/recording.c b/recording.c
index 3610382..9105157 100644
--- a/recording.c
+++ b/recording.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.c 1.77 2003/05/11 13:09:08 kls Exp $
+ * $Id: recording.c 1.78 2003/05/18 15:17:45 kls Exp $
*/
#include "recording.h"
@@ -764,9 +764,6 @@ void cRecordingUserCommand::InvokeCommand(const char *State, const char *Recordi
#define INDEXFILESUFFIX "/index.vdr"
-// The maximum time to wait before giving up while catching up on an index file:
-#define MAXINDEXCATCHUP 2 // seconds
-
// The minimum age of an index file for considering it no longer to be written:
#define MININDEXAGE 3600 // seconds
@@ -850,50 +847,47 @@ bool cIndexFile::CatchUp(int Index)
{
// returns true unless something really goes wrong, so that 'index' becomes NULL
if (index && f >= 0) {
- for (int i = 0; i <= MAXINDEXCATCHUP && (Index < 0 || Index >= last); i++) {
- struct stat buf;
- if (fstat(f, &buf) == 0) {
- if (time(NULL) - buf.st_mtime > MININDEXAGE) {
- // apparently the index file is not being written any more
- close(f);
- f = -1;
- break;
- }
- int newLast = buf.st_size / sizeof(tIndex) - 1;
- if (newLast > last) {
- if (size <= newLast) {
- size *= 2;
- if (size <= newLast)
- size = newLast + 1;
- }
- index = (tIndex *)realloc(index, size * sizeof(tIndex));
- if (index) {
- int offset = (last + 1) * sizeof(tIndex);
- int delta = (newLast - last) * sizeof(tIndex);
- if (lseek(f, offset, SEEK_SET) == offset) {
- if (safe_read(f, &index[last + 1], delta) != delta) {
- esyslog("ERROR: can't read from index");
- free(index);
- index = NULL;
- close(f);
- f = -1;
- break;
- }
- last = newLast;
- }
- else
- LOG_ERROR_STR(fileName);
- }
- else
- esyslog("ERROR: can't realloc() index");
- }
- }
- else
- LOG_ERROR_STR(fileName);
- if (Index < last)
- break;
- sleep(1);
- }
+ if (Index < 0 || Index >= last) {
+ struct stat buf;
+ if (fstat(f, &buf) == 0) {
+ if (time(NULL) - buf.st_mtime > MININDEXAGE) {
+ // apparently the index file is not being written any more
+ close(f);
+ f = -1;
+ return true;
+ }
+ int newLast = buf.st_size / sizeof(tIndex) - 1;
+ if (newLast > last) {
+ if (size <= newLast) {
+ size *= 2;
+ if (size <= newLast)
+ size = newLast + 1;
+ }
+ index = (tIndex *)realloc(index, size * sizeof(tIndex));
+ if (index) {
+ int offset = (last + 1) * sizeof(tIndex);
+ int delta = (newLast - last) * sizeof(tIndex);
+ if (lseek(f, offset, SEEK_SET) == offset) {
+ if (safe_read(f, &index[last + 1], delta) != delta) {
+ esyslog("ERROR: can't read from index");
+ free(index);
+ index = NULL;
+ close(f);
+ f = -1;
+ return true;
+ }
+ last = newLast;
+ }
+ else
+ LOG_ERROR_STR(fileName);
+ }
+ else
+ esyslog("ERROR: can't realloc() index");
+ }
+ }
+ else
+ LOG_ERROR_STR(fileName);
+ }
}
return index != NULL;
}
diff --git a/ringbuffer.c b/ringbuffer.c
index 770b7c3..2cf9d75 100644
--- a/ringbuffer.c
+++ b/ringbuffer.c
@@ -7,7 +7,7 @@
* Parts of this file were inspired by the 'ringbuffy.c' from the
* LinuxDVB driver (see linuxtv.org).
*
- * $Id: ringbuffer.c 1.16 2003/05/11 09:47:56 kls Exp $
+ * $Id: ringbuffer.c 1.17 2003/05/12 17:38:11 kls Exp $
*/
#include "ringbuffer.h"
@@ -23,6 +23,7 @@ cRingBuffer::cRingBuffer(int Size, bool Statistics)
statistics = Statistics;
maxFill = 0;
lastPercent = 0;
+ putTimeout = getTimeout = 0;
}
cRingBuffer::~cRingBuffer()
@@ -31,6 +32,42 @@ cRingBuffer::~cRingBuffer()
dsyslog("buffer stats: %d (%d%%) used", maxFill, maxFill * 100 / (size - 1));
}
+void cRingBuffer::WaitForPut(void)
+{
+ if (putTimeout) {
+ putMutex.Lock();
+ readyForPut.TimedWait(putMutex, putTimeout);
+ putMutex.Unlock();
+ }
+}
+
+void cRingBuffer::WaitForGet(void)
+{
+ if (getTimeout) {
+ getMutex.Lock();
+ readyForGet.TimedWait(getMutex, getTimeout);
+ getMutex.Unlock();
+ }
+}
+
+void cRingBuffer::EnablePut(void)
+{
+ if (putTimeout)
+ readyForPut.Broadcast();
+}
+
+void cRingBuffer::EnableGet(void)
+{
+ if (getTimeout)
+ readyForGet.Broadcast();
+}
+
+void cRingBuffer::SetTimeouts(int PutTimeout, int GetTimeout)
+{
+ putTimeout = PutTimeout;
+ getTimeout = GetTimeout;
+}
+
// --- cRingBufferLinear -----------------------------------------------------
cRingBufferLinear::cRingBufferLinear(int Size, int Margin, bool Statistics)
@@ -68,6 +105,8 @@ void cRingBufferLinear::Clear(void)
head = tail = margin;
lastGet = -1;
Unlock();
+ EnablePut();
+ EnableGet();
}
int cRingBufferLinear::Put(const uchar *Data, int Count)
@@ -109,6 +148,9 @@ int cRingBufferLinear::Put(const uchar *Data, int Count)
else
Count = 0;
Unlock();
+ EnableGet();
+ if (Count == 0)
+ WaitForPut();
}
return Count;
}
@@ -134,6 +176,8 @@ uchar *cRingBufferLinear::Get(int &Count)
Count = lastGet = cont;
}
Unlock();
+ if (!p)
+ WaitForGet();
return p;
}
@@ -146,6 +190,7 @@ void cRingBufferLinear::Del(int Count)
if (tail >= Size())
tail = margin;
Unlock();
+ EnablePut();
}
else
esyslog("ERROR: invalid Count in cRingBufferLinear::Del: %d", Count);
@@ -196,6 +241,8 @@ void cRingBufferFrame::Clear(void)
while ((p = Get()) != NULL)
Drop(p);
Unlock();
+ EnablePut();
+ EnableGet();
}
bool cRingBufferFrame::Put(cFrame *Frame)
@@ -212,6 +259,7 @@ bool cRingBufferFrame::Put(cFrame *Frame)
}
currentFill += Frame->Count();
Unlock();
+ EnableGet();
return true;
}
return false;
@@ -249,6 +297,7 @@ void cRingBufferFrame::Drop(cFrame *Frame)
esyslog("ERROR: attempt to drop wrong frame from ring buffer!");
}
Unlock();
+ EnablePut();
}
int cRingBufferFrame::Available(void)
diff --git a/ringbuffer.h b/ringbuffer.h
index 6b25662..1506345 100644
--- a/ringbuffer.h
+++ b/ringbuffer.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ringbuffer.h 1.11 2003/05/11 09:48:23 kls Exp $
+ * $Id: ringbuffer.h 1.12 2003/05/12 17:35:10 kls Exp $
*/
#ifndef __RINGBUFFER_H
@@ -16,11 +16,19 @@
class cRingBuffer {
private:
cMutex mutex;
+ cCondVar readyForPut, readyForGet;
+ cMutex putMutex, getMutex;
+ int putTimeout;
+ int getTimeout;
int size;
protected:
int maxFill;//XXX
int lastPercent;
bool statistics;//XXX
+ void WaitForPut(void);
+ void WaitForGet(void);
+ void EnablePut(void);
+ void EnableGet(void);
virtual void Clear(void) = 0;
virtual int Available(void) = 0;
int Free(void) { return size - Available() - 1; }
@@ -30,6 +38,7 @@ protected:
public:
cRingBuffer(int Size, bool Statistics = false);
virtual ~cRingBuffer();
+ void SetTimeouts(int PutTimeout, int GetTimeout);
};
class cRingBufferLinear : public cRingBuffer {
diff --git a/thread.c b/thread.c
index 07c8f79..5fbcfd8 100644
--- a/thread.c
+++ b/thread.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.c 1.24 2003/05/03 14:03:32 kls Exp $
+ * $Id: thread.c 1.25 2003/05/18 12:45:13 kls Exp $
*/
#include "thread.h"
@@ -61,6 +61,7 @@ bool cCondVar::TimedWait(cMutex &Mutex, int TimeoutMs)
if (pthread_cond_timedwait(&cond, &Mutex.mutex, &abstime) == ETIMEDOUT)
r = false;
Mutex.locked = locked;
+ Mutex.lockingPid = getpid();
}
}
return r;
diff --git a/transfer.c b/transfer.c
index cdde552..b0a8bba 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.12 2003/05/11 08:48:05 kls Exp $
+ * $Id: transfer.c 1.13 2003/05/18 15:22:09 kls Exp $
*/
#include "transfer.h"
@@ -70,7 +70,7 @@ void cTransfer::Action(void)
active = true;
while (active) {
- //XXX+ Maybe we need this to avoid "buffer empty" log messages from the driver.
+ //XXX+ Maybe we need this to avoid buffer underruns in driver.
//XXX+ But then again, it appears to play just fine without this...
/*
if (!gotBufferReserve) {
diff --git a/vdr.c b/vdr.c
index c969e6e..7962c0a 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.cadsoft.de/people/kls/vdr
*
- * $Id: vdr.c 1.154 2003/05/11 08:39:09 kls Exp $
+ * $Id: vdr.c 1.155 2003/05/16 12:11:45 kls Exp $
*/
#include <getopt.h>
@@ -399,6 +399,11 @@ int main(int argc, char *argv[])
Interface = new cInterface(SVDRPport);
+ // Start plugins:
+
+ if (!PluginManager.StartPlugins())
+ return 2;
+
// Remote Controls:
#if defined(REMOTE_RCU)
new cRcuRemote("/dev/ttyS1");
@@ -444,11 +449,6 @@ int main(int argc, char *argv[])
alarm(WatchdogTimeout); // Initial watchdog timer start
}
- // Start plugins:
-
- if (!PluginManager.StartPlugins())
- return 2;
-
// Main program loop:
cOsdObject *Menu = NULL;