diff options
-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> Gnter Niedermeier <linuxtv@ncs-online.de> for reporting a problem with file I/O overhead during recording in TS format + +Martin Neuditschko <yosuke.tomoe@gmx.net> + for reporting a problem with error messages from cDvbDevice::GetVideoSize() + on systems with no real primary replay device @@ -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 comenada" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index a50a33d..34a941b 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-28 15:00+0200\n" "Last-Translator: Vladimr Brta <vladimir.barta@k2atmitec.cz>, Ji Dobr <jdobry@centrum.cz>\n" "Language-Team: Czech\n" @@ -705,6 +705,15 @@ msgstr "CAM se pouv - opravdu restartovat?" msgid "Can't reset CAM!" msgstr "CAM modul nelze restartovat!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Nahrvn" @@ -723,6 +732,9 @@ msgstr "Vchoz priorita" msgid "Setup.Recording$Default lifetime (d)" msgstr "Vchoz ivotnost" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorita peruen" @@ -984,6 +996,9 @@ msgstr "Nedle" msgid "Upcoming recording!" msgstr "Brzo zane nahrvn!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Zaalo nahrvn" diff --git a/po/da_DK.po b/po/da_DK.po index e8d05c8..cd533a0 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Mogens Elneff <mogens@elneff.dk>\n" "Language-Team: Danish\n" @@ -704,6 +704,15 @@ msgstr "CAM er i brug - virkelig nulstille?" msgid "Can't reset CAM!" msgstr "Kan ikke nulstille CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Optagelse" @@ -722,6 +731,9 @@ msgstr "Standard prioritet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Standard levetid (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Pause prioritet" @@ -983,6 +995,9 @@ msgstr "Sndag" msgid "Upcoming recording!" msgstr "Optagelse starter snart!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Optagelse startet" diff --git a/po/de_DE.po b/po/de_DE.po index 6b55d6a..eea6817 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-11-25 15:19+0200\n" "Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n" "Language-Team: German\n" @@ -704,6 +704,15 @@ msgstr "CAM wird benutzt - wirklich zurcksetzen?" msgid "Can't reset CAM!" msgstr "Zurcksetzen des CAM fehlgeschlagen!" +msgid "do not pause live video" +msgstr "Live-Signal nicht anhalten" + +msgid "confirm pause live video" +msgstr "Anhalten des Live-Signals besttigen" + +msgid "pause live video" +msgstr "Live-Signal anhalten" + msgid "Recording" msgstr "Aufnahme" @@ -722,6 +731,9 @@ msgstr "Default-Prioritt" msgid "Setup.Recording$Default lifetime (d)" msgstr "Default-Lebensdauer (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "Funktion der Pause-Taste" + msgid "Setup.Recording$Pause priority" msgstr "Pause-Prioritt" @@ -983,6 +995,9 @@ msgstr "Sonntag" msgid "Upcoming recording!" msgstr "Aufnahme beginnt in Krze!" +msgid "Pause live video?" +msgstr "Live-Signal anhalten?" + msgid "Recording started" msgstr "Aufzeichnung gestartet" diff --git a/po/el_GR.po b/po/el_GR.po index 90ff04d..bcdcb8e 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n" "Language-Team: Greek\n" @@ -704,6 +704,15 @@ msgstr "" msgid "Can't reset CAM!" msgstr " CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "" @@ -722,6 +731,9 @@ msgstr " " msgid "Setup.Recording$Default lifetime (d)" msgstr " ()" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr " " @@ -983,6 +995,9 @@ msgstr "" msgid "Upcoming recording!" msgstr "" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "" diff --git a/po/es_ES.po b/po/es_ES.po index 667d650..58cb414 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-02 19:02+0100\n" "Last-Translator: Luca Olivetti <luca@ventoso.org>\n" "Language-Team: Spanish\n" @@ -705,6 +705,15 @@ msgstr "CAM en uso - reiniciar?" msgid "Can't reset CAM!" msgstr "No se puede reiniciar CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opciones de grabacin" @@ -723,6 +732,9 @@ msgstr "Prioridad por defecto" msgid "Setup.Recording$Default lifetime (d)" msgstr "Duracin por defecto (das)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioridad en modo pausa" @@ -984,6 +996,9 @@ msgstr "Domingo" msgid "Upcoming recording!" msgstr "Grabacin a punto de empezar!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Iniciando grabacin" diff --git a/po/et_EE.po b/po/et_EE.po index ff66d8a..b0477c2 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n" "Language-Team: Estonian\n" @@ -704,6 +704,15 @@ msgstr "CAM on kasutuses - taaskivitada?" msgid "Can't reset CAM!" msgstr "CAM mooduli taaskivitus ebannestus!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Salvestamine" @@ -722,6 +731,9 @@ msgstr "Vaikimisi prioriteet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Salvestuse eluiga (pevi)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Pausi prioriteet" @@ -983,6 +995,9 @@ msgstr "Phapev" msgid "Upcoming recording!" msgstr "Salvestamine tulekul!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Salvestamine algas" diff --git a/po/fi_FI.po b/po/fi_FI.po index ed5b94d..e62b9f6 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-15 15:52+0200\n" "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n" "Language-Team: Finnish\n" @@ -707,6 +707,15 @@ msgstr "CA-moduuli kytss - nollataanko?" msgid "Can't reset CAM!" msgstr "CA-moduulin nollaus eponnistui!" +msgid "do not pause live video" +msgstr "l pysyt lhetyst" + +msgid "confirm pause live video" +msgstr "varmista lhetyksen pysyttminen" + +msgid "pause live video" +msgstr "pysyt lhetys" + msgid "Recording" msgstr "Tallennus" @@ -725,6 +734,9 @@ msgstr "Tallenteen oletusprioriteetti" msgid "Setup.Recording$Default lifetime (d)" msgstr "Tallenteen oletuselinik (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "Taukonppimen toiminta" + msgid "Setup.Recording$Pause priority" msgstr "Taukotallenteen prioriteetti" @@ -986,6 +998,9 @@ msgstr "Sunnuntai" msgid "Upcoming recording!" msgstr "Tallennus on alkamassa!" +msgid "Pause live video?" +msgstr "Pysytetnk lhetys?" + msgid "Recording started" msgstr "Tallennus aloitettu" diff --git a/po/fr_FR.po b/po/fr_FR.po index 5353625..e1ef364 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-27 18:14+0100\n" "Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n" "Language-Team: French\n" @@ -710,6 +710,15 @@ msgstr "CAM en cours d'utilisation - Remettre zro ?" msgid "Can't reset CAM!" msgstr "Impossible de rinitialiser le CAM !" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Enregistrement" @@ -728,6 +737,9 @@ msgstr "Priorit par dfaut" msgid "Setup.Recording$Default lifetime (d)" msgstr "Dure de vie par dfaut (j)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorit des pauses" @@ -989,6 +1001,9 @@ msgstr "Dimanche" msgid "Upcoming recording!" msgstr "L'enregistrement va commencer !" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "L'enregistrement a commenc" diff --git a/po/hr_HR.po b/po/hr_HR.po index 9b409e3..f69c24a 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-17 19:00+0100\n" "Last-Translator: Adrian Caval <anrxc@sysphere.org>\n" "Language-Team: Croatian\n" @@ -706,6 +706,15 @@ msgstr "CAM se koristi - ponovno pokrenuti unato?" msgid "Can't reset CAM!" msgstr "Ponovno pokretanje CAM-a neuspjeno!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Snimanje" @@ -724,6 +733,9 @@ msgstr "Zadani prioritet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Zadano trajanje (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioritet pauze" @@ -985,6 +997,9 @@ msgstr "Nedjelja" msgid "Upcoming recording!" msgstr "Obnovljena snimka!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Snimanje zapoelo" diff --git a/po/hu_HU.po b/po/hu_HU.po index 5c0a887..fad18a4 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-12-01 21:42+0200\n" "Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n" "Language-Team: Hungarian\n" @@ -707,6 +707,15 @@ msgstr "CAM hasznlatban - valban jraindtjuk?" msgid "Can't reset CAM!" msgstr "A CAM jraindts nem sikerlt" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Felvtel" @@ -725,6 +734,9 @@ msgstr "Alaprtelmezett priorits" msgid "Setup.Recording$Default lifetime (d)" msgstr "Alaprtelmezett lettartam" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Sznet priorits" @@ -986,6 +998,9 @@ msgstr "Vasrnap" msgid "Upcoming recording!" msgstr "Felvtel rgtn kezddik!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "A felvtel elindtva" diff --git a/po/it_IT.po b/po/it_IT.po index 877191b..09429cb 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2009-02-08 18:58+0100\n" "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" "Language-Team: Italian\n" @@ -711,6 +711,15 @@ msgstr "La CAM è in uso - vuoi reimpostarla?" msgid "Can't reset CAM!" msgstr "Impossibile reimpostare il modulo CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Registrazione" @@ -729,6 +738,9 @@ msgstr "Priorità predefinita" msgid "Setup.Recording$Default lifetime (d)" msgstr "Scadenza predefinita (gg)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorità di pausa" @@ -990,6 +1002,9 @@ msgstr "Domenica" msgid "Upcoming recording!" msgstr "Registrazione imminente!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Registrazione avviata" diff --git a/po/nl_NL.po b/po/nl_NL.po index 36a9922..ef5c976 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-26 17:20+0100\n" "Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n" "Language-Team: Dutch\n" @@ -708,6 +708,15 @@ msgstr "CAM wordt gebruikt - werkelijk herstarten?" msgid "Can't reset CAM!" msgstr "Kan CAM niet herstarten!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opname" @@ -726,6 +735,9 @@ msgstr "Standaard prioriteit" msgid "Setup.Recording$Default lifetime (d)" msgstr "Standaard levensduur (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Pauze prioriteit" @@ -987,6 +999,9 @@ msgstr "Zondag" msgid "Upcoming recording!" msgstr "Opname start binnenkort!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Opname is gestart!" diff --git a/po/nn_NO.po b/po/nn_NO.po index 2445b02..daf56f1 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Truls Slevigen <truls@slevigen.no>\n" "Language-Team: Norwegian\n" @@ -705,6 +705,15 @@ msgstr "" msgid "Can't reset CAM!" msgstr "" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opptak" @@ -723,6 +732,9 @@ msgstr "Normal prioritet (Timer)" msgid "Setup.Recording$Default lifetime (d)" msgstr "Normal levetid timer (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "" @@ -984,6 +996,9 @@ msgstr "Sndag" msgid "Upcoming recording!" msgstr "" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "" diff --git a/po/pl_PL.po b/po/pl_PL.po index 860094a..d887178 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-09 12:59+0100\n" "Last-Translator: Michael Rakowski <mrak@gmx.de>\n" "Language-Team: Polish\n" @@ -705,6 +705,15 @@ msgstr "CAM jest w uyciu - naprawd zresetowa?" msgid "Can't reset CAM!" msgstr "Nie mona zresetowa CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Nagranie" @@ -723,6 +732,9 @@ msgstr "Domylny priorytet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Domylny czas ycia (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Priorytet pauzy" @@ -984,6 +996,9 @@ msgstr "Niedziela" msgid "Upcoming recording!" msgstr "Wkrtce nagranie!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Rozpoczto nagrywanie" diff --git a/po/pt_PT.po b/po/pt_PT.po index fa4767f..ba23834 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-18 17:04+0100\n" "Last-Translator: anonymous\n" "Language-Team: Portuguese\n" @@ -704,6 +704,15 @@ msgstr "CAM em uso - quer mesmo reiniciar?" msgid "Can't reset CAM!" msgstr "No possvel reiniciar a CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Opes de gravao" @@ -722,6 +731,9 @@ msgstr "Prioridade por defeito" msgid "Setup.Recording$Default lifetime (d)" msgstr "Validade por defeito (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioridade da pausa" @@ -983,6 +995,9 @@ msgstr "Domingo" msgid "Upcoming recording!" msgstr "Gravao agendada!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Gravao iniciada" diff --git a/po/ro_RO.po b/po/ro_RO.po index 0c6013c..30aee23 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-25 00:39+0100\n" "Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n" "Language-Team: Romanian\n" @@ -707,6 +707,15 @@ msgstr "CAM-ul este in folosin - totui resetez?" msgid "Can't reset CAM!" msgstr "Nu pot reseta CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "nregistrare" @@ -725,6 +734,9 @@ msgstr "Prioritate implicit" msgid "Setup.Recording$Default lifetime (d)" msgstr "Timp de pstrare predefinit (zile)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioritate pauz" @@ -986,6 +998,9 @@ msgstr "Duminic" msgid "Upcoming recording!" msgstr "Urmeaz o nregistrare!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "A nceput nregistrarea" diff --git a/po/ru_RU.po b/po/ru_RU.po index a0a2555..0c61dce 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-12-15 14:37+0100\n" "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n" "Language-Team: Russian\n" @@ -705,6 +705,15 @@ msgstr "CAM - ?" msgid "Can't reset CAM!" msgstr " CAM-!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "" @@ -723,6 +732,9 @@ msgstr " " msgid "Setup.Recording$Default lifetime (d)" msgstr " ()" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr " " @@ -984,6 +996,9 @@ msgstr "" msgid "Upcoming recording!" msgstr " " +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr " " diff --git a/po/sl_SI.po b/po/sl_SI.po index 347e599..35b6043 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-28 19:44+0100\n" "Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n" "Language-Team: Slovenian\n" @@ -705,6 +705,15 @@ msgstr "CAM je v uporabi - zares resetiraj?" msgid "Can't reset CAM!" msgstr "Ne morem resetirati CAM-a!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Snemanje" @@ -723,6 +732,9 @@ msgstr "Privzeta prioriteta" msgid "Setup.Recording$Default lifetime (d)" msgstr "Privzeti ivljenski as (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioriteta pavze" @@ -984,6 +996,9 @@ msgstr "Nedelja" msgid "Upcoming recording!" msgstr "Sledi snemanje!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Snemanje se je prielo" diff --git a/po/sv_SE.po b/po/sv_SE.po index d47da8a..e4fbe25 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-12 18:25+0100\n" "Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n" "Language-Team: Swedish\n" @@ -707,6 +707,15 @@ msgstr "CAM upptagen, vill du verkligen starta om?" msgid "Can't reset CAM!" msgstr "Kan inte terstlla CAM!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Inspelning" @@ -725,6 +734,9 @@ msgstr "Normal prioritet" msgid "Setup.Recording$Default lifetime (d)" msgstr "Normal livstid (dagar)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Prioritet fr direktinspelning" @@ -986,6 +998,9 @@ msgstr "Sndag" msgid "Upcoming recording!" msgstr "strax inspelning..." +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Inspelningen har startat" diff --git a/po/tr_TR.po b/po/tr_TR.po index abdb594..44bf894 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-02-28 00:33+0100\n" "Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n" "Language-Team: Turkish\n" @@ -704,6 +704,15 @@ msgstr "CAM kullanlyor - gerekden sfrla?" msgid "Can't reset CAM!" msgstr "CAM sfrlanamad!" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "Kayt" @@ -722,6 +731,9 @@ msgstr "Olaan priorite" msgid "Setup.Recording$Default lifetime (d)" msgstr "Olaan ekim mr (gn)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "Duraklama prioritesi" @@ -983,6 +995,9 @@ msgstr "Pazar" msgid "Upcoming recording!" msgstr "ekim yaknda balyor!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "Kayt baland" diff --git a/po/uk_UA.po b/po/uk_UA.po index 3d566fc..79b8121 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -5,261 +5,261 @@ # msgid "" msgstr "" -"Project-Id-Version: VDR 1.6.0\n" +"Project-Id-Version: VDR 1.7.7\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" -"PO-Revision-Date: 2008-03-07 14:17+0200\n" -"Last-Translator: Yarema Aka Knedlyk <yupadmin@gmail.com>\n" +"POT-Creation-Date: 2009-05-31 11:11+0200\n" +"PO-Revision-Date: 2009-05-31 13:17+0200\n" +"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n" "Language-Team: Ukrainian\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-5\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "off" -msgstr "" +msgstr "викл" msgid "on" -msgstr "" +msgstr "вкл" msgid "auto" -msgstr "" +msgstr "авто" msgid "none" -msgstr "" +msgstr "нічого" msgid "*** Invalid Channel ***" -msgstr "*** ***" +msgstr "*** Неправильний канал ***" msgid "Channel not available!" -msgstr " !" +msgstr "Канал недоступний!" msgid "Can't start Transfer Mode!" -msgstr " !" +msgstr "Неможливо включити режим пропуску!" msgid "Starting EPG scan" -msgstr " EPG-" +msgstr "Починаю EPG-сканування" msgid "No title" -msgstr " " +msgstr "Без назви" #. TRANSLATORS: The name of the language, as written natively msgid "LanguageName$English" -msgstr "" +msgstr "Українська" #. TRANSLATORS: The 3-letter code of the language msgid "LanguageCode$eng" msgstr "ukr" msgid "Phase 1: Detecting RC code type" -msgstr " 1: " +msgstr "Крок 1: Визначення типу коду пульта" msgid "Press any key on the RC unit" -msgstr " - " +msgstr "Натисніть будь-яку кнопку на пульті" msgid "RC code detected!" -msgstr " !" +msgstr "Визначено код пульта!" msgid "Do not press any key..." -msgstr " ..." +msgstr "Не натискайте кнопки..." msgid "Phase 2: Learning specific key codes" -msgstr " 2: " +msgstr "Крок 2: Приписування кодів для відповідних кнопок" #, c-format msgid "Press key for '%s'" -msgstr " '%s'" +msgstr "Натисніть кнопку '%s'" msgid "Press 'Up' to confirm" -msgstr " '' " +msgstr "Натисніть 'Вверх' для підтвердження" msgid "Press 'Down' to continue" -msgstr " '' " +msgstr "Натисніть 'Вниз' для продовження" msgid "(press 'Up' to go back)" -msgstr "( '' )" +msgstr "(Натисніть 'Вверх' для повернення)" msgid "(press 'Down' to end key definition)" -msgstr "( '' )" +msgstr "(Натисніть 'Вниз' для закінчення настройки пульта)" msgid "(press 'Menu' to skip this key)" -msgstr "( '' )" +msgstr "(Натисніть 'Меню' щоб пропустити кнопку)" msgid "Learning Remote Control Keys" -msgstr " " +msgstr "Навчання пульта" msgid "Phase 3: Saving key codes" -msgstr " 3: ' " +msgstr "Крок 3: Запам'ятовування кодів кнопок" msgid "Press 'Up' to save, 'Down' to cancel" -msgstr " '' , '' " +msgstr "Натисніть 'Вверх' для закінчення, 'Вниз' для відмови" msgid "Key$Up" -msgstr "" +msgstr "Вверх" msgid "Key$Down" -msgstr "" +msgstr "Вниз" msgid "Key$Menu" -msgstr "" +msgstr "Меню" msgid "Key$Ok" msgstr "Ok" msgid "Key$Back" -msgstr "" +msgstr "Назад" msgid "Key$Left" -msgstr "" +msgstr "Наліво" msgid "Key$Right" -msgstr "" +msgstr "Направо" msgid "Key$Red" -msgstr "" +msgstr "Червона" msgid "Key$Green" -msgstr "" +msgstr "Зелена" msgid "Key$Yellow" -msgstr "" +msgstr "Жовта" msgid "Key$Blue" -msgstr "" +msgstr "Синя" msgid "Key$Info" -msgstr "" +msgstr "Інфо" msgid "Key$Play" -msgstr "" +msgstr "Програвання" msgid "Key$Pause" -msgstr "" +msgstr "Пауза" msgid "Key$Stop" -msgstr "" +msgstr "Стоп" msgid "Key$Record" -msgstr "" +msgstr "Запис" msgid "Key$FastFwd" -msgstr " " +msgstr "Прокрутка вперед" msgid "Key$FastRew" -msgstr " " +msgstr "Прокрутка назад" msgid "Key$Next" -msgstr "" +msgstr "Вперед" msgid "Key$Prev" -msgstr "" +msgstr "Назад" msgid "Key$Power" -msgstr "" +msgstr "Виключити" msgid "Key$Channel+" -msgstr " +" +msgstr "Канал +" msgid "Key$Channel-" -msgstr " -" +msgstr "Канал -" msgid "Key$PrevChannel" -msgstr " " +msgstr "Попередній канал" msgid "Key$Volume+" -msgstr " +" +msgstr "Гучність +" msgid "Key$Volume-" -msgstr " -" +msgstr "Гучність -" msgid "Key$Mute" -msgstr " " +msgstr "Виключити звук" msgid "Key$Audio" -msgstr "" +msgstr "Мова" msgid "Key$Subtitles" -msgstr "" +msgstr "Субтитри" msgid "Key$Schedule" -msgstr "" +msgstr "Телегід" msgid "Key$Channels" -msgstr "" +msgstr "Канали" msgid "Key$Timers" -msgstr "" +msgstr "Таймери" msgid "Key$Recordings" -msgstr "" +msgstr "Записи" msgid "Key$Setup" -msgstr "" +msgstr "Налаштування" msgid "Key$Commands" -msgstr "" +msgstr "Команди" msgid "Key$User1" -msgstr "1" +msgstr "Користувач1" msgid "Key$User2" -msgstr "2" +msgstr "Користувач2" msgid "Key$User3" -msgstr "3" +msgstr "Користувач3" msgid "Key$User4" -msgstr "4" +msgstr "Користувач4" msgid "Key$User5" -msgstr "5" +msgstr "Користувач5" msgid "Key$User6" -msgstr "6" +msgstr "Користувач6" msgid "Key$User7" -msgstr "7" +msgstr "Користувач7" msgid "Key$User8" -msgstr "8" +msgstr "Користувач8" msgid "Key$User9" -msgstr "8" +msgstr "Користувач8" msgid "Disk" -msgstr "" +msgstr "Диск" msgid "free" -msgstr "" +msgstr "вільно" msgid "Free To Air" -msgstr "FTA ()" +msgstr "FTA (незакодовано)" msgid "encrypted" -msgstr "" +msgstr "закодовано" msgid "Edit channel" -msgstr " " +msgstr "Редагування каналу" msgid "Name" -msgstr "" +msgstr "Назва" msgid "Source" -msgstr "" +msgstr "Джерело" msgid "Frequency" -msgstr "" +msgstr "Частота" msgid "Vpid" -msgstr "Vpid ()" +msgstr "Vpid (відео)" msgid "Ppid" msgstr "Ppid" msgid "Apid1" -msgstr "Apid1 ( 1)" +msgstr "Apid1 (аудіо 1)" msgid "Apid2" -msgstr "Apid2 ( 2)" +msgstr "Apid2 (аудіо 2)" msgid "Dpid1" msgstr "Dpid1 (AC3 1)" @@ -268,31 +268,31 @@ msgid "Dpid2" msgstr "Dpid2 (AC3 2)" msgid "Spid1" -msgstr " 1" +msgstr "Субтитри 1" msgid "Spid2" -msgstr " 2" +msgstr "Субтитри 2" msgid "Tpid" -msgstr "Tpid ()" +msgstr "Tpid (телетекст)" msgid "CA" -msgstr "CA ()" +msgstr "CA (декодер)" msgid "Sid" msgstr "Sid" msgid "Polarization" -msgstr "" +msgstr "Поляризація" msgid "System" -msgstr "" +msgstr "Система" msgid "Srate" -msgstr ". " +msgstr "Симв. швидкість" msgid "Inversion" -msgstr "" +msgstr "Інверсія" msgid "CoderateH" msgstr "CoderateH" @@ -301,709 +301,724 @@ msgid "CoderateL" msgstr "CoderateL" msgid "Modulation" -msgstr "" +msgstr "Модуляція" msgid "Bandwidth" -msgstr "" +msgstr "Діапазон" msgid "Transmission" -msgstr "" +msgstr "Передача" msgid "Guard" -msgstr "" +msgstr "Захист" msgid "Hierarchy" -msgstr "" +msgstr "Ієрархія" msgid "Rolloff" -msgstr "" +msgstr "Крен" msgid "Channel settings are not unique!" -msgstr " !" +msgstr "Настройки каналу не єдині!" msgid "Channels" -msgstr "" +msgstr "Канали" msgid "Button$Edit" -msgstr "" +msgstr "Редагувати" msgid "Button$New" -msgstr "" +msgstr "Додати" msgid "Button$Delete" -msgstr "" +msgstr "Видалити" msgid "Button$Mark" -msgstr "" +msgstr "Перемістити" msgid "Channel is being used by a timer!" -msgstr " !" +msgstr "Канал зайнятий таймером!" msgid "Delete channel?" -msgstr " ?" +msgstr "Видалити канал?" msgid "Edit timer" -msgstr " " +msgstr "Налаштування таймера" msgid "Active" -msgstr "" +msgstr "Активовано" msgid "Channel" -msgstr "" +msgstr "Канал" msgid "Day" -msgstr "" +msgstr "День" msgid "Start" -msgstr "" +msgstr "Початок" msgid "Stop" -msgstr "" +msgstr "Кінець" msgid "VPS" -msgstr "VPS " +msgstr "VPS поправка" msgid "Priority" -msgstr "" +msgstr "Пріоритет" msgid "Lifetime" -msgstr " " +msgstr "Строк зберігання" msgid "File" -msgstr "" +msgstr "Файл" msgid "First day" -msgstr " " +msgstr "Перший день" msgid "Timers" -msgstr "" +msgstr "Таймери" msgid "Button$On/Off" -msgstr "/" +msgstr "Вкл/Викл" msgid "Button$Info" -msgstr "" +msgstr "Інфо" msgid "Delete timer?" -msgstr " ?" +msgstr "Видалити таймер?" msgid "Timer still recording - really delete?" -msgstr " - ?" +msgstr "Йде запис по таймеру - дійсно видалити?" msgid "Event" -msgstr "" +msgstr "Передача" msgid "Button$Timer" -msgstr "" +msgstr "Таймер" msgid "Button$Record" -msgstr "" +msgstr "Запис" msgid "Button$Switch" -msgstr "" +msgstr "Переключити" msgid "What's on now?" -msgstr " :" +msgstr "Зараз в ефірі:" msgid "What's on next?" -msgstr " :" +msgstr "Далі в програмі:" msgid "Button$Next" -msgstr "" +msgstr "Далі" msgid "Button$Now" -msgstr "" +msgstr "Зараз" msgid "Button$Schedule" -msgstr "" +msgstr "Програма" msgid "Can't switch channel!" -msgstr " !" +msgstr "Неможливо переключити канал!" #, c-format msgid "Schedule - %s" -msgstr " - %s" +msgstr "Програма - %s" #, c-format msgid "This event - %s" -msgstr " - %s" +msgstr "Ця передача - %s" msgid "This event - all channels" -msgstr " - " +msgstr "Ця передача - всі канали" msgid "All events - all channels" -msgstr " - " +msgstr "Всі передачі - всі канали" #, c-format msgid "Please enter %d digits!" -msgstr " %d " +msgstr "Натисніть %d цифри!" msgid "CAM not responding!" -msgstr "CAM " +msgstr "CAM не відповідає!" msgid "Recording info" -msgstr " " +msgstr "Про запис" msgid "Button$Play" -msgstr "" +msgstr "Програвати" msgid "Button$Rewind" -msgstr "" +msgstr "Назад" msgid "Recordings" -msgstr "" +msgstr "Записи" msgid "Button$Open" -msgstr "" +msgstr "Відкрити" msgid "Commands" -msgstr "" +msgstr "Команди" msgid "Error while accessing recording!" -msgstr " !" +msgstr "Помилка доступу до запису!" msgid "Delete recording?" -msgstr " ?" +msgstr "Витерти запис?" msgid "Error while deleting recording!" -msgstr " !" +msgstr "Помилка видалення запису!" msgid "Recording commands" -msgstr " " +msgstr "Команди запису" msgid "never" -msgstr "" +msgstr "ніколи" msgid "skin dependent" -msgstr " " +msgstr "згідно з стилем" msgid "always" -msgstr "" +msgstr "завжди" msgid "OSD" -msgstr "" +msgstr "OSD меню" msgid "Setup.OSD$Language" -msgstr "" +msgstr "Мова" msgid "Setup.OSD$Skin" -msgstr "" +msgstr "Стиль" msgid "Setup.OSD$Theme" -msgstr "" +msgstr "Тема" msgid "Setup.OSD$Left (%)" -msgstr " (%)" +msgstr "Відступ зліва (%)" msgid "Setup.OSD$Top (%)" -msgstr " (%)" +msgstr "Відступ зверху (%)" msgid "Setup.OSD$Width (%)" -msgstr " (%)" +msgstr "Ширина (%)" msgid "Setup.OSD$Height (%)" -msgstr " (%)" +msgstr "Висота (%)" msgid "Setup.OSD$Message time (s)" -msgstr " ()" +msgstr "Тривалість показу повідомлень (сек)" msgid "Setup.OSD$Use small font" -msgstr " " +msgstr "Використовувати малий фонт" msgid "Setup.OSD$Anti-alias" -msgstr " " +msgstr "Згладжування фонтів" msgid "Setup.OSD$Default font" -msgstr " " +msgstr "Стандартний фонт" msgid "Setup.OSD$Small font" -msgstr " " +msgstr "Малий фонт" msgid "Setup.OSD$Fixed font" -msgstr " " +msgstr "Фіксований фонт" msgid "Setup.OSD$Default font size (%)" -msgstr " (%)" +msgstr "Размір фонта для меню (%)" msgid "Setup.OSD$Small font size (%)" -msgstr " (%)" +msgstr "Размір малого фонта (%)" msgid "Setup.OSD$Fixed font size (%)" -msgstr " (%)" +msgstr "Размір фіксованого фонта (%)" msgid "Setup.OSD$Channel info position" -msgstr " " +msgstr "Положення вікна інформації про канал" msgid "bottom" -msgstr "" +msgstr "внизу" msgid "top" -msgstr "" +msgstr "вверху" msgid "Setup.OSD$Channel info time (s)" -msgstr " ()" +msgstr "Показ інформації про канал (сек)" msgid "Setup.OSD$Info on channel switch" -msgstr " " +msgstr "Показ канал-інфо при переключанні " msgid "Setup.OSD$Timeout requested channel info" -msgstr " " +msgstr "Інформацію про канал закрити" msgid "Setup.OSD$Scroll pages" -msgstr " " +msgstr "Прокрутка сторінок меню" msgid "Setup.OSD$Scroll wraps" -msgstr " " +msgstr "Циклічна прокрутка" msgid "Setup.OSD$Menu key closes" -msgstr " " +msgstr "Кнопку Меню закрити" msgid "Setup.OSD$Recording directories" -msgstr " " +msgstr "Каталоги зберігання записів" msgid "EPG" -msgstr "" +msgstr "Телегід" msgid "Button$Scan" -msgstr "" +msgstr "Сканувати" msgid "Setup.EPG$EPG scan timeout (h)" -msgstr " ()" +msgstr "Затримка сканування телегіда (ч)" msgid "Setup.EPG$EPG bugfix level" -msgstr " " +msgstr "Рівень корекції помилок" msgid "Setup.EPG$EPG linger time (min)" -msgstr " ()" +msgstr "Зберігання застарілих даних (хв)" msgid "Setup.EPG$Set system time" -msgstr " " +msgstr "Встановити системий час" msgid "Setup.EPG$Use time from transponder" -msgstr " " +msgstr "Використати час транспондера" #. TRANSLATORS: note the plural! msgid "Setup.EPG$Preferred languages" -msgstr " ()" +msgstr "Бажані мови (телегід)" #. TRANSLATORS: note the singular! msgid "Setup.EPG$Preferred language" -msgstr "" +msgstr "Бажана мова (телегід)" msgid "pan&scan" -msgstr "" +msgstr "панорамувати" msgid "letterbox" -msgstr "" +msgstr "зменшувати" msgid "center cut out" -msgstr " " +msgstr "обрізати по боках" msgid "no" -msgstr "" +msgstr "ні" msgid "names only" -msgstr " " +msgstr "тільки назви" msgid "PIDs only" -msgstr " PID" +msgstr "Тільки PIDи" msgid "names and PIDs" -msgstr " PID" +msgstr "назви і PIDи" msgid "add new channels" -msgstr " " +msgstr "додати нові канали" msgid "add new transponders" -msgstr " " +msgstr "додати нові транспондери" msgid "DVB" msgstr "DVB" msgid "Setup.DVB$Primary DVB interface" -msgstr " DVB-" +msgstr "Основний DVB-пристрій" msgid "Setup.DVB$Video format" -msgstr " " +msgstr "Формат відео" msgid "Setup.DVB$Video display format" -msgstr " " +msgstr "Формат зображення відео" msgid "Setup.DVB$Use Dolby Digital" -msgstr " Dolby Digital" +msgstr "Використовувати Dolby Digital" msgid "Setup.DVB$Update channels" -msgstr " " +msgstr "Оновлювати настройки каналів" msgid "Setup.DVB$Audio languages" -msgstr " ()" +msgstr "Бажані мови (звук)" msgid "Setup.DVB$Audio language" -msgstr "" +msgstr "Мова аудіо" msgid "Setup.DVB$Display subtitles" -msgstr " " +msgstr "Показувати субтитри" msgid "Setup.DVB$Subtitle languages" -msgstr " " +msgstr "Мови субтитрів" msgid "Setup.DVB$Subtitle language" -msgstr " " +msgstr "Мова субтитрів" msgid "Setup.DVB$Subtitle offset" -msgstr " " +msgstr "Відступ субтитрів" msgid "Setup.DVB$Subtitle foreground transparency" -msgstr " " +msgstr "Прозорість переднього плану субтитрів" msgid "Setup.DVB$Subtitle background transparency" -msgstr " " +msgstr "Прозорість заднього плану субтитрів" msgid "LNB" -msgstr "" +msgstr "Конвертер" msgid "Setup.LNB$Use DiSEqC" -msgstr " DiSEqC" +msgstr "Використовувати DiSEqC" msgid "Setup.LNB$SLOF (MHz)" -msgstr " (SLOF) ()" +msgstr "Частота переключання (SLOF) (МГц)" msgid "Setup.LNB$Low LNB frequency (MHz)" -msgstr " ()" +msgstr "Нижня частота конвертера (МГц)" msgid "Setup.LNB$High LNB frequency (MHz)" -msgstr " ()" +msgstr "Верхня частота конвертера (МГц)" msgid "CAM reset" -msgstr " CAM" +msgstr "Перезавантаження CAM" msgid "CAM present" -msgstr "CAM " +msgstr "CAM присутній" msgid "CAM ready" -msgstr "CAM " +msgstr "CAM готовий" msgid "CAM" -msgstr " " +msgstr "CAM (Умовний доступ)" msgid "Button$Menu" -msgstr "" +msgstr "Меню" msgid "Button$Reset" -msgstr "" +msgstr "Скинути" msgid "Opening CAM menu..." -msgstr " (CAM)" +msgstr "Відкриваю меню CAM-модуля..." msgid "Can't open CAM menu!" -msgstr " CAM- !" +msgstr "Меню CAM-модуля недоступне!" msgid "CAM is in use - really reset?" -msgstr "CAM - ?" +msgstr "CAM використовується - дійсно перезавантажити?" msgid "Can't reset CAM!" -msgstr " CAM-!" +msgstr "Помилка перезапуску CAM-модуля!" + +msgid "do not pause live video" +msgstr "не призупиняти перегляд" + +msgid "confirm pause live video" +msgstr "підтвердити призупинення перегляду" + +msgid "pause live video" +msgstr "призупинити перегляд" msgid "Recording" -msgstr "" +msgstr "Запис" msgid "Setup.Recording$Margin at start (min)" -msgstr " ()" +msgstr "Випередження початку запису (хв)" msgid "Setup.Recording$Margin at stop (min)" -msgstr " ()" +msgstr "Запізнення зупинки запису (хв)" msgid "Setup.Recording$Primary limit" -msgstr ". . " +msgstr "Мін. пріоритет захоплення осн. пристрою" msgid "Setup.Recording$Default priority" -msgstr " " +msgstr "Пріоритет таймера по замовчуванню" msgid "Setup.Recording$Default lifetime (d)" -msgstr " ()" +msgstr "Строк зберігання запису по замовчуванню (дні)" + +msgid "Setup.Recording$Pause key handling" +msgstr "Обробка клавіші відкладеного перегляду" msgid "Setup.Recording$Pause priority" -msgstr " " +msgstr "Пріоритет відкладеного перегляду" msgid "Setup.Recording$Pause lifetime (d)" -msgstr " ()" +msgstr "Зберігання відкладеного перегляду (дні)" msgid "Setup.Recording$Use episode name" -msgstr " " +msgstr "Використовувати назву епізоду" msgid "Setup.Recording$Use VPS" -msgstr " VPS" +msgstr "Використовувати сигнали VPS" msgid "Setup.Recording$VPS margin (s)" -msgstr " VPS ()" +msgstr "Буферний час VPS (сек)" msgid "Setup.Recording$Mark instant recording" -msgstr " " +msgstr "Помітити зроблені вручну записи" msgid "Setup.Recording$Name instant recording" -msgstr " " +msgstr "Схема найменувань ручних записів" msgid "Setup.Recording$Instant rec. time (min)" -msgstr " ()" +msgstr "Протяжність ручного запису (хв)" msgid "Setup.Recording$Max. video file size (MB)" -msgstr ". ()" +msgstr "Макс. размір відеофайлу (Мб)" msgid "Setup.Recording$Split edited files" -msgstr " " +msgstr "Ділити відредаговані файли" msgid "Replay" -msgstr "" +msgstr "Перегляд" msgid "Setup.Replay$Multi speed mode" -msgstr " " +msgstr "Багатошвидкісний режим" msgid "Setup.Replay$Show replay mode" -msgstr " " +msgstr "Віображати режим перегляду" msgid "Setup.Replay$Resume ID" -msgstr "ID " +msgstr "ID перегляду" msgid "Miscellaneous" -msgstr "" +msgstr "Різне" msgid "Setup.Miscellaneous$Min. event timeout (min)" -msgstr ". ()" +msgstr "Мін. час очікування події (хв)" msgid "Setup.Miscellaneous$Min. user inactivity (min)" -msgstr ". ()" +msgstr "Мін. час очікування вводу (хв)" msgid "Setup.Miscellaneous$SVDRP timeout (s)" -msgstr " ' SVDRP ()" +msgstr "Затримкка обриву з'єднання SVDRP (сек)" msgid "Setup.Miscellaneous$Zap timeout (s)" -msgstr " ()" +msgstr "Затримка переключання каналу (сек)" msgid "Setup.Miscellaneous$Channel entry timeout (ms)" -msgstr " (ms)" +msgstr "Затримка часу для впровадження каналу (ms)" msgid "Setup.Miscellaneous$Initial channel" -msgstr " " +msgstr "Канал при включенні" msgid "Setup.Miscellaneous$as before" -msgstr " " +msgstr "як раніше" msgid "Setup.Miscellaneous$Initial volume" -msgstr " " +msgstr "Гучність при включенні" msgid "Setup.Miscellaneous$Emergency exit" -msgstr " " +msgstr "Аварійний вихід" msgid "Plugins" -msgstr " " +msgstr "Модулі розширення" msgid "This plugin has no setup parameters!" -msgstr " !" +msgstr "Модуль не має параметрів налаштувань!" msgid "Setup" -msgstr "" +msgstr "Налаштування" msgid "Restart" -msgstr "" +msgstr "Перезапустити" msgid "Really restart?" -msgstr " ?" +msgstr "Дійсно перезапустити?" #. TRANSLATORS: note the leading and trailing blanks! msgid " Stop recording " -msgstr " " +msgstr " Зупинити запис " msgid "Schedule" -msgstr "" +msgstr "Телегід" msgid "VDR" msgstr "VDR" #. TRANSLATORS: note the leading blank! msgid " Stop replaying" -msgstr " " +msgstr " Зупинити програвання" msgid "Button$Audio" -msgstr "" +msgstr "Мова аудіо" msgid "Button$Pause" -msgstr "" +msgstr "Пауза" msgid "Button$Stop" -msgstr "" +msgstr "Стоп" msgid "Button$Resume" -msgstr "" +msgstr "Продовжити" #. TRANSLATORS: note the leading blank! msgid " Cancel editing" -msgstr " " +msgstr " Перервати монтаж запису" msgid "Stop recording?" -msgstr " ?" +msgstr "Припинити запис?" msgid "Cancel editing?" -msgstr " ?" +msgstr "Перервати редактування?" msgid "No audio available!" -msgstr " !" +msgstr "Відсутній звук!" msgid "No subtitles" -msgstr " " +msgstr "Немає субтитрів" msgid "Button$Subtitles" -msgstr "" +msgstr "Субтитри" msgid "No subtitles available!" -msgstr " !" +msgstr "Субтитрів немає!" msgid "Not enough disk space to start recording!" -msgstr " " +msgstr "Недостатньо місця на диску для початку запису" msgid "No free DVB device to record!" -msgstr " DVB- !" +msgstr "Немає вільного DVB-пристрою для запису!" msgid "Pausing live video..." -msgstr " ..." +msgstr "Режим відкладеного перегляду..." #. TRANSLATORS: note the trailing blank! msgid "Jump: " -msgstr ": " +msgstr "Перейти: " msgid "No editing marks defined!" -msgstr " !" +msgstr "Не задано міток для монтажу!" msgid "Can't start editing process!" -msgstr " !" +msgstr "Неможливо почати монтаж запису!" msgid "Editing process started" -msgstr " " +msgstr "Монтаж запису почався" msgid "Editing process already active!" -msgstr " !" +msgstr "Процес відеомонтажу вже запущений!" msgid "FileNameChars$ abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&" -msgstr " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@" +msgstr " abcdefghijklmnopqrstuvwxyzабвгдеєёжзиіїйклмнопрстуфхцчшщъыьюя0123456789-.#~,/_@" msgid "yes" -msgstr "" +msgstr "так" msgid "CharMap$ 0\t-.,1#~\\^$[]|()*+?{}/:%@&\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9" -msgstr " 0\t-.#~,/_@1\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9" +msgstr " 0\t-.#~,/_@1\tabcабвг2\tdefдеєёжз3\tghiиіїйкл4\tjklмно5\tmnoпрс6\tpqrsтуфх7\ttuvцчшщъ8\twxyzыьэюя9" msgid "Button$ABC/abc" -msgstr "/" +msgstr "АБВ/абв" msgid "Button$Overwrite" -msgstr "" +msgstr "Заміна" msgid "Button$Insert" -msgstr "" +msgstr "Вставка" msgid "Plugin" -msgstr "" +msgstr "Модуль" msgid "Up/Dn for new location - OK to move" -msgstr " \"\"/\"\" , \"OK\"" +msgstr "Натискайте \"Вверх\"/\"Вниз\" для вибору позиції, а потім \"OK\"" msgid "Channel locked (recording)!" -msgstr " ( )!" +msgstr "Канал заблоковано (йде запис)!" msgid "Low disk space!" -msgstr " !" +msgstr "Недостатньо місця на диску!" msgid "Can't shutdown - option '-s' not given!" -msgstr " - '-s'!" +msgstr "Виключенння неможливе - не задано параметр '-s'!" msgid "Editing - shut down anyway?" -msgstr " - ?" +msgstr "Йде монтаж - дійсно виключити?" msgid "Recording - shut down anyway?" -msgstr " - ?" +msgstr "Йде запис - дійсно виключити?" #, c-format msgid "Recording in %ld minutes, shut down anyway?" -msgstr " %ld - ?" +msgstr "Через %ld хвилин почнеться запис - дійсно виключити?" msgid "shut down anyway?" -msgstr " ?" +msgstr "дійсно виключити?" #, c-format msgid "Plugin %s wakes up in %ld min, continue?" -msgstr "Plugin %s %ld - ?" +msgstr "Модуль %s включиться через %ld хвилин - продовжити?" msgid "Editing - restart anyway?" -msgstr " - ?" +msgstr "Процес монтажу - дійсно перезапустити?" msgid "Recording - restart anyway?" -msgstr " - ?" +msgstr "Йде запис - дійсно перезапустити?" msgid "restart anyway?" -msgstr " ?" +msgstr "дійсно перезапустити?" #. TRANSLATORS: note the trailing blank! msgid "Volume " -msgstr " " +msgstr "Гучність " msgid "Classic VDR" -msgstr "" +msgstr "Класичний VDR" msgid "ST:TNG Panels" -msgstr "ST:TNG " +msgstr "ST:TNG панелі" #. TRANSLATORS: the first character of each weekday, beginning with monday msgid "MTWTFSS" -msgstr "ǿ" +msgstr "ПВСЧПСН" #. TRANSLATORS: abbreviated weekdays, beginning with monday (must all be 3 letters!) msgid "MonTueWedThuFriSatSun" -msgstr "ݲҿѽ" +msgstr "ПонВтрСрдЧтвПтнСубНед" msgid "Monday" -msgstr "" +msgstr "Понеділок" msgid "Tuesday" -msgstr "" +msgstr "Вівторок" msgid "Wednesday" -msgstr "" +msgstr "Середа" msgid "Thursday" -msgstr "" +msgstr "Четвер" msgid "Friday" -msgstr "'" +msgstr "П'ятниця" msgid "Saturday" -msgstr "" +msgstr "Субота" msgid "Sunday" -msgstr "" +msgstr "Неділя" msgid "Upcoming recording!" -msgstr " " +msgstr "Запис скоро почнеться" + +msgid "Pause live video?" +msgstr "Режим відкладеного перегляду..." msgid "Recording started" -msgstr " " +msgstr "Запис почався" msgid "VDR will shut down later - press Power to force" -msgstr "VDR - Power " +msgstr "VDR виключиться ппізніше - натисніть Power для пришвидшення" msgid "Press any key to cancel shutdown" -msgstr " - ." +msgstr "Натисніть будь-яку кнопку для відміни виключення." msgid "Switching primary DVB..." -msgstr " DVB-..." +msgstr "Зміна основного DVB-пристрою..." msgid "Editing process failed!" -msgstr " !" +msgstr "Помилка під час монтажу запису!" msgid "Editing process finished" -msgstr " " +msgstr "Монтаж закінчено" msgid "Press any key to cancel restart" -msgstr " - " +msgstr "Натисніть будь-яку кнопку для відміни перезавантаження" #, c-format msgid "VDR will shut down in %s minutes" -msgstr "VDR %s " +msgstr "VDR виключиться через %s хвилин" diff --git a/po/zh_CN.po b/po/zh_CN.po index 92b20a7..f276775 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" -"POT-Creation-Date: 2008-12-14 16:10+0100\n" +"POT-Creation-Date: 2009-05-21 13:18+0200\n" "PO-Revision-Date: 2008-03-21 08:44+0800\n" "Last-Translator: Nan Feng <nfgx@21cn.com>\n" "Language-Team: Chinese\n" @@ -707,6 +707,15 @@ msgstr "CAM正在使用-是否重启?" msgid "Can't reset CAM!" msgstr "不能重启CAM" +msgid "do not pause live video" +msgstr "" + +msgid "confirm pause live video" +msgstr "" + +msgid "pause live video" +msgstr "" + msgid "Recording" msgstr "记录中" @@ -725,6 +734,9 @@ msgstr "默认优先" msgid "Setup.Recording$Default lifetime (d)" msgstr "默认终身 (d)" +msgid "Setup.Recording$Pause key handling" +msgstr "" + msgid "Setup.Recording$Pause priority" msgstr "暂停优先" @@ -986,6 +998,9 @@ msgstr "星期天" msgid "Upcoming recording!" msgstr "即将的记录!" +msgid "Pause live video?" +msgstr "" + msgid "Recording started" msgstr "记录开始!" @@ -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; |