diff options
| author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2009-06-14 13:49:00 +0200 |
|---|---|---|
| committer | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2009-06-14 13:49:00 +0200 |
| commit | ab6f2ccf424896a80b6e2fdf9ab9313ea4b7f316 (patch) | |
| tree | cd6cf2c6307c8a58f137e12286674cc8f1366dc5 | |
| parent | 991eda006700f1703bcec528c1ff178a4cab9048 (diff) | |
| download | vdr-patch-lnbsharing-ab6f2ccf424896a80b6e2fdf9ab9313ea4b7f316.tar.gz vdr-patch-lnbsharing-ab6f2ccf424896a80b6e2fdf9ab9313ea4b7f316.tar.bz2 | |
Version 1.7.8vdr-1.7.8
- The name of the function cDevice::GetVideoSize() wasn't very well chosen
for its purpose of defining the optimum size of the OSD for the current
output device. Therefore a new function named cDevice::GetOsdSize() has
been introduced (suggested by Rolf Ahrenberg). Plugin authors should
implement this function in classes derived from cDevice, if they are able
to replay video. cDevice::GetVideoSize() still exists and should return the
actual size of the video material that is currently replayed. Note that
because of the many possible aspect ratios for video material, the type
of the Aspect parameter of GetVideoSize() has been changed to 'double',
and the Aspect parameter in both functions is named differently, because
it returns different values (suggested by Reinhard Nissl).
Thanks to Oliver Endriss for his input on calculating the Aspect factor in
GetOsdSize().
- Fixed the way the OSD size is determined on full featured DVB cards (thanks
to Oliver Endriss).
- Increased MAXOSDHEIGHT to 1200 (suggested by Nicolas Huillard).
- Removed limitation to PAL resolution from SPU handling.
- Checking fd_video in cDvbDevice::GetVideoSize() to avoid error messages on
systems with no real primary replay device (reported by Martin Neuditschko).
- Added a note to cTsToPes::GetPes() about having to call it repeatedly, once
it has returned a non-NULL value.
- Added MPEG 1 handling to remux.c (thanks to Ales Jurik).
- Fixed use of time_t in cEIT::cEIT() (thanks to Tobias Bratfisch).
- Added missing update of lastOsdSizeUpdate.
- EIT events are now only processed if a plausible system time is available, to
avoid wrong handling of PDC descriptors (thanks to Tobias Bratfisch).
- Removed unused 'synced' member from cTsToPes (reported by Christoph Haubrich).
- Added a note to cTsToPes about all TS packets having to belong to the same PID,
and that for video data GetPes() may only be called if the next TS packet that
will be given to PutTs() has the "payload start" flag set (suggested by Christoph
Haubrich).
- Added a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage()
(thanks to Rolf Ahrenberg).
- The new setup option "Recording/Pause key handling" can be used to define
what happens if the Pause key on the remote control is pressed during
live tv (thanks to Timo Eskola).
- Added a note about cFont::GetFont() not being thread-safe.
- Fixed generating PAT/PMT version numbers in case the PIDs change during
recording (reported by Reinhard Nissl).
- Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk).
- Fixed a memory leak when reaching the end of a recording during replay (reported
by Reinhard Nissl).
- Fixed calling close(-1) in cUnbufferedFile::Close() (reported by Reinhard Nissl).
- Added a workaround for the broken linux-dvb driver header files (based on a patch
from Tobias Grimm).
- Fixed handling the length of DiSEqC command sequences (reported by Reinhard Nissl).
- Fixed cOsdMenu::Display() in case the menu size has changed (thanks to
Reinhard Nissl).
- Added some missing 'const' keywords to avoid compilation errors with gcc 4.4
(thanks to Ville Skyttä and Ludwig Nussel).
- Modified cSVDRP::CmdGRAB() to avoid writing into const data (reported by
Ludwig Nussel).
- Fixed calculating menu colum widths in case the font has a size other than the
default size (reported by Reinhard Nissl).
- Added a plausibility check for the OSD percentage parameters
to avoid problems in case the values are stored in the setup.conf
file in a wrong way.
- Fixed variable types in cIndexFile (reported by Udo Richter).
| -rw-r--r-- | CONTRIBUTORS | 32 | ||||
| -rw-r--r-- | HISTORY | 61 | ||||
| -rw-r--r-- | MANUAL | 7 | ||||
| -rw-r--r-- | PLUGINS.html | 4 | ||||
| -rw-r--r-- | config.c | 20 | ||||
| -rw-r--r-- | config.h | 14 | ||||
| -rw-r--r-- | device.c | 23 | ||||
| -rw-r--r-- | device.h | 31 | ||||
| -rw-r--r-- | dvbdevice.c | 71 | ||||
| -rw-r--r-- | dvbdevice.h | 6 | ||||
| -rw-r--r-- | dvbplayer.c | 84 | ||||
| -rw-r--r-- | dvbspu.c | 31 | ||||
| -rw-r--r-- | dvbspu.h | 8 | ||||
| -rw-r--r-- | eit.c | 9 | ||||
| -rw-r--r-- | font.h | 10 | ||||
| -rw-r--r-- | menu.c | 8 | ||||
| -rw-r--r-- | osd.c | 11 | ||||
| -rw-r--r-- | osd.h | 4 | ||||
| -rw-r--r-- | osdbase.c | 3 | ||||
| -rw-r--r-- | po/ca_ES.po | 17 | ||||
| -rw-r--r-- | po/cs_CZ.po | 17 | ||||
| -rw-r--r-- | po/da_DK.po | 17 | ||||
| -rw-r--r-- | po/de_DE.po | 17 | ||||
| -rw-r--r-- | po/el_GR.po | 17 | ||||
| -rw-r--r-- | po/es_ES.po | 17 | ||||
| -rw-r--r-- | po/et_EE.po | 17 | ||||
| -rw-r--r-- | po/fi_FI.po | 17 | ||||
| -rw-r--r-- | po/fr_FR.po | 17 | ||||
| -rw-r--r-- | po/hr_HR.po | 17 | ||||
| -rw-r--r-- | po/hu_HU.po | 17 | ||||
| -rw-r--r-- | po/it_IT.po | 17 | ||||
| -rw-r--r-- | po/nl_NL.po | 17 | ||||
| -rw-r--r-- | po/nn_NO.po | 17 | ||||
| -rw-r--r-- | po/pl_PL.po | 17 | ||||
| -rw-r--r-- | po/pt_PT.po | 17 | ||||
| -rw-r--r-- | po/ro_RO.po | 17 | ||||
| -rw-r--r-- | po/ru_RU.po | 17 | ||||
| -rw-r--r-- | po/sl_SI.po | 17 | ||||
| -rw-r--r-- | po/sv_SE.po | 17 | ||||
| -rw-r--r-- | po/tr_TR.po | 17 | ||||
| -rw-r--r-- | po/uk_UA.po | 655 | ||||
| -rw-r--r-- | po/zh_CN.po | 17 | ||||
| -rw-r--r-- | recorder.c | 8 | ||||
| -rw-r--r-- | recording.c | 68 | ||||
| -rw-r--r-- | recording.h | 3 | ||||
| -rw-r--r-- | remux.c | 41 | ||||
| -rw-r--r-- | remux.h | 31 | ||||
| -rw-r--r-- | ringbuffer.c | 4 | ||||
| -rw-r--r-- | skins.c | 5 | ||||
| -rw-r--r-- | svdrp.c | 15 | ||||
| -rw-r--r-- | tools.c | 14 | ||||
| -rw-r--r-- | vdr.c | 14 |
52 files changed, 1147 insertions, 522 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 7bdc251..7cdfa22 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -672,6 +672,8 @@ Oliver Endriss <o.endriss@gmx.de> VPID is 0 for reporting chirping sound disturbences at editing points in TS recordings for reporting broken index generation in TS recordings after a buffer overflow + for fixing the way the OSD size is determined on full featured DVB cards + for his input on calculating the Aspect factor in GetOsdSize() Reinhard Walter Buchner <rw.buchner@freenet.de> for adding some satellites to 'sources.conf' @@ -918,6 +920,8 @@ Ludwig Nussel <ludwig.nussel@web.de> for a hint on using _nl_msg_cat_cntr for adding some missing 'const' keywords for pointing out that "%016llX" should be used instead of "%016LX" + for adding some missing 'const' keywords to avoid compilation errors with gcc 4.4 + for reporting that cSVDRP::CmdGRAB() writes into const data Thomas Koch <tom@harhar.net> for his support in keeping the Premiere World channels up to date in 'channels.conf' @@ -1073,6 +1077,8 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi> for replacing the Finnish language code "smi" with "suo" for adding cap_sys_nice to the capabilities that are not dropped for adding cThread::SetIOPriority() and using it in cRemoveDeletedRecordingsThread + for suggesting to introduce cDevice::GetOsdSize() + for adding a note about the meaning of PERCENTAGEDELTA in cRingBuffer::UpdatePercentage() Ralf Klueber <ralf.klueber@vodafone.com> for reporting a bug in cutting a recording if there is only a single editing mark @@ -1212,6 +1218,17 @@ Reinhard Nissl <rnissl@gmx.de> for making sure vdr-xine no longer needs cDvbPlayer::Action() to call DeviceFlush() for fixing the 'VideoOnly' condition in the PlayPes() and PlayTs() calls in cDvbPlayer::Action() + for reporting a problem in case the PIDs change during recording + for reporting a memory leak when reaching the end of a recording during replay + for reporting a call to close(-1) in cUnbufferedFile::Close() + for reporting a possible problem in handling the length of DiSEqC command sequences + for fixing cOsdMenu::Display() in case the menu size has changed + for suggesting to change the type of the Aspect parameter of GetVideoSize() + to 'double' + for suggesting to use different names for the Aspect parameter in GetVideoSize() + and GetOsdSize() + for reporting a problem with calculating menu colum widths in case the font has a + size other than the default size Richard Robson <richard_robson@beeb.net> for reporting freezing replay if a timer starts while in Transfer Mode from the @@ -1623,6 +1640,7 @@ Udo Richter <udo_richter@gmx.de> for reporting a problem with handling the maximum video file size for suggesting to add a note to the INSTALL file about using subdirectories to split a large disk into separate areas for VDR's video data and other stuff + for reporting wrong variable types in cIndexFile Sven Kreiensen <svenk@kammer.uni-hannover.de> for his help in keeping 'channels.conf.terr' up to date @@ -1814,6 +1832,7 @@ Ville Skyttä <ville.skytta@iki.fi> menu for adding missing #include <limits.h> to epg.c and menuitems.h for fixing various spelling errors and improving PLUGINS.html + for adding some missing 'const' keywords to avoid compilation errors with gcc 4.4 Steffen Beyer <cpunk@reactor.de> for fixing setting the colored button help after deleting a recording in case the next @@ -1953,6 +1972,7 @@ Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> Nicolas Huillard <nhuillard@e-dition.fr> for translating OSD texts to the French language + for suggesting to increase MAXOSDHEIGHT to 1200 Patrick Fischer <patrick_fischer@gmx.de> for reporting an error in the cFilter example in PLUGINS.html @@ -2126,6 +2146,9 @@ Christoph Haubrich <christoph1.haubrich@arcor.de> check to it for changing cBitmap::DrawText() to always draw the background unless ColorBg is clrTransparent + for reporting unused 'synced' member in cTsToPes + for suggesting to add a note to cTsToPes about all TS packets having to belong to + the same PID Pekka Mauno <pekka.mauno@iki.fi> for fixing cSchedule::GetFollowingEvent() in case there is currently no present @@ -2164,6 +2187,7 @@ Tobias Grimm <tobias.grimm@e-tobi.net> for fixing a signed character used as index in cBase64Encoder::NextLine() for fixing formatting the name section in the VDR man pages for reporting unneeded include files <linux/dvb/dmx.h> und <time.h> in remux.h + for a patch that added a workaround for the broken linux-dvb driver header files Helge Lenz <h.lenz@gmx.de> for reporting a bug in setting the 'Delta' parameter when calling the shutdown @@ -2310,6 +2334,8 @@ Tobias Bratfisch <tobias@reel-multimedia.com> for optimizing cNitFilter::Process() for reducing the number of time(NULL) calls in vdr.c's main loop to a single call for improving efficiency of cEIT::cEIT() + for fixing the use of time_t in cEIT::cEIT() + for making EIT events be processed only if a plausible system time is available Bruno Roussel <bruno.roussel@free.fr> for translating OSD texts to the French language @@ -2331,6 +2357,7 @@ Diego Pierotto <vdr-italian@tiscali.it> Timo Eskola <timo@tolleri.net> for implementing sending all frames to devices that can handle them in fast forward trick speeds + for implementing the setup option "Recording/Pause key handling" Elias Luttinen <el@iki.fi> for improving the description of where logging goes in the INSTALL file @@ -2394,6 +2421,7 @@ Sundararaj Reel <sundararaj.reel@googlemail.com> Ales Jurik <ajurik@quick.cz> for reporting broken SI data on Czech/Slovak channels after changing the default character set to ISO-8859-9 + for adding MPEG 1 handling to remux.c Magnus Andersson <svankan@bahnhof.se> for translating OSD texts to the Swedish language @@ -2446,3 +2474,7 @@ Marcel Unbehaun <frostworks@gmx.de> Günter Niedermeier <linuxtv@ncs-online.de> for reporting a problem with file I/O overhead during recording in TS format + +Martin Neuditschko <yosuke.tomoe@gmx.net> + for reporting a problem with error messages from cDvbDevice::GetVideoSize() + on systems with no real primary replay device @@ -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). @@ -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 &Width, int &Height, eVideoAspect &Aspect); +virtual void GetOsdSize(int &Width, int &Height, double &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> @@ -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); @@ -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; @@ -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); } @@ -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; + } } } } @@ -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); @@ -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]; @@ -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) @@ -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 @@ -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)); @@ -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); } } @@ -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 @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osdbase.c 2.0 2008/02/17 11:33:04 kls Exp $ + * $Id: osdbase.c 2.1 2009/06/01 11:54:50 kls Exp $ */ #include "osdbase.h" @@ -217,6 +217,7 @@ void cOsdMenu::Display(void) } if (current < 0) current = 0; // just for safety - there HAS to be a current item! + first = min(first, max(0, count - displayMenuItems)); // in case the menu size has changed if (current - first >= displayMenuItems || current < first) { first = current - displayMenuItems / 2; if (first + displayMenuItems > count) diff --git a/po/ca_ES.po b/po/ca_ES.po index 0ab2de6..e040859 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-02 19:02+0100\n" "Last-Translator: Luca Olivetti <luca@ventoso.org>\n" "Language-Team: Catalanian\n" @@ -707,6 +707,15 @@ msgstr "CAM en ús - reiniciar?" msgid "Can't reset CAM!" msgstr "No puc reiniciar la CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opcions de Gravació" @@ -725,6 +734,9 @@ msgstr "Prioritat per defecte" msgid "Setup.Recording$Default lifetime (d)" msgstr "Durada predefinida" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioritat de la pausa" @@ -986,6 +998,9 @@ msgstr "Diumenge" msgid "Upcoming recording!" msgstr "Gravació a punt d'iniciar!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Gravació començada" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index a50a33d..34a941b 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-28 15:00+0200\n" "Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>, Jiøí Dobrý <jdobry@centrum.cz>\n" "Language-Team: Czech\n" @@ -705,6 +705,15 @@ msgstr "CAM se pou¾ívá - opravdu restartovat?" msgid "Can't reset CAM!" msgstr "CAM modul nelze restartovat!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Nahrávání" @@ -723,6 +732,9 @@ msgstr "Výchozí priorita" msgid "Setup.Recording$Default lifetime (d)" msgstr "Výchozí ¾ivotnost" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorita pøeru¹ení" @@ -984,6 +996,9 @@ msgstr "Nedìle" msgid "Upcoming recording!" msgstr "Brzo zaène nahrávání!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Zaèalo nahrávání" diff --git a/po/da_DK.po b/po/da_DK.po index e8d05c8..cd533a0 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Mogens Elneff <mogens@elneff.dk>\n" "Language-Team: Danish\n" @@ -704,6 +704,15 @@ msgstr "CAM er i brug - virkelig nulstille?" msgid "Can't reset CAM!" msgstr "Kan ikke nulstille CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Optagelse" @@ -722,6 +731,9 @@ msgstr "Standard prioritet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Standard levetid (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Pause prioritet" @@ -983,6 +995,9 @@ msgstr "Søndag" msgid "Upcoming recording!" msgstr "Optagelse starter snart!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Optagelse startet" diff --git a/po/de_DE.po b/po/de_DE.po index 6b55d6a..eea6817 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-11-25 15:19+0200\n" "Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n" "Language-Team: German\n" @@ -704,6 +704,15 @@ msgstr "CAM wird benutzt - wirklich zurücksetzen?" msgid "Can't reset CAM!" msgstr "Zurücksetzen des CAM fehlgeschlagen!" +msgid "do not pause live video" +msgstr "Live-Signal nicht anhalten" + +msgid "confirm pause live video" +msgstr "Anhalten des Live-Signals bestätigen" + +msgid "pause live video" +msgstr "Live-Signal anhalten" + msgid "Recording" msgstr "Aufnahme" @@ -722,6 +731,9 @@ msgstr "Default-Priorität" msgid "Setup.Recording$Default lifetime (d)" msgstr "Default-Lebensdauer (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "Funktion der Pause-Taste" + msgid "Setup.Recording$Pause priority" msgstr "Pause-Priorität" @@ -983,6 +995,9 @@ msgstr "Sonntag" msgid "Upcoming recording!" msgstr "Aufnahme beginnt in Kürze!" +msgid "Pause live video?" +msgstr "Live-Signal anhalten?" + msgid "Recording started" msgstr "Aufzeichnung gestartet" diff --git a/po/el_GR.po b/po/el_GR.po index 90ff04d..bcdcb8e 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n" "Language-Team: Greek\n" @@ -704,6 +704,15 @@ msgstr "" msgid "Can't reset CAM!" msgstr "Áäýíáôç ç åðáíáöïñÜ óôü CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "ÅããñáöÞ" @@ -722,6 +731,9 @@ msgstr "ÐñïêáèïñéóìÝíç ðñïôåñáéüôçôá" msgid "Setup.Recording$Default lifetime (d)" msgstr "ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Ðñïôåñáéüôçôá äéáëåßììáôïò" @@ -983,6 +995,9 @@ msgstr "ÊõñéáêÞ" msgid "Upcoming recording!" msgstr "" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "" diff --git a/po/es_ES.po b/po/es_ES.po index 667d650..58cb414 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-02 19:02+0100\n" "Last-Translator: Luca Olivetti <luca@ventoso.org>\n" "Language-Team: Spanish\n" @@ -705,6 +705,15 @@ msgstr "CAM en uso - ¿reiniciar?" msgid "Can't reset CAM!" msgstr "¡No se puede reiniciar CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opciones de grabación" @@ -723,6 +732,9 @@ msgstr "Prioridad por defecto" msgid "Setup.Recording$Default lifetime (d)" msgstr "Duración por defecto (días)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioridad en modo pausa" @@ -984,6 +996,9 @@ msgstr "Domingo" msgid "Upcoming recording!" msgstr "¡Grabación a punto de empezar!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Iniciando grabación" diff --git a/po/et_EE.po b/po/et_EE.po index ff66d8a..b0477c2 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n" "Language-Team: Estonian\n" @@ -704,6 +704,15 @@ msgstr "CAM on kasutuses - taaskäivitada?" msgid "Can't reset CAM!" msgstr "CAM mooduli taaskäivitus ebaõnnestus!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Salvestamine" @@ -722,6 +731,9 @@ msgstr "Vaikimisi prioriteet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Salvestuse eluiga (päevi)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Pausi prioriteet" @@ -983,6 +995,9 @@ msgstr "Pühapäev" msgid "Upcoming recording!" msgstr "Salvestamine tulekul!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Salvestamine algas" diff --git a/po/fi_FI.po b/po/fi_FI.po index ed5b94d..e62b9f6 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-15 15:52+0200\n" "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n" "Language-Team: Finnish\n" @@ -707,6 +707,15 @@ msgstr "CA-moduuli käytössä - nollataanko?" msgid "Can't reset CAM!" msgstr "CA-moduulin nollaus epäonnistui!" +msgid "do not pause live video" +msgstr "älä pysäytä lähetystä" + +msgid "confirm pause live video" +msgstr "varmista lähetyksen pysäyttäminen" + +msgid "pause live video" +msgstr "pysäytä lähetys" + msgid "Recording" msgstr "Tallennus" @@ -725,6 +734,9 @@ msgstr "Tallenteen oletusprioriteetti" msgid "Setup.Recording$Default lifetime (d)" msgstr "Tallenteen oletuselinikä (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "Taukonäppäimen toiminta" + msgid "Setup.Recording$Pause priority" msgstr "Taukotallenteen prioriteetti" @@ -986,6 +998,9 @@ msgstr "Sunnuntai" msgid "Upcoming recording!" msgstr "Tallennus on alkamassa!" +msgid "Pause live video?" +msgstr "Pysäytetäänkö lähetys?" + msgid "Recording started" msgstr "Tallennus aloitettu" diff --git a/po/fr_FR.po b/po/fr_FR.po index 5353625..e1ef364 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-27 18:14+0100\n" "Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n" "Language-Team: French\n" @@ -710,6 +710,15 @@ msgstr "CAM en cours d'utilisation - Remettre à zéro ?" msgid "Can't reset CAM!" msgstr "Impossible de réinitialiser le CAM !" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Enregistrement" @@ -728,6 +737,9 @@ msgstr "Priorité par défaut" msgid "Setup.Recording$Default lifetime (d)" msgstr "Durée de vie par défaut (j)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorité des pauses" @@ -989,6 +1001,9 @@ msgstr "Dimanche" msgid "Upcoming recording!" msgstr "L'enregistrement va commencer !" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "L'enregistrement a commencé" diff --git a/po/hr_HR.po b/po/hr_HR.po index 9b409e3..f69c24a 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-17 19:00+0100\n" "Last-Translator: Adrian Caval <anrxc@sysphere.org>\n" "Language-Team: Croatian\n" @@ -706,6 +706,15 @@ msgstr "CAM se koristi - ponovno pokrenuti unatoè?" msgid "Can't reset CAM!" msgstr "Ponovno pokretanje CAM-a neuspje¹no!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Snimanje" @@ -724,6 +733,9 @@ msgstr "Zadani prioritet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Zadano trajanje (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioritet pauze" @@ -985,6 +997,9 @@ msgstr "Nedjelja" msgid "Upcoming recording!" msgstr "Obnovljena snimka!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Snimanje zapoèelo" diff --git a/po/hu_HU.po b/po/hu_HU.po index 5c0a887..fad18a4 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-12-01 21:42+0200\n" "Last-Translator: István Füley <ifuley@tigercomp.ro>\n" "Language-Team: Hungarian\n" @@ -707,6 +707,15 @@ msgstr "CAM használatban - valóban újraindítjuk?" msgid "Can't reset CAM!" msgstr "A CAM újraindítás nem sikerült" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Felvétel" @@ -725,6 +734,9 @@ msgstr "Alapértelmezett prioritás" msgid "Setup.Recording$Default lifetime (d)" msgstr "Alapértelmezett élettartam" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Szünet prioritás" @@ -986,6 +998,9 @@ msgstr "Vasárnap" msgid "Upcoming recording!" msgstr "Felvétel rögtön kezdõdik!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "A felvétel elindítva" diff --git a/po/it_IT.po b/po/it_IT.po index 877191b..09429cb 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2009-02-08 18:58+0100\n" "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" "Language-Team: Italian\n" @@ -711,6 +711,15 @@ msgstr "La CAM è in uso - vuoi reimpostarla?" msgid "Can't reset CAM!" msgstr "Impossibile reimpostare il modulo CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Registrazione" @@ -729,6 +738,9 @@ msgstr "Priorità predefinita" msgid "Setup.Recording$Default lifetime (d)" msgstr "Scadenza predefinita (gg)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorità di pausa" @@ -990,6 +1002,9 @@ msgstr "Domenica" msgid "Upcoming recording!" msgstr "Registrazione imminente!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Registrazione avviata" diff --git a/po/nl_NL.po b/po/nl_NL.po index 36a9922..ef5c976 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-26 17:20+0100\n" "Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n" "Language-Team: Dutch\n" @@ -708,6 +708,15 @@ msgstr "CAM wordt gebruikt - werkelijk herstarten?" msgid "Can't reset CAM!" msgstr "Kan CAM niet herstarten!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opname" @@ -726,6 +735,9 @@ msgstr "Standaard prioriteit" msgid "Setup.Recording$Default lifetime (d)" msgstr "Standaard levensduur (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Pauze prioriteit" @@ -987,6 +999,9 @@ msgstr "Zondag" msgid "Upcoming recording!" msgstr "Opname start binnenkort!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Opname is gestart!" diff --git a/po/nn_NO.po b/po/nn_NO.po index 2445b02..daf56f1 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Truls Slevigen <truls@slevigen.no>\n" "Language-Team: Norwegian\n" @@ -705,6 +705,15 @@ msgstr "" msgid "Can't reset CAM!" msgstr "" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opptak" @@ -723,6 +732,9 @@ msgstr "Normal prioritet (Timer)" msgid "Setup.Recording$Default lifetime (d)" msgstr "Normal levetid timer (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "" @@ -984,6 +996,9 @@ msgstr "Søndag" msgid "Upcoming recording!" msgstr "" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "" diff --git a/po/pl_PL.po b/po/pl_PL.po index 860094a..d887178 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-09 12:59+0100\n" "Last-Translator: Michael Rakowski <mrak@gmx.de>\n" "Language-Team: Polish\n" @@ -705,6 +705,15 @@ msgstr "CAM jest w u¿yciu - naprawdê zresetowaæ?" msgid "Can't reset CAM!" msgstr "Nie mo¿na zresetowaæ CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Nagranie" @@ -723,6 +732,9 @@ msgstr "Domy¶lny priorytet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Domy¶lny czas ¿ycia (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorytet pauzy" @@ -984,6 +996,9 @@ msgstr "Niedziela" msgid "Upcoming recording!" msgstr "Wkrótce nagranie!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Rozpoczêto nagrywanie" diff --git a/po/pt_PT.po b/po/pt_PT.po index fa4767f..ba23834 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-18 17:04+0100\n" "Last-Translator: anonymous\n" "Language-Team: Portuguese\n" @@ -704,6 +704,15 @@ msgstr "CAM em uso - quer mesmo reiniciar?" msgid "Can't reset CAM!" msgstr "Não é possível reiniciar a CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opções de gravação" @@ -722,6 +731,9 @@ msgstr "Prioridade por defeito" msgid "Setup.Recording$Default lifetime (d)" msgstr "Validade por defeito (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioridade da pausa" @@ -983,6 +995,9 @@ msgstr "Domingo" msgid "Upcoming recording!" msgstr "Gravação agendada!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Gravação iniciada" diff --git a/po/ro_RO.po b/po/ro_RO.po index 0c6013c..30aee23 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-25 00:39+0100\n" "Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n" "Language-Team: Romanian\n" @@ -707,6 +707,15 @@ msgstr "CAM-ul este in folosinþã - totuºi resetez?" msgid "Can't reset CAM!" msgstr "Nu pot reseta CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Înregistrare" @@ -725,6 +734,9 @@ msgstr "Prioritate implicitã" msgid "Setup.Recording$Default lifetime (d)" msgstr "Timp de pãstrare predefinit (zile)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioritate pauzã" @@ -986,6 +998,9 @@ msgstr "Duminicã" msgid "Upcoming recording!" msgstr "Urmeazã o înregistrare!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "A început înregistrarea" diff --git a/po/ru_RU.po b/po/ru_RU.po index a0a2555..0c61dce 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-12-15 14:37+0100\n" "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n" "Language-Team: Russian\n" @@ -705,6 +705,15 @@ msgstr "CAM ØáßÞÛì×ãÕâáï - ÔÕÙáâÒØâÕÛìÝÞ ßÕàÕÓàãרâì?" msgid "Can't reset CAM!" msgstr "¾èØÑÚÐ ßÕàÕ×ÐßãáÚÐ CAM-ÜÞÔãÛï!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "·Ðߨáì" @@ -723,6 +732,9 @@ msgstr "¿àØÞàØâÕâ âÐÙÜÕàÐ ßÞ ãÜÞÛçÐÝØî" msgid "Setup.Recording$Default lifetime (d)" msgstr "ÁàÞÚ åàÐÝÕÝØï ×ÐßØáØ ßÞ ãÜÞÛçÐÝØî (Ô)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "¿àØÞàØâÕâ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ" @@ -984,6 +996,9 @@ msgstr "²ÞáÚàÕáÕÝìÕ" msgid "Upcoming recording!" msgstr "·Ðߨáì áÚÞàÞ ÝÐçÝÕâáï" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "·Ðߨáì ÝÐçÐâÐ" diff --git a/po/sl_SI.po b/po/sl_SI.po index 347e599..35b6043 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-28 19:44+0100\n" "Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n" "Language-Team: Slovenian\n" @@ -705,6 +705,15 @@ msgstr "CAM je v uporabi - zares resetiraj?" msgid "Can't reset CAM!" msgstr "Ne morem resetirati CAM-a!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Snemanje" @@ -723,6 +732,9 @@ msgstr "Privzeta prioriteta" msgid "Setup.Recording$Default lifetime (d)" msgstr "Privzeti ¾ivljenski èas (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioriteta pavze" @@ -984,6 +996,9 @@ msgstr "Nedelja" msgid "Upcoming recording!" msgstr "Sledi snemanje!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Snemanje se je prièelo" diff --git a/po/sv_SE.po b/po/sv_SE.po index d47da8a..e4fbe25 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-12 18:25+0100\n" "Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n" "Language-Team: Swedish\n" @@ -707,6 +707,15 @@ msgstr "CAM upptagen, vill du verkligen starta om?" msgid "Can't reset CAM!" msgstr "Kan inte återställa CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Inspelning" @@ -725,6 +734,9 @@ msgstr "Normal prioritet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Normal livstid (dagar)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioritet för direktinspelning" @@ -986,6 +998,9 @@ msgstr "Söndag" msgid "Upcoming recording!" msgstr "strax inspelning..." +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Inspelningen har startat" diff --git a/po/tr_TR.po b/po/tr_TR.po index abdb594..44bf894 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-28 00:33+0100\n" "Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n" "Language-Team: Turkish\n" @@ -704,6 +704,15 @@ msgstr "CAM kullanýlýyor - gerçekden sýfýrla?" msgid "Can't reset CAM!" msgstr "CAM sýfýrlanamadý!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Kayýt" @@ -722,6 +731,9 @@ msgstr "Olaðan priorite" msgid "Setup.Recording$Default lifetime (d)" msgstr "Olaðan çekim ömrü (gün)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Duraklama prioritesi" @@ -983,6 +995,9 @@ msgstr "Pazar" msgid "Upcoming recording!" msgstr "Çekim yakýnda baþlýyor!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Kayýt baþlandý" diff --git a/po/uk_UA.po b/po/uk_UA.po index 3d566fc..79b8121 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -5,261 +5,261 @@ # msgid "" msgstr "" -"Project-Id-Version: VDR 1.6.0\n" +"Project-Id-Version: VDR 1.7.7\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" -"PO-Revision-Date: 2008-03-07 14:17+0200\n" -"Last-Translator: Yarema Aka Knedlyk <yupadmin@gmail.com>\n" +"POT-Creation-Date: 2009-05-31 11:11+0200\n" +"PO-Revision-Date: 2009-05-31 13:17+0200\n" +"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n" "Language-Team: Ukrainian\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-5\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "off" -msgstr "ÒØÚÛ" +msgstr "викл" msgid "on" -msgstr "" +msgstr "вкл" msgid "auto" -msgstr "ÐÒâÞ" +msgstr "авто" msgid "none" -msgstr "ÝöçÞÓÞ" +msgstr "нічого" msgid "*** Invalid Channel ***" -msgstr "*** ½ÕßàÐÒØÛìÝØÙ ÚÐÝÐÛ ***" +msgstr "*** Ð�еправильний канал ***" msgid "Channel not available!" -msgstr "ºÐÝÐÛ ÝÕÔÞáâãßÝØÙ!" +msgstr "Канал недоÑ�тупний!" msgid "Can't start Transfer Mode!" -msgstr "½ÕÜÞÖÛØÒÞ ÒÚÛîçØâØ àÕÖØÜ ßàÞßãáÚã!" +msgstr "Ð�еможливо включити режим пропуÑ�ку!" msgid "Starting EPG scan" -msgstr "¿ÞçØÝÐî EPG-áÚÐÝãÒÐÝÝï" +msgstr "Починаю EPG-Ñ�кануваннÑ�" msgid "No title" -msgstr "±Õ× ÝÐ×ÒØ" +msgstr "Без назви" #. TRANSLATORS: The name of the language, as written natively msgid "LanguageName$English" -msgstr "ÃÚàÐ÷ÝáìÚÐ" +msgstr "УкраїнÑ�ька" #. TRANSLATORS: The 3-letter code of the language msgid "LanguageCode$eng" msgstr "ukr" msgid "Phase 1: Detecting RC code type" -msgstr "ºàÞÚ 1: ²Ø×ÝÐçÕÝÝï âØßã ÚÞÔã ßãÛìâÐ" +msgstr "Крок 1: ВизначеннÑ� типу коду пульта" msgid "Press any key on the RC unit" -msgstr "½ÐâØáÝöâì ÑãÔì-ïÚã ÚÝÞßÚã ÝÐ ßãÛìâö" +msgstr "Ð�атиÑ�ніть будь-Ñ�ку кнопку на пульті" msgid "RC code detected!" -msgstr "²Ø×ÝÐçÕÝÞ ÚÞÔ ßãÛìâÐ!" +msgstr "Визначено код пульта!" msgid "Do not press any key..." -msgstr "½Õ ÝÐâØáÚÐÙâÕ ÚÝÞßÚØ..." +msgstr "Ð�е натиÑ�кайте кнопки..." msgid "Phase 2: Learning specific key codes" -msgstr "ºàÞÚ 2: ¿àØßØáãÒÐÝÝï ÚÞÔöÒ ÔÛï ÒöÔßÞÒöÔÝØå ÚÝÞßÞÚ" +msgstr "Крок 2: ПрипиÑ�уваннÑ� кодів длÑ� відповідних кнопок" #, c-format msgid "Press key for '%s'" -msgstr "½ÐâØáÝöâì ÚÝÞßÚã '%s'" +msgstr "Ð�атиÑ�ніть кнопку '%s'" msgid "Press 'Up' to confirm" -msgstr "½ÐâØáÝöâì '²ÒÕàå' ÔÛï ßöÔâÒÕàÔÖÕÝÝï" +msgstr "Ð�атиÑ�ніть 'Вверх' длÑ� підтвердженнÑ�" msgid "Press 'Down' to continue" -msgstr "½ÐâØáÝöâì '²ÝØ×' ÔÛï ßàÞÔÞÒÖÕÝÝï" +msgstr "Ð�атиÑ�ніть 'Вниз' длÑ� продовженнÑ�" msgid "(press 'Up' to go back)" -msgstr "(½ÐâØáÝöâì '²ÒÕàå' ÔÛï ßÞÒÕàÝÕÝÝï)" +msgstr "(Ð�атиÑ�ніть 'Вверх' длÑ� поверненнÑ�)" msgid "(press 'Down' to end key definition)" -msgstr "(½ÐâØáÝöâì '²ÝØ×' ÔÛï ×ÐÚöÝçÕÝÝï ÝÐáâàÞÙÚØ ßãÛìâÐ)" +msgstr "(Ð�атиÑ�ніть 'Вниз' длÑ� закінченнÑ� наÑ�тройки пульта)" msgid "(press 'Menu' to skip this key)" -msgstr "(½ÐâØáÝöâì '¼ÕÝî' éÞÑ ßàÞßãáâØâØ ÚÝÞßÚã)" +msgstr "(Ð�атиÑ�ніть 'Меню' щоб пропуÑ�тити кнопку)" msgid "Learning Remote Control Keys" -msgstr "½ÐÒçÐÝÝï ßãÛìâÐ" +msgstr "Ð�авчаннÑ� пульта" msgid "Phase 3: Saving key codes" -msgstr "ºàÞÚ 3: ·ÐßÐÜ'ïâÞÒãÒÐÝÝï ÚÞÔöÒ ÚÝÞßÞÚ" +msgstr "Крок 3: Запам'Ñ�товуваннÑ� кодів кнопок" msgid "Press 'Up' to save, 'Down' to cancel" -msgstr "½ÐâØáÝöâì '²ÒÕàå' ÔÛï ×ÐÚöÝçÕÝÝï, '²ÝØ×' ÔÛï ÒöÔÜÞÒØ" +msgstr "Ð�атиÑ�ніть 'Вверх' длÑ� закінченнÑ�, 'Вниз' длÑ� відмови" msgid "Key$Up" -msgstr "²ÒÕàå" +msgstr "Вверх" msgid "Key$Down" -msgstr "²ÝØ×" +msgstr "Вниз" msgid "Key$Menu" -msgstr "¼ÕÝî" +msgstr "Меню" msgid "Key$Ok" msgstr "Ok" msgid "Key$Back" -msgstr "½Ð×ÐÔ" +msgstr "Ð�азад" msgid "Key$Left" -msgstr "½ÐÛöÒÞ" +msgstr "Ð�аліво" msgid "Key$Right" -msgstr "½ÐßàÐÒÞ" +msgstr "Ð�аправо" msgid "Key$Red" -msgstr "ÇÕàÒÞÝÐ" +msgstr "Червона" msgid "Key$Green" -msgstr "·ÕÛÕÝÐ" +msgstr "Зелена" msgid "Key$Yellow" -msgstr "¶ÞÒâÐ" +msgstr "Жовта" msgid "Key$Blue" -msgstr "ÁØÝï" +msgstr "СинÑ�" msgid "Key$Info" -msgstr "¦ÝäÞ" +msgstr "Інфо" msgid "Key$Play" -msgstr "¿àÞÓàÐÒÐÝÝï" +msgstr "ПрограваннÑ�" msgid "Key$Pause" -msgstr "¿Ðã×Ð" +msgstr "Пауза" msgid "Key$Stop" -msgstr "ÁâÞß" +msgstr "Стоп" msgid "Key$Record" -msgstr "·Ðߨá" +msgstr "ЗапиÑ�" msgid "Key$FastFwd" -msgstr "¿àÞÚàãâÚÐ ÒßÕàÕÔ" +msgstr "Прокрутка вперед" msgid "Key$FastRew" -msgstr "¿àÞÚàãâÚÐ ÝÐ×ÐÔ" +msgstr "Прокрутка назад" msgid "Key$Next" -msgstr "²ßÕàÕÔ" +msgstr "Вперед" msgid "Key$Prev" -msgstr "½Ð×ÐÔ" +msgstr "Ð�азад" msgid "Key$Power" -msgstr "²ØÚÛîçØâØ" +msgstr "Виключити" msgid "Key$Channel+" -msgstr "ºÐÝÐÛ +" +msgstr "Канал +" msgid "Key$Channel-" -msgstr "ºÐÝÐÛ -" +msgstr "Канал -" msgid "Key$PrevChannel" -msgstr "¿ÞßÕàÕÔÝöÙ ÚÐÝÐÛ" +msgstr "Попередній канал" msgid "Key$Volume+" -msgstr "³ãçÝöáâì +" +msgstr "ГучніÑ�ть +" msgid "Key$Volume-" -msgstr "³ãçÝöáâì -" +msgstr "ГучніÑ�ть -" msgid "Key$Mute" -msgstr "²ØÚÛîçØâØ ×ÒãÚ" +msgstr "Виключити звук" msgid "Key$Audio" -msgstr "¼ÞÒÐ" +msgstr "Мова" msgid "Key$Subtitles" -msgstr "ÁãÑâØâàØ" +msgstr "Субтитри" msgid "Key$Schedule" -msgstr "ÂÕÛÕÓöÔ" +msgstr "Телегід" msgid "Key$Channels" -msgstr "ºÐÝÐÛØ" +msgstr "Канали" msgid "Key$Timers" -msgstr "ÂÐÙÜÕàØ" +msgstr "Таймери" msgid "Key$Recordings" -msgstr "·ÐߨáØ" +msgstr "ЗапиÑ�и" msgid "Key$Setup" -msgstr "½ÐÛÐèâãÒÐÝÝï" +msgstr "Ð�алаштуваннÑ�" msgid "Key$Commands" -msgstr "ºÞÜÐÝÔØ" +msgstr "Команди" msgid "Key$User1" -msgstr "ºÞàØáâãÒÐç1" +msgstr "КориÑ�тувач1" msgid "Key$User2" -msgstr "ºÞàØáâãÒÐç2" +msgstr "КориÑ�тувач2" msgid "Key$User3" -msgstr "ºÞàØáâãÒÐç3" +msgstr "КориÑ�тувач3" msgid "Key$User4" -msgstr "ºÞàØáâãÒÐç4" +msgstr "КориÑ�тувач4" msgid "Key$User5" -msgstr "ºÞàØáâãÒÐç5" +msgstr "КориÑ�тувач5" msgid "Key$User6" -msgstr "ºÞàØáâãÒÐç6" +msgstr "КориÑ�тувач6" msgid "Key$User7" -msgstr "ºÞàØáâãÒÐç7" +msgstr "КориÑ�тувач7" msgid "Key$User8" -msgstr "ºÞàØáâãÒÐç8" +msgstr "КориÑ�тувач8" msgid "Key$User9" -msgstr "ºÞàØáâãÒÐç8" +msgstr "КориÑ�тувач8" msgid "Disk" -msgstr "´ØáÚ" +msgstr "ДиÑ�к" msgid "free" -msgstr "ÒöÛìÝÞ" +msgstr "вільно" msgid "Free To Air" -msgstr "FTA (ÝÕ×ÐÚÞÔÞÒÐÝÞ)" +msgstr "FTA (незакодовано)" msgid "encrypted" -msgstr "×ÐÚÞÔÞÒÐÝÞ" +msgstr "закодовано" msgid "Edit channel" -msgstr "ÀÕÔÐÚâãÒÐÝÝï ÚÐÝÐÛã" +msgstr "РедагуваннÑ� каналу" msgid "Name" -msgstr "½Ð×ÒÐ" +msgstr "Ð�азва" msgid "Source" -msgstr "´ÖÕàÕÛÞ" +msgstr "Джерело" msgid "Frequency" -msgstr "ÇÐáâÞâÐ" +msgstr "ЧаÑ�тота" msgid "Vpid" -msgstr "Vpid (ÒöÔÕÞ)" +msgstr "Vpid (відео)" msgid "Ppid" msgstr "Ppid" msgid "Apid1" -msgstr "Apid1 (ÐãÔöÞ 1)" +msgstr "Apid1 (аудіо 1)" msgid "Apid2" -msgstr "Apid2 (ÐãÔöÞ 2)" +msgstr "Apid2 (аудіо 2)" msgid "Dpid1" msgstr "Dpid1 (AC3 1)" @@ -268,31 +268,31 @@ msgid "Dpid2" msgstr "Dpid2 (AC3 2)" msgid "Spid1" -msgstr "ÁãÑâØâàØ ¿¦´1" +msgstr "Субтитри 1" msgid "Spid2" -msgstr "ÁãÑâØâàØ ¿¦´2" +msgstr "Субтитри 2" msgid "Tpid" -msgstr "Tpid (âÕÛÕâÕÚáâ)" +msgstr "Tpid (телетекÑ�Ñ‚)" msgid "CA" -msgstr "CA (ÔÕÚÞÔÕà)" +msgstr "CA (декодер)" msgid "Sid" msgstr "Sid" msgid "Polarization" -msgstr "¿ÞÛïàØ×Ðæöï" +msgstr "ПолÑ�ризаціÑ�" msgid "System" -msgstr "" +msgstr "СиÑ�тема" msgid "Srate" -msgstr "ÁØÜÒ. èÒØÔÚöáâì" +msgstr "Симв. швидкіÑ�ть" msgid "Inversion" -msgstr "¦ÝÒÕàáöï" +msgstr "ІнверÑ�Ñ–Ñ�" msgid "CoderateH" msgstr "CoderateH" @@ -301,709 +301,724 @@ msgid "CoderateL" msgstr "CoderateL" msgid "Modulation" -msgstr "¼ÞÔãÛïæöï" +msgstr "МодулÑ�ціÑ�" msgid "Bandwidth" -msgstr "´öÐßÐ×ÞÝ" +msgstr "Діапазон" msgid "Transmission" -msgstr "¿ÕàÕÔÐçÐ" +msgstr "Передача" msgid "Guard" -msgstr "·ÐåØáâ" +msgstr "ЗахиÑ�Ñ‚" msgid "Hierarchy" -msgstr "¦ôàÐàåöï" +msgstr "ІєрархіÑ�" msgid "Rolloff" -msgstr "" +msgstr "Крен" msgid "Channel settings are not unique!" -msgstr "½ÐáâàÞÙÚØ ÚÐÝÐÛã ÝÕ ôÔØÝö!" +msgstr "Ð�аÑ�тройки каналу не єдині!" msgid "Channels" -msgstr "ºÐÝÐÛØ" +msgstr "Канали" msgid "Button$Edit" -msgstr "ÀÕÔÐÚâãÒÐâØ" +msgstr "Редагувати" msgid "Button$New" -msgstr "´ÞÔÐâØ" +msgstr "Додати" msgid "Button$Delete" -msgstr "²ØÔÐÛØâØ" +msgstr "Видалити" msgid "Button$Mark" -msgstr "¿ÕàÕÜöáâØâØ" +msgstr "ПереміÑ�тити" msgid "Channel is being used by a timer!" -msgstr "ºÐÝÐÛ ×ÐÝïâØÙ âÐÙÜÕàÞÜ!" +msgstr "Канал зайнÑ�тий таймером!" msgid "Delete channel?" -msgstr "²ØÔÐ󯉯 ÚÐÝÐÛ?" +msgstr "Видалити канал?" msgid "Edit timer" -msgstr "½ÐÛÐèâãÒÐÝÝï âÐÙÜÕàÐ" +msgstr "Ð�алаштуваннÑ� таймера" msgid "Active" -msgstr "°ÚâØÒÞÒÐÝÞ" +msgstr "Ð�ктивовано" msgid "Channel" -msgstr "ºÐÝÐÛ" +msgstr "Канал" msgid "Day" -msgstr "´ÕÝì" +msgstr "День" msgid "Start" -msgstr "¿ÞçÐâÞÚ" +msgstr "Початок" msgid "Stop" -msgstr "ºöÝÕæì" +msgstr "Кінець" msgid "VPS" -msgstr "VPS ßÞßàÐÒÚÐ" +msgstr "VPS поправка" msgid "Priority" -msgstr "¿àöÞàØâÕâ" +msgstr "Пріоритет" msgid "Lifetime" -msgstr "ÁâàÞÚ ×ÑÕàöÓÐÝÝï" +msgstr "Строк зберіганнÑ�" msgid "File" -msgstr "ÄÐÙÛ" +msgstr "Файл" msgid "First day" -msgstr "¿ÕàèØÙ ÔÕÝì" +msgstr "Перший день" msgid "Timers" -msgstr "ÂÐÙÜÕàØ" +msgstr "Таймери" msgid "Button$On/Off" -msgstr "²ÚÛ/²ØÚÛ" +msgstr "Вкл/Викл" msgid "Button$Info" -msgstr "¦ÝäÞ" +msgstr "Інфо" msgid "Delete timer?" -msgstr "²ØÔÐ󯉯 âÐÙÜÕà?" +msgstr "Видалити таймер?" msgid "Timer still recording - really delete?" -msgstr "¹ÔÕ ×Ðߨá ßÞ âÐÙÜÕàã - ÔöÙáÝÞ ÒØÔÐÛØâØ?" +msgstr "Йде запиÑ� по таймеру - дійÑ�но видалити?" msgid "Event" -msgstr "¿ÕàÕÔÐçÐ" +msgstr "Передача" msgid "Button$Timer" -msgstr "ÂÐÙÜÕà" +msgstr "Таймер" msgid "Button$Record" -msgstr "·Ðߨá" +msgstr "ЗапиÑ�" msgid "Button$Switch" -msgstr "¿ÕàÕÚÛîçØâØ" +msgstr "Переключити" msgid "What's on now?" -msgstr "·ÐàÐ× Ò Õäöàö:" +msgstr "Зараз в ефірі:" msgid "What's on next?" -msgstr "´ÐÛö Ò ßàÞÓàÐÜö:" +msgstr "Далі в програмі:" msgid "Button$Next" -msgstr "´ÐÛö" +msgstr "Далі" msgid "Button$Now" -msgstr "·ÐàÐ×" +msgstr "Зараз" msgid "Button$Schedule" -msgstr "¿àÞÓàÐÜÐ" +msgstr "Програма" msgid "Can't switch channel!" -msgstr "½ÕÜÞÖÛØÒÞ ßÕàÕÚÛîçØâØ ÚÐÝÐÛ!" +msgstr "Ð�еможливо переключити канал!" #, c-format msgid "Schedule - %s" -msgstr "¿àÞÓàÐÜÐ - %s" +msgstr "Програма - %s" #, c-format msgid "This event - %s" -msgstr "Æï ßÕàÕÔÐçÐ - %s" +msgstr "ЦÑ� передача - %s" msgid "This event - all channels" -msgstr "Æï ßÕàÕÔÐçÐ - Òáö ÚÐÝÐÛØ" +msgstr "ЦÑ� передача - вÑ�Ñ– канали" msgid "All events - all channels" -msgstr "²áö ßÕàÕÔÐçö - Òáö ÚÐÝÐÛØ" +msgstr "Ð’Ñ�Ñ– передачі - вÑ�Ñ– канали" #, c-format msgid "Please enter %d digits!" -msgstr "½ÐâØáÝöâì %d æØäàØ" +msgstr "Ð�атиÑ�ніть %d цифри!" msgid "CAM not responding!" -msgstr "CAM ÝÕ ÒöÔßÞÒöÔÐô" +msgstr "CAM не відповідає!" msgid "Recording info" -msgstr "¿àÞ ×Ðߨá" +msgstr "Про запиÑ�" msgid "Button$Play" -msgstr "¿àÞÓàÐÒÐâØ" +msgstr "Програвати" msgid "Button$Rewind" -msgstr "½Ð×ÐÔ" +msgstr "Ð�азад" msgid "Recordings" -msgstr "·ÐߨáØ" +msgstr "ЗапиÑ�и" msgid "Button$Open" -msgstr "²öÔÚàØâØ" +msgstr "Відкрити" msgid "Commands" -msgstr "ºÞÜÐÝÔØ" +msgstr "Команди" msgid "Error while accessing recording!" -msgstr "¿ÞÜØÛÚÐ ÔÞáâãßã ÔÞ ×Ðߨáã!" +msgstr "Помилка доÑ�тупу до запиÑ�у!" msgid "Delete recording?" -msgstr "²ØâÕàâØ ×Ðߨá?" +msgstr "Витерти запиÑ�?" msgid "Error while deleting recording!" -msgstr "¿ÞÜØÛÚÐ ÒØÔÐÛÕÝÝï ×Ðߨáã!" +msgstr "Помилка видаленнÑ� запиÑ�у!" msgid "Recording commands" -msgstr "ºÞÜÐÝÔØ ×Ðߨáã" +msgstr "Команди запиÑ�у" msgid "never" -msgstr "ÝöÚÞÛØ" +msgstr "ніколи" msgid "skin dependent" -msgstr "×ÓöÔÝÞ × áâØÛÕÜ" +msgstr "згідно з Ñ�тилем" msgid "always" -msgstr "×ÐÒÖÔØ" +msgstr "завжди" msgid "OSD" -msgstr "¼ÕÝî" +msgstr "OSD меню" msgid "Setup.OSD$Language" -msgstr "¼ÞÒÐ" +msgstr "Мова" msgid "Setup.OSD$Skin" -msgstr "ÁâØÛì" +msgstr "Стиль" msgid "Setup.OSD$Theme" -msgstr "ÂÕÜÐ" +msgstr "Тема" msgid "Setup.OSD$Left (%)" -msgstr "²öÔáâãß ×ÛöÒÐ (%)" +msgstr "ВідÑ�туп зліва (%)" msgid "Setup.OSD$Top (%)" -msgstr "²öÔáâãß ×ÒÕàåã (%)" +msgstr "ВідÑ�туп зверху (%)" msgid "Setup.OSD$Width (%)" -msgstr "ÈØàØÝÐ (%)" +msgstr "Ширина (%)" msgid "Setup.OSD$Height (%)" -msgstr "²ØáÞâÐ (%)" +msgstr "ВиÑ�ота (%)" msgid "Setup.OSD$Message time (s)" -msgstr "ÂàØÒÐÛöáâì ßÞÚÐ×ã ßÞÒöÔÞÜÛÕÝì (áÕÚ)" +msgstr "ТриваліÑ�ть показу повідомлень (Ñ�ек)" msgid "Setup.OSD$Use small font" -msgstr "²ØÚÞàØáâÞÒãÒÐâØ ÜÐÛØÙ èàØäâ" +msgstr "ВикориÑ�товувати малий фонт" msgid "Setup.OSD$Anti-alias" -msgstr "·ÓÛÐÔÖØÒÐÝÝï èàØäâöÒ" +msgstr "ЗгладжуваннÑ� фонтів" msgid "Setup.OSD$Default font" -msgstr "ÁâÐÝÔÐàâÝØÙ äÞÝâ" +msgstr "Стандартний фонт" msgid "Setup.OSD$Small font" -msgstr "¼ÐÛØÙ äÞÝâ" +msgstr "Малий фонт" msgid "Setup.OSD$Fixed font" -msgstr "ÄöÚáÞÒÐÝØÙ äÞÝâ" +msgstr "ФікÑ�ований фонт" msgid "Setup.OSD$Default font size (%)" -msgstr "ÀÐ×Üöà äÞÝâÐ ÔÛï ÜÕÝî (%)" +msgstr "Размір фонта длÑ� меню (%)" msgid "Setup.OSD$Small font size (%)" -msgstr "ÀÐ×Üöà ÜÐÛÞÓÞ äÞÝâÐ (%)" +msgstr "Размір малого фонта (%)" msgid "Setup.OSD$Fixed font size (%)" -msgstr "ÀÐ×Üöà äöÚáÞÒÐÝÞÓÞ äÞÝâÐ (%)" +msgstr "Размір фікÑ�ованого фонта (%)" msgid "Setup.OSD$Channel info position" -msgstr "¿ÞÛÞÖÕÝÝï ÒöÚÝÐ öÝäÞàÜÐæö÷ ßàÞ ÚÐÝÐÛ" +msgstr "ПоложеннÑ� вікна інформації про канал" msgid "bottom" -msgstr "ÒÝØ×ã" +msgstr "внизу" msgid "top" -msgstr "ÒÒÕàåã" +msgstr "вверху" msgid "Setup.OSD$Channel info time (s)" -msgstr "¿ÞÚÐ× öÝäÞàÜÐæö÷ ßàÞ ÚÐÝÐÛ (áÕÚ)" +msgstr "Показ інформації про канал (Ñ�ек)" msgid "Setup.OSD$Info on channel switch" -msgstr "¿ÞÚÐ×ãÒÐâØ öÝäÞàÜÐæöî ßàÞ ÚÐÝÐÛ" +msgstr "Показ канал-інфо при переключанні " msgid "Setup.OSD$Timeout requested channel info" -msgstr "¦ÝäÞàÜÐæöî ßàÞ ÚÐÝÐÛ ×ÐÚàØâØ" +msgstr "Інформацію про канал закрити" msgid "Setup.OSD$Scroll pages" -msgstr "¿àÞÚàãâÚÐ áâÞàöÝÞÚ ÜÕÝî" +msgstr "Прокрутка Ñ�торінок меню" msgid "Setup.OSD$Scroll wraps" -msgstr "ÆØÚÛöçÝÐ ßàÞÚàãâÚÐ" +msgstr "Циклічна прокрутка" msgid "Setup.OSD$Menu key closes" -msgstr "ºÝÞßÚã ¼ÕÝî ×ÐÚàØâØ" +msgstr "Кнопку Меню закрити" msgid "Setup.OSD$Recording directories" -msgstr "ºÐâÐÛÞÓØ ×ÑÕàöÓÐÝÝï ×ÐߨáöÒ" +msgstr "Каталоги зберіганнÑ� запиÑ�ів" msgid "EPG" -msgstr "ÂÕÛÕÓöÔ" +msgstr "Телегід" msgid "Button$Scan" -msgstr "ÁÚÐÝãàÞÒÐâØ" +msgstr "Сканувати" msgid "Setup.EPG$EPG scan timeout (h)" -msgstr "·ÐâàØÜÚÐ áÚÐÝãÒÐÝÝï âÕÛÕÓöÔÐ (ç)" +msgstr "Затримка Ñ�кануваннÑ� телегіда (ч)" msgid "Setup.EPG$EPG bugfix level" -msgstr "ÀöÒÕÝì ÚÞàÕÚæö÷ ßÞÜØÛÞÚ" +msgstr "Рівень корекції помилок" msgid "Setup.EPG$EPG linger time (min)" -msgstr "·ÑÕàöÓÐÝÝï ×ÐáâÐàöÛØå ÔÐÝØå (åÒ)" +msgstr "ЗберіганнÑ� заÑ�тарілих даних (хв)" msgid "Setup.EPG$Set system time" -msgstr "²âÐÝÞ񯉯 áØáâÕÜØÙ çÐá" +msgstr "Ð’Ñ�тановити Ñ�иÑ�темий чаÑ�" msgid "Setup.EPG$Use time from transponder" -msgstr "²ØÚÞàØáâÐâØ çÐá âàÐÝáßÞÝÔÕàÐ" +msgstr "ВикориÑ�тати чаÑ� транÑ�пондера" #. TRANSLATORS: note the plural! msgid "Setup.EPG$Preferred languages" -msgstr "±ÐÖÐÝö ÜÞÒØ (âÕÛÕÓöÔ)" +msgstr "Бажані мови (телегід)" #. TRANSLATORS: note the singular! msgid "Setup.EPG$Preferred language" -msgstr "²ØÑàÐÝÞ" +msgstr "Бажана мова (телегід)" msgid "pan&scan" -msgstr "ßÐÝÞàÐÜãÒÐâØ" +msgstr "панорамувати" msgid "letterbox" -msgstr "×ÜÕÝèãÒÐâØ" +msgstr "зменшувати" msgid "center cut out" -msgstr "ÞÑàö×ÐâØ ×ÑÞÚã" +msgstr "обрізати по боках" msgid "no" -msgstr "Ýö" +msgstr "ні" msgid "names only" -msgstr "âöÛìÚØ ÝÐ×ÒØ" +msgstr "тільки назви" msgid "PIDs only" -msgstr "ÂöÛìÚØ PIDØ" +msgstr "Тільки PIDи" msgid "names and PIDs" -msgstr "ÝÐ×ÒØ ö PIDØ" +msgstr "назви Ñ– PIDи" msgid "add new channels" -msgstr "ÔÞÔÐâØ ÝÞÒö ÚÐÝÐÛØ" +msgstr "додати нові канали" msgid "add new transponders" -msgstr "ÔÞÔÐâØ ÝÞÒö âàÐÝáßÞÝÔÕàØ" +msgstr "додати нові транÑ�пондери" msgid "DVB" msgstr "DVB" msgid "Setup.DVB$Primary DVB interface" -msgstr "¾áÝÞÒÝØÙ DVB-ßàØáâàöÙ" +msgstr "ОÑ�новний DVB-приÑ�трій" msgid "Setup.DVB$Video format" -msgstr "ÄÞàÜÐâ ÒöÔÕÞ" +msgstr "Формат відео" msgid "Setup.DVB$Video display format" -msgstr "ÈØàÞÚÞÕÚàÐÝÕ ×ÞÑàÐÖÕÝÝï" +msgstr "Формат зображеннÑ� відео" msgid "Setup.DVB$Use Dolby Digital" -msgstr "²ÚÛîçØâØ Dolby Digital" +msgstr "ВикориÑ�товувати Dolby Digital" msgid "Setup.DVB$Update channels" -msgstr "¾ÝÞÒÛîÒÐâØ ÝÐáâàÞÙÚØ ÚÐÝÐÛöÒ" +msgstr "Оновлювати наÑ�тройки каналів" msgid "Setup.DVB$Audio languages" -msgstr "±ÐÖÐÝö ÜÞÒØ (×ÒãÚ)" +msgstr "Бажані мови (звук)" msgid "Setup.DVB$Audio language" -msgstr "²ØÑàÐÝÞ" +msgstr "Мова аудіо" msgid "Setup.DVB$Display subtitles" -msgstr "¿ÞÚÐ×ãÒÐâØ áãÑâØâàØ" +msgstr "Показувати Ñ�убтитри" msgid "Setup.DVB$Subtitle languages" -msgstr "¼ÞÒØ áãÑâØâàöÒ" +msgstr "Мови Ñ�убтитрів" msgid "Setup.DVB$Subtitle language" -msgstr "¼ÞÒÐ áãÑâØâàöÒ" +msgstr "Мова Ñ�убтитрів" msgid "Setup.DVB$Subtitle offset" -msgstr "²öÔáâãß áãÑâØâàöÒ" +msgstr "ВідÑ�туп Ñ�убтитрів" msgid "Setup.DVB$Subtitle foreground transparency" -msgstr "¿àÞ×Þàöáâì ßÕàÕÔÝìÞÓÞ ßÛÐÝã áãÑâØâàöÒ" +msgstr "ПрозоріÑ�ть переднього плану Ñ�убтитрів" msgid "Setup.DVB$Subtitle background transparency" -msgstr "¿àÞ×Þàöáâì ×ÐÔÝìÞÓÞ ßÛÐÝã áãÑâØâàöÒ" +msgstr "ПрозоріÑ�ть заднього плану Ñ�убтитрів" msgid "LNB" -msgstr "ºÞÝÒÕàâÕà" +msgstr "Конвертер" msgid "Setup.LNB$Use DiSEqC" -msgstr "²ØÚÞàØáâÞÒãÒÐâØ DiSEqC" +msgstr "ВикориÑ�товувати DiSEqC" msgid "Setup.LNB$SLOF (MHz)" -msgstr "ÇÐáâÞâÐ ßÕàÕÚÛîçÐÝÝï (SLOF) (¼³æ)" +msgstr "ЧаÑ�тота переключаннÑ� (SLOF) (МГц)" msgid "Setup.LNB$Low LNB frequency (MHz)" -msgstr "½ØÖÝï çÐáâÞâÐ ÚÞÝÒÕàâÕàÐ (¼³æ)" +msgstr "Ð�ижнÑ� чаÑ�тота конвертера (МГц)" msgid "Setup.LNB$High LNB frequency (MHz)" -msgstr "²ÕàåÝï çÐáâÞâÐ ÚÞÝÒÕàâÕàÐ (¼³æ)" +msgstr "ВерхнÑ� чаÑ�тота конвертера (МГц)" msgid "CAM reset" -msgstr "¿ÕàÕ×ÐÒÐÝâÐÖÕÝÝï CAM" +msgstr "ПерезавантаженнÑ� CAM" msgid "CAM present" -msgstr "CAM ßàØáãâÝöÙ" +msgstr "CAM приÑ�утній" msgid "CAM ready" -msgstr "CAM ÓÞâÞÒØÙ" +msgstr "CAM готовий" msgid "CAM" -msgstr "ÃÜÞÒÝØÙ ÔÞáâãß" +msgstr "CAM (Умовний доÑ�туп)" msgid "Button$Menu" -msgstr "¼ÕÝî" +msgstr "Меню" msgid "Button$Reset" -msgstr "ÁÚØÝãâØ" +msgstr "Скинути" msgid "Opening CAM menu..." -msgstr "²öÔÚàØÒÐî ÜÕÝî ÜÞÔãÛï ãÜÞÒÝÞÓÞ ÔÞáâãßã (CAM)" +msgstr "Відкриваю меню CAM-модулÑ�..." msgid "Can't open CAM menu!" -msgstr "¼ÕÝî CAM-ÜÞÔãÛï ÝÕÔÞáâãßÝÕ!" +msgstr "Меню CAM-модулÑ� недоÑ�тупне!" msgid "CAM is in use - really reset?" -msgstr "CAM ÒØÚÞàØáâÞÒãôâìáï - ÔöÙáÝÞ ßÕàÕ×ÐÒÐÝâÐÖØâØ?" +msgstr "CAM викориÑ�товуєтьÑ�Ñ� - дійÑ�но перезавантажити?" msgid "Can't reset CAM!" -msgstr "¿ÞÜØÛÚÐ ßÕàÕ×ÐßãáÚã CAM-ÜÞÔãÛï!" +msgstr "Помилка перезапуÑ�ку CAM-модулÑ�!" + +msgid "do not pause live video" +msgstr "не призупинÑ�ти переглÑ�д" + +msgid "confirm pause live video" +msgstr "підтвердити призупиненнÑ� переглÑ�ду" + +msgid "pause live video" +msgstr "призупинити переглÑ�д" msgid "Recording" -msgstr "·Ðߨá" +msgstr "ЗапиÑ�" msgid "Setup.Recording$Margin at start (min)" -msgstr "²ØßÕàÕÔÖÕÝÝï ßÞçÐâÚã ×Ðߨáã (åÒ)" +msgstr "ВипередженнÑ� початку запиÑ�у (хв)" msgid "Setup.Recording$Margin at stop (min)" -msgstr "·Ðßö×ÝÕÝÝï ×ãߨÝÚØ ×Ðߨáã (åÒ)" +msgstr "ЗапізненнÑ� зупинки запиÑ�у (хв)" msgid "Setup.Recording$Primary limit" -msgstr "¼öÝ. ßàöÞàØâÕâ ×ÐåÞßÛÕÝÝï ÞáÝ. ßàØáâàÞî" +msgstr "Мін. пріоритет захопленнÑ� оÑ�н. приÑ�трою" msgid "Setup.Recording$Default priority" -msgstr "¿àöÞàØâÕâ âÐÙÜÕàÐ ßÞ ×ÐÜÞÒçãÒÐÝÝî" +msgstr "Пріоритет таймера по замовчуванню" msgid "Setup.Recording$Default lifetime (d)" -msgstr "ÁâàÞÚ ×ÑÕàöÓÐÝÝï ×Ðߨáã ßÞ ×ÐÜÞÒçãÒÐÝÝî (Ô)" +msgstr "Строк зберіганнÑ� запиÑ�у по замовчуванню (дні)" + +msgid "Setup.Recording$Pause key handling" +msgstr "Обробка клавіші відкладеного переглÑ�ду" msgid "Setup.Recording$Pause priority" -msgstr "¿àöÞàØâÕâ ÒöÔÚÛÐÔÕÝÞÓÞ ßÕàÕÓÛïÔã" +msgstr "Пріоритет відкладеного переглÑ�ду" msgid "Setup.Recording$Pause lifetime (d)" -msgstr "·ÑÕàöÓÐÝÝï ÒöÔÚÛÐÔÕÝÞÓÞ ßÕàÕÓÛïÔã (Ô)" +msgstr "ЗберіганнÑ� відкладеного переглÑ�ду (дні)" msgid "Setup.Recording$Use episode name" -msgstr "³àãßãÒÐâØ äÐÙÛØ ßÞ Õßö×ÞÔÐå" +msgstr "ВикориÑ�товувати назву епізоду" msgid "Setup.Recording$Use VPS" -msgstr "²ØÚÞàØáâÞÒãÒÐâØ áØÓÝÐÛØ VPS" +msgstr "ВикориÑ�товувати Ñ�игнали VPS" msgid "Setup.Recording$VPS margin (s)" -msgstr "±ãäÕàÝØÙ çÐá VPS (áÕÚ)" +msgstr "Буферний чаÑ� VPS (Ñ�ек)" msgid "Setup.Recording$Mark instant recording" -msgstr "²öÔÜöçÐâØ ×àÞÑÛÕÝö ÒàãçÝã ×ÐߨáØ" +msgstr "Помітити зроблені вручну запиÑ�и" msgid "Setup.Recording$Name instant recording" -msgstr "ÁåÕÜÐ ÝÐÙÜÕÝãÒÐÝì àãçÝØå ×ÐߨáöÒ" +msgstr "Схема найменувань ручних запиÑ�ів" msgid "Setup.Recording$Instant rec. time (min)" -msgstr "¿àÞâïÖÝöáâì àãçÝÞÓÞ ×Ðߨáã (åÒ)" +msgstr "ПротÑ�жніÑ�ть ручного запиÑ�у (хв)" msgid "Setup.Recording$Max. video file size (MB)" -msgstr "¼ÐÚá. àÐ×Üöà ÒöÔÕÞäÐÙÛã (¼Ñ)" +msgstr "МакÑ�. размір відеофайлу (Мб)" msgid "Setup.Recording$Split edited files" -msgstr "´ö󯉯 ÒöÔàÕÔÐÚâÞÒÐÝö äÐÙÛØ" +msgstr "Ділити відредаговані файли" msgid "Replay" -msgstr "¿ÕàÕÓÛïÔ" +msgstr "ПереглÑ�д" msgid "Setup.Replay$Multi speed mode" -msgstr "±ÐÓÐâÞèÒØÔÚöáÝØÙ àÕÖØÜ" +msgstr "БагатошвидкіÑ�ний режим" msgid "Setup.Replay$Show replay mode" -msgstr "²öÞÑàÐÖÐâØ àÕÖØÜ ßÕàÕÓÛïÔã" +msgstr "Віображати режим переглÑ�ду" msgid "Setup.Replay$Resume ID" -msgstr "ID ßÕàÕÓÛïÔã" +msgstr "ID переглÑ�ду" msgid "Miscellaneous" -msgstr "Àö×ÝÕ" +msgstr "Різне" msgid "Setup.Miscellaneous$Min. event timeout (min)" -msgstr "¼öÝ. çÐá ÞçöÚãÒÐÝÝï ßÞÔö÷ (åÒ)" +msgstr "Мін. чаÑ� очікуваннÑ� події (хв)" msgid "Setup.Miscellaneous$Min. user inactivity (min)" -msgstr "¼öÝ. çÐá ÞçöÚãÒÐÝÝï ÒÒÞÔã (åÒ)" +msgstr "Мін. чаÑ� очікуваннÑ� вводу (хв)" msgid "Setup.Miscellaneous$SVDRP timeout (s)" -msgstr "·ÐâàØÜÚÚÐ ÞÑàØÒã ×'ôÔÝÐÝÝï SVDRP (áÕÚ)" +msgstr "Затримкка обриву з'єднаннÑ� SVDRP (Ñ�ек)" msgid "Setup.Miscellaneous$Zap timeout (s)" -msgstr "·ÐâàØÜÚÐ ßÕàÕÚÛîçÐÝÝï ÚÐÝÐÛã (áÕÚ)" +msgstr "Затримка переключаннÑ� каналу (Ñ�ек)" msgid "Setup.Miscellaneous$Channel entry timeout (ms)" -msgstr "·ÐâàØÜÚÐ çÐáã ÔÛï ÒßàÞÒÐÔÖÕÝÝï ÚÐÝÐÛã (ms)" +msgstr "Затримка чаÑ�у длÑ� впровадженнÑ� каналу (ms)" msgid "Setup.Miscellaneous$Initial channel" -msgstr "ºÐÝÐÛ ßàØ ÒÚÛîçÐÝÝî" +msgstr "Канал при включенні" msgid "Setup.Miscellaneous$as before" -msgstr "ïÚ àÐÝöèÕ" +msgstr "Ñ�к раніше" msgid "Setup.Miscellaneous$Initial volume" -msgstr "³ãçÝöáâì ßàØ ÒÚÛîçÕÝÝö" +msgstr "ГучніÑ�ть при включенні" msgid "Setup.Miscellaneous$Emergency exit" -msgstr "°ÒÐàöÙÝØÙ ÒØåöÔ" +msgstr "Ð�варійний вихід" msgid "Plugins" -msgstr "¼ÞÔãÛö àÞ×èØàÕÝÝï" +msgstr "Модулі розширеннÑ�" msgid "This plugin has no setup parameters!" -msgstr "¼ÞÔãÛì ÝÕ ÜÐô ßÐàÐÜÕâàöÒ ÝÐÛÐèâãÒÐÝì!" +msgstr "Модуль не має параметрів налаштувань!" msgid "Setup" -msgstr "½ÐÛÐèâãÒÐÝÝï" +msgstr "Ð�алаштуваннÑ�" msgid "Restart" -msgstr "¿ÕàÕ×ÐßãáâØâØ" +msgstr "ПерезапуÑ�тити" msgid "Really restart?" -msgstr "´öÙáÝÞ ßÕàÕ×ÐßãáâØâØ?" +msgstr "ДійÑ�но перезапуÑ�тити?" #. TRANSLATORS: note the leading and trailing blanks! msgid " Stop recording " -msgstr " ·ãßØÝØâØ ×Ðߨá " +msgstr " Зупинити запиÑ� " msgid "Schedule" -msgstr "ÂÕÛÕÓöÔ" +msgstr "Телегід" msgid "VDR" msgstr "VDR" #. TRANSLATORS: note the leading blank! msgid " Stop replaying" -msgstr " ·ãßØÝØâØ ßàÞÓàÐÒÐÝÝï" +msgstr " Зупинити програваннÑ�" msgid "Button$Audio" -msgstr "¼ÞÒÐ" +msgstr "Мова аудіо" msgid "Button$Pause" -msgstr "¿Ðã×Ð" +msgstr "Пауза" msgid "Button$Stop" -msgstr "ÁâÞß" +msgstr "Стоп" msgid "Button$Resume" -msgstr "¿àÞÔÞÒÖØâØ" +msgstr "Продовжити" #. TRANSLATORS: note the leading blank! msgid " Cancel editing" -msgstr " ¿ÕàÕàÒÐâØ ÜÞÝâÐÖ ×Ðߨáã" +msgstr " Перервати монтаж запиÑ�у" msgid "Stop recording?" -msgstr "¿àØßØÝØâØ ×Ðߨá?" +msgstr "Припинити запиÑ�?" msgid "Cancel editing?" -msgstr "¿ÕàÕàÒÐâØ àÕÔÐÚâãÒÐÝÝï?" +msgstr "Перервати редактуваннÑ�?" msgid "No audio available!" -msgstr "²öÔáãâÝöÙ ×ÒãÚ!" +msgstr "ВідÑ�утній звук!" msgid "No subtitles" -msgstr "½ÕÜÐô áãÑâØâàöÒ" +msgstr "Ð�емає Ñ�убтитрів" msgid "Button$Subtitles" -msgstr "ÁãÑâØâàØ" +msgstr "Субтитри" msgid "No subtitles available!" -msgstr "ÁãÑâØâàöÒ ÝÕÜÐô!" +msgstr "Субтитрів немає!" msgid "Not enough disk space to start recording!" -msgstr "½ÕÔÞáâÐâÝìÞ Üöáæï ÝÐ ÔØáÚã ÔÛï ßÞçÐâÚã ×Ðߨáã" +msgstr "Ð�едоÑ�татньо міÑ�цÑ� на диÑ�ку длÑ� початку запиÑ�у" msgid "No free DVB device to record!" -msgstr "½ÕÜÐô ÒöÛìÝÞÓÞ DVB-ßàØáâàÞî ÔÛï ×Ðߨáã!" +msgstr "Ð�емає вільного DVB-приÑ�трою длÑ� запиÑ�у!" msgid "Pausing live video..." -msgstr "ÀÕÖØÜ ÒöÔÚÛÐÔÕÝÞÓÞ ßÕàÕÓÛïÔã..." +msgstr "Режим відкладеного переглÑ�ду..." #. TRANSLATORS: note the trailing blank! msgid "Jump: " -msgstr "¿ÕàÕÙâØ: " +msgstr "Перейти: " msgid "No editing marks defined!" -msgstr "½Õ ×ÐÔÐÝÞ ÜöâÞÚ ÔÛï ÜÞÝâÐÖã!" +msgstr "Ð�е задано міток длÑ� монтажу!" msgid "Can't start editing process!" -msgstr "½ÕÜÞÖÛØÒÞ ßÞçÐâØ ÜÞÝâÐÖ ×Ðߨáã!" +msgstr "Ð�еможливо почати монтаж запиÑ�у!" msgid "Editing process started" -msgstr "¼ÞÝâÐÖ ×Ðߨáã ßÞçÐÒáï" +msgstr "Монтаж запиÑ�у почавÑ�Ñ�" msgid "Editing process already active!" -msgstr "¿àÞæÕá ÒöÔÕÞÜÞÝâÐÖã ÒÖÕ ×ÐßãéÕÝØÙ!" +msgstr "ПроцеÑ� відеомонтажу вже запущений!" msgid "FileNameChars$ abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&" -msgstr " abcdefghijklmnopqrstuvwxyzÐÑÒÓÔÕôñÖרö÷ÙÚÛÜÝÞßàáâãäåæçèéêëìîï0123456789-.#~,/_@" +msgstr " abcdefghijklmnopqrstuvwxyzабвгдеєёжзиіїйклмнопрÑ�туфхцчшщъыьюÑ�0123456789-.#~,/_@" msgid "yes" -msgstr "âÐÚ" +msgstr "так" msgid "CharMap$ 0\t-.,1#~\\^$[]|()*+?{}/:%@&\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9" -msgstr " 0\t-.#~,/_@1\tabcÐÑÒÓ2\tdefÔÕôñÖ×3\tghiØö÷ÙÚÛ4\tjklÜÝÞ5\tmnoßàá6\tpqrsâãäå7\ttuvæçèéê8\twxyzëìíîï9" +msgstr " 0\t-.#~,/_@1\tabcабвг2\tdefдеєёжз3\tghiиіїйкл4\tjklмно5\tmnoпрÑ�6\tpqrsтуфх7\ttuvцчшщъ8\twxyzыьÑ�ÑŽÑ�9" msgid "Button$ABC/abc" -msgstr "°±²/ÐÑÒ" +msgstr "Ð�БВ/абв" msgid "Button$Overwrite" -msgstr "·ÐÜöÝÐ" +msgstr "Заміна" msgid "Button$Insert" -msgstr "²áâÐÒÚÐ" +msgstr "Ð’Ñ�тавка" msgid "Plugin" -msgstr "¼ÞÔãÛì" +msgstr "Модуль" msgid "Up/Dn for new location - OK to move" -msgstr "½ÐâØáÚÐÙâÕ \"²ÒÕàå\"/\"²ÝØ×\" ÔÛï ÒØÑÞàã ßÞרæö÷, Ð ßÞâöÜ \"OK\"" +msgstr "Ð�атиÑ�кайте \"Вверх\"/\"Вниз\" длÑ� вибору позиції, а потім \"OK\"" msgid "Channel locked (recording)!" -msgstr "ºÐÝÐÛ ×ÐÑÛÞÚÞÒÐÝÞ (ÙÔÕ ×Ðߨá)!" +msgstr "Канал заблоковано (йде запиÑ�)!" msgid "Low disk space!" -msgstr "½ÕÔÞáâÐâÝìÞ Üöáæï ÝÐ ÔØáÚã!" +msgstr "Ð�едоÑ�татньо міÑ�цÑ� на диÑ�ку!" msgid "Can't shutdown - option '-s' not given!" -msgstr "²ØÚÛîçÕÝÝÝï ÝÕÜÞÖÛØÒÕ - ÝÕ ×ÐÔÐÝÞ ßÐàÐÜÕâà '-s'!" +msgstr "ВиключенннÑ� неможливе - не задано параметр '-s'!" msgid "Editing - shut down anyway?" -msgstr "¹ÔÕ ÜÞÝâÐÖ - ÔöÙáÝÞ ÒØÚÛîçØâØ?" +msgstr "Йде монтаж - дійÑ�но виключити?" msgid "Recording - shut down anyway?" -msgstr "¹ÔÕ ×Ðߨá - ÔöÙáÝÞ ÒØÚÛîçØâØ?" +msgstr "Йде запиÑ� - дійÑ�но виключити?" #, c-format msgid "Recording in %ld minutes, shut down anyway?" -msgstr "ÇÕàÕ× %ld åÒØÛØÝ ßÞçÝÕâìáï ×Ðߨá - ÔöÙáÝÞ ÒØÚÛîçØâØ?" +msgstr "Через %ld хвилин почнетьÑ�Ñ� запиÑ� - дійÑ�но виключити?" msgid "shut down anyway?" -msgstr "ÔöÙáÝÞ ÒØÚÛîçØâØ?" +msgstr "дійÑ�но виключити?" #, c-format msgid "Plugin %s wakes up in %ld min, continue?" -msgstr "Plugin %s ßàÞáÝÕâìáï çÕàÕ× %ld åÒØÛØÝ - ßàÞÔÞÒÖØâØ?" +msgstr "Модуль %s включитьÑ�Ñ� через %ld хвилин - продовжити?" msgid "Editing - restart anyway?" -msgstr "¿àÞæÕá ÜÞÝâÐÖã - ÔöÙáÝÞ ßÕàÕ×ÐßãáâØâØ?" +msgstr "ПроцеÑ� монтажу - дійÑ�но перезапуÑ�тити?" msgid "Recording - restart anyway?" -msgstr "¹ÔÕ ×Ðߨá - ÔöÙáÝÞ ßÕàÕ×ÐßãáâØâØ?" +msgstr "Йде запиÑ� - дійÑ�но перезапуÑ�тити?" msgid "restart anyway?" -msgstr "ÔöÙáÝÞ ßÕàÕ×ÐßãáâØâØ?" +msgstr "дійÑ�но перезапуÑ�тити?" #. TRANSLATORS: note the trailing blank! msgid "Volume " -msgstr "³ãçÝöáâì " +msgstr "ГучніÑ�ть " msgid "Classic VDR" -msgstr "ºÛÐáØçÝØÙ" +msgstr "КлаÑ�ичний VDR" msgid "ST:TNG Panels" -msgstr "ST:TNG ßÐÝÕÛö" +msgstr "ST:TNG панелі" #. TRANSLATORS: the first character of each weekday, beginning with monday msgid "MTWTFSS" -msgstr "¿²ÁÇ¿Á½" +msgstr "ПВСЧПСÐ�" #. TRANSLATORS: abbreviated weekdays, beginning with monday (must all be 3 letters!) msgid "MonTueWedThuFriSatSun" -msgstr "¿ÞݲâàÁàÔÇâÒ¿âÝÁãѽÕÔ" +msgstr "ПонВтрСрдЧтвПтнСубÐ�ед" msgid "Monday" -msgstr "¿ÞÝÕÔöÛÞÚ" +msgstr "Понеділок" msgid "Tuesday" -msgstr "²öÒâÞàÞÚ" +msgstr "Вівторок" msgid "Wednesday" -msgstr "ÁÕàÕÔÐ" +msgstr "Середа" msgid "Thursday" -msgstr "ÇÕâÒÕà" +msgstr "Четвер" msgid "Friday" -msgstr "¿'ïâÝØæï" +msgstr "П'Ñ�тницÑ�" msgid "Saturday" -msgstr "ÁãÑÞâÐ" +msgstr "Субота" msgid "Sunday" -msgstr "½ÕÔöÛï" +msgstr "Ð�еділÑ�" msgid "Upcoming recording!" -msgstr "·Ðߨá áÚÞàÞ ßÞçÝÕâìáï" +msgstr "ЗапиÑ� Ñ�коро почнетьÑ�Ñ�" + +msgid "Pause live video?" +msgstr "Режим відкладеного переглÑ�ду..." msgid "Recording started" -msgstr "·Ðߨá ßÞçÐÒáï" +msgstr "ЗапиÑ� почавÑ�Ñ�" msgid "VDR will shut down later - press Power to force" -msgstr "VDR ÒØÚÛîçØâìáï ßßö×ÝöèÕ - ÝÐâØáÝöâì Power ÔÛï ßàØèÒØÔèÕÝÝï" +msgstr "VDR виключитьÑ�Ñ� ппізніше - натиÑ�ніть Power длÑ� пришвидшеннÑ�" msgid "Press any key to cancel shutdown" -msgstr "½ÐâØáÝöâì ÑãÔì-ïÚã ÚÝÞßÚã ÔÛï ÒöÔÜöÝØ ÒØÚÛîçÕÝÝï." +msgstr "Ð�атиÑ�ніть будь-Ñ�ку кнопку длÑ� відміни виключеннÑ�." msgid "Switching primary DVB..." -msgstr "·ÜöÝÐ ÞáÝÞÒÝÞÓÞ DVB-ßàØáâàÞî..." +msgstr "Зміна оÑ�новного DVB-приÑ�трою..." msgid "Editing process failed!" -msgstr "¿ÞÜØÛÚÐ ßöÔ çÐá ÜÞÝâÐÖã ×Ðߨáã!" +msgstr "Помилка під чаÑ� монтажу запиÑ�у!" msgid "Editing process finished" -msgstr "¼ÞÝâÐÖ ×ÐÚöÝçÕÝÞ" +msgstr "Монтаж закінчено" msgid "Press any key to cancel restart" -msgstr "½ÐâØáÝöâì ÑãÔì-ïÚã ÚÝÞßÚã ÔÛï ÒöÔÜöÝØ ßÕàÕ×ÐÒÐÝâÐÖÕÝÝï" +msgstr "Ð�атиÑ�ніть будь-Ñ�ку кнопку длÑ� відміни перезавантаженнÑ�" #, c-format msgid "VDR will shut down in %s minutes" -msgstr "VDR ÒØÚÛîçØâìáï çÕàÕ× %s åÒØÛØÝ" +msgstr "VDR виключитьÑ�Ñ� через %s хвилин" diff --git a/po/zh_CN.po b/po/zh_CN.po index 92b20a7..f276775 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-21 08:44+0800\n" "Last-Translator: Nan Feng <nfgx@21cn.com>\n" "Language-Team: Chinese\n" @@ -707,6 +707,15 @@ msgstr "CAMæ£åœ¨ä½¿ç”¨-是å�¦é‡�å�¯ï¼Ÿ" msgid "Can't reset CAM!" msgstr "ä¸�能é‡�å�¯CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "记录ä¸" @@ -725,6 +734,9 @@ msgstr "默认优先" msgid "Setup.Recording$Default lifetime (d)" msgstr "默认终身 (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "æš‚å�œä¼˜å…ˆ" @@ -986,6 +998,9 @@ msgstr "星期天" msgid "Upcoming recording!" msgstr "å�³å°†çš„记录ï¼�" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "记录开始ï¼�" @@ -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); @@ -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) @@ -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); @@ -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) @@ -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); @@ -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 @@ -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; |
