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>
Günter 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ó començada"
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: Vladimír Bárta <vladimir.barta@k2atmitec.cz>, Jiøí Dobrý <jdobry@centrum.cz>\n"
"Language-Team: Czech\n"
@@ -705,6 +705,15 @@ msgstr "CAM se pou¾ívá - 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 "Nahrávání"
@@ -723,6 +732,9 @@ msgstr "Výchozí priorita"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Výchozí ¾ivotnost"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Priorita pøeru¹ení"
@@ -984,6 +996,9 @@ msgstr "Nedìle"
msgid "Upcoming recording!"
msgstr "Brzo zaène nahrávání!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Zaèalo nahrávání"
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 "Søndag"
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 zurücksetzen?"
msgid "Can't reset CAM!"
msgstr "Zurücksetzen des CAM fehlgeschlagen!"
+msgid "do not pause live video"
+msgstr "Live-Signal nicht anhalten"
+
+msgid "confirm pause live video"
+msgstr "Anhalten des Live-Signals bestätigen"
+
+msgid "pause live video"
+msgstr "Live-Signal anhalten"
+
msgid "Recording"
msgstr "Aufnahme"
@@ -722,6 +731,9 @@ msgstr "Default-Priorität"
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-Priorität"
@@ -983,6 +995,9 @@ msgstr "Sonntag"
msgid "Upcoming recording!"
msgstr "Aufnahme beginnt in Kürze!"
+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 grabación"
@@ -723,6 +732,9 @@ msgstr "Prioridad por defecto"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Duración por defecto (días)"
+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 "¡Grabación a punto de empezar!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Iniciando grabación"
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 - taaskäivitada?"
msgid "Can't reset CAM!"
msgstr "CAM mooduli taaskäivitus ebaõnnestus!"
+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 (päevi)"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Pausi prioriteet"
@@ -983,6 +995,9 @@ msgstr "Pühapäev"
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 käytössä - nollataanko?"
msgid "Can't reset CAM!"
msgstr "CA-moduulin nollaus epäonnistui!"
+msgid "do not pause live video"
+msgstr "älä pysäytä lähetystä"
+
+msgid "confirm pause live video"
+msgstr "varmista lähetyksen pysäyttäminen"
+
+msgid "pause live video"
+msgstr "pysäytä lähetys"
+
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 "Taukonäppäimen 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 "Pysäytetäänkö lähetys?"
+
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 à zéro ?"
msgid "Can't reset CAM!"
msgstr "Impossible de réinitialiser 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 défaut"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Durée de vie par défaut (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 neuspje¹no!"
+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 zapoèelo"
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: István Füley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian\n"
@@ -707,6 +707,15 @@ msgstr "CAM használatban - valóban újraindítjuk?"
msgid "Can't reset CAM!"
msgstr "A CAM újraindítás nem sikerült"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Felvétel"
@@ -725,6 +734,9 @@ msgstr "Alapértelmezett prioritás"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Alapértelmezett élettartam"
+msgid "Setup.Recording$Pause key handling"
+msgstr ""
+
msgid "Setup.Recording$Pause priority"
msgstr "Szünet prioritás"
@@ -986,6 +998,9 @@ msgstr "Vasárnap"
msgid "Upcoming recording!"
msgstr "Felvétel rögtön kezdõdik!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "A felvétel elindítva"
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 "Søndag"
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 u¿yciu - naprawdê zresetowaæ?"
msgid "Can't reset CAM!"
msgstr "Nie mo¿na 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 "Domy¶lny priorytet"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Domy¶lny 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 "Wkrótce nagranie!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Rozpoczêto 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 "Não é possível reiniciar a CAM"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Opções de gravação"
@@ -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 "Gravação agendada!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Gravação 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þã - totuºi 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 pãstrare 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 prièelo"
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 återställa 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 för direktinspelning"
@@ -986,6 +998,9 @@ msgstr "Söndag"
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 Yolgeçen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish\n"
@@ -704,6 +704,15 @@ msgstr "CAM kullanýlýyor - gerçekden sýfýrla?"
msgid "Can't reset CAM!"
msgstr "CAM sýfýrlanamadý!"
+msgid "do not pause live video"
+msgstr ""
+
+msgid "confirm pause live video"
+msgstr ""
+
+msgid "pause live video"
+msgstr ""
+
msgid "Recording"
msgstr "Kayýt"
@@ -722,6 +731,9 @@ msgstr "Olaðan priorite"
msgid "Setup.Recording$Default lifetime (d)"
msgstr "Olaðan çekim ömrü (gün)"
+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 yakýnda baþlýyor!"
+msgid "Pause live video?"
+msgstr ""
+
msgid "Recording started"
msgstr "Kayýt baþlandý"
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 " abcdefghijklmnopqrstuvwxyzÐÑÒÓÔÕôñÖרö÷ÙÚÛÜÝÞßàáâãäåæçèéêëìîï0123456789-.#~,/_@"
+msgstr " abcdefghijklmnopqrstuvwxyzабвгдеєёжзиіїйклмнопр�туфхцчшщъыью�0123456789-.#~,/_@"
msgid "yes"
-msgstr "âÐÚ"
+msgstr "так"
msgid "CharMap$ 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"
+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;