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