summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2009-06-14 13:49:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2009-06-14 13:49:00 +0200
commitab6f2ccf424896a80b6e2fdf9ab9313ea4b7f316 (patch)
treecd6cf2c6307c8a58f137e12286674cc8f1366dc5
parent991eda006700f1703bcec528c1ff178a4cab9048 (diff)
downloadvdr-patch-lnbsharing-ab6f2ccf424896a80b6e2fdf9ab9313ea4b7f316.tar.gz
vdr-patch-lnbsharing-ab6f2ccf424896a80b6e2fdf9ab9313ea4b7f316.tar.bz2
Version 1.7.8vdr-1.7.8
- The name of the function cDevice::GetVideoSize() wasn't very well chosen for its purpose of defining the optimum size of the OSD for the current output device. Therefore a new function named cDevice::GetOsdSize() has been introduced (suggested by Rolf Ahrenberg). Plugin authors should implement this function in classes derived from cDevice, if they are able to replay video. cDevice::GetVideoSize() still exists and should return the actual size of the video material that is currently replayed. Note that because of the many possible aspect ratios for video material, the type of the Aspect parameter of GetVideoSize() has been changed to 'double', and the Aspect parameter in both functions is named differently, because it returns different values (suggested by Reinhard Nissl). Thanks to Oliver Endriss for his input on calculating the Aspect factor in GetOsdSize(). - Fixed the way the OSD size is determined on full featured DVB cards (thanks to Oliver Endriss). - Increased MAXOSDHEIGHT to 1200 (suggested by Nicolas Huillard). - Removed limitation to PAL resolution from SPU handling. - Checking fd_video in cDvbDevice::GetVideoSize() to avoid error messages on systems with no real primary replay device (reported by Martin Neuditschko). - Added a note to cTsToPes::GetPes() about having to call it repeatedly, once it has returned a non-NULL value. - Added MPEG 1 handling to remux.c (thanks to Ales Jurik). - Fixed use of time_t in cEIT::cEIT() (thanks to Tobias Bratfisch). - Added missing update of lastOsdSizeUpdate. - EIT events are now only processed if a plausible system time is available, to avoid wrong handling of PDC descriptors (thanks to Tobias Bratfisch). - Removed unused 'synced' member from cTsToPes (reported by Christoph Haubrich). - Added a note to cTsToPes about all TS packets having to belong to the same PID, and that for video data GetPes() may only be called if the next TS packet that will be given to PutTs() has the "payload start" flag set (suggested by Christoph Haubrich). - Added a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage() (thanks to Rolf Ahrenberg). - The new setup option "Recording/Pause key handling" can be used to define what happens if the Pause key on the remote control is pressed during live tv (thanks to Timo Eskola). - Added a note about cFont::GetFont() not being thread-safe. - Fixed generating PAT/PMT version numbers in case the PIDs change during recording (reported by Reinhard Nissl). - Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk). - Fixed a memory leak when reaching the end of a recording during replay (reported by Reinhard Nissl). - Fixed calling close(-1) in cUnbufferedFile::Close() (reported by Reinhard Nissl). - Added a workaround for the broken linux-dvb driver header files (based on a patch from Tobias Grimm). - Fixed handling the length of DiSEqC command sequences (reported by Reinhard Nissl). - Fixed cOsdMenu::Display() in case the menu size has changed (thanks to Reinhard Nissl). - Added some missing 'const' keywords to avoid compilation errors with gcc 4.4 (thanks to Ville Skyttä and Ludwig Nussel). - Modified cSVDRP::CmdGRAB() to avoid writing into const data (reported by Ludwig Nussel). - Fixed calculating menu colum widths in case the font has a size other than the default size (reported by Reinhard Nissl). - Added a plausibility check for the OSD percentage parameters to avoid problems in case the values are stored in the setup.conf file in a wrong way. - Fixed variable types in cIndexFile (reported by Udo Richter).
-rw-r--r--CONTRIBUTORS32
-rw-r--r--HISTORY61
-rw-r--r--MANUAL7
-rw-r--r--PLUGINS.html4
-rw-r--r--config.c20
-rw-r--r--config.h14
-rw-r--r--device.c23
-rw-r--r--device.h31
-rw-r--r--dvbdevice.c71
-rw-r--r--dvbdevice.h6
-rw-r--r--dvbplayer.c84
-rw-r--r--dvbspu.c31
-rw-r--r--dvbspu.h8
-rw-r--r--eit.c9
-rw-r--r--font.h10
-rw-r--r--menu.c8
-rw-r--r--osd.c11
-rw-r--r--osd.h4
-rw-r--r--osdbase.c3
-rw-r--r--po/ca_ES.po17
-rw-r--r--po/cs_CZ.po17
-rw-r--r--po/da_DK.po17
-rw-r--r--po/de_DE.po17
-rw-r--r--po/el_GR.po17
-rw-r--r--po/es_ES.po17
-rw-r--r--po/et_EE.po17
-rw-r--r--po/fi_FI.po17
-rw-r--r--po/fr_FR.po17
-rw-r--r--po/hr_HR.po17
-rw-r--r--po/hu_HU.po17
-rw-r--r--po/it_IT.po17
-rw-r--r--po/nl_NL.po17
-rw-r--r--po/nn_NO.po17
-rw-r--r--po/pl_PL.po17
-rw-r--r--po/pt_PT.po17
-rw-r--r--po/ro_RO.po17
-rw-r--r--po/ru_RU.po17
-rw-r--r--po/sl_SI.po17
-rw-r--r--po/sv_SE.po17
-rw-r--r--po/tr_TR.po17
-rw-r--r--po/uk_UA.po655
-rw-r--r--po/zh_CN.po17
-rw-r--r--recorder.c8
-rw-r--r--recording.c68
-rw-r--r--recording.h3
-rw-r--r--remux.c41
-rw-r--r--remux.h31
-rw-r--r--ringbuffer.c4
-rw-r--r--skins.c5
-rw-r--r--svdrp.c15
-rw-r--r--tools.c14
-rw-r--r--vdr.c14
52 files changed, 1147 insertions, 522 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 7bdc251..7cdfa22 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -672,6 +672,8 @@ Oliver Endriss <o.endriss@gmx.de>
VPID is 0
for reporting chirping sound disturbences at editing points in TS recordings
for reporting broken index generation in TS recordings after a buffer overflow
+ for fixing the way the OSD size is determined on full featured DVB cards
+ for his input on calculating the Aspect factor in GetOsdSize()
Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
@@ -918,6 +920,8 @@ Ludwig Nussel <ludwig.nussel@web.de>
for a hint on using _nl_msg_cat_cntr
for adding some missing 'const' keywords
for pointing out that "%016llX" should be used instead of "%016LX"
+ for adding some missing 'const' keywords to avoid compilation errors with gcc 4.4
+ for reporting that cSVDRP::CmdGRAB() writes into const data
Thomas Koch <tom@harhar.net>
for his support in keeping the Premiere World channels up to date in 'channels.conf'
@@ -1073,6 +1077,8 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for replacing the Finnish language code "smi" with "suo"
for adding cap_sys_nice to the capabilities that are not dropped
for adding cThread::SetIOPriority() and using it in cRemoveDeletedRecordingsThread
+ for suggesting to introduce cDevice::GetOsdSize()
+ for adding a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage()
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark
@@ -1212,6 +1218,17 @@ Reinhard Nissl <rnissl@gmx.de>
for making sure vdr-xine no longer needs cDvbPlayer::Action() to call DeviceFlush()
for fixing the 'VideoOnly' condition in the PlayPes() and PlayTs() calls in
cDvbPlayer::Action()
+ for reporting a problem in case the PIDs change during recording
+ for reporting a memory leak when reaching the end of a recording during replay
+ for reporting a call to close(-1) in cUnbufferedFile::Close()
+ for reporting a possible problem in handling the length of DiSEqC command sequences
+ for fixing cOsdMenu::Display() in case the menu size has changed
+ for suggesting to change the type of the Aspect parameter of GetVideoSize()
+ to 'double'
+ for suggesting to use different names for the Aspect parameter in GetVideoSize()
+ and GetOsdSize()
+ for reporting a problem with calculating menu colum widths in case the font has a
+ size other than the default size
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the
@@ -1623,6 +1640,7 @@ Udo Richter <udo_richter@gmx.de>
for reporting a problem with handling the maximum video file size
for suggesting to add a note to the INSTALL file about using subdirectories to
split a large disk into separate areas for VDR's video data and other stuff
+ for reporting wrong variable types in cIndexFile
Sven Kreiensen <svenk@kammer.uni-hannover.de>
for his help in keeping 'channels.conf.terr' up to date
@@ -1814,6 +1832,7 @@ Ville Skytt <ville.skytta@iki.fi>
menu
for adding missing #include <limits.h> to epg.c and menuitems.h
for fixing various spelling errors and improving PLUGINS.html
+ for adding some missing 'const' keywords to avoid compilation errors with gcc 4.4
Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next
@@ -1953,6 +1972,7 @@ Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Nicolas Huillard <nhuillard@e-dition.fr>
for translating OSD texts to the French language
+ for suggesting to increase MAXOSDHEIGHT to 1200
Patrick Fischer <patrick_fischer@gmx.de>
for reporting an error in the cFilter example in PLUGINS.html
@@ -2126,6 +2146,9 @@ Christoph Haubrich <christoph1.haubrich@arcor.de>
check to it
for changing cBitmap::DrawText() to always draw the background unless ColorBg
is clrTransparent
+ for reporting unused 'synced' member in cTsToPes
+ for suggesting to add a note to cTsToPes about all TS packets having to belong to
+ the same PID
Pekka Mauno <pekka.mauno@iki.fi>
for fixing cSchedule::GetFollowingEvent() in case there is currently no present
@@ -2164,6 +2187,7 @@ Tobias Grimm <tobias.grimm@e-tobi.net>
for fixing a signed character used as index in cBase64Encoder::NextLine()
for fixing formatting the name section in the VDR man pages
for reporting unneeded include files <linux/dvb/dmx.h> und <time.h> in remux.h
+ for a patch that added a workaround for the broken linux-dvb driver header files
Helge Lenz <h.lenz@gmx.de>
for reporting a bug in setting the 'Delta' parameter when calling the shutdown
@@ -2310,6 +2334,8 @@ Tobias Bratfisch <tobias@reel-multimedia.com>
for optimizing cNitFilter::Process()
for reducing the number of time(NULL) calls in vdr.c's main loop to a single call
for improving efficiency of cEIT::cEIT()
+ for fixing the use of time_t in cEIT::cEIT()
+ for making EIT events be processed only if a plausible system time is available
Bruno Roussel <bruno.roussel@free.fr>
for translating OSD texts to the French language
@@ -2331,6 +2357,7 @@ Diego Pierotto <vdr-italian@tiscali.it>
Timo Eskola <timo@tolleri.net>
for implementing sending all frames to devices that can handle them in fast forward
trick speeds
+ for implementing the setup option "Recording/Pause key handling"
Elias Luttinen <el@iki.fi>
for improving the description of where logging goes in the INSTALL file
@@ -2394,6 +2421,7 @@ Sundararaj Reel <sundararaj.reel@googlemail.com>
Ales Jurik <ajurik@quick.cz>
for reporting broken SI data on Czech/Slovak channels after changing the default
character set to ISO-8859-9
+ for adding MPEG 1 handling to remux.c
Magnus Andersson <svankan@bahnhof.se>
for translating OSD texts to the Swedish language
@@ -2446,3 +2474,7 @@ Marcel Unbehaun <frostworks@gmx.de>
Gnter Niedermeier <linuxtv@ncs-online.de>
for reporting a problem with file I/O overhead during recording in TS format
+
+Martin Neuditschko <yosuke.tomoe@gmx.net>
+ for reporting a problem with error messages from cDvbDevice::GetVideoSize()
+ on systems with no real primary replay device
diff --git a/HISTORY b/HISTORY
index d94e161..bf32b6a 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6074,3 +6074,64 @@ Video Disk Recorder Revision History
(provided the output device implements the GetVideoSize() function).
- cFrameDetector::Analyze() now syncs on the TS packet sync bytes (thanks to
Oliver Endriss for reporting broken index generation after a buffer overflow).
+
+2009-06-13: Version 1.7.8
+
+- The name of the function cDevice::GetVideoSize() wasn't very well chosen
+ for its purpose of defining the optimum size of the OSD for the current
+ output device. Therefore a new function named cDevice::GetOsdSize() has
+ been introduced (suggested by Rolf Ahrenberg). Plugin authors should
+ implement this function in classes derived from cDevice, if they are able
+ to replay video. cDevice::GetVideoSize() still exists and should return the
+ actual size of the video material that is currently replayed. Note that
+ because of the many possible aspect ratios for video material, the type
+ of the Aspect parameter of GetVideoSize() has been changed to 'double',
+ and the Aspect parameter in both functions is named differently, because
+ it returns different values (suggested by Reinhard Nissl).
+ Thanks to Oliver Endriss for his input on calculating the Aspect factor in
+ GetOsdSize().
+- Fixed the way the OSD size is determined on full featured DVB cards (thanks
+ to Oliver Endriss).
+- Increased MAXOSDHEIGHT to 1200 (suggested by Nicolas Huillard).
+- Removed limitation to PAL resolution from SPU handling.
+- Checking fd_video in cDvbDevice::GetVideoSize() to avoid error messages on
+ systems with no real primary replay device (reported by Martin Neuditschko).
+- Added a note to cTsToPes::GetPes() about having to call it repeatedly, once
+ it has returned a non-NULL value.
+- Added MPEG 1 handling to remux.c (thanks to Ales Jurik).
+- Fixed use of time_t in cEIT::cEIT() (thanks to Tobias Bratfisch).
+- Added missing update of lastOsdSizeUpdate.
+- EIT events are now only processed if a plausible system time is available, to
+ avoid wrong handling of PDC descriptors (thanks to Tobias Bratfisch).
+- Removed unused 'synced' member from cTsToPes (reported by Christoph Haubrich).
+- Added a note to cTsToPes about all TS packets having to belong to the same PID,
+ and that for video data GetPes() may only be called if the next TS packet that
+ will be given to PutTs() has the "payload start" flag set (suggested by Christoph
+ Haubrich).
+- Added a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage()
+ (thanks to Rolf Ahrenberg).
+- The new setup option "Recording/Pause key handling" can be used to define
+ what happens if the Pause key on the remote control is pressed during
+ live tv (thanks to Timo Eskola).
+- Added a note about cFont::GetFont() not being thread-safe.
+- Fixed generating PAT/PMT version numbers in case the PIDs change during
+ recording (reported by Reinhard Nissl).
+- Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk).
+- Fixed a memory leak when reaching the end of a recording during replay (reported
+ by Reinhard Nissl).
+- Fixed calling close(-1) in cUnbufferedFile::Close() (reported by Reinhard Nissl).
+- Added a workaround for the broken linux-dvb driver header files (based on a patch
+ from Tobias Grimm).
+- Fixed handling the length of DiSEqC command sequences (reported by Reinhard Nissl).
+- Fixed cOsdMenu::Display() in case the menu size has changed (thanks to
+ Reinhard Nissl).
+- Added some missing 'const' keywords to avoid compilation errors with gcc 4.4
+ (thanks to Ville Skytt and Ludwig Nussel).
+- Modified cSVDRP::CmdGRAB() to avoid writing into const data (reported by
+ Ludwig Nussel).
+- Fixed calculating menu colum widths in case the font has a size other than the
+ default size (reported by Reinhard Nissl).
+- Added a plausibility check for the OSD percentage parameters
+ to avoid problems in case the values are stored in the setup.conf
+ file in a wrong way.
+- Fixed variable types in cIndexFile (reported by Udo Richter).
diff --git a/MANUAL b/MANUAL
index ebf89fd..e4f6284 100644
--- a/MANUAL
+++ b/MANUAL
@@ -748,6 +748,13 @@ Version 1.6
Pause priority = 10 The Priority and Lifetime values used when pausing live
Pause lifetime = 1 video.
+ Pause key handling = 3 Defines what happens if the Pause key on the remote control
+ is pressed during live tv.
+ 0 = do not pause live video
+ 1 = confirm pause live video
+ 2 = pause live video
+ The default is 2.
+
Use episode name = yes Repeating timers use the EPG's 'Episode name' information
to create recording file names in a hierarchical structure
(for instance to gather all episodes of a series in a
diff --git a/PLUGINS.html b/PLUGINS.html
index 344015b..e8fa16a 100644
--- a/PLUGINS.html
+++ b/PLUGINS.html
@@ -1944,10 +1944,10 @@ In order to be able to determine the proper size of the OSD, the device
should implement the function
<p><table><tr><td class="code"><pre>
-virtual void GetVideoSize(int &amp;Width, int &amp;Height, eVideoAspect &amp;Aspect);
+virtual void GetOsdSize(int &amp;Width, int &amp;Height, double &amp;Aspect);
</pre></td></tr></table><p>
-By default, an OSD size of 480x324 with an aspect ratio of 4:3 is assumed.
+By default, an OSD size of 720x480 with an aspect ratio of 1.0 is assumed.
</div modified>
<p>
diff --git a/config.c b/config.c
index 669228b..df82baa 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 2.2 2009/05/03 13:58:08 kls Exp $
+ * $Id: config.c 2.5 2009/06/13 10:25:05 kls Exp $
*/
#include "config.h"
@@ -20,6 +20,8 @@
// format characters in order to allow any number of blanks after a numeric
// value!
+#define ChkDoublePlausibility(Variable, Default) { if (Variable < 0.00001) Variable = Default; }
+
// --- cCommand --------------------------------------------------------------
char *cCommand::result = NULL;
@@ -250,6 +252,7 @@ cSetup::cSetup(void)
PrimaryLimit = 0;
DefaultPriority = 50;
DefaultLifetime = 99;
+ PauseKeyHandling = 2;
PausePriority = 10;
PauseLifetime = 1;
UseSubtitle = 1;
@@ -270,6 +273,7 @@ cSetup::cSetup(void)
OSDTop = 45;
OSDWidth = 624;
OSDHeight = 486;
+ OSDAspect = 1.0;
OSDMessageTime = 1;
UseSmallFont = 1;
AntiAlias = 1;
@@ -435,6 +439,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "PrimaryLimit")) PrimaryLimit = atoi(Value);
else if (!strcasecmp(Name, "DefaultPriority")) DefaultPriority = atoi(Value);
else if (!strcasecmp(Name, "DefaultLifetime")) DefaultLifetime = atoi(Value);
+ else if (!strcasecmp(Name, "PauseKeyHandling")) PauseKeyHandling = atoi(Value);
else if (!strcasecmp(Name, "PausePriority")) PausePriority = atoi(Value);
else if (!strcasecmp(Name, "PauseLifetime")) PauseLifetime = atoi(Value);
else if (!strcasecmp(Name, "UseSubtitle")) UseSubtitle = atoi(Value);
@@ -449,21 +454,22 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "ChannelInfoTime")) ChannelInfoTime = atoi(Value);
else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atof(Value);
else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atof(Value);
- else if (!strcasecmp(Name, "OSDWidthP")) OSDWidthP = atof(Value);
- else if (!strcasecmp(Name, "OSDHeightP")) OSDHeightP = atof(Value);
+ else if (!strcasecmp(Name, "OSDWidthP")) { OSDWidthP = atof(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
+ else if (!strcasecmp(Name, "OSDHeightP")) { OSDHeightP = atof(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
else if (!strcasecmp(Name, "OSDLeft")) OSDLeft = atoi(Value);
else if (!strcasecmp(Name, "OSDTop")) OSDTop = atoi(Value);
else if (!strcasecmp(Name, "OSDWidth")) { OSDWidth = atoi(Value); OSDWidth &= ~0x07; } // OSD width must be a multiple of 8
else if (!strcasecmp(Name, "OSDHeight")) OSDHeight = atoi(Value);
+ else if (!strcasecmp(Name, "OSDAspect")) OSDAspect = atof(Value);
else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value);
else if (!strcasecmp(Name, "FontOsd")) Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME);
else if (!strcasecmp(Name, "FontSml")) Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME);
else if (!strcasecmp(Name, "FontFix")) Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME);
- else if (!strcasecmp(Name, "FontOsdSizeP")) FontOsdSizeP = atof(Value);
- else if (!strcasecmp(Name, "FontSmlSizeP")) FontSmlSizeP = atof(Value);
- else if (!strcasecmp(Name, "FontFixSizeP")) FontFixSizeP = atof(Value);
+ else if (!strcasecmp(Name, "FontOsdSizeP")) { FontOsdSizeP = atof(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
+ else if (!strcasecmp(Name, "FontSmlSizeP")) { FontSmlSizeP = atof(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
+ else if (!strcasecmp(Name, "FontFixSizeP")) { FontFixSizeP = atof(Value); ChkDoublePlausibility(FontFixSizeP, 0.031); }
else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value);
else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value);
else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value);
@@ -525,6 +531,7 @@ bool cSetup::Save(void)
Store("PrimaryLimit", PrimaryLimit);
Store("DefaultPriority", DefaultPriority);
Store("DefaultLifetime", DefaultLifetime);
+ Store("PauseKeyHandling", PauseKeyHandling);
Store("PausePriority", PausePriority);
Store("PauseLifetime", PauseLifetime);
Store("UseSubtitle", UseSubtitle);
@@ -545,6 +552,7 @@ bool cSetup::Save(void)
Store("OSDTop", OSDTop);
Store("OSDWidth", OSDWidth);
Store("OSDHeight", OSDHeight);
+ Store("OSDAspect", OSDAspect);
Store("OSDMessageTime", OSDMessageTime);
Store("UseSmallFont", UseSmallFont);
Store("AntiAlias", AntiAlias);
diff --git a/config.h b/config.h
index 5a884ca..7a41d40 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 2.9 2009/05/03 13:15:35 kls Exp $
+ * $Id: config.h 2.13 2009/05/21 11:11:32 kls Exp $
*/
#ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number:
-#define VDRVERSION "1.7.7"
-#define VDRVERSNUM 10707 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.7.8"
+#define VDRVERSNUM 10708 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
-#define APIVERSION "1.7.7"
-#define APIVERSNUM 10707 // Version * 10000 + Major * 100 + Minor
+#define APIVERSION "1.7.8"
+#define APIVERSNUM 10708 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
@@ -42,7 +42,7 @@
#define MINOSDWIDTH 480
#define MAXOSDWIDTH 1920
#define MINOSDHEIGHT 324
-#define MAXOSDHEIGHT 1080
+#define MAXOSDHEIGHT 1200
#define MaxFileName 256
#define MaxSkinName 16
@@ -234,6 +234,7 @@ public:
int PrimaryLimit;
int DefaultPriority, DefaultLifetime;
int PausePriority, PauseLifetime;
+ int PauseKeyHandling;
int UseSubtitle;
int UseVps;
int VpsMargin;
@@ -246,6 +247,7 @@ public:
int ChannelInfoTime;
double OSDLeftP, OSDTopP, OSDWidthP, OSDHeightP;
int OSDLeft, OSDTop, OSDWidth, OSDHeight;
+ double OSDAspect;
int OSDMessageTime;
int UseSmallFont;
int AntiAlias;
diff --git a/device.c b/device.c
index ca2c3b3..834b6ea 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 2.17 2009/05/02 12:17:39 kls Exp $
+ * $Id: device.c 2.23 2009/06/06 13:25:58 kls Exp $
*/
#include "device.h"
@@ -19,11 +19,6 @@
#include "status.h"
#include "transfer.h"
-const char *VideoAspectString[] = { "4:3",
- "16:9",
- "2.21:9"
- };
-
// --- cLiveSubtitle ---------------------------------------------------------
class cLiveSubtitle : public cReceiver {
@@ -66,6 +61,7 @@ cDevice *cDevice::primaryDevice = NULL;
cDevice *cDevice::avoidDevice = NULL;
cDevice::cDevice(void)
+:patPmtParser(true)
{
cardIndex = nextCardIndex++;
@@ -389,11 +385,18 @@ eVideoSystem cDevice::GetVideoSystem(void)
return vsPAL;
}
-void cDevice::GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect)
+void cDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
+{
+ Width = 0;
+ Height = 0;
+ VideoAspect = 1.0;
+}
+
+void cDevice::GetOsdSize(int &Width, int &Height, double &PixelAspect)
{
- Width = MINOSDWIDTH;
- Height = MINOSDHEIGHT;
- Aspect = va4_3;
+ Width = 720;
+ Height = 480;
+ PixelAspect = 1.0;
}
//#define PRINTPIDS(s) { char b[500]; char *q = b; q += sprintf(q, "%d %s ", CardIndex(), s); for (int i = 0; i < MAXPIDHANDLES; i++) q += sprintf(q, " %s%4d %d", i == ptOther ? "* " : "", pidHandles[i].pid, pidHandles[i].used); dsyslog(b); }
diff --git a/device.h b/device.h
index 74f1277..8ac8594 100644
--- a/device.h
+++ b/device.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.h 2.10 2009/05/02 12:16:20 kls Exp $
+ * $Id: device.h 2.15 2009/06/06 11:15:49 kls Exp $
*/
#ifndef __DEVICE_H
@@ -56,13 +56,6 @@ enum eVideoSystem { vsPAL,
vsNTSC
};
-enum eVideoAspect { va4_3,
- va16_9,
- va221_9
- };
-
-extern const char *VideoAspectString[];
-
enum eVideoDisplayFormat { vdfPanAndScan,
vdfLetterBox,
vdfCenterCutOut
@@ -384,9 +377,25 @@ public:
virtual eVideoSystem GetVideoSystem(void);
///< Returns the video system of the currently displayed material
///< (default is PAL).
- virtual void GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect);
- ///< Returns the With, Height and Aspect ratio of the currently
- ///< displayed material.
+ virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
+ ///< Returns the With, Height and VideoAspect ratio of the currently
+ ///< displayed video material. The data returned by this function is
+ ///< only used for informational purposes (if any). Width and
+ ///< Height are given in pixel (e.g. 720x576) and VideoAspect is
+ ///< e.g. 1.33333 for a 4:3 broadcast, or 1.77778 for 16:9.
+ ///< The default implementation returns 0 for Width and Height
+ ///< and 1.0 for VideoAspect.
+ virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
+ ///< Returns the With, Height and PixelAspect ratio the OSD should use
+ ///< to best fit the resolution of the output device. If PixelAspect
+ ///< is not 1.0, the OSD may take this as a hint to scale its
+ ///< graphics in a way that, e.g., a circle will actually
+ ///< show up as a circle on the screen, and not as an ellipse.
+ ///< Values greater than 1.0 mean to stretch the graphics in the
+ ///< vertical direction (or shrink it in the horizontal direction,
+ ///< depending on which dimension shall be fixed). Values less than
+ ///< 1.0 work the other way round. Note that the OSD is not guaranteed
+ ///< to actually use this hint.
// Track facilities
diff --git a/dvbdevice.c b/dvbdevice.c
index 84f0e97..dd425c8 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 2.15 2009/05/03 13:49:41 kls Exp $
+ * $Id: dvbdevice.c 2.21 2009/06/06 11:17:20 kls Exp $
*/
#include "dvbdevice.h"
@@ -232,8 +232,8 @@ bool cDvbTuner::SetFrontend(void)
uchar *codes = diseqc->Codes(n);
if (codes) {
struct dvb_diseqc_master_cmd cmd;
- memcpy(cmd.msg, codes, min(n, int(sizeof(cmd.msg))));
- cmd.msg_len = n;
+ cmd.msg_len = min(n, int(sizeof(cmd.msg)));
+ memcpy(cmd.msg, codes, cmd.msg_len);
CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_MASTER_CMD, &cmd));
}
}
@@ -736,31 +736,62 @@ void cDvbDevice::SetVideoFormat(bool VideoFormat16_9)
eVideoSystem cDvbDevice::GetVideoSystem(void)
{
eVideoSystem VideoSystem = vsPAL;
- video_size_t vs;
- if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
- if (vs.h == 480 || vs.h == 240)
- VideoSystem = vsNTSC;
+ if (fd_video >= 0) {
+ video_size_t vs;
+ if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
+ if (vs.h == 480 || vs.h == 240)
+ VideoSystem = vsNTSC;
+ }
+ else
+ LOG_ERROR;
}
- else
- LOG_ERROR;
return VideoSystem;
}
-void cDvbDevice::GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect)
+void cDvbDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
{
- video_size_t vs;
- if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
- Width = vs.w;
- if (Width < 720) // FIXME: some channels result in a With of, e.g. 544, but the final video *is* 720 wide
+ if (fd_video >= 0) {
+ video_size_t vs;
+ if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
+ Width = vs.w;
+ Height = vs.h;
+ switch (vs.aspect_ratio) {
+ default:
+ case VIDEO_FORMAT_4_3: VideoAspect = 4.0 / 3.0; break;
+ case VIDEO_FORMAT_16_9: VideoAspect = 16.0 / 9.0; break;
+ case VIDEO_FORMAT_221_1: VideoAspect = 2.21; break;
+ }
+ return;
+ }
+ else
+ LOG_ERROR;
+ }
+ cDevice::GetVideoSize(Width, Height, VideoAspect);
+}
+
+void cDvbDevice::GetOsdSize(int &Width, int &Height, double &PixelAspect)
+{
+ if (fd_video >= 0) {
+ video_size_t vs;
+ if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
Width = 720;
- Height = vs.h;
- Aspect = eVideoAspect(vs.aspect_ratio);
- if (Width >= MINOSDWIDTH && Width <= MAXOSDWIDTH && Height >= MINOSDHEIGHT && Height <= MAXOSDHEIGHT)
+ if (vs.h != 480 && vs.h != 240)
+ Height = 576; // PAL
+ else
+ Height = 480; // NTSC
+ switch (Setup.VideoFormat ? vs.aspect_ratio : VIDEO_FORMAT_4_3) {
+ default:
+ case VIDEO_FORMAT_4_3: PixelAspect = 4.0 / 3.0; break;
+ case VIDEO_FORMAT_221_1: // FF DVB cards only distinguish between 4:3 and 16:9
+ case VIDEO_FORMAT_16_9: PixelAspect = 16.0 / 9.0; break;
+ }
+ PixelAspect /= double(Width) / Height;
return;
+ }
+ else
+ LOG_ERROR;
}
- else
- LOG_ERROR;
- cDevice::GetVideoSize(Width, Height, Aspect);
+ cDevice::GetOsdSize(Width, Height, PixelAspect);
}
bool cDvbDevice::SetAudioBypass(bool On)
diff --git a/dvbdevice.h b/dvbdevice.h
index 4e325ca..e3e28d0 100644
--- a/dvbdevice.h
+++ b/dvbdevice.h
@@ -4,12 +4,13 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.h 2.4 2009/05/02 10:44:40 kls Exp $
+ * $Id: dvbdevice.h 2.8 2009/06/06 11:16:47 kls Exp $
*/
#ifndef __DVBDEVICE_H
#define __DVBDEVICE_H
+#include <sys/mman.h> // FIXME: workaround for broken linux-dvb header files
#include <linux/dvb/frontend.h>
#include <linux/dvb/version.h>
#include "device.h"
@@ -107,7 +108,8 @@ public:
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
virtual void SetVideoFormat(bool VideoFormat16_9);
virtual eVideoSystem GetVideoSystem(void);
- virtual void GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect);
+ virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
+ virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
// Track facilities
diff --git a/dvbplayer.c b/dvbplayer.c
index 219de49..9f96462 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 2.15 2009/04/19 15:19:10 kls Exp $
+ * $Id: dvbplayer.c 2.17 2009/05/31 14:12:42 kls Exp $
*/
#include "dvbplayer.h"
@@ -89,7 +89,6 @@ private:
uchar *buffer;
int wanted;
int length;
- bool hasData;
cCondWait newSet;
cCondVar newDataCond;
cMutex newDataMutex;
@@ -99,7 +98,8 @@ public:
cNonBlockingFileReader(void);
~cNonBlockingFileReader();
void Clear(void);
- int Read(cUnbufferedFile *File, uchar *Buffer, int Length);
+ void Request(cUnbufferedFile *File, int Length);
+ int Result(uchar **Buffer);
bool Reading(void) { return buffer; }
bool WaitForDataMs(int msToWait);
};
@@ -110,7 +110,6 @@ cNonBlockingFileReader::cNonBlockingFileReader(void)
f = NULL;
buffer = NULL;
wanted = length = 0;
- hasData = false;
Start();
}
@@ -128,29 +127,27 @@ void cNonBlockingFileReader::Clear(void)
free(buffer);
buffer = NULL;
wanted = length = 0;
- hasData = false;
+ Unlock();
+}
+
+void cNonBlockingFileReader::Request(cUnbufferedFile *File, int Length)
+{
+ Lock();
+ Clear();
+ wanted = Length;
+ buffer = MALLOC(uchar, wanted);
+ f = File;
Unlock();
newSet.Signal();
}
-int cNonBlockingFileReader::Read(cUnbufferedFile *File, uchar *Buffer, int Length)
+int cNonBlockingFileReader::Result(uchar **Buffer)
{
- if (hasData && buffer) {
- if (buffer != Buffer) {
- esyslog("ERROR: cNonBlockingFileReader::Read() called with different buffer!");
- errno = EINVAL;
- return -1;
- }
+ LOCK_THREAD;
+ if (buffer && length == wanted) {
+ *Buffer = buffer;
buffer = NULL;
- return length;
- }
- if (!buffer) {
- f = File;
- buffer = Buffer;
- wanted = Length;
- length = 0;
- hasData = false;
- newSet.Signal();
+ return wanted;
}
errno = EAGAIN;
return -1;
@@ -160,20 +157,23 @@ void cNonBlockingFileReader::Action(void)
{
while (Running()) {
Lock();
- if (!hasData && f && buffer) {
+ if (f && buffer && length < wanted) {
int r = f->Read(buffer + length, wanted - length);
- if (r >= 0) {
+ if (r > 0)
length += r;
- if (!r || length == wanted) { // r == 0 means EOF
- cMutexLock NewDataLock(&newDataMutex);
- hasData = true;
- newDataCond.Broadcast();
- }
+ else if (r == 0) { // r == 0 means EOF
+ if (length > 0)
+ wanted = length; // already read something, so return the rest
+ else
+ length = wanted = 0; // report EOF
}
- else if (r < 0 && FATALERRNO) {
+ else if (FATALERRNO) {
LOG_ERROR;
- length = r; // this will forward the error status to the caller
- hasData = true;
+ length = wanted = r; // this will forward the error status to the caller
+ }
+ if (length == wanted) {
+ cMutexLock NewDataLock(&newDataMutex);
+ newDataCond.Broadcast();
}
}
Unlock();
@@ -184,7 +184,7 @@ void cNonBlockingFileReader::Action(void)
bool cNonBlockingFileReader::WaitForDataMs(int msToWait)
{
cMutexLock NewDataLock(&newDataMutex);
- if (hasData)
+ if (buffer && length == wanted)
return true;
return newDataCond.TimedWait(newDataMutex, msToWait);
}
@@ -381,7 +381,6 @@ void cDvbPlayer::Activate(bool On)
void cDvbPlayer::Action(void)
{
- uchar *b = NULL;
uchar *p = NULL;
int pc = 0;
@@ -461,10 +460,12 @@ void cDvbPlayer::Action(void)
esyslog("ERROR: frame larger than buffer (%d > %d)", Length, MAXFRAMESIZE);
Length = MAXFRAMESIZE;
}
- b = MALLOC(uchar, Length);
+ if (!eof)
+ nonBlockingFileReader->Request(replayFile, Length);
}
if (!eof) {
- int r = nonBlockingFileReader->Read(replayFile, b, Length);
+ uchar *b = NULL;
+ int r = nonBlockingFileReader->Result(&b);
if (r > 0) {
WaitingForData = false;
uint32_t Pts = 0;
@@ -473,15 +474,16 @@ void cDvbPlayer::Action(void)
LastReadIFrame = readIndex;
}
readFrame = new cFrame(b, -r, ftUnknown, readIndex, Pts); // hands over b to the ringBuffer
- b = NULL;
}
- else if (r == 0)
- eof = true;
else if (r < 0 && errno == EAGAIN)
WaitingForData = true;
- else if (r < 0 && FATALERRNO) {
- LOG_ERROR;
- break;
+ else {
+ if (r == 0)
+ eof = true;
+ else if (r < 0 && FATALERRNO) {
+ LOG_ERROR;
+ break;
+ }
}
}
}
diff --git a/dvbspu.c b/dvbspu.c
index bef80c3..aaf608d 100644
--- a/dvbspu.c
+++ b/dvbspu.c
@@ -8,7 +8,7 @@
*
* parts of this file are derived from the OMS program.
*
- * $Id: dvbspu.c 2.0 2007/02/03 10:13:18 kls Exp $
+ * $Id: dvbspu.c 2.1 2009/05/09 16:25:59 kls Exp $
*/
#include "dvbspu.h"
@@ -55,18 +55,16 @@ void cDvbSpuPalette::setPalette(const uint32_t * pal)
#define setMin(a, b) if (a > b) a = b
#define setMax(a, b) if (a < b) a = b
-#define spuXres 720
-#define spuYres 576
-
#define revRect(r1, r2) { r1.x1 = r2.x2; r1.y1 = r2.y2; r1.x2 = r2.x1; r1.y2 = r2.y1; }
cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,
uint8_t * fodd, uint8_t * eodd,
uint8_t * feven, uint8_t * eeven)
{
- if (size.x1 < 0 || size.y1 < 0 || size.x2 >= spuXres
- || size.y2 >= spuYres)
- throw;
+ size.x1 = max(size.x1, 0);
+ size.y1 = max(size.y1, 0);
+ size.x2 = min(size.x2, Setup.OSDWidth);
+ size.y2 = min(size.y2, Setup.OSDHeight);
bmpsize = size;
revRect(minsize[0], size);
@@ -74,10 +72,11 @@ cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,
revRect(minsize[2], size);
revRect(minsize[3], size);
- if (!(bmp = new uint8_t[spuXres * spuYres * sizeof(uint8_t)]))
- throw;
+ int MemSize = bmpsize.width() * bmpsize.height() * sizeof(uint8_t);
+ bmp = new uint8_t[MemSize];
- memset(bmp, 0, spuXres * spuYres * sizeof(uint8_t));
+ if (bmp)
+ memset(bmp, 0, MemSize);
putFieldData(0, fodd, eodd);
putFieldData(1, feven, eeven);
}
@@ -94,10 +93,10 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,
int h = size.height();
int w = size.width();
- if (size.y1 + h >= spuYres)
- h = spuYres - size.y1 - 1;
- if (size.x1 + w >= spuXres)
- w = spuXres - size.x1 - 1;
+ if (size.y1 + h >= bmpsize.height())
+ h = bmpsize.height() - size.y1 - 1;
+ if (size.x1 + w >= bmpsize.width())
+ w = bmpsize.width() - size.x1 - 1;
if (w & 0x03)
w += 4 - (w & 0x03);
@@ -114,7 +113,7 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,
// set the content
for (int yp = 0; yp < h; yp++) {
for (int xp = 0; xp < w; xp++) {
- uint8_t idx = bmp[(size.y1 + yp) * spuXres + size.x1 + xp];
+ uint8_t idx = bmp[(size.y1 + yp) * bmpsize.width() + size.x1 + xp];
ret->SetIndex(xp, yp, idx);
}
}
@@ -150,7 +149,7 @@ bool cDvbSpuBitmap::getMinSize(const aDvbSpuPalDescr paldescr,
void cDvbSpuBitmap::putPixel(int xp, int yp, int len, uint8_t colorid)
{
- memset(bmp + spuXres * yp + xp, colorid, len);
+ memset(bmp + bmpsize.width() * yp + xp, colorid, len);
setMin(minsize[colorid].x1, xp);
setMin(minsize[colorid].y1, yp);
setMax(minsize[colorid].x2, xp + len - 1);
diff --git a/dvbspu.h b/dvbspu.h
index 8606c82..685681b 100644
--- a/dvbspu.h
+++ b/dvbspu.h
@@ -8,7 +8,7 @@
*
* parts of this file are derived from the OMS program.
*
- * $Id: dvbspu.h 2.0 2006/04/17 12:47:29 kls Exp $
+ * $Id: dvbspu.h 2.1 2009/05/09 16:26:45 kls Exp $
*/
#ifndef __DVBSPU_H
@@ -32,10 +32,10 @@ typedef struct sDvbSpuRect {
int x1, y1;
int x2, y2;
- int width() {
+ int width() const {
return x2 - x1 + 1;
};
- int height() {
+ int height() const {
return y2 - y1 + 1;
};
@@ -63,8 +63,6 @@ class cDvbSpuPalette {
// --- cDvbSpuBitmap----------------------------------------------------------
class cDvbSpuBitmap {
-
- public:
private:
sDvbSpuRect bmpsize;
sDvbSpuRect minsize[4];
diff --git a/eit.c b/eit.c
index b78c117..1189a10 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 2.3 2009/04/11 10:03:24 kls Exp $
+ * $Id: eit.c 2.5 2009/05/15 12:34:43 kls Exp $
*/
#include "eit.h"
@@ -17,6 +17,8 @@
#include "libsi/section.h"
#include "libsi/descriptor.h"
+#define VALID_TIME (31536000 * 2) // two years
+
// --- cEIT ------------------------------------------------------------------
class cEIT : public SI::EIT {
@@ -46,10 +48,13 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
struct tm tm_r;
struct tm t = *localtime_r(&Now, &tm_r); // this initializes the time zone in 't'
+ if (Now < VALID_TIME)
+ return; // we need the current time for handling PDC descriptors
+
SI::EIT::Event SiEitEvent;
for (SI::Loop::Iterator it; eventLoop.getNext(SiEitEvent, it); ) {
bool ExternalData = false;
- int StartTime = SiEitEvent.getStartTime();
+ time_t StartTime = SiEitEvent.getStartTime();
int Duration = SiEitEvent.getDuration();
// Drop bogus events - but keep NVOD reference events, where all bits of the start time field are set to 1, resulting in a negative number.
if (StartTime == 0 || StartTime > 0 && Duration == 0)
diff --git a/font.h b/font.h
index 5b9ec64..eadf88c 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 2.1 2009/05/03 11:00:19 kls Exp $
+ * $Id: font.h 2.2 2009/05/23 10:10:40 kls Exp $
*/
#ifndef __FONT_H
@@ -55,9 +55,11 @@ public:
static const cFont *GetFont(eDvbFont Font);
///< Gets the given Font, which was previously set by a call to SetFont().
///< If no SetFont() call has been made, the font as defined in the setup is returned.
- ///< The caller must not use the returned font outside the scope in which
- ///< it was retrieved by the call to GetFont(), because a call to SetFont()
- ///< may delete an existing font.
+ ///< GetFont() is not thread-safe, and shall only be called from the main
+ ///< thread! A font returned by GetFont() must only be used locally inside the
+ ///< function it was retrieved from, and no long term pointer to it shall be kept,
+ ///< because the cFont object may become invalid at any time after the
+ ///< function that called GetFont() has returned.
static cFont *CreateFont(const char *Name, int CharHeight, int CharWidth = 0);
///< Creates a new font object with the given Name and makes its characters
///< CharHeight pixels high. If CharWidth is given, it overwrites the font's
diff --git a/menu.c b/menu.c
index 423f6f2..cd1b30a 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 2.7 2009/05/03 13:30:13 kls Exp $
+ * $Id: menu.c 2.8 2009/05/21 11:10:38 kls Exp $
*/
#include "menu.h"
@@ -2672,18 +2672,24 @@ eOSState cMenuSetupCAM::ProcessKey(eKeys Key)
// --- cMenuSetupRecord ------------------------------------------------------
class cMenuSetupRecord : public cMenuSetupBase {
+private:
+ const char *pauseKeyHandlingTexts[3];
public:
cMenuSetupRecord(void);
};
cMenuSetupRecord::cMenuSetupRecord(void)
{
+ pauseKeyHandlingTexts[0] = tr("do not pause live video");
+ pauseKeyHandlingTexts[1] = tr("confirm pause live video");
+ pauseKeyHandlingTexts[2] = tr("pause live video");
SetSection(tr("Recording"));
Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at start (min)"), &data.MarginStart));
Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at stop (min)"), &data.MarginStop));
Add(new cMenuEditIntItem( tr("Setup.Recording$Primary limit"), &data.PrimaryLimit, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Default priority"), &data.DefaultPriority, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Default lifetime (d)"), &data.DefaultLifetime, 0, MAXLIFETIME));
+ Add(new cMenuEditStraItem(tr("Setup.Recording$Pause key handling"), &data.PauseKeyHandling, 3, pauseKeyHandlingTexts));
Add(new cMenuEditIntItem( tr("Setup.Recording$Pause priority"), &data.PausePriority, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Pause lifetime (d)"), &data.PauseLifetime, 0, MAXLIFETIME));
Add(new cMenuEditBoolItem(tr("Setup.Recording$Use episode name"), &data.UseSubtitle));
diff --git a/osd.c b/osd.c
index 2ed1acf..d16dafb 100644
--- a/osd.c
+++ b/osd.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osd.c 2.3 2009/05/03 13:52:47 kls Exp $
+ * $Id: osd.c 2.5 2009/05/09 10:42:35 kls Exp $
*/
#include "osd.h"
@@ -883,7 +883,7 @@ void cOsd::Flush(void)
cOsdProvider *cOsdProvider::osdProvider = NULL;
int cOsdProvider::oldWidth = 0;
int cOsdProvider::oldHeight = 0;
-int cOsdProvider::oldAspect = va4_3;
+double cOsdProvider::oldAspect = 1.0;
cOsdProvider::cOsdProvider(void)
{
@@ -919,13 +919,14 @@ void cOsdProvider::UpdateOsdSize(bool Force)
{
int Width;
int Height;
- eVideoAspect Aspect;
- cDevice::PrimaryDevice()->GetVideoSize(Width, Height, Aspect);
+ double Aspect;
+ cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
if (Width != oldWidth || Height != oldHeight || Aspect != oldAspect || Force) {
Setup.OSDLeft = int(round(Width * Setup.OSDLeftP));
Setup.OSDTop = int(round(Height * Setup.OSDTopP));
Setup.OSDWidth = int(round(Width * Setup.OSDWidthP)) & ~0x07; // OSD width must be a multiple of 8
Setup.OSDHeight = int(round(Height * Setup.OSDHeightP));
+ Setup.OSDAspect = Aspect;
Setup.FontOsdSize = int(round(Height * Setup.FontOsdSizeP));
Setup.FontFixSize = int(round(Height * Setup.FontFixSizeP));
Setup.FontSmlSize = int(round(Height * Setup.FontSmlSizeP));
@@ -935,7 +936,7 @@ void cOsdProvider::UpdateOsdSize(bool Force)
oldWidth = Width;
oldHeight = Height;
oldAspect = Aspect;
- dsyslog("OSD size changed to %dx%d @ %s", Width, Height, VideoAspectString[Aspect]);
+ dsyslog("OSD size changed to %dx%d @ %g", Width, Height, Aspect);
}
}
diff --git a/osd.h b/osd.h
index ba79fde..f10247e 100644
--- a/osd.h
+++ b/osd.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osd.h 2.3 2009/05/03 13:52:10 kls Exp $
+ * $Id: osd.h 2.4 2009/05/08 13:41:03 kls Exp $
*/
#ifndef __OSD_H
@@ -408,7 +408,7 @@ private:
static cOsdProvider *osdProvider;
static int oldWidth;
static int oldHeight;
- static int oldAspect;
+ static double oldAspect;
protected:
virtual cOsd *CreateOsd(int Left, int Top, uint Level) = 0;
///< Returns a pointer to a newly created cOsd object, which will be located
diff --git a/osdbase.c b/osdbase.c
index a8f591d..9b59c05 100644
--- a/osdbase.c
+++ b/osdbase.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.c 2.0 2008/02/17 11:33:04 kls Exp $
+ * $Id: osdbase.c 2.1 2009/06/01 11:54:50 kls Exp $
*/
#include "osdbase.h"
@@ -217,6 +217,7 @@ void cOsdMenu::Display(void)
}
if (current < 0)
current = 0; // just for safety - there HAS to be a current item!
+ first = min(first, max(0, count - displayMenuItems)); // in case the menu size has changed
if (current - first >= displayMenuItems || current < first) {
first = current - displayMenuItems / 2;
if (first + displayMenuItems > count)
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 0ab2de6..e040859 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Catalanian\n"
@@ -707,6 +707,15 @@ msgstr "CAM en s - reiniciar?"
msgid "Can't reset CAM!"
msgstr "No puc reiniciar la CAM!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Opcions de Gravaci"
@@ -725,6 +734,9 @@ msgstr "Prioritat per defecte"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Durada predefinida"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Prioritat de la pausa"
@@ -986,6 +998,9 @@ msgstr "Diumenge"
msgid "Upcoming recording!"
msgstr "Gravaci a punt d'iniciar!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Gravaci comenada"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index a50a33d..34a941b 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-02-28 15:00+0200\n"
"Last-Translator: Vladimr Brta <vladimir.barta@k2atmitec.cz>, Ji Dobr <jdobry@centrum.cz>\n"
"Language-Team: Czech\n"
@@ -705,6 +705,15 @@ msgstr "CAM se pouv - opravdu restartovat?"
msgid "Can't reset CAM!"
msgstr "CAM modul nelze restartovat!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Nahrvn"
@@ -723,6 +732,9 @@ msgstr "Vchoz priorita"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Vchoz ivotnost"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Priorita peruen"
@@ -984,6 +996,9 @@ msgstr "Nedle"
msgid "Upcoming recording!"
msgstr "Brzo zane nahrvn!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Zaalo nahrvn"
diff --git a/po/da_DK.po b/po/da_DK.po
index e8d05c8..cd533a0 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish\n"
@@ -704,6 +704,15 @@ msgstr "CAM er i brug - virkelig nulstille?"
msgid "Can't reset CAM!"
msgstr "Kan ikke nulstille CAM!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Optagelse"
@@ -722,6 +731,9 @@ msgstr "Standard prioritet"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Standard levetid (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Pause prioritet"
@@ -983,6 +995,9 @@ msgstr "Sndag"
msgid "Upcoming recording!"
msgstr "Optagelse starter snart!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Optagelse startet"
diff --git a/po/de_DE.po b/po/de_DE.po
index 6b55d6a..eea6817 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2007-11-25 15:19+0200\n"
"Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
"Language-Team: German\n"
@@ -704,6 +704,15 @@ msgstr "CAM wird benutzt - wirklich zurcksetzen?"
msgid "Can't reset CAM!"
msgstr "Zurcksetzen des CAM fehlgeschlagen!"
+msgid "do not pause live video"
+msgstr "Live-Signal nicht anhalten"
+
+msgid "confirm pause live video"
+msgstr "Anhalten des Live-Signals besttigen"
+
+msgid "pause live video"
+msgstr "Live-Signal anhalten"
+
msgid "Recording"
msgstr "Aufnahme"
@@ -722,6 +731,9 @@ msgstr "Default-Prioritt"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Default-Lebensdauer (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr "Funktion der Pause-Taste"
+
msgid "Setup.Recording$Pause priority"
msgstr "Pause-Prioritt"
@@ -983,6 +995,9 @@ msgstr "Sonntag"
msgid "Upcoming recording!"
msgstr "Aufnahme beginnt in Krze!"
+msgid "Pause live video?"
+msgstr "Live-Signal anhalten?"
+
msgid "Recording started"
msgstr "Aufzeichnung gestartet"
diff --git a/po/el_GR.po b/po/el_GR.po
index 90ff04d..bcdcb8e 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek\n"
@@ -704,6 +704,15 @@ msgstr ""
msgid "Can't reset CAM!"
msgstr " CAM"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr ""
@@ -722,6 +731,9 @@ msgstr " "
msgid "Setup.Recording$Default lifetime (d)"
msgstr " ()"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr " "
@@ -983,6 +995,9 @@ msgstr ""
msgid "Upcoming recording!"
msgstr ""
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index 667d650..58cb414 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Spanish\n"
@@ -705,6 +705,15 @@ msgstr "CAM en uso - reiniciar?"
msgid "Can't reset CAM!"
msgstr "No se puede reiniciar CAM!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Opciones de grabacin"
@@ -723,6 +732,9 @@ msgstr "Prioridad por defecto"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Duracin por defecto (das)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Prioridad en modo pausa"
@@ -984,6 +996,9 @@ msgstr "Domingo"
msgid "Upcoming recording!"
msgstr "Grabacin a punto de empezar!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Iniciando grabacin"
diff --git a/po/et_EE.po b/po/et_EE.po
index ff66d8a..b0477c2 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n"
"Language-Team: Estonian\n"
@@ -704,6 +704,15 @@ msgstr "CAM on kasutuses - taaskivitada?"
msgid "Can't reset CAM!"
msgstr "CAM mooduli taaskivitus ebannestus!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Salvestamine"
@@ -722,6 +731,9 @@ msgstr "Vaikimisi prioriteet"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Salvestuse eluiga (pevi)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Pausi prioriteet"
@@ -983,6 +995,9 @@ msgstr "Phapev"
msgid "Upcoming recording!"
msgstr "Salvestamine tulekul!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Salvestamine algas"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index ed5b94d..e62b9f6 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish\n"
@@ -707,6 +707,15 @@ msgstr "CA-moduuli kytss - nollataanko?"
msgid "Can't reset CAM!"
msgstr "CA-moduulin nollaus eponnistui!"
+msgid "do not pause live video"
+msgstr "l pysyt lhetyst"
+
+msgid "confirm pause live video"
+msgstr "varmista lhetyksen pysyttminen"
+
+msgid "pause live video"
+msgstr "pysyt lhetys"
+
msgid "Recording"
msgstr "Tallennus"
@@ -725,6 +734,9 @@ msgstr "Tallenteen oletusprioriteetti"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Tallenteen oletuselinik (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr "Taukonppimen toiminta"
+
msgid "Setup.Recording$Pause priority"
msgstr "Taukotallenteen prioriteetti"
@@ -986,6 +998,9 @@ msgstr "Sunnuntai"
msgid "Upcoming recording!"
msgstr "Tallennus on alkamassa!"
+msgid "Pause live video?"
+msgstr "Pysytetnk lhetys?"
+
msgid "Recording started"
msgstr "Tallennus aloitettu"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 5353625..e1ef364 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
"Language-Team: French\n"
@@ -710,6 +710,15 @@ msgstr "CAM en cours d'utilisation - Remettre zro ?"
msgid "Can't reset CAM!"
msgstr "Impossible de rinitialiser le CAM !"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Enregistrement"
@@ -728,6 +737,9 @@ msgstr "Priorit par dfaut"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Dure de vie par dfaut (j)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Priorit des pauses"
@@ -989,6 +1001,9 @@ msgstr "Dimanche"
msgid "Upcoming recording!"
msgstr "L'enregistrement va commencer !"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "L'enregistrement a commenc"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 9b409e3..f69c24a 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian\n"
@@ -706,6 +706,15 @@ msgstr "CAM se koristi - ponovno pokrenuti unato?"
msgid "Can't reset CAM!"
msgstr "Ponovno pokretanje CAM-a neuspjeno!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Snimanje"
@@ -724,6 +733,9 @@ msgstr "Zadani prioritet"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Zadano trajanje (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Prioritet pauze"
@@ -985,6 +997,9 @@ msgstr "Nedjelja"
msgid "Upcoming recording!"
msgstr "Obnovljena snimka!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Snimanje zapoelo"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 5c0a887..fad18a4 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2007-12-01 21:42+0200\n"
"Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian\n"
@@ -707,6 +707,15 @@ msgstr "CAM hasznlatban - valban jraindtjuk?"
msgid "Can't reset CAM!"
msgstr "A CAM jraindts nem sikerlt"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Felvtel"
@@ -725,6 +734,9 @@ msgstr "Alaprtelmezett priorits"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Alaprtelmezett lettartam"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Sznet priorits"
@@ -986,6 +998,9 @@ msgstr "Vasrnap"
msgid "Upcoming recording!"
msgstr "Felvtel rgtn kezddik!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "A felvtel elindtva"
diff --git a/po/it_IT.po b/po/it_IT.po
index 877191b..09429cb 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2009-02-08 18:58+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian\n"
@@ -711,6 +711,15 @@ msgstr "La CAM è in uso - vuoi reimpostarla?"
msgid "Can't reset CAM!"
msgstr "Impossibile reimpostare il modulo CAM!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Registrazione"
@@ -729,6 +738,9 @@ msgstr "Priorità predefinita"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Scadenza predefinita (gg)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Priorità di pausa"
@@ -990,6 +1002,9 @@ msgstr "Domenica"
msgid "Upcoming recording!"
msgstr "Registrazione imminente!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Registrazione avviata"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 36a9922..ef5c976 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
"Language-Team: Dutch\n"
@@ -708,6 +708,15 @@ msgstr "CAM wordt gebruikt - werkelijk herstarten?"
msgid "Can't reset CAM!"
msgstr "Kan CAM niet herstarten!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Opname"
@@ -726,6 +735,9 @@ msgstr "Standaard prioriteit"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Standaard levensduur (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Pauze prioriteit"
@@ -987,6 +999,9 @@ msgstr "Zondag"
msgid "Upcoming recording!"
msgstr "Opname start binnenkort!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Opname is gestart!"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 2445b02..daf56f1 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian\n"
@@ -705,6 +705,15 @@ msgstr ""
msgid "Can't reset CAM!"
msgstr ""
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Opptak"
@@ -723,6 +732,9 @@ msgstr "Normal prioritet (Timer)"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Normal levetid timer (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr ""
@@ -984,6 +996,9 @@ msgstr "Sndag"
msgid "Upcoming recording!"
msgstr ""
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr ""
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 860094a..d887178 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish\n"
@@ -705,6 +705,15 @@ msgstr "CAM jest w uyciu - naprawd zresetowa?"
msgid "Can't reset CAM!"
msgstr "Nie mona zresetowa CAM!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Nagranie"
@@ -723,6 +732,9 @@ msgstr "Domylny priorytet"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Domylny czas ycia (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Priorytet pauzy"
@@ -984,6 +996,9 @@ msgstr "Niedziela"
msgid "Upcoming recording!"
msgstr "Wkrtce nagranie!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Rozpoczto nagrywanie"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index fa4767f..ba23834 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-18 17:04+0100\n"
"Last-Translator: anonymous\n"
"Language-Team: Portuguese\n"
@@ -704,6 +704,15 @@ msgstr "CAM em uso - quer mesmo reiniciar?"
msgid "Can't reset CAM!"
msgstr "No possvel reiniciar a CAM"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Opes de gravao"
@@ -722,6 +731,9 @@ msgstr "Prioridade por defeito"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Validade por defeito (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Prioridade da pausa"
@@ -983,6 +995,9 @@ msgstr "Domingo"
msgid "Upcoming recording!"
msgstr "Gravao agendada!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Gravao iniciada"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 0c6013c..30aee23 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-02-25 00:39+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian\n"
@@ -707,6 +707,15 @@ msgstr "CAM-ul este in folosin - totui resetez?"
msgid "Can't reset CAM!"
msgstr "Nu pot reseta CAM"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "nregistrare"
@@ -725,6 +734,9 @@ msgstr "Prioritate implicit"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Timp de pstrare predefinit (zile)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Prioritate pauz"
@@ -986,6 +998,9 @@ msgstr "Duminic"
msgid "Upcoming recording!"
msgstr "Urmeaz o nregistrare!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "A nceput nregistrarea"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index a0a2555..0c61dce 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: Russian\n"
@@ -705,6 +705,15 @@ msgstr "CAM - ?"
msgid "Can't reset CAM!"
msgstr " CAM-!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr ""
@@ -723,6 +732,9 @@ msgstr " "
msgid "Setup.Recording$Default lifetime (d)"
msgstr " ()"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr " "
@@ -984,6 +996,9 @@ msgstr ""
msgid "Upcoming recording!"
msgstr " "
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr " "
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 347e599..35b6043 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian\n"
@@ -705,6 +705,15 @@ msgstr "CAM je v uporabi - zares resetiraj?"
msgid "Can't reset CAM!"
msgstr "Ne morem resetirati CAM-a!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Snemanje"
@@ -723,6 +732,9 @@ msgstr "Privzeta prioriteta"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Privzeti ivljenski as (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Prioriteta pavze"
@@ -984,6 +996,9 @@ msgstr "Nedelja"
msgid "Upcoming recording!"
msgstr "Sledi snemanje!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Snemanje se je prielo"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index d47da8a..e4fbe25 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
"Language-Team: Swedish\n"
@@ -707,6 +707,15 @@ msgstr "CAM upptagen, vill du verkligen starta om?"
msgid "Can't reset CAM!"
msgstr "Kan inte terstlla CAM!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Inspelning"
@@ -725,6 +734,9 @@ msgstr "Normal prioritet"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Normal livstid (dagar)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Prioritet fr direktinspelning"
@@ -986,6 +998,9 @@ msgstr "Sndag"
msgid "Upcoming recording!"
msgstr "strax inspelning..."
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Inspelningen har startat"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index abdb594..44bf894 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish\n"
@@ -704,6 +704,15 @@ msgstr "CAM kullanlyor - gerekden sfrla?"
msgid "Can't reset CAM!"
msgstr "CAM sfrlanamad!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Kayt"
@@ -722,6 +731,9 @@ msgstr "Olaan priorite"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Olaan ekim mr (gn)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Duraklama prioritesi"
@@ -983,6 +995,9 @@ msgstr "Pazar"
msgid "Upcoming recording!"
msgstr "ekim yaknda balyor!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Kayt baland"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 3d566fc..79b8121 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -5,261 +5,261 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: VDR 1.6.0\n"
+"Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
-"PO-Revision-Date: 2008-03-07 14:17+0200\n"
-"Last-Translator: Yarema Aka Knedlyk <yupadmin@gmail.com>\n"
+"POT-Creation-Date: 2009-05-31 11:11+0200\n"
+"PO-Revision-Date: 2009-05-31 13:17+0200\n"
+"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
"Language-Team: Ukrainian\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-5\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "off"
-msgstr ""
+msgstr "викл"
msgid "on"
-msgstr ""
+msgstr "вкл"
msgid "auto"
-msgstr ""
+msgstr "авто"
msgid "none"
-msgstr ""
+msgstr "нічого"
msgid "*** Invalid Channel ***"
-msgstr "*** ***"
+msgstr "*** Неправильний канал ***"
msgid "Channel not available!"
-msgstr " !"
+msgstr "Канал недоступний!"
msgid "Can't start Transfer Mode!"
-msgstr " !"
+msgstr "Неможливо включити режим пропуску!"
msgid "Starting EPG scan"
-msgstr " EPG-"
+msgstr "Починаю EPG-сканування"
msgid "No title"
-msgstr " "
+msgstr "Без назви"
#. TRANSLATORS: The name of the language, as written natively
msgid "LanguageName$English"
-msgstr ""
+msgstr "Українська"
#. TRANSLATORS: The 3-letter code of the language
msgid "LanguageCode$eng"
msgstr "ukr"
msgid "Phase 1: Detecting RC code type"
-msgstr " 1: "
+msgstr "Крок 1: Визначення типу коду пульта"
msgid "Press any key on the RC unit"
-msgstr " - "
+msgstr "Натисніть будь-яку кнопку на пульті"
msgid "RC code detected!"
-msgstr " !"
+msgstr "Визначено код пульта!"
msgid "Do not press any key..."
-msgstr " ..."
+msgstr "Не натискайте кнопки..."
msgid "Phase 2: Learning specific key codes"
-msgstr " 2: "
+msgstr "Крок 2: Приписування кодів для відповідних кнопок"
#, c-format
msgid "Press key for '%s'"
-msgstr " '%s'"
+msgstr "Натисніть кнопку '%s'"
msgid "Press 'Up' to confirm"
-msgstr " '' "
+msgstr "Натисніть 'Вверх' для підтвердження"
msgid "Press 'Down' to continue"
-msgstr " '' "
+msgstr "Натисніть 'Вниз' для продовження"
msgid "(press 'Up' to go back)"
-msgstr "( '' )"
+msgstr "(Натисніть 'Вверх' для повернення)"
msgid "(press 'Down' to end key definition)"
-msgstr "( '' )"
+msgstr "(Натисніть 'Вниз' для закінчення настройки пульта)"
msgid "(press 'Menu' to skip this key)"
-msgstr "( '' )"
+msgstr "(Натисніть 'Меню' щоб пропустити кнопку)"
msgid "Learning Remote Control Keys"
-msgstr " "
+msgstr "Навчання пульта"
msgid "Phase 3: Saving key codes"
-msgstr " 3: ' "
+msgstr "Крок 3: Запам'ятовування кодів кнопок"
msgid "Press 'Up' to save, 'Down' to cancel"
-msgstr " '' , '' "
+msgstr "Натисніть 'Вверх' для закінчення, 'Вниз' для відмови"
msgid "Key$Up"
-msgstr ""
+msgstr "Вверх"
msgid "Key$Down"
-msgstr ""
+msgstr "Вниз"
msgid "Key$Menu"
-msgstr ""
+msgstr "Меню"
msgid "Key$Ok"
msgstr "Ok"
msgid "Key$Back"
-msgstr ""
+msgstr "Назад"
msgid "Key$Left"
-msgstr ""
+msgstr "Наліво"
msgid "Key$Right"
-msgstr ""
+msgstr "Направо"
msgid "Key$Red"
-msgstr ""
+msgstr "Червона"
msgid "Key$Green"
-msgstr ""
+msgstr "Зелена"
msgid "Key$Yellow"
-msgstr ""
+msgstr "Жовта"
msgid "Key$Blue"
-msgstr ""
+msgstr "Синя"
msgid "Key$Info"
-msgstr ""
+msgstr "Інфо"
msgid "Key$Play"
-msgstr ""
+msgstr "Програвання"
msgid "Key$Pause"
-msgstr ""
+msgstr "Пауза"
msgid "Key$Stop"
-msgstr ""
+msgstr "Стоп"
msgid "Key$Record"
-msgstr ""
+msgstr "Запис"
msgid "Key$FastFwd"
-msgstr " "
+msgstr "Прокрутка вперед"
msgid "Key$FastRew"
-msgstr " "
+msgstr "Прокрутка назад"
msgid "Key$Next"
-msgstr ""
+msgstr "Вперед"
msgid "Key$Prev"
-msgstr ""
+msgstr "Назад"
msgid "Key$Power"
-msgstr ""
+msgstr "Виключити"
msgid "Key$Channel+"
-msgstr " +"
+msgstr "Канал +"
msgid "Key$Channel-"
-msgstr " -"
+msgstr "Канал -"
msgid "Key$PrevChannel"
-msgstr " "
+msgstr "Попередній канал"
msgid "Key$Volume+"
-msgstr " +"
+msgstr "Гучність +"
msgid "Key$Volume-"
-msgstr " -"
+msgstr "Гучність -"
msgid "Key$Mute"
-msgstr " "
+msgstr "Виключити звук"
msgid "Key$Audio"
-msgstr ""
+msgstr "Мова"
msgid "Key$Subtitles"
-msgstr ""
+msgstr "Субтитри"
msgid "Key$Schedule"
-msgstr ""
+msgstr "Телегід"
msgid "Key$Channels"
-msgstr ""
+msgstr "Канали"
msgid "Key$Timers"
-msgstr ""
+msgstr "Таймери"
msgid "Key$Recordings"
-msgstr ""
+msgstr "Записи"
msgid "Key$Setup"
-msgstr ""
+msgstr "Налаштування"
msgid "Key$Commands"
-msgstr ""
+msgstr "Команди"
msgid "Key$User1"
-msgstr "1"
+msgstr "Користувач1"
msgid "Key$User2"
-msgstr "2"
+msgstr "Користувач2"
msgid "Key$User3"
-msgstr "3"
+msgstr "Користувач3"
msgid "Key$User4"
-msgstr "4"
+msgstr "Користувач4"
msgid "Key$User5"
-msgstr "5"
+msgstr "Користувач5"
msgid "Key$User6"
-msgstr "6"
+msgstr "Користувач6"
msgid "Key$User7"
-msgstr "7"
+msgstr "Користувач7"
msgid "Key$User8"
-msgstr "8"
+msgstr "Користувач8"
msgid "Key$User9"
-msgstr "8"
+msgstr "Користувач8"
msgid "Disk"
-msgstr ""
+msgstr "Диск"
msgid "free"
-msgstr ""
+msgstr "вільно"
msgid "Free To Air"
-msgstr "FTA ()"
+msgstr "FTA (незакодовано)"
msgid "encrypted"
-msgstr ""
+msgstr "закодовано"
msgid "Edit channel"
-msgstr " "
+msgstr "Редагування каналу"
msgid "Name"
-msgstr ""
+msgstr "Назва"
msgid "Source"
-msgstr ""
+msgstr "Джерело"
msgid "Frequency"
-msgstr ""
+msgstr "Частота"
msgid "Vpid"
-msgstr "Vpid ()"
+msgstr "Vpid (відео)"
msgid "Ppid"
msgstr "Ppid"
msgid "Apid1"
-msgstr "Apid1 ( 1)"
+msgstr "Apid1 (аудіо 1)"
msgid "Apid2"
-msgstr "Apid2 ( 2)"
+msgstr "Apid2 (аудіо 2)"
msgid "Dpid1"
msgstr "Dpid1 (AC3 1)"
@@ -268,31 +268,31 @@ msgid "Dpid2"
msgstr "Dpid2 (AC3 2)"
msgid "Spid1"
-msgstr " 1"
+msgstr "Субтитри 1"
msgid "Spid2"
-msgstr " 2"
+msgstr "Субтитри 2"
msgid "Tpid"
-msgstr "Tpid ()"
+msgstr "Tpid (телетекст)"
msgid "CA"
-msgstr "CA ()"
+msgstr "CA (декодер)"
msgid "Sid"
msgstr "Sid"
msgid "Polarization"
-msgstr ""
+msgstr "Поляризація"
msgid "System"
-msgstr ""
+msgstr "Система"
msgid "Srate"
-msgstr ". "
+msgstr "Симв. швидкість"
msgid "Inversion"
-msgstr ""
+msgstr "Інверсія"
msgid "CoderateH"
msgstr "CoderateH"
@@ -301,709 +301,724 @@ msgid "CoderateL"
msgstr "CoderateL"
msgid "Modulation"
-msgstr ""
+msgstr "Модуляція"
msgid "Bandwidth"
-msgstr ""
+msgstr "Діапазон"
msgid "Transmission"
-msgstr ""
+msgstr "Передача"
msgid "Guard"
-msgstr ""
+msgstr "Захист"
msgid "Hierarchy"
-msgstr ""
+msgstr "Ієрархія"
msgid "Rolloff"
-msgstr ""
+msgstr "Крен"
msgid "Channel settings are not unique!"
-msgstr " !"
+msgstr "Настройки каналу не єдині!"
msgid "Channels"
-msgstr ""
+msgstr "Канали"
msgid "Button$Edit"
-msgstr ""
+msgstr "Редагувати"
msgid "Button$New"
-msgstr ""
+msgstr "Додати"
msgid "Button$Delete"
-msgstr ""
+msgstr "Видалити"
msgid "Button$Mark"
-msgstr ""
+msgstr "Перемістити"
msgid "Channel is being used by a timer!"
-msgstr " !"
+msgstr "Канал зайнятий таймером!"
msgid "Delete channel?"
-msgstr " ?"
+msgstr "Видалити канал?"
msgid "Edit timer"
-msgstr " "
+msgstr "Налаштування таймера"
msgid "Active"
-msgstr ""
+msgstr "Активовано"
msgid "Channel"
-msgstr ""
+msgstr "Канал"
msgid "Day"
-msgstr ""
+msgstr "День"
msgid "Start"
-msgstr ""
+msgstr "Початок"
msgid "Stop"
-msgstr ""
+msgstr "Кінець"
msgid "VPS"
-msgstr "VPS "
+msgstr "VPS поправка"
msgid "Priority"
-msgstr ""
+msgstr "Пріоритет"
msgid "Lifetime"
-msgstr " "
+msgstr "Строк зберігання"
msgid "File"
-msgstr ""
+msgstr "Файл"
msgid "First day"
-msgstr " "
+msgstr "Перший день"
msgid "Timers"
-msgstr ""
+msgstr "Таймери"
msgid "Button$On/Off"
-msgstr "/"
+msgstr "Вкл/Викл"
msgid "Button$Info"
-msgstr ""
+msgstr "Інфо"
msgid "Delete timer?"
-msgstr " ?"
+msgstr "Видалити таймер?"
msgid "Timer still recording - really delete?"
-msgstr " - ?"
+msgstr "Йде запис по таймеру - дійсно видалити?"
msgid "Event"
-msgstr ""
+msgstr "Передача"
msgid "Button$Timer"
-msgstr ""
+msgstr "Таймер"
msgid "Button$Record"
-msgstr ""
+msgstr "Запис"
msgid "Button$Switch"
-msgstr ""
+msgstr "Переключити"
msgid "What's on now?"
-msgstr " :"
+msgstr "Зараз в ефірі:"
msgid "What's on next?"
-msgstr " :"
+msgstr "Далі в програмі:"
msgid "Button$Next"
-msgstr ""
+msgstr "Далі"
msgid "Button$Now"
-msgstr ""
+msgstr "Зараз"
msgid "Button$Schedule"
-msgstr ""
+msgstr "Програма"
msgid "Can't switch channel!"
-msgstr " !"
+msgstr "Неможливо переключити канал!"
#, c-format
msgid "Schedule - %s"
-msgstr " - %s"
+msgstr "Програма - %s"
#, c-format
msgid "This event - %s"
-msgstr " - %s"
+msgstr "Ця передача - %s"
msgid "This event - all channels"
-msgstr " - "
+msgstr "Ця передача - всі канали"
msgid "All events - all channels"
-msgstr " - "
+msgstr "Всі передачі - всі канали"
#, c-format
msgid "Please enter %d digits!"
-msgstr " %d "
+msgstr "Натисніть %d цифри!"
msgid "CAM not responding!"
-msgstr "CAM "
+msgstr "CAM не відповідає!"
msgid "Recording info"
-msgstr " "
+msgstr "Про запис"
msgid "Button$Play"
-msgstr ""
+msgstr "Програвати"
msgid "Button$Rewind"
-msgstr ""
+msgstr "Назад"
msgid "Recordings"
-msgstr ""
+msgstr "Записи"
msgid "Button$Open"
-msgstr ""
+msgstr "Відкрити"
msgid "Commands"
-msgstr ""
+msgstr "Команди"
msgid "Error while accessing recording!"
-msgstr " !"
+msgstr "Помилка доступу до запису!"
msgid "Delete recording?"
-msgstr " ?"
+msgstr "Витерти запис?"
msgid "Error while deleting recording!"
-msgstr " !"
+msgstr "Помилка видалення запису!"
msgid "Recording commands"
-msgstr " "
+msgstr "Команди запису"
msgid "never"
-msgstr ""
+msgstr "ніколи"
msgid "skin dependent"
-msgstr " "
+msgstr "згідно з стилем"
msgid "always"
-msgstr ""
+msgstr "завжди"
msgid "OSD"
-msgstr ""
+msgstr "OSD меню"
msgid "Setup.OSD$Language"
-msgstr ""
+msgstr "Мова"
msgid "Setup.OSD$Skin"
-msgstr ""
+msgstr "Стиль"
msgid "Setup.OSD$Theme"
-msgstr ""
+msgstr "Тема"
msgid "Setup.OSD$Left (%)"
-msgstr " (%)"
+msgstr "Відступ зліва (%)"
msgid "Setup.OSD$Top (%)"
-msgstr " (%)"
+msgstr "Відступ зверху (%)"
msgid "Setup.OSD$Width (%)"
-msgstr " (%)"
+msgstr "Ширина (%)"
msgid "Setup.OSD$Height (%)"
-msgstr " (%)"
+msgstr "Висота (%)"
msgid "Setup.OSD$Message time (s)"
-msgstr " ()"
+msgstr "Тривалість показу повідомлень (сек)"
msgid "Setup.OSD$Use small font"
-msgstr " "
+msgstr "Використовувати малий фонт"
msgid "Setup.OSD$Anti-alias"
-msgstr " "
+msgstr "Згладжування фонтів"
msgid "Setup.OSD$Default font"
-msgstr " "
+msgstr "Стандартний фонт"
msgid "Setup.OSD$Small font"
-msgstr " "
+msgstr "Малий фонт"
msgid "Setup.OSD$Fixed font"
-msgstr " "
+msgstr "Фіксований фонт"
msgid "Setup.OSD$Default font size (%)"
-msgstr " (%)"
+msgstr "Размір фонта для меню (%)"
msgid "Setup.OSD$Small font size (%)"
-msgstr " (%)"
+msgstr "Размір малого фонта (%)"
msgid "Setup.OSD$Fixed font size (%)"
-msgstr " (%)"
+msgstr "Размір фіксованого фонта (%)"
msgid "Setup.OSD$Channel info position"
-msgstr " "
+msgstr "Положення вікна інформації про канал"
msgid "bottom"
-msgstr ""
+msgstr "внизу"
msgid "top"
-msgstr ""
+msgstr "вверху"
msgid "Setup.OSD$Channel info time (s)"
-msgstr " ()"
+msgstr "Показ інформації про канал (сек)"
msgid "Setup.OSD$Info on channel switch"
-msgstr " "
+msgstr "Показ канал-інфо при переключанні "
msgid "Setup.OSD$Timeout requested channel info"
-msgstr " "
+msgstr "Інформацію про канал закрити"
msgid "Setup.OSD$Scroll pages"
-msgstr " "
+msgstr "Прокрутка сторінок меню"
msgid "Setup.OSD$Scroll wraps"
-msgstr " "
+msgstr "Циклічна прокрутка"
msgid "Setup.OSD$Menu key closes"
-msgstr " "
+msgstr "Кнопку Меню закрити"
msgid "Setup.OSD$Recording directories"
-msgstr " "
+msgstr "Каталоги зберігання записів"
msgid "EPG"
-msgstr ""
+msgstr "Телегід"
msgid "Button$Scan"
-msgstr ""
+msgstr "Сканувати"
msgid "Setup.EPG$EPG scan timeout (h)"
-msgstr " ()"
+msgstr "Затримка сканування телегіда (ч)"
msgid "Setup.EPG$EPG bugfix level"
-msgstr " "
+msgstr "Рівень корекції помилок"
msgid "Setup.EPG$EPG linger time (min)"
-msgstr " ()"
+msgstr "Зберігання застарілих даних (хв)"
msgid "Setup.EPG$Set system time"
-msgstr " "
+msgstr "Встановити системий час"
msgid "Setup.EPG$Use time from transponder"
-msgstr " "
+msgstr "Використати час транспондера"
#. TRANSLATORS: note the plural!
msgid "Setup.EPG$Preferred languages"
-msgstr " ()"
+msgstr "Бажані мови (телегід)"
#. TRANSLATORS: note the singular!
msgid "Setup.EPG$Preferred language"
-msgstr ""
+msgstr "Бажана мова (телегід)"
msgid "pan&scan"
-msgstr ""
+msgstr "панорамувати"
msgid "letterbox"
-msgstr ""
+msgstr "зменшувати"
msgid "center cut out"
-msgstr " "
+msgstr "обрізати по боках"
msgid "no"
-msgstr ""
+msgstr "ні"
msgid "names only"
-msgstr " "
+msgstr "тільки назви"
msgid "PIDs only"
-msgstr " PID"
+msgstr "Тільки PIDи"
msgid "names and PIDs"
-msgstr " PID"
+msgstr "назви і PIDи"
msgid "add new channels"
-msgstr " "
+msgstr "додати нові канали"
msgid "add new transponders"
-msgstr " "
+msgstr "додати нові транспондери"
msgid "DVB"
msgstr "DVB"
msgid "Setup.DVB$Primary DVB interface"
-msgstr " DVB-"
+msgstr "Основний DVB-пристрій"
msgid "Setup.DVB$Video format"
-msgstr " "
+msgstr "Формат відео"
msgid "Setup.DVB$Video display format"
-msgstr " "
+msgstr "Формат зображення відео"
msgid "Setup.DVB$Use Dolby Digital"
-msgstr " Dolby Digital"
+msgstr "Використовувати Dolby Digital"
msgid "Setup.DVB$Update channels"
-msgstr " "
+msgstr "Оновлювати настройки каналів"
msgid "Setup.DVB$Audio languages"
-msgstr " ()"
+msgstr "Бажані мови (звук)"
msgid "Setup.DVB$Audio language"
-msgstr ""
+msgstr "Мова аудіо"
msgid "Setup.DVB$Display subtitles"
-msgstr " "
+msgstr "Показувати субтитри"
msgid "Setup.DVB$Subtitle languages"
-msgstr " "
+msgstr "Мови субтитрів"
msgid "Setup.DVB$Subtitle language"
-msgstr " "
+msgstr "Мова субтитрів"
msgid "Setup.DVB$Subtitle offset"
-msgstr " "
+msgstr "Відступ субтитрів"
msgid "Setup.DVB$Subtitle foreground transparency"
-msgstr " "
+msgstr "Прозорість переднього плану субтитрів"
msgid "Setup.DVB$Subtitle background transparency"
-msgstr " "
+msgstr "Прозорість заднього плану субтитрів"
msgid "LNB"
-msgstr ""
+msgstr "Конвертер"
msgid "Setup.LNB$Use DiSEqC"
-msgstr " DiSEqC"
+msgstr "Використовувати DiSEqC"
msgid "Setup.LNB$SLOF (MHz)"
-msgstr " (SLOF) ()"
+msgstr "Частота переключання (SLOF) (МГц)"
msgid "Setup.LNB$Low LNB frequency (MHz)"
-msgstr " ()"
+msgstr "Нижня частота конвертера (МГц)"
msgid "Setup.LNB$High LNB frequency (MHz)"
-msgstr " ()"
+msgstr "Верхня частота конвертера (МГц)"
msgid "CAM reset"
-msgstr " CAM"
+msgstr "Перезавантаження CAM"
msgid "CAM present"
-msgstr "CAM "
+msgstr "CAM присутній"
msgid "CAM ready"
-msgstr "CAM "
+msgstr "CAM готовий"
msgid "CAM"
-msgstr " "
+msgstr "CAM (Умовний доступ)"
msgid "Button$Menu"
-msgstr ""
+msgstr "Меню"
msgid "Button$Reset"
-msgstr ""
+msgstr "Скинути"
msgid "Opening CAM menu..."
-msgstr " (CAM)"
+msgstr "Відкриваю меню CAM-модуля..."
msgid "Can't open CAM menu!"
-msgstr " CAM- !"
+msgstr "Меню CAM-модуля недоступне!"
msgid "CAM is in use - really reset?"
-msgstr "CAM - ?"
+msgstr "CAM використовується - дійсно перезавантажити?"
msgid "Can't reset CAM!"
-msgstr " CAM-!"
+msgstr "Помилка перезапуску CAM-модуля!"
+
+msgid "do not pause live video"
+msgstr "не призупиняти перегляд"
+
+msgid "confirm pause live video"
+msgstr "підтвердити призупинення перегляду"
+
+msgid "pause live video"
+msgstr "призупинити перегляд"
msgid "Recording"
-msgstr ""
+msgstr "Запис"
msgid "Setup.Recording$Margin at start (min)"
-msgstr " ()"
+msgstr "Випередження початку запису (хв)"
msgid "Setup.Recording$Margin at stop (min)"
-msgstr " ()"
+msgstr "Запізнення зупинки запису (хв)"
msgid "Setup.Recording$Primary limit"
-msgstr ". . "
+msgstr "Мін. пріоритет захоплення осн. пристрою"
msgid "Setup.Recording$Default priority"
-msgstr " "
+msgstr "Пріоритет таймера по замовчуванню"
msgid "Setup.Recording$Default lifetime (d)"
-msgstr " ()"
+msgstr "Строк зберігання запису по замовчуванню (дні)"
+
+msgid "Setup.Recording$Pause key handling"
+msgstr "Обробка клавіші відкладеного перегляду"
msgid "Setup.Recording$Pause priority"
-msgstr " "
+msgstr "Пріоритет відкладеного перегляду"
msgid "Setup.Recording$Pause lifetime (d)"
-msgstr " ()"
+msgstr "Зберігання відкладеного перегляду (дні)"
msgid "Setup.Recording$Use episode name"
-msgstr " "
+msgstr "Використовувати назву епізоду"
msgid "Setup.Recording$Use VPS"
-msgstr " VPS"
+msgstr "Використовувати сигнали VPS"
msgid "Setup.Recording$VPS margin (s)"
-msgstr " VPS ()"
+msgstr "Буферний час VPS (сек)"
msgid "Setup.Recording$Mark instant recording"
-msgstr " "
+msgstr "Помітити зроблені вручну записи"
msgid "Setup.Recording$Name instant recording"
-msgstr " "
+msgstr "Схема найменувань ручних записів"
msgid "Setup.Recording$Instant rec. time (min)"
-msgstr " ()"
+msgstr "Протяжність ручного запису (хв)"
msgid "Setup.Recording$Max. video file size (MB)"
-msgstr ". ()"
+msgstr "Макс. размір відеофайлу (Мб)"
msgid "Setup.Recording$Split edited files"
-msgstr " "
+msgstr "Ділити відредаговані файли"
msgid "Replay"
-msgstr ""
+msgstr "Перегляд"
msgid "Setup.Replay$Multi speed mode"
-msgstr " "
+msgstr "Багатошвидкісний режим"
msgid "Setup.Replay$Show replay mode"
-msgstr " "
+msgstr "Віображати режим перегляду"
msgid "Setup.Replay$Resume ID"
-msgstr "ID "
+msgstr "ID перегляду"
msgid "Miscellaneous"
-msgstr ""
+msgstr "Різне"
msgid "Setup.Miscellaneous$Min. event timeout (min)"
-msgstr ". ()"
+msgstr "Мін. час очікування події (хв)"
msgid "Setup.Miscellaneous$Min. user inactivity (min)"
-msgstr ". ()"
+msgstr "Мін. час очікування вводу (хв)"
msgid "Setup.Miscellaneous$SVDRP timeout (s)"
-msgstr " ' SVDRP ()"
+msgstr "Затримкка обриву з'єднання SVDRP (сек)"
msgid "Setup.Miscellaneous$Zap timeout (s)"
-msgstr " ()"
+msgstr "Затримка переключання каналу (сек)"
msgid "Setup.Miscellaneous$Channel entry timeout (ms)"
-msgstr " (ms)"
+msgstr "Затримка часу для впровадження каналу (ms)"
msgid "Setup.Miscellaneous$Initial channel"
-msgstr " "
+msgstr "Канал при включенні"
msgid "Setup.Miscellaneous$as before"
-msgstr " "
+msgstr "як раніше"
msgid "Setup.Miscellaneous$Initial volume"
-msgstr " "
+msgstr "Гучність при включенні"
msgid "Setup.Miscellaneous$Emergency exit"
-msgstr " "
+msgstr "Аварійний вихід"
msgid "Plugins"
-msgstr " "
+msgstr "Модулі розширення"
msgid "This plugin has no setup parameters!"
-msgstr " !"
+msgstr "Модуль не має параметрів налаштувань!"
msgid "Setup"
-msgstr ""
+msgstr "Налаштування"
msgid "Restart"
-msgstr ""
+msgstr "Перезапустити"
msgid "Really restart?"
-msgstr " ?"
+msgstr "Дійсно перезапустити?"
#. TRANSLATORS: note the leading and trailing blanks!
msgid " Stop recording "
-msgstr " "
+msgstr " Зупинити запис "
msgid "Schedule"
-msgstr ""
+msgstr "Телегід"
msgid "VDR"
msgstr "VDR"
#. TRANSLATORS: note the leading blank!
msgid " Stop replaying"
-msgstr " "
+msgstr " Зупинити програвання"
msgid "Button$Audio"
-msgstr ""
+msgstr "Мова аудіо"
msgid "Button$Pause"
-msgstr ""
+msgstr "Пауза"
msgid "Button$Stop"
-msgstr ""
+msgstr "Стоп"
msgid "Button$Resume"
-msgstr ""
+msgstr "Продовжити"
#. TRANSLATORS: note the leading blank!
msgid " Cancel editing"
-msgstr " "
+msgstr " Перервати монтаж запису"
msgid "Stop recording?"
-msgstr " ?"
+msgstr "Припинити запис?"
msgid "Cancel editing?"
-msgstr " ?"
+msgstr "Перервати редактування?"
msgid "No audio available!"
-msgstr " !"
+msgstr "Відсутній звук!"
msgid "No subtitles"
-msgstr " "
+msgstr "Немає субтитрів"
msgid "Button$Subtitles"
-msgstr ""
+msgstr "Субтитри"
msgid "No subtitles available!"
-msgstr " !"
+msgstr "Субтитрів немає!"
msgid "Not enough disk space to start recording!"
-msgstr " "
+msgstr "Недостатньо місця на диску для початку запису"
msgid "No free DVB device to record!"
-msgstr " DVB- !"
+msgstr "Немає вільного DVB-пристрою для запису!"
msgid "Pausing live video..."
-msgstr " ..."
+msgstr "Режим відкладеного перегляду..."
#. TRANSLATORS: note the trailing blank!
msgid "Jump: "
-msgstr ": "
+msgstr "Перейти: "
msgid "No editing marks defined!"
-msgstr " !"
+msgstr "Не задано міток для монтажу!"
msgid "Can't start editing process!"
-msgstr " !"
+msgstr "Неможливо почати монтаж запису!"
msgid "Editing process started"
-msgstr " "
+msgstr "Монтаж запису почався"
msgid "Editing process already active!"
-msgstr " !"
+msgstr "Процес відеомонтажу вже запущений!"
msgid "FileNameChars$ abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&"
-msgstr " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@"
+msgstr " abcdefghijklmnopqrstuvwxyzабвгдеєёжзиіїйклмнопрстуфхцчшщъыьюя0123456789-.#~,/_@"
msgid "yes"
-msgstr ""
+msgstr "так"
msgid "CharMap$ 0\t-.,1#~\\^$[]|()*+?{}/:%@&\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9"
-msgstr " 0\t-.#~,/_@1\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9"
+msgstr " 0\t-.#~,/_@1\tabcабвг2\tdefдеєёжз3\tghiиіїйкл4\tjklмно5\tmnoпрс6\tpqrsтуфх7\ttuvцчшщъ8\twxyzыьэюя9"
msgid "Button$ABC/abc"
-msgstr "/"
+msgstr "АБВ/абв"
msgid "Button$Overwrite"
-msgstr ""
+msgstr "Заміна"
msgid "Button$Insert"
-msgstr ""
+msgstr "Вставка"
msgid "Plugin"
-msgstr ""
+msgstr "Модуль"
msgid "Up/Dn for new location - OK to move"
-msgstr " \"\"/\"\" , \"OK\""
+msgstr "Натискайте \"Вверх\"/\"Вниз\" для вибору позиції, а потім \"OK\""
msgid "Channel locked (recording)!"
-msgstr " ( )!"
+msgstr "Канал заблоковано (йде запис)!"
msgid "Low disk space!"
-msgstr " !"
+msgstr "Недостатньо місця на диску!"
msgid "Can't shutdown - option '-s' not given!"
-msgstr " - '-s'!"
+msgstr "Виключенння неможливе - не задано параметр '-s'!"
msgid "Editing - shut down anyway?"
-msgstr " - ?"
+msgstr "Йде монтаж - дійсно виключити?"
msgid "Recording - shut down anyway?"
-msgstr " - ?"
+msgstr "Йде запис - дійсно виключити?"
#, c-format
msgid "Recording in %ld minutes, shut down anyway?"
-msgstr " %ld - ?"
+msgstr "Через %ld хвилин почнеться запис - дійсно виключити?"
msgid "shut down anyway?"
-msgstr " ?"
+msgstr "дійсно виключити?"
#, c-format
msgid "Plugin %s wakes up in %ld min, continue?"
-msgstr "Plugin %s %ld - ?"
+msgstr "Модуль %s включиться через %ld хвилин - продовжити?"
msgid "Editing - restart anyway?"
-msgstr " - ?"
+msgstr "Процес монтажу - дійсно перезапустити?"
msgid "Recording - restart anyway?"
-msgstr " - ?"
+msgstr "Йде запис - дійсно перезапустити?"
msgid "restart anyway?"
-msgstr " ?"
+msgstr "дійсно перезапустити?"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
-msgstr " "
+msgstr "Гучність "
msgid "Classic VDR"
-msgstr ""
+msgstr "Класичний VDR"
msgid "ST:TNG Panels"
-msgstr "ST:TNG "
+msgstr "ST:TNG панелі"
#. TRANSLATORS: the first character of each weekday, beginning with monday
msgid "MTWTFSS"
-msgstr "ǿ"
+msgstr "ПВСЧПСН"
#. TRANSLATORS: abbreviated weekdays, beginning with monday (must all be 3 letters!)
msgid "MonTueWedThuFriSatSun"
-msgstr "ݲҿѽ"
+msgstr "ПонВтрСрдЧтвПтнСубНед"
msgid "Monday"
-msgstr ""
+msgstr "Понеділок"
msgid "Tuesday"
-msgstr ""
+msgstr "Вівторок"
msgid "Wednesday"
-msgstr ""
+msgstr "Середа"
msgid "Thursday"
-msgstr ""
+msgstr "Четвер"
msgid "Friday"
-msgstr "'"
+msgstr "П'ятниця"
msgid "Saturday"
-msgstr ""
+msgstr "Субота"
msgid "Sunday"
-msgstr ""
+msgstr "Неділя"
msgid "Upcoming recording!"
-msgstr " "
+msgstr "Запис скоро почнеться"
+
+msgid "Pause live video?"
+msgstr "Режим відкладеного перегляду..."
msgid "Recording started"
-msgstr " "
+msgstr "Запис почався"
msgid "VDR will shut down later - press Power to force"
-msgstr "VDR - Power "
+msgstr "VDR виключиться ппізніше - натисніть Power для пришвидшення"
msgid "Press any key to cancel shutdown"
-msgstr " - ."
+msgstr "Натисніть будь-яку кнопку для відміни виключення."
msgid "Switching primary DVB..."
-msgstr " DVB-..."
+msgstr "Зміна основного DVB-пристрою..."
msgid "Editing process failed!"
-msgstr " !"
+msgstr "Помилка під час монтажу запису!"
msgid "Editing process finished"
-msgstr " "
+msgstr "Монтаж закінчено"
msgid "Press any key to cancel restart"
-msgstr " - "
+msgstr "Натисніть будь-яку кнопку для відміни перезавантаження"
#, c-format
msgid "VDR will shut down in %s minutes"
-msgstr "VDR %s "
+msgstr "VDR виключиться через %s хвилин"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 92b20a7..f276775 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
-"POT-Creation-Date: 2008-12-14 16:10+0100\n"
+"POT-Creation-Date: 2009-05-21 13:18+0200\n"
"PO-Revision-Date: 2008-03-21 08:44+0800\n"
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
"Language-Team: Chinese\n"
@@ -707,6 +707,15 @@ msgstr "CAM正在使用-是否重启?"
msgid "Can't reset CAM!"
msgstr "不能重启CAM"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "记录中"
@@ -725,6 +734,9 @@ msgstr "默认优先"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "默认终身 (d)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "暂停优先"
@@ -986,6 +998,9 @@ msgstr "星期天"
msgid "Upcoming recording!"
msgstr "即将的记录!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "记录开始!"
diff --git a/recorder.c b/recorder.c
index d8f22ce..4e48a51 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 2.3 2009/03/20 15:49:02 kls Exp $
+ * $Id: recorder.c 2.4 2009/05/23 12:18:25 kls Exp $
*/
#include "recorder.h"
@@ -44,12 +44,14 @@ cRecorder::cRecorder(const char *FileName, tChannelID ChannelID, int Priority, i
Type = 0x06;
}
frameDetector = new cFrameDetector(Pid, Type);
- patPmtGenerator.SetChannel(Channel);
- fileName = NULL;
index = NULL;
fileSize = 0;
lastDiskSpaceCheck = time(NULL);
fileName = new cFileName(FileName, true);
+ int PatVersion, PmtVersion;
+ if (fileName->GetLastPatPmtVersions(PatVersion, PmtVersion))
+ patPmtGenerator.SetVersions(PatVersion + 1, PmtVersion + 1);
+ patPmtGenerator.SetChannel(Channel);
recordFile = fileName->Open();
if (!recordFile)
return;
diff --git a/recording.c b/recording.c
index c86b163..2ff7f6f 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 2.12 2009/04/13 13:50:39 kls Exp $
+ * $Id: recording.c 2.16 2009/06/13 13:34:08 kls Exp $
*/
#include "recording.h"
@@ -20,6 +20,7 @@
#include "channels.h"
#include "i18n.h"
#include "interface.h"
+#include "remux.h"
#include "skins.h"
#include "tools.h"
#include "videodir.h"
@@ -622,8 +623,8 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
Utf8Strn0Cpy(SubtitleBuffer, Subtitle, MAX_SUBTITLE_LENGTH);
Subtitle = SubtitleBuffer;
}
- char *macroTITLE = strstr(Timer->File(), TIMERMACRO_TITLE);
- char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE);
+ const char *macroTITLE = strstr(Timer->File(), TIMERMACRO_TITLE);
+ const char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE);
if (macroTITLE || macroEPISODE) {
name = strdup(Timer->File());
name = strreplace(name, TIMERMACRO_TITLE, Title);
@@ -672,7 +673,7 @@ cRecording::cRecording(const char *FileName)
sortBuffer = NULL;
fileName = strdup(FileName);
FileName += strlen(VideoDirectory) + 1;
- char *p = strrchr(FileName, '/');
+ const char *p = strrchr(FileName, '/');
name = NULL;
info = new cRecordingInfo;
@@ -1528,8 +1529,8 @@ bool cIndexFile::Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *I
if (Independent)
*Independent = index[Index].independent;
if (Length) {
- int fn = index[Index + 1].number;
- int fo = index[Index + 1].offset;
+ uint16_t fn = index[Index + 1].number;
+ off_t fo = index[Index + 1].offset;
if (fn == *FileNumber)
*Length = fo - *FileOffset;
else
@@ -1559,8 +1560,8 @@ int cIndexFile::GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber, off
*FileOffset = index[Index].offset;
if (Length) {
// all recordings end with a non-independent frame, so the following should be safe:
- int fn = index[Index + 1].number;
- int fo = index[Index + 1].offset;
+ uint16_t fn = index[Index + 1].number;
+ off_t fo = index[Index + 1].offset;
if (fn == *FileNumber)
*Length = fo - *FileOffset;
else {
@@ -1629,6 +1630,57 @@ cFileName::~cFileName()
free(fileName);
}
+bool cFileName::GetLastPatPmtVersions(int &PatVersion, int &PmtVersion)
+{
+ if (fileName && !isPesRecording) {
+ // Find the last recording file:
+ int Number = 1;
+ for (; Number <= MAXFILESPERRECORDINGTS + 1; Number++) { // +1 to correctly set Number in case there actually are that many files
+ sprintf(pFileNumber, RECORDFILESUFFIXTS, Number);
+ if (access(fileName, F_OK) != 0) { // file doesn't exist
+ Number--;
+ break;
+ }
+ }
+ for (; Number > 0; Number--) {
+ // Search for a PAT packet from the end of the file:
+ cPatPmtParser PatPmtParser;
+ sprintf(pFileNumber, RECORDFILESUFFIXTS, Number);
+ int fd = open(fileName, O_RDONLY | O_LARGEFILE, DEFFILEMODE);
+ if (fd >= 0) {
+ off_t pos = lseek(fd, -TS_SIZE, SEEK_END);
+ while (pos >= 0) {
+ // Read and parse the PAT/PMT:
+ uchar buf[TS_SIZE];
+ while (read(fd, buf, sizeof(buf)) == sizeof(buf)) {
+ if (buf[0] == TS_SYNC_BYTE) {
+ int Pid = TsPid(buf);
+ if (Pid == 0)
+ PatPmtParser.ParsePat(buf, sizeof(buf));
+ else if (Pid == PatPmtParser.PmtPid()) {
+ PatPmtParser.ParsePmt(buf, sizeof(buf));
+ if (PatPmtParser.GetVersions(PatVersion, PmtVersion)) {
+ close(fd);
+ return true;
+ }
+ }
+ else
+ break; // PAT/PMT is always in one sequence
+ }
+ else
+ return false;
+ }
+ pos = lseek(fd, pos - TS_SIZE, SEEK_SET);
+ }
+ close(fd);
+ }
+ else
+ break;
+ }
+ }
+ return false;
+}
+
cUnbufferedFile *cFileName::Open(void)
{
if (!file) {
diff --git a/recording.h b/recording.h
index d55cfdf..81c72fd 100644
--- a/recording.h
+++ b/recording.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.h 2.7 2009/04/19 09:00:45 kls Exp $
+ * $Id: recording.h 2.8 2009/05/23 12:14:42 kls Exp $
*/
#ifndef __RECORDING_H
@@ -260,6 +260,7 @@ public:
~cFileName();
const char *Name(void) { return fileName; }
int Number(void) { return fileNumber; }
+ bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion);
cUnbufferedFile *Open(void);
void Close(void);
cUnbufferedFile *SetOffset(int Number, off_t Offset = 0);
diff --git a/remux.c b/remux.c
index 58c0531..97c139c 100644
--- a/remux.c
+++ b/remux.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.c 2.20 2009/05/03 14:43:25 kls Exp $
+ * $Id: remux.c 2.24 2009/06/06 13:24:57 kls Exp $
*/
#include "remux.h"
@@ -357,6 +357,12 @@ void cPatPmtGenerator::GeneratePmt(cChannel *Channel)
}
}
+void cPatPmtGenerator::SetVersions(int PatVersion, int PmtVersion)
+{
+ patVersion = PatVersion & 0x1F;
+ pmtVersion = PmtVersion & 0x1F;
+}
+
void cPatPmtGenerator::SetChannel(cChannel *Channel)
{
if (Channel) {
@@ -383,8 +389,9 @@ uchar *cPatPmtGenerator::GetPmt(int &Index)
// --- cPatPmtParser ---------------------------------------------------------
-cPatPmtParser::cPatPmtParser(void)
+cPatPmtParser::cPatPmtParser(bool UpdatePrimaryDevice)
{
+ updatePrimaryDevice = UpdatePrimaryDevice;
Reset();
}
@@ -472,7 +479,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
dbgpatpmt(" pcr = %d\n", Pmt.getPCRPid());
if (pmtVersion == Pmt.getVersionNumber())
return;
- cDevice::PrimaryDevice()->ClrAvailableTracks(false, true);
+ if (updatePrimaryDevice)
+ cDevice::PrimaryDevice()->ClrAvailableTracks(false, true);
int NumApids = 0;
int NumDpids = 0;
int NumSpids = 0;
@@ -481,6 +489,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
for (SI::Loop::Iterator it; Pmt.streamLoop.getNext(stream, it); ) {
dbgpatpmt(" stream type = %02X, pid = %d", stream.getStreamType(), stream.getPid());
switch (stream.getStreamType()) {
+ case 0x01: // STREAMTYPE_11172_VIDEO
case 0x02: // STREAMTYPE_13818_VIDEO
case 0x1B: // MPEG4
vpid = stream.getPid();
@@ -515,7 +524,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
}
delete d;
}
- cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, stream.getPid(), ALangs);
+ if (updatePrimaryDevice)
+ cDevice::PrimaryDevice()->SetAvailableTrack(ttAudio, NumApids, stream.getPid(), ALangs);
NumApids++;
}
}
@@ -550,7 +560,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
break;
}
}
- cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, stream.getPid(), SLangs);
+ if (updatePrimaryDevice)
+ cDevice::PrimaryDevice()->SetAvailableTrack(ttSubtitle, NumSpids, stream.getPid(), SLangs);
NumSpids++;
}
break;
@@ -566,7 +577,8 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
}
if (dpid) {
if (NumDpids < MAXDPIDS) {
- cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang);
+ if (updatePrimaryDevice)
+ cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, dpid, lang);
NumDpids++;
}
}
@@ -574,8 +586,10 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
break;
}
dbgpatpmt("\n");
- cDevice::PrimaryDevice()->EnsureAudioTrack(true);
- cDevice::PrimaryDevice()->EnsureSubtitleTrack();
+ if (updatePrimaryDevice) {
+ cDevice::PrimaryDevice()->EnsureAudioTrack(true);
+ cDevice::PrimaryDevice()->EnsureSubtitleTrack();
+ }
}
pmtVersion = Pmt.getVersionNumber();
}
@@ -584,13 +598,19 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
pmtSize = 0;
}
+bool cPatPmtParser::GetVersions(int &PatVersion, int &PmtVersion)
+{
+ PatVersion = patVersion;
+ PmtVersion = pmtVersion;
+ return patVersion >= 0 && pmtVersion >= 0;
+}
+
// --- cTsToPes --------------------------------------------------------------
cTsToPes::cTsToPes(void)
{
data = NULL;
size = length = offset = 0;
- synced = false;
}
cTsToPes::~cTsToPes()
@@ -702,7 +722,7 @@ cFrameDetector::cFrameDetector(int Pid, int Type)
newFrame = independentFrame = false;
numPtsValues = 0;
numIFrames = 0;
- isVideo = type == 0x02 || type == 0x1B; // MPEG 2 or MPEG 4
+ isVideo = type == 0x01 || type == 0x02 || type == 0x1B; // MPEG 1, 2 or 4
frameDuration = 0;
framesInPayloadUnit = framesPerPayloadUnit = 0;
payloadUnitOfFrame = 0;
@@ -795,6 +815,7 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
scanner <<= 8;
scanner |= Data[i];
switch (type) {
+ case 0x01: // MPEG 1 video
case 0x02: // MPEG 2 video
if (scanner == 0x00000100) { // Picture Start Code
if (synced && Processed)
diff --git a/remux.h b/remux.h
index 063acaa..0dd1a9a 100644
--- a/remux.h
+++ b/remux.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.h 2.10 2009/04/19 10:57:09 kls Exp $
+ * $Id: remux.h 2.17 2009/06/06 13:26:23 kls Exp $
*/
#ifndef __REMUX_H
@@ -181,6 +181,15 @@ protected:
///< with GetPmt().
public:
cPatPmtGenerator(cChannel *Channel = NULL);
+ void SetVersions(int PatVersion, int PmtVersion);
+ ///< Sets the version numbers for the generated PAT and PMT, in case
+ ///< this generator is used to, e.g., continue a previously interrupted
+ ///< recording (in which case the numbers given should be derived from
+ ///< the PAT/PMT versions last used in the existing recording, incremented
+ ///< by 1. If the given numbers exceed the allowed range of 0..31, the
+ ///< higher bits will automatically be cleared.
+ ///< SetVersions() needs to be called before SetChannel() in order to
+ ///< have an effect from the very start.
void SetChannel(cChannel *Channel);
///< Sets the Channel for which the PAT/PMT shall be generated.
uchar *GetPat(void);
@@ -204,10 +213,11 @@ private:
int pmtPid;
int vpid;
int vtype;
+ bool updatePrimaryDevice;
protected:
int SectionLength(const uchar *Data, int Length) { return (Length >= 3) ? ((int(Data[1]) & 0x0F) << 8)| Data[2] : 0; }
public:
- cPatPmtParser(void);
+ cPatPmtParser(bool UpdatePrimaryDevice = false);
void Reset(void);
///< Resets the parser. This function must be called whenever a new
///< stream is parsed.
@@ -221,6 +231,9 @@ public:
///< are delivered to the parser through several subsequent calls to
///< ParsePmt(). The whole PMT data will be processed once the last packet
///< has been received.
+ bool GetVersions(int &PatVersion, int &PmtVersion);
+ ///< Returns true if a valid PAT/PMT has been parsed and stores
+ ///< the current version numbers in the given variables.
int PmtPid(void) { return pmtPid; }
///< Returns the PMT pid as defined by the current PAT.
///< If no PAT has been received yet, -1 will be returned.
@@ -239,7 +252,6 @@ private:
int size;
int length;
int offset;
- bool synced;
public:
cTsToPes(void);
~cTsToPes();
@@ -249,11 +261,24 @@ public:
///< If the given TS packet starts a new PES payload packet, the converter
///< will be automatically reset. Any packets before the first one that starts
///< a new PES payload packet will be ignored.
+ ///< Once a TS packet has been put into a cTsToPes converter, all subsequent
+ ///< packets until the next call to Reset() must belong to the same PID as
+ ///< the first packet. There is no check whether this actually is the case, so
+ ///< the caller is responsible for making sure this condition is met.
const uchar *GetPes(int &Length);
///< Gets a pointer to the complete PES packet, or NULL if the packet
///< is not complete yet. If the packet is complete, Length will contain
///< the total packet length. The returned pointer is only valid until
///< the next call to PutTs() or Reset(), or until this object is destroyed.
+ ///< Once GetPes() has returned a non-NULL value, it must be called
+ ///< repeatedly, and the data processed, until it returns NULL. This
+ ///< is because video packets may be larger than the data a single
+ ///< PES packet with an actual length field can hold, and are therefore
+ ///< split into several PES packets with smaller sizes.
+ ///< Note that for video data GetPes() may only be called if the next
+ ///< TS packet that will be given to PutTs() has the "payload start" flag
+ ///< set, because this is the only way to determine the end of a video PES
+ ///< packet.
void Reset(void);
///< Resets the converter. This needs to be called after a PES packet has
///< been fetched by a call to GetPes(), and before the next call to
diff --git a/ringbuffer.c b/ringbuffer.c
index a9912ff..fd8123e 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 2.1 2009/02/24 11:32:14 kls Exp $
+ * $Id: ringbuffer.c 2.2 2009/05/17 10:05:17 kls Exp $
*/
#include "ringbuffer.h"
@@ -43,7 +43,7 @@ void cRingBuffer::UpdatePercentage(int Fill)
{
if (Fill > maxFill)
maxFill = Fill;
- int percent = Fill * 100 / (Size() - 1) / PERCENTAGEDELTA * PERCENTAGEDELTA;
+ int percent = Fill * 100 / (Size() - 1) / PERCENTAGEDELTA * PERCENTAGEDELTA; // clamp down to nearest quantum
if (percent != lastPercent) {
if (percent >= PERCENTAGETHRESHOLD && percent > lastPercent || percent < PERCENTAGETHRESHOLD && lastPercent >= PERCENTAGETHRESHOLD) {
dsyslog("buffer usage: %d%% (tid=%d)", percent, getThreadTid);
diff --git a/skins.c b/skins.c
index 8c67a80..a0815e2 100644
--- a/skins.c
+++ b/skins.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: skins.c 2.0 2008/02/17 11:31:09 kls Exp $
+ * $Id: skins.c 2.1 2009/06/06 15:12:31 kls Exp $
*/
#include "skins.h"
@@ -78,8 +78,9 @@ void cSkinDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5)
tabs[3] = Tab3 ? tabs[2] + Tab3 : 0;
tabs[4] = Tab4 ? tabs[3] + Tab4 : 0;
tabs[5] = Tab5 ? tabs[4] + Tab5 : 0;
+ int AvgCharWidth = Setup.FontOsdSize * 3 / 5; // just an estimate
for (int i = 1; i < MaxTabs; i++)
- tabs[i] *= 12;//XXX average character width of font used for items - see also skincurses.c!!!
+ tabs[i] *= AvgCharWidth;
}
void cSkinDisplayMenu::Scroll(bool Up, bool Page)
diff --git a/svdrp.c b/svdrp.c
index cc2f712..416b869 100644
--- a/svdrp.c
+++ b/svdrp.c
@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
- * $Id: svdrp.c 2.3 2009/04/13 13:35:29 kls Exp $
+ * $Id: svdrp.c 2.5 2009/06/06 14:03:55 kls Exp $
*/
#include "svdrp.h"
@@ -739,7 +739,7 @@ void cSVDRP::CmdGRAB(const char *Option)
char *strtok_next;
FileName = strtok_r(p, delim, &strtok_next);
// image type:
- char *Extension = strrchr(FileName, '.');
+ const char *Extension = strrchr(FileName, '.');
if (Extension) {
if (strcasecmp(Extension, ".jpg") == 0 || strcasecmp(Extension, ".jpeg") == 0)
Jpeg = true;
@@ -798,16 +798,17 @@ void cSVDRP::CmdGRAB(const char *Option)
char RealFileName[PATH_MAX];
if (FileName) {
if (grabImageDir) {
- cString s;
- char *slash = strrchr(FileName, '/');
+ cString s(FileName);
+ FileName = s;
+ const char *slash = strrchr(FileName, '/');
if (!slash) {
s = AddDirectory(grabImageDir, FileName);
FileName = s;
}
slash = strrchr(FileName, '/'); // there definitely is one
- *slash = 0;
- char *r = realpath(FileName, RealFileName);
- *slash = '/';
+ cString t(s);
+ t.Truncate(slash - FileName);
+ char *r = realpath(t, RealFileName);
if (!r) {
LOG_ERROR_STR(FileName);
Reply(501, "Invalid file name \"%s\"", FileName);
diff --git a/tools.c b/tools.c
index f49206f..9ef61f5 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 2.2 2009/01/16 14:29:08 kls Exp $
+ * $Id: tools.c 2.3 2009/05/31 11:43:24 kls Exp $
*/
#include "tools.h"
@@ -1473,16 +1473,18 @@ int cUnbufferedFile::Open(const char *FileName, int Flags, mode_t Mode)
int cUnbufferedFile::Close(void)
{
-#ifdef USE_FADVISE
if (fd >= 0) {
+#ifdef USE_FADVISE
if (totwritten) // if we wrote anything make sure the data has hit the disk before
fdatasync(fd); // calling fadvise, as this is our last chance to un-cache it.
posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED);
- }
#endif
- int OldFd = fd;
- fd = -1;
- return close(OldFd);
+ int OldFd = fd;
+ fd = -1;
+ return close(OldFd);
+ }
+ errno = EBADF;
+ return -1;
}
// When replaying and going e.g. FF->PLAY the position jumps back 2..8M
diff --git a/vdr.c b/vdr.c
index 46e4200..2384895 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 2.8 2009/05/03 10:33:06 kls Exp $
+ * $Id: vdr.c 2.10 2009/05/21 11:14:48 kls Exp $
*/
#include <getopt.h>
@@ -750,8 +750,10 @@ int main(int argc, char *argv[])
// Update the OSD size:
{
static time_t lastOsdSizeUpdate = 0;
- if (Now != lastOsdSizeUpdate) // once per second
+ if (Now != lastOsdSizeUpdate) { // once per second
cOsdProvider::UpdateOsdSize();
+ lastOsdSizeUpdate = Now;
+ }
}
// Restart the Watchdog timer:
if (WatchdogTimeout > 0) {
@@ -1060,8 +1062,12 @@ int main(int argc, char *argv[])
case kPause:
if (!cControl::Control()) {
DELETE_MENU;
- if (!cRecordControls::PauseLiveVideo())
- Skins.Message(mtError, tr("No free DVB device to record!"));
+ if (Setup.PauseKeyHandling) {
+ if (Setup.PauseKeyHandling > 1 || Interface->Confirm(tr("Pause live video?"))) {
+ if (!cRecordControls::PauseLiveVideo())
+ Skins.Message(mtError, tr("No free DVB device to record!"));
+ }
+ }
key = kNone; // nobody else needs to see this key
}
break;