summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS44
-rw-r--r--HISTORY84
-rw-r--r--MANUAL14
-rw-r--r--PLUGINS/src/dvbhddevice/dvbhdffdevice.h6
-rw-r--r--PLUGINS/src/dvbsddevice/dvbsdffdevice.h6
-rw-r--r--PLUGINS/src/dvbsddevice/dvbsdffosd.h4
-rw-r--r--config.c26
-rw-r--r--config.h12
-rw-r--r--cutter.c70
-rw-r--r--device.c6
-rw-r--r--device.h29
-rw-r--r--dvbdevice.c10
-rw-r--r--eit.c37
-rw-r--r--interface.c3
-rw-r--r--keys.c3
-rw-r--r--keys.h3
-rw-r--r--menu.c182
-rw-r--r--menu.h3
-rw-r--r--osd.h4
-rw-r--r--osdbase.c13
-rw-r--r--osdbase.h3
-rw-r--r--pat.c4
-rw-r--r--po/ar.po17
-rw-r--r--po/ca_ES.po17
-rw-r--r--po/cs_CZ.po17
-rw-r--r--po/da_DK.po17
-rw-r--r--po/de_DE.po17
-rw-r--r--po/el_GR.po17
-rw-r--r--po/es_ES.po17
-rw-r--r--po/et_EE.po17
-rw-r--r--po/fi_FI.po17
-rw-r--r--po/fr_FR.po17
-rw-r--r--po/hr_HR.po17
-rw-r--r--po/hu_HU.po17
-rw-r--r--po/it_IT.po17
-rw-r--r--po/lt_LT.po17
-rw-r--r--po/mk_MK.po63
-rw-r--r--po/nl_NL.po17
-rw-r--r--po/nn_NO.po17
-rw-r--r--po/pl_PL.po17
-rw-r--r--po/pt_PT.po17
-rw-r--r--po/ro_RO.po17
-rw-r--r--po/ru_RU.po17
-rw-r--r--po/sk_SK.po17
-rw-r--r--po/sl_SI.po17
-rw-r--r--po/sr_SR.po17
-rw-r--r--po/sv_SE.po17
-rw-r--r--po/tr_TR.po17
-rw-r--r--po/uk_UA.po17
-rw-r--r--po/zh_CN.po17
-rw-r--r--recording.c28
-rw-r--r--remux.c45
-rw-r--r--remux.h12
-rw-r--r--skins.h49
-rw-r--r--svdrp.c8
-rw-r--r--timers.c10
-rw-r--r--timers.h6
-rw-r--r--tools.c39
-rw-r--r--tools.h10
-rw-r--r--vdr.c8
60 files changed, 943 insertions, 360 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 9e2317f..46a4c62 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -229,6 +229,8 @@ Stefan Huelswitt <s.huelswitt@gmx.de>
for a patch that was used to implement the --localedir option
for reporting a problem with updating CA descriptors in transfer mode on full
featured DVB cards
+ for pointing out a bug in handling lowercase polarization characters in channel
+ definitions if no DiSEqC is used
Ulrich Rder <roeder@efr-net.de>
for pointing out that there are channels that have a symbol rate higher than 27500
@@ -1774,6 +1776,8 @@ Lucian Muresan <lucianm@users.sourceforge.net>
for reporting duplicate texts in i18n.c
for suggesting to use 'gettext' for internationalization
for exporting some libsi functions
+ for suggesting to add functions to cDevice that allow derived output devices to
+ implement scaling the video to a given size and location
Mattias Grnlund <Mattias@Gronlund.net>
for pointing out a missing cleanup at program exit in case there is a problem
@@ -1976,6 +1980,7 @@ Ville Skytt <ville.skytta@iki.fi>
for pointing out that the variable HasSnr was unused in cDvbTuner::GetSignalQuality()
for fixing cConfig::Load() for g++ version 4.7.0
for fixing some typos in HISTORY and CONTRIBUTORS
+ for fixing some spellings in osd.h and svdrp.c
Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next
@@ -2224,6 +2229,10 @@ Andr Weidemann <Andre.Weidemann@web.de>
for suggesting that the primary device should only be avoided for recording if
it is an old SD full featured card
for his support in using convert/ffmpeg in the pic2mpg script of the 'pictures' plugin
+ for requesting a way of getting to the very end of an edited recording, since version
+ 1.7.32 no longer generates a mark at that point
+ for suggesting to automatically go into Pause mode if an editing mark is set during
+ replay
Jrgen Schilling <juergen_schilling@web.de>
for reporting that color buttons were displayed in the recording info menu if it
@@ -2265,6 +2274,8 @@ Alexander Hans <cleditor@arcor.de>
for reporting that the "'1' for encrypted radio channels" part in the description
of the VPID in vdr.5 is obsolete
for a patch that was used to implement storing the channel name in info.vdr
+ for making the SVDRP command HITK discard any keys if the remote control is currently
+ turned off
Daniel Karsubka <dkar@gmx.de>
for suggesting to write the epg.data file when VDR exits
@@ -2626,6 +2637,9 @@ Sundararaj Reel <sundararaj.reel@googlemail.com>
that might inadvertently be called with a 'char *' as the second argument on some
compilers and cause a crash
for reporting a possible memory leak in SI::StructureLoop::getNextAsPointer()
+ for making the TDT EIT filter always be set, because otherwise when turning on using
+ the transponder time in the Setup menu, it would only be used after the next restart
+ of VDR
Ales Jurik <ajurik@quick.cz>
for reporting broken SI data on Czech/Slovak channels after changing the default
@@ -2728,6 +2742,8 @@ Manuel Reimer <Manuel.Reimer@gmx.de>
contains only the address of the local host
for a patch that was used as a base for making editing marks be updated every 10
seconds during replay
+ for suggesting to synchronize system time to the transponder time using adjtime() in
+ order to avoid discontinuities
Rene van den Braken <rene@vandenbraken.name>
for reporting a bug in writing the PCR pid into the PMT in
@@ -2760,6 +2776,8 @@ Lars Hanisch <dvb@flensrocker.de>
for a patch that was used to implement SCR (Satellite Channel Routing)
for implementing the SVDRP command 'UPDR'
for reporting that the SVDRP command UPDR didn't update the global recordings list
+ for fixing a typo in skins.h
+ for fixing some #include statements in plugins to use <vdr/...> instead of "vdr/..."
Alex Lasnier <alex@fepg.org>
for adding tuning support for ATSC devices
@@ -2834,6 +2852,7 @@ Juergen Lock <vdr-l@jelal.kn-bremen.de>
for fixing cUnbufferedFile::Seek() in case it is compiled without USE_FADVISE
for reporting a problem with EPG scan on systems with only a single DVB device that
use software output
+ for fixing calling iconv_close() only with a valid iconv_t value
Sergiu Dotenco <sergiu.dotenco@googlemail.com>
for reporting a missing initialization in sDvbSpuRect
@@ -2958,7 +2977,7 @@ Oliver Schinagl <oliver@schinagl.nl>
for a patch that was used to implement the setup options "OSD/Color key [0123]"
Andrey Pridvorov <ua0lnj@bk.ru>
- for reporting a problem with detecting frames in MPEG 4 video, and pointing towards
+ for reporting a problem with detecting frames in H.264 video, and pointing towards
a better way of doing it
Jens Vogel <jens.vogel@akjv.de>
@@ -2970,6 +2989,29 @@ Sren Moch <smoch@web.de>
for a patch that was used to move cleaning up the EPG data and writing the epg.data
file into a separate thread to avoid sluggish response to user input on slow systems
for fixing sorting folders before recordings in case of UTF-8
+ for reporting that cCuttingThread::GetPendingPackets() should get only non-video
+ packets
+ for pointing out that the name H264 should be used instead of MPEG4
+ for pointing out that the cutter should only increment the TS continuity counter for
+ packets that have a payload
+ for pointing out that when adjusting the DTS values in the cutter, it hase to compensate
+ for dropped B-frames
+ for simplifying calculating the PTS offset in cPtsFixer::Fix() and fixing the overflow
+ handling of PCR values
Peter Mnster <pmlists@free.fr>
for fixing 'make install' to not overwrite existing configuration files
+
+Mike Hay <mike.hay@linenshorts.com>
+ for reporting a problem with handling the case of the polarization character in
+ channel definitions if no DiSEqC is used
+
+Stefan Hofmann <stefan.hofmann@t-online.de>
+ for suggesting to implement support for remote controls that only have a combined
+ "Play/Pause" key instead of separate keys for "Play" and "Pause"
+
+Stefan Blochberger <Stefan.Blochberger@gmx.de>
+ for suggesting to automatically display the progress display whenever replay of a
+ recording is started
+ for suggesting that floating point numbers presented to the user shall be displayed
+ in the way defined by the current locale
diff --git a/HISTORY b/HISTORY
index ff1681b..51d0681 100644
--- a/HISTORY
+++ b/HISTORY
@@ -7245,7 +7245,7 @@ Video Disk Recorder Revision History
- Decreased the ring buffer put/get trigger sizes from 1/3 to 1/10.
- The script given to VDR with the '-r' option is now also called whenever a
recording is deleted (thanks to Alexander Wenzel).
-- Improved detecting frames in MPEG 4 video (reported by Andrey Pridvorov).
+- Improved detecting frames in H.264 video (reported by Andrey Pridvorov).
- cPatPmtParser::ParsePmt() now also recognizes stream type 0x81 as "AC3", so that
recordings that have been converted from the old PES format to TS can be played
(suggested by Jens Vogel).
@@ -7305,7 +7305,7 @@ Video Disk Recorder Revision History
Sundararaj Reel).
- Fixed handling timers in case an event is modified and "phased out" while the timer
is recording.
-- Improved frame detection by parsing just far enough into the MPEG-4 NAL units to get
+- Improved frame detection by parsing just far enough into the H.264 NAL units to get
the necessary information about frames and slices.
- The initial syncing of the frame detector is now done immediately after the first
complete GOP has been seen. This makes recordings and especially pausing live video
@@ -7334,7 +7334,85 @@ Video Disk Recorder Revision History
simply mark a position, but have no effect on the actual cutting process.
- When positioned at an offset where two (or more) editing marks are placed on top
of each other, the '4' key moves the first one of them to the left, while the '6'
- key moves the last one of them to the right. The '7' and '9' key handle multiple
+ key moves the last one of them to the right. The '7' and '9' keys handle multiple
marks at the same place as if it were one single mark.
- Modified editing marks are now written to disk whenever the replay progress display
gets hidden (thanks to Christoph Haubrich).
+
+2012-12-08: Version 1.7.33
+
+- In order to be able to play TS recordings from other sources, in which there is
+ more than one PMT PID in the PAT, 'int cPatPmtParser::PatPmt(void)' has been changed
+ to 'bool cPatPmtParser::IsPatPmt(int Pid)'.
+- Fixed learning remote control keys with the LCARS skin.
+- Updated the Macedonian OSD texts (thanks to Dimitar Petrovski).
+- Fixed getting only non-video packets in cCuttingThread::GetPendingPackets() (reported
+ by Sren Moch).
+- Changed all occurrences of MPEG4 to H264 (pointed out by Sren Moch).
+- Fixed getting the number of editing sequences in case the last sequence has no actual
+ end mark.
+- The cutter now only increments the TS continuity counter for packets that have a
+ payload (pointed out by Sren Moch).
+- Fixed adjusting the DTS values in the cutter, to compensate for dropped B-frames
+ (pointed out by Sren Moch).
+- Fixed a typo in skins.h (thanks to Lars Hanisch).
+- Simplified calculating the PTS offset in cPtsFixer::Fix() and fixed the overflow
+ handling of PCR values (thanks to Sren Moch).
+- Fixed calling iconv_close() only with a valid iconv_t value (thanks to Juergen Lock).
+- Fixed faulty opening of the Recordings menu when pressing the Play key during normal
+ live viewing mode in case there is a "last viewed" recording.
+- Fixed some #include statements in plugins to use <vdr/...> instead of "vdr/..."
+ (thanks to Lars Hanisch).
+- Fixed some spellings in osd.h and svdrp.c (thanks to Ville Skytt).
+- Fixed handling lowercase polarization characters in channel definitions if no DiSEqC
+ is used (reported by Mike Hay, actual bug pointed out by Stefan Huelswitt).
+- Synchronizing system time to the transponder time is now done using adjtime() in order
+ to avoid discontinuities (suggested by Manuel Reimer). If the time difference is more
+ than 10 seconds, stime() is still used to do the initial sync.
+- The '7' and '9' keys now jump to the very beginning or end, respectively, of the
+ recording, even if there is no mark set at that point (following a request from
+ Andre Weidemann).
+- Now always setting the TDT EIT filter, because otherwise when turning on using the
+ transponder time in the Setup menu, it would only be used after the next restart
+ of VDR (thanks to Sundararaj Reel).
+- The new functions cDevice::CanScaleVideo() and cDevice::ScaleVideo() can be used by
+ derived output devices to implement scaling the video to a given size and location
+ (based on a suggestion by Lucian Muresan).
+- The SVDRP command HITK now discards any keys if the remote control is currently
+ turned off (thanks to Alexander Hans).
+- The new remote control key "Play/Pause" can be used with remote controls that don't
+ have separate keys for "Play" and "Pause", but rather have a single key for both
+ functions (thanks to Stefan Hofmann for suggesting to implement support for such
+ remote controls).
+- The new option "Setup/Replay/Pause on mark set" can be used to activate automatically
+ going into Pause mode if an editing mark is set during replay (suggested by Andre
+ Weidemann).
+- When regenerating the index of a recording, the frame rate stored in the info file
+ is now automatically fixed if it differs from the value detected by the frame
+ detector.
+- Fixed creating the edited version directory if a relative file name is given in
+ the call to 'vdr --edit' (the '/video' part was stripped from the given file name
+ even if it wasn't there).
+- The new option "Setup/Replay/Progress display time" can be used to activate
+ automatically displaying the progress display whenever replay of a recording is
+ started (suggested by Stefan Blochberger).
+- Changed reading and writing of floating point numbers into configuration files to
+ make it independent of the decimal point used in the current locale. All calls to
+ atof() have been replaced with the new function atod(), which makes sure the string
+ representation of a floating point number using a '.' as decimal point will be
+ handled correctly, even if the locale in use expects a ',' as the decimal point.
+ Plugins that read floating point numbers from their own configuration files will
+ also need to use atod() for this, or use a method of their own (this is not necessary
+ if values are stored in VDR's setup.conf file, because VDR takes care of this).
+ The reason for these changes is that floating point numbers presented to the user
+ shall be displayed in the way defined by the current locale (suggested by Stefan
+ Blochberger).
+ If you use plugins that store floating point values in configuration files of their
+ own and have not yet been adapted to this change, you should set
+ export LC_NUMERIC=C
+ before running VDR. Otherwise your plugin's configuration data may not be read or
+ written correctly.
+- The new functions SetItemEvent(), SetItemTimer(), SetItemChannel() and
+ SetItemRecording() of the cSkinDisplayMenu class can be reimplemented by skin
+ plugins to display these items in a more elaborate way than just a simple line of
+ text.
diff --git a/MANUAL b/MANUAL
index 272659c..2337d19 100644
--- a/MANUAL
+++ b/MANUAL
@@ -39,6 +39,7 @@ Version 1.6
Info display information on the currently viewed programme or recording,
or on the current item in a menu
+ Play/Pause combined key to resume or pause replay, or pause live video
Play resume normal replay
Pause pause replay or live video
Stop stop replay
@@ -365,7 +366,9 @@ Version 1.6
- 4, 6 Move an editing mark back and forward. You need to first jump to
an editing mark for this to work.
- 7, 9 Jump back and forward between editing marks. Replay goes into still
- mode after jumping to a mark.
+ mode after jumping to a mark. If the current position is at the
+ first or last mark, or if there are no marks at all, these keys
+ jump to the very beginning or end, respectively, of the recording.
- 8 Positions replay at a point 3 seconds before the current or next
"begin" mark and starts replay.
- 2 Start the actual cutting process.
@@ -879,6 +882,15 @@ Version 1.6
Defines whether the replay progress display shows the
remaining time or the total length of the recording.
+ Progress display time (s) = 0
+ Defines how long (in seconds) the progress display is shown
+ when replay of a recording is started. The default value of 0
+ means that it will not be shown.
+
+ Pause replay when setting mark = no
+ Defines whether the player automatically goes into Pause
+ mode when setting an editing mark.
+
Resume ID = 0 Defines an additional ID that can be used in a multi user
environment, so that every user has his/her own resume
files for each recording. The valid range is 0...99, with
diff --git a/PLUGINS/src/dvbhddevice/dvbhdffdevice.h b/PLUGINS/src/dvbhddevice/dvbhdffdevice.h
index 344f3dc..0f18fa3 100644
--- a/PLUGINS/src/dvbhddevice/dvbhdffdevice.h
+++ b/PLUGINS/src/dvbhddevice/dvbhdffdevice.h
@@ -3,15 +3,15 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbhdffdevice.h 1.8 2012/11/05 08:49:29 kls Exp $
+ * $Id: dvbhdffdevice.h 1.9 2012/12/03 13:43:55 kls Exp $
*/
#ifndef __DVBHDFFDEVICE_H
#define __DVBHDFFDEVICE_H
#include "hdffcmd.h"
-#include "vdr/dvbdevice.h"
-#include "vdr/dvbspu.h"
+#include <vdr/dvbdevice.h>
+#include <vdr/dvbspu.h>
/// The cDvbHdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
diff --git a/PLUGINS/src/dvbsddevice/dvbsdffdevice.h b/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
index bd74cde..79b4e3d 100644
--- a/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
+++ b/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
@@ -3,14 +3,14 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbsdffdevice.h 2.13 2011/08/27 11:32:42 kls Exp $
+ * $Id: dvbsdffdevice.h 2.14 2012/12/03 13:43:55 kls Exp $
*/
#ifndef __DVBSDFFDEVICE_H
#define __DVBSDFFDEVICE_H
-#include "vdr/dvbdevice.h"
-#include "vdr/dvbspu.h"
+#include <vdr/dvbdevice.h>
+#include <vdr/dvbspu.h>
/// The cDvbSdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
diff --git a/PLUGINS/src/dvbsddevice/dvbsdffosd.h b/PLUGINS/src/dvbsddevice/dvbsdffosd.h
index 8a1bc62..bf12343 100644
--- a/PLUGINS/src/dvbsddevice/dvbsdffosd.h
+++ b/PLUGINS/src/dvbsddevice/dvbsdffosd.h
@@ -3,13 +3,13 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbsdffosd.h 2.1 2009/12/29 11:52:05 kls Exp $
+ * $Id: dvbsdffosd.h 2.2 2012/12/03 13:43:55 kls Exp $
*/
#ifndef __DVBSDFFODF_H
#define __DVBSDFFODF_H
-#include "vdr/osd.h"
+#include <vdr/osd.h>
class cDvbOsdProvider : public cOsdProvider {
private:
diff --git a/config.c b/config.c
index 383bb61..af0fe3d 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 2.28 2012/09/15 11:52:03 kls Exp $
+ * $Id: config.c 2.31 2012/12/06 09:00:23 kls Exp $
*/
#include "config.h"
@@ -458,6 +458,8 @@ cSetup::cSetup(void)
MultiSpeedMode = 0;
ShowReplayMode = 0;
ShowRemainingTime = 0;
+ ProgressDisplayTime = 0;
+ PauseOnMarkSet = 0;
ResumeID = 0;
CurrentChannel = -1;
CurrentVolume = MAXVOLUME;
@@ -507,7 +509,7 @@ void cSetup::Store(const char *Name, int Value, const char *Plugin)
void cSetup::Store(const char *Name, double &Value, const char *Plugin)
{
- Store(Name, cString::sprintf("%f", Value), Plugin);
+ Store(Name, dtoa(Value), Plugin);
}
bool cSetup::Load(const char *FileName)
@@ -628,24 +630,24 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "UseDolbyDigital")) UseDolbyDigital = atoi(Value);
else if (!strcasecmp(Name, "ChannelInfoPos")) ChannelInfoPos = atoi(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); ChkDoublePlausibility(OSDWidthP, 0.87); }
- else if (!strcasecmp(Name, "OSDHeightP")) { OSDHeightP = atof(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
+ else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atod(Value);
+ else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atod(Value);
+ else if (!strcasecmp(Name, "OSDWidthP")) { OSDWidthP = atod(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
+ else if (!strcasecmp(Name, "OSDHeightP")) { OSDHeightP = atod(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, "OSDAspect")) OSDAspect = atod(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); 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, "FontOsdSizeP")) { FontOsdSizeP = atod(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
+ else if (!strcasecmp(Name, "FontSmlSizeP")) { FontSmlSizeP = atod(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
+ else if (!strcasecmp(Name, "FontFixSizeP")) { FontFixSizeP = atod(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);
@@ -658,6 +660,8 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = atoi(Value);
else if (!strcasecmp(Name, "ShowRemainingTime")) ShowRemainingTime = atoi(Value);
+ else if (!strcasecmp(Name, "ProgressDisplayTime")) ProgressDisplayTime= atoi(Value);
+ else if (!strcasecmp(Name, "PauseOnMarkSet")) PauseOnMarkSet = atoi(Value);
else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value);
else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
@@ -761,6 +765,8 @@ bool cSetup::Save(void)
Store("MultiSpeedMode", MultiSpeedMode);
Store("ShowReplayMode", ShowReplayMode);
Store("ShowRemainingTime", ShowRemainingTime);
+ Store("ProgressDisplayTime",ProgressDisplayTime);
+ Store("PauseOnMarkSet", PauseOnMarkSet);
Store("ResumeID", ResumeID);
Store("CurrentChannel", CurrentChannel);
Store("CurrentVolume", CurrentVolume);
diff --git a/config.h b/config.h
index 03b6cf0..5c962fb 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 2.54 2012/10/03 09:59:34 kls Exp $
+ * $Id: config.h 2.57 2012/12/05 11:33:20 kls Exp $
*/
#ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number:
-#define VDRVERSION "1.7.32"
-#define VDRVERSNUM 10732 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.7.33"
+#define VDRVERSNUM 10733 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
-#define APIVERSION "1.7.32"
-#define APIVERSNUM 10732 // Version * 10000 + Major * 100 + Minor
+#define APIVERSION "1.7.33"
+#define APIVERSNUM 10733 // 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
@@ -319,6 +319,8 @@ public:
int MultiSpeedMode;
int ShowReplayMode;
int ShowRemainingTime;
+ int ProgressDisplayTime;
+ int PauseOnMarkSet;
int ResumeID;
int CurrentChannel;
int CurrentVolume;
diff --git a/cutter.c b/cutter.c
index ace1893..300eef4 100644
--- a/cutter.c
+++ b/cutter.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: cutter.c 2.16 2012/11/18 12:09:00 kls Exp $
+ * $Id: cutter.c 2.21 2012/12/02 14:30:55 kls Exp $
*/
#include "cutter.h"
@@ -132,7 +132,7 @@ bool cDanglingPacketStripper::Process(uchar *Data, int Length, int64_t FirstPts)
int Pid = TsPid(Data);
if (Pid == PATPID)
patPmtParser.ParsePat(Data, TS_SIZE);
- else if (Pid == patPmtParser.PmtPid())
+ else if (patPmtParser.IsPmtPid(Pid))
patPmtParser.ParsePmt(Data, TS_SIZE);
else {
int64_t Pts = TsGetPts(Data, TS_SIZE);
@@ -154,8 +154,10 @@ bool cDanglingPacketStripper::Process(uchar *Data, int Length, int64_t FirstPts)
class cPtsFixer {
private:
int delta; // time between two frames
- int64_t last; // the last (i.e. highest) video PTS value seen
- int64_t offset; // offset to add to PTS values
+ int64_t deltaDts; // the difference between two consecutive DTS values (may differ from 'delta' in case of multiple fields per frame)
+ int64_t lastPts; // the video PTS of the last frame (in display order)
+ int64_t lastDts; // the last video DTS value seen
+ int64_t offset; // offset to add to all timestamps
bool fixCounters; // controls fixing the TS continuity counters (only from the second CutIn up)
uchar counter[MAXPID]; // the TS continuity counter for each PID
cPatPmtParser patPmtParser;
@@ -168,7 +170,9 @@ public:
cPtsFixer::cPtsFixer(void)
{
delta = 0;
- last = -1;
+ deltaDts = 0;
+ lastPts = -1;
+ lastDts = -1;
offset = -1;
fixCounters = false;
memset(counter, 0x00, sizeof(counter));
@@ -186,31 +190,44 @@ void cPtsFixer::Fix(uchar *Data, int Length, bool CutIn)
return;
}
// Determine the PTS offset at the beginning of each sequence (except the first one):
- if (CutIn && last >= 0) {
+ if (CutIn && lastPts >= 0) {
int64_t Pts = TsGetPts(Data, Length);
- if (Pts >= 0) {
- // offset is calculated so that Pts + offset results in last + delta:
- offset = Pts - PtsAdd(last, delta);
- if (offset <= 0)
- offset = -offset;
- else
- offset = MAX33BIT + 1 - offset;
- }
+ if (Pts >= 0)
+ offset = (lastPts + delta - Pts) & MAX33BIT; // offset is calculated so that Pts + offset results in lastPts + delta
fixCounters = true;
}
// Keep track of the highest video PTS:
+ bool GotPts = false;
+ int64_t PrevDts = lastDts;
uchar *p = Data;
int len = Length;
while (len >= TS_SIZE && *p == TS_SYNC_BYTE) {
int Pid = TsPid(p);
if (Pid == patPmtParser.Vpid()) {
- int64_t Pts = PtsAdd(TsGetPts(p, TS_SIZE), offset); // offset is taken into account here, to make last have the "new" value already!
- if (Pts >= 0 && (last < 0 || PtsDiff(last, Pts) > 0))
- last = Pts;
+ if (!GotPts) { // in case of multiple fields per frame, the offset is calculated only with the first one
+ int64_t Pts = TsGetPts(p, TS_SIZE);
+ if (Pts >= 0) {
+ if (offset >= 0)
+ Pts = PtsAdd(Pts, offset); // offset is taken into account here, to make lastPts have the "new" value already!
+ if (lastPts < 0 || PtsDiff(lastPts, Pts) > 0)
+ lastPts = Pts;
+ }
+ GotPts = true;
+ }
+ if (!CutIn) {
+ int64_t Dts = TsGetDts(p, TS_SIZE);
+ if (Dts >= 0) {
+ if (offset >= 0)
+ Dts = PtsAdd(Dts, offset); // offset is taken into account here, to make lastDts have the "new" value already!
+ deltaDts = PtsDiff(PrevDts, Dts);
+ PrevDts = Dts;
+ }
+ }
}
// Adjust the TS continuity counter:
if (fixCounters) {
- counter[Pid] = (counter[Pid] + 1) & TS_CONT_CNT_MASK;
+ if (TsHasPayload(p))
+ counter[Pid] = (counter[Pid] + 1) & TS_CONT_CNT_MASK;
TsSetContinuityCounter(p, counter[Pid]);
}
else
@@ -228,12 +245,18 @@ void cPtsFixer::Fix(uchar *Data, int Length, bool CutIn)
if (Pts >= 0)
TsSetPts(p, TS_SIZE, PtsAdd(Pts, offset));
int64_t Dts = TsGetDts(p, TS_SIZE);
- if (Dts >= 0)
- TsSetDts(p, TS_SIZE, PtsAdd(Dts, offset));
+ if (Dts >= 0) {
+ if (CutIn) {
+ lastDts = PtsAdd(lastDts, deltaDts);
+ TsSetDts(p, TS_SIZE, lastDts);
+ }
+ else
+ TsSetDts(p, TS_SIZE, PtsAdd(Dts, offset));
+ }
int64_t Pcr = TsGetPcr(p);
if (Pcr >= 0) {
int64_t NewPcr = Pcr + offset * PCRFACTOR;
- if (NewPcr >= MAX27MHZ)
+ if (NewPcr > MAX27MHZ)
NewPcr -= MAX27MHZ + 1;
TsSetPcr(p, NewPcr);
}
@@ -241,6 +264,7 @@ void cPtsFixer::Fix(uchar *Data, int Length, bool CutIn)
len -= TS_SIZE;
}
}
+ lastDts = PrevDts;
}
// --- cCuttingThread --------------------------------------------------------
@@ -408,8 +432,10 @@ void cCuttingThread::GetPendingPackets(uchar *Data, int &Length, int Index, int6
int Pid = TsPid(p);
if (Pid == PATPID)
PatPmtParser.ParsePat(p, TS_SIZE);
- else if (Pid == PatPmtParser.PmtPid())
+ else if (PatPmtParser.IsPmtPid(Pid)) {
PatPmtParser.ParsePmt(p, TS_SIZE);
+ Processed[PatPmtParser.Vpid()] = true; // we only want non-video packets
+ }
else if (!Processed[Pid]) {
int64_t Pts = TsGetPts(p, TS_SIZE);
if (Pts >= 0) {
diff --git a/device.c b/device.c
index 766253a..2678d68 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 2.69 2012/11/13 09:11:43 kls Exp $
+ * $Id: device.c 2.70 2012/11/19 09:59:09 kls Exp $
*/
#include "device.h"
@@ -1149,7 +1149,7 @@ void cDevice::StillPicture(const uchar *Data, int Length)
int Pid = TsPid(Data);
if (Pid == PATPID)
patPmtParser.ParsePat(Data, TS_SIZE);
- else if (Pid == patPmtParser.PmtPid())
+ else if (patPmtParser.IsPmtPid(Pid))
patPmtParser.ParsePmt(Data, TS_SIZE);
else if (Pid == patPmtParser.Vpid()) {
if (TsPayloadStart(Data)) {
@@ -1486,7 +1486,7 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
if (PayloadOffset < TS_SIZE) {
if (Pid == PATPID)
patPmtParser.ParsePat(Data, TS_SIZE);
- else if (Pid == patPmtParser.PmtPid())
+ else if (patPmtParser.IsPmtPid(Pid))
patPmtParser.ParsePmt(Data, TS_SIZE);
else if (Pid == patPmtParser.Vpid()) {
isPlayingVideo = true;
diff --git a/device.h b/device.h
index 1f94521..e2847d8 100644
--- a/device.h
+++ b/device.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.h 2.41 2012/08/26 13:25:44 kls Exp $
+ * $Id: device.h 2.42 2012/12/04 11:52:58 kls Exp $
*/
#ifndef __DEVICE_H
@@ -655,6 +655,33 @@ public:
virtual bool IsPlayingVideo(void) const { return isPlayingVideo; }
///< \return Returns true if the currently attached player has delivered
///< any video packets.
+ virtual cRect CanScaleVideo(const cRect &Rect, int Alignment = taCenter) { return cRect::Null; }
+ ///< Asks the output device whether it can scale the currently shown video in
+ ///< such a way that it fits into the given Rect, while retaining its proper
+ ///< aspect ratio. If the scaled video doesn't exactly fit into Rect, Alignment
+ ///< is used to determine how to align the actual rectangle with the requested
+ ///< one. The actual rectangle can be smaller, larger or the same size as the
+ ///< given Rect, and its location may differ, depending on the capabilities of
+ ///< the output device, which may not be able to display a scaled video at
+ ///< arbitrary sizes and locations. The device shall, however, do its best to
+ ///< match the requested Rect as closely as possible, preferring a size and
+ ///< location that fits completely into the requested Rect if possible.
+ ///< Returns the rectangle that can actually be used when scaling the video.
+ ///< A skin plugin using this function should rearrange its content according
+ ///< to the rectangle returned from calling this function, and should especially
+ ///< be prepared for cases where the returned rectangle is way off the requested
+ ///< Rect, or even Null. In such cases, the skin may want to fall back to
+ ///< working with full screen video.
+ ///< If this device can't scale the video, a Null rectangle is returned (this
+ ///< is also the default implementation).
+ virtual void ScaleVideo(const cRect &Rect = cRect::Null) {}
+ ///< Scales the currently shown video in such a way that it fits into the given
+ ///< Rect. Rect should be one retrieved through a previous call to
+ ///< CanScaleVideo() (otherwise results may be undefined).
+ ///< Even if video output is scaled, the functions GetVideoSize() and
+ ///< GetOsdSize() must still return the same values as if in full screen mode!
+ ///< If this device can't scale the video, nothing happens.
+ ///< To restore full screen video, call this function with a Null rectangle.
virtual bool HasIBPTrickSpeed(void) { return false; }
///< Returns true if this device can handle all frames in 'fast forward'
///< trick speeds.
diff --git a/dvbdevice.c b/dvbdevice.c
index d3ade75..43e8544 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.74 2012/10/07 11:11:30 kls Exp $
+ * $Id: dvbdevice.c 2.75 2012/12/03 14:07:01 kls Exp $
*/
#include "dvbdevice.h"
@@ -261,16 +261,16 @@ bool cDvbTransponderParameters::Parse(const char *s)
case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
case 'D': s = ParseParameter(s, coderateL, CoderateValues); break;
case 'G': s = ParseParameter(s, guard, GuardValues); break;
- case 'H': polarization = *s++; break;
+ case 'H': polarization = 'H'; s++; break;
case 'I': s = ParseParameter(s, inversion, InversionValues); break;
- case 'L': polarization = *s++; break;
+ case 'L': polarization = 'L'; s++; break;
case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
case 'P': s = ParseParameter(s, plpId); break;
- case 'R': polarization = *s++; break;
+ case 'R': polarization = 'R'; s++; break;
case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter
case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
- case 'V': polarization = *s++; break;
+ case 'V': polarization = 'V'; s++; break;
case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
default: esyslog("ERROR: unknown parameter key '%c'", *s);
return false;
diff --git a/eit.c b/eit.c
index a236b89..73c4fa9 100644
--- a/eit.c
+++ b/eit.c
@@ -8,10 +8,11 @@
* 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.21 2012/08/25 11:13:00 kls Exp $
+ * $Id: eit.c 2.23 2012/12/04 11:10:10 kls Exp $
*/
#include "eit.h"
+#include <sys/time.h>
#include "epg.h"
#include "i18n.h"
#include "libsi/section.h"
@@ -313,35 +314,48 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
// --- cTDT ------------------------------------------------------------------
+#define MAX_TIME_DIFF 1 // number of seconds the local time may differ from dvb time before making any corrections
+#define MAX_ADJ_DIFF 10 // number of seconds the local time may differ from dvb time to allow smooth adjustment
+#define ADJ_DELTA 300 // number of seconds between calls for smooth time adjustment
+
class cTDT : public SI::TDT {
private:
static cMutex mutex;
- static int lastDiff;
+ static time_t lastAdj;
public:
cTDT(const u_char *Data);
};
cMutex cTDT::mutex;
-int cTDT::lastDiff = 0;
+time_t cTDT::lastAdj = 0;
cTDT::cTDT(const u_char *Data)
:SI::TDT(Data, false)
{
CheckParse();
- time_t sattim = getTime();
+ time_t dvbtim = getTime();
time_t loctim = time(NULL);
- int diff = abs(sattim - loctim);
- if (diff > 2) {
+ int diff = dvbtim - loctim;
+ if (abs(diff) > MAX_TIME_DIFF) {
mutex.Lock();
- if (abs(diff - lastDiff) < 3) {
- if (stime(&sattim) == 0)
- isyslog("system time changed from %s (%ld) to %s (%ld)", *TimeToString(loctim), loctim, *TimeToString(sattim), sattim);
+ if (abs(diff) > MAX_ADJ_DIFF) {
+ if (stime(&dvbtim) == 0)
+ isyslog("system time changed from %s (%ld) to %s (%ld)", *TimeToString(loctim), loctim, *TimeToString(dvbtim), dvbtim);
else
esyslog("ERROR while setting system time: %m");
}
- lastDiff = diff;
+ else if (time(NULL) - lastAdj > ADJ_DELTA) {
+ lastAdj = time(NULL);
+ timeval delta;
+ delta.tv_sec = diff;
+ delta.tv_usec = 0;
+ if (adjtime(&delta, NULL) == 0)
+ isyslog("system time adjustment initiated from %s (%ld) to %s (%ld)", *TimeToString(loctim), loctim, *TimeToString(dvbtim), dvbtim);
+ else
+ esyslog("ERROR while adjusting system time: %m");
+ }
mutex.Unlock();
}
}
@@ -353,8 +367,7 @@ time_t cEitFilter::disableUntil = 0;
cEitFilter::cEitFilter(void)
{
Set(0x12, 0x40, 0xC0); // event info now&next actual/other TS (0x4E/0x4F), future actual/other TS (0x5X/0x6X)
- if (Setup.SetSystemTime && Setup.TimeTransponder)
- Set(0x14, 0x70); // TDT
+ Set(0x14, 0x70); // TDT
}
void cEitFilter::SetDisableUntil(time_t Time)
diff --git a/interface.c b/interface.c
index 2bfa6c3..82091d9 100644
--- a/interface.c
+++ b/interface.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: interface.c 2.1 2011/12/04 14:52:38 kls Exp $
+ * $Id: interface.c 2.2 2012/11/19 12:21:43 kls Exp $
*/
#include "interface.h"
@@ -160,6 +160,7 @@ void cInterface::LearnKeys(void)
dsyslog("remote control %s - %s", Remote->Name(), known ? "keys known" : "learning keys");
if (!known) {
cSkinDisplayMenu *DisplayMenu = Skins.Current()->DisplayMenu();
+ DisplayMenu->SetMenuCategory(mcUnknown);
char Headline[256];
snprintf(Headline, sizeof(Headline), tr("Learning Remote Control Keys"));
cRemote::Clear();
diff --git a/keys.c b/keys.c
index 3b7c27c..2b4198d 100644
--- a/keys.c
+++ b/keys.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: keys.c 2.1 2010/04/05 10:05:58 kls Exp $
+ * $Id: keys.c 2.2 2012/12/04 12:52:52 kls Exp $
*/
#include "keys.h"
@@ -33,6 +33,7 @@ static tKey keyTable[] = { // "Up" and "Down" must be the first two keys!
{ k8, "8" },
{ k9, "9" },
{ kInfo, trNOOP("Key$Info") },
+ { kPlayPause, trNOOP("Key$Play/Pause") },
{ kPlay, trNOOP("Key$Play") },
{ kPause, trNOOP("Key$Pause") },
{ kStop, trNOOP("Key$Stop") },
diff --git a/keys.h b/keys.h
index 3cc4371..9a79dd6 100644
--- a/keys.h
+++ b/keys.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: keys.h 2.1 2010/04/05 10:06:04 kls Exp $
+ * $Id: keys.h 2.2 2012/12/04 12:51:25 kls Exp $
*/
#ifndef __KEYS_H
@@ -27,6 +27,7 @@ enum eKeys { // "Up" and "Down" must be the first two keys!
kBlue,
k0, k1, k2, k3, k4, k5, k6, k7, k8, k9,
kInfo,
+ kPlayPause, // combined Play/Pause key
kPlay,
kPause,
kStop,
diff --git a/menu.c b/menu.c
index b5a0d25..e2d34ed 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 2.65 2012/11/18 13:07:53 kls Exp $
+ * $Id: menu.c 2.71 2012/12/07 13:48:15 kls Exp $
*/
#include "menu.h"
@@ -284,6 +284,7 @@ public:
virtual int Compare(const cListObject &ListObject) const;
virtual void Set(void);
cChannel *Channel(void) { return channel; }
+ virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
};
cMenuChannelItem::eChannelSortMode cMenuChannelItem::sortMode = csmNumber;
@@ -323,6 +324,12 @@ void cMenuChannelItem::Set(void)
SetText(buffer);
}
+void cMenuChannelItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+ if (!DisplayMenu->SetItemChannel(channel, Index, Current, Selectable, sortMode == csmProvider))
+ DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
// --- cMenuChannels ---------------------------------------------------------
#define CHANNELNUMBERTIMEOUT 1000 //ms
@@ -1001,6 +1008,7 @@ public:
virtual int Compare(const cListObject &ListObject) const;
virtual void Set(void);
cTimer *Timer(void) { return timer; }
+ virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
};
cMenuTimerItem::cMenuTimerItem(cTimer *Timer)
@@ -1049,6 +1057,12 @@ void cMenuTimerItem::Set(void)
File));
}
+void cMenuTimerItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+ if (!DisplayMenu->SetItemTimer(timer, Index, Current, Selectable))
+ DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
// --- cMenuTimers -----------------------------------------------------------
class cMenuTimers : public cOsdMenu {
@@ -1215,7 +1229,7 @@ cMenuEvent::cMenuEvent(const cEvent *Event, bool CanSwitch, bool Buttons)
cChannel *channel = Channels.GetByChannelID(event->ChannelID(), true);
if (channel) {
SetTitle(channel->Name());
- int TimerMatch = tmNone;
+ eTimerMatch TimerMatch = tmNone;
Timers.GetMatch(event, &TimerMatch);
if (Buttons)
SetHelp(TimerMatch == tmFull ? tr("Button$Timer") : tr("Button$Record"), NULL, NULL, CanSwitch ? tr("Button$Switch") : NULL);
@@ -1273,13 +1287,14 @@ public:
const cEvent *event;
const cChannel *channel;
bool withDate;
- int timerMatch;
+ eTimerMatch timerMatch;
cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL, bool WithDate = false);
static void SetSortMode(eScheduleSortMode SortMode) { sortMode = SortMode; }
static void IncSortMode(void) { sortMode = eScheduleSortMode((sortMode == ssmAllAll) ? ssmAllThis : sortMode + 1); }
static eScheduleSortMode SortMode(void) { return sortMode; }
virtual int Compare(const cListObject &ListObject) const;
bool Update(bool Force = false);
+ virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
};
cMenuScheduleItem::eScheduleSortMode cMenuScheduleItem::sortMode = ssmAllThis;
@@ -1309,7 +1324,7 @@ static const char *TimerMatchChars = " tT";
bool cMenuScheduleItem::Update(bool Force)
{
bool result = false;
- int OldTimerMatch = timerMatch;
+ eTimerMatch OldTimerMatch = timerMatch;
Timers.GetMatch(event, &timerMatch);
if (Force || timerMatch != OldTimerMatch) {
cString buffer;
@@ -1330,6 +1345,12 @@ bool cMenuScheduleItem::Update(bool Force)
return result;
}
+void cMenuScheduleItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+ if (!DisplayMenu->SetItemEvent(event, Index, Current, Selectable, channel, withDate, timerMatch))
+ DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
// --- cMenuWhatsOn ----------------------------------------------------------
class cMenuWhatsOn : public cOsdMenu {
@@ -1430,7 +1451,7 @@ eOSState cMenuWhatsOn::Record(void)
cMenuScheduleItem *item = (cMenuScheduleItem *)Get(Current());
if (item) {
if (item->timerMatch == tmFull) {
- int tm = tmNone;
+ eTimerMatch tm = tmNone;
cTimer *timer = Timers.GetMatch(item->event, &tm);
if (timer)
return AddSubMenu(new cMenuEditTimer(timer));
@@ -1676,7 +1697,7 @@ eOSState cMenuSchedule::Record(void)
cMenuScheduleItem *item = (cMenuScheduleItem *)Get(Current());
if (item) {
if (item->timerMatch == tmFull) {
- int tm = tmNone;
+ eTimerMatch tm = tmNone;
cTimer *timer = Timers.GetMatch(item->event, &tm);
if (timer)
return AddSubMenu(new cMenuEditTimer(timer));
@@ -2153,7 +2174,8 @@ eOSState cMenuRecording::ProcessKey(eKeys Key)
class cMenuRecordingItem : public cOsdItem {
private:
- char *fileName;
+ cRecording *recording;
+ int level;
char *name;
int totalEntries, newEntries;
public:
@@ -2161,13 +2183,15 @@ public:
~cMenuRecordingItem();
void IncrementCounter(bool New);
const char *Name(void) { return name; }
- const char *FileName(void) { return fileName; }
+ cRecording *Recording(void) { return recording; }
bool IsDirectory(void) { return name != NULL; }
+ virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
};
cMenuRecordingItem::cMenuRecordingItem(cRecording *Recording, int Level)
{
- fileName = strdup(Recording->FileName());
+ recording = Recording;
+ level = Level;
name = NULL;
totalEntries = newEntries = 0;
SetText(Recording->Title('\t', true, Level));
@@ -2177,7 +2201,6 @@ cMenuRecordingItem::cMenuRecordingItem(cRecording *Recording, int Level)
cMenuRecordingItem::~cMenuRecordingItem()
{
- free(fileName);
free(name);
}
@@ -2189,6 +2212,12 @@ void cMenuRecordingItem::IncrementCounter(bool New)
SetText(cString::sprintf("%d\t\t%d\t%s", totalEntries, newEntries, name));
}
+void cMenuRecordingItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+ if (!DisplayMenu->SetItemRecording(recording, Index, Current, Selectable, level, totalEntries, newEntries))
+ DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
// --- cMenuRecordings -------------------------------------------------------
cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
@@ -2224,8 +2253,7 @@ void cMenuRecordings::SetHelpKeys(void)
NewHelpKeys = 1;
else {
NewHelpKeys = 2;
- cRecording *recording = GetRecording(ri);
- if (recording && recording->Info()->Title())
+ if (ri->Recording()->Info()->Title())
NewHelpKeys = 3;
}
}
@@ -2248,12 +2276,8 @@ void cMenuRecordings::Set(bool Refresh)
char *LastItemText = NULL;
cThreadLock RecordingsLock(&Recordings);
if (Refresh) {
- cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
- if (ri) {
- cRecording *Recording = Recordings.GetByName(ri->FileName());
- if (Recording)
- CurrentRecording = Recording->FileName();
- }
+ if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current()))
+ CurrentRecording = ri->Recording()->FileName();
}
Clear();
GetRecordingsSortMode(DirectoryName());
@@ -2293,14 +2317,6 @@ cString cMenuRecordings::DirectoryName(void)
return d;
}
-cRecording *cMenuRecordings::GetRecording(cMenuRecordingItem *Item)
-{
- cRecording *recording = Recordings.GetByName(Item->FileName());
- if (!recording)
- Skins.Message(mtError, tr("Error while accessing recording!"));
- return recording;
-}
-
bool cMenuRecordings::Open(bool OpenSubMenus)
{
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
@@ -2324,11 +2340,8 @@ eOSState cMenuRecordings::Play(void)
if (ri->IsDirectory())
Open();
else {
- cRecording *recording = GetRecording(ri);
- if (recording) {
- cReplayControl::SetRecording(recording->FileName());
- return osReplay;
- }
+ cReplayControl::SetRecording(ri->Recording()->FileName());
+ return osReplay;
}
}
return osContinue;
@@ -2340,13 +2353,10 @@ eOSState cMenuRecordings::Rewind(void)
return osContinue;
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
if (ri && !ri->IsDirectory()) {
- cRecording *recording = GetRecording(ri);
- if (recording) {
- cDevice::PrimaryDevice()->StopReplay(); // must do this first to be able to rewind the currently replayed recording
- cResumeFile ResumeFile(ri->FileName(), recording->IsPesRecording());
- ResumeFile.Delete();
- return Play();
- }
+ cDevice::PrimaryDevice()->StopReplay(); // must do this first to be able to rewind the currently replayed recording
+ cResumeFile ResumeFile(ri->Recording()->FileName(), ri->Recording()->IsPesRecording());
+ ResumeFile.Delete();
+ return Play();
}
return osContinue;
}
@@ -2358,7 +2368,7 @@ eOSState cMenuRecordings::Delete(void)
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
if (ri && !ri->IsDirectory()) {
if (Interface->Confirm(tr("Delete recording?"))) {
- cRecordControl *rc = cRecordControls::GetRecordControl(ri->FileName());
+ cRecordControl *rc = cRecordControls::GetRecordControl(ri->Recording()->FileName());
if (rc) {
if (Interface->Confirm(tr("Timer still recording - really delete?"))) {
cTimer *timer = rc->Timer();
@@ -2375,33 +2385,32 @@ eOSState cMenuRecordings::Delete(void)
else
return osContinue;
}
- cRecording *recording = GetRecording(ri);
- if (recording) {
- if (cCutter::Active(ri->FileName())) {
- if (Interface->Confirm(tr("Recording is being edited - really delete?"))) {
- cCutter::Stop();
- recording = Recordings.GetByName(ri->FileName()); // cCutter::Stop() might have deleted it if it was the edited version
- // we continue with the code below even if recording is NULL,
- // in order to have the menu updated etc.
- }
- else
- return osContinue;
- }
- if (cReplayControl::NowReplaying() && strcmp(cReplayControl::NowReplaying(), ri->FileName()) == 0)
- cControl::Shutdown();
- if (!recording || recording->Delete()) {
- cReplayControl::ClearLastReplayed(ri->FileName());
- Recordings.DelByName(ri->FileName());
- cOsdMenu::Del(Current());
- SetHelpKeys();
- cVideoDiskUsage::ForceCheck();
- Display();
- if (!Count())
- return osBack;
+ cRecording *recording = ri->Recording();
+ cString FileName = recording->FileName();
+ if (cCutter::Active(ri->Recording()->FileName())) {
+ if (Interface->Confirm(tr("Recording is being edited - really delete?"))) {
+ cCutter::Stop();
+ recording = Recordings.GetByName(FileName); // cCutter::Stop() might have deleted it if it was the edited version
+ // we continue with the code below even if recording is NULL,
+ // in order to have the menu updated etc.
}
else
- Skins.Message(mtError, tr("Error while deleting recording!"));
+ return osContinue;
}
+ if (cReplayControl::NowReplaying() && strcmp(cReplayControl::NowReplaying(), FileName) == 0)
+ cControl::Shutdown();
+ if (!recording || recording->Delete()) {
+ cReplayControl::ClearLastReplayed(FileName);
+ Recordings.DelByName(FileName);
+ cOsdMenu::Del(Current());
+ SetHelpKeys();
+ cVideoDiskUsage::ForceCheck();
+ Display();
+ if (!Count())
+ return osBack;
+ }
+ else
+ Skins.Message(mtError, tr("Error while deleting recording!"));
}
}
return osContinue;
@@ -2412,11 +2421,8 @@ eOSState cMenuRecordings::Info(void)
if (HasSubMenu() || Count() == 0)
return osContinue;
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
- if (ri && !ri->IsDirectory()) {
- cRecording *recording = GetRecording(ri);
- if (recording && recording->Info()->Title())
- return AddSubMenu(new cMenuRecording(recording, true));
- }
+ if (ri && !ri->IsDirectory() && ri->Recording()->Info()->Title())
+ return AddSubMenu(new cMenuRecording(ri->Recording(), true));
return osContinue;
}
@@ -2426,14 +2432,11 @@ eOSState cMenuRecordings::Commands(eKeys Key)
return osContinue;
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
if (ri && !ri->IsDirectory()) {
- cRecording *recording = GetRecording(ri);
- if (recording) {
- cMenuCommands *menu;
- eOSState state = AddSubMenu(menu = new cMenuCommands(tr("Recording commands"), &RecordingCommands, cString::sprintf("\"%s\"", *strescape(recording->FileName(), "\\\"$"))));
- if (Key != kNone)
- state = menu->ProcessKey(Key);
- return state;
- }
+ cMenuCommands *menu;
+ eOSState state = AddSubMenu(menu = new cMenuCommands(tr("Recording commands"), &RecordingCommands, cString::sprintf("\"%s\"", *strescape(ri->Recording()->FileName(), "\\\"$"))));
+ if (Key != kNone)
+ state = menu->ProcessKey(Key);
+ return state;
}
return osContinue;
}
@@ -2454,6 +2457,7 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
+ case kPlayPause:
case kPlay:
case kOk: return Play();
case kRed: return (helpKeys > 1 && RecordingCommands.Count()) ? Commands() : Play();
@@ -3139,6 +3143,8 @@ cMenuSetupReplay::cMenuSetupReplay(void)
Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Show remaining time"), &data.ShowRemainingTime));
+ Add(new cMenuEditIntItem( tr("Setup.Replay$Progress display time (s)"), &data.ProgressDisplayTime, 0, 60));
+ Add(new cMenuEditBoolItem(tr("Setup.Replay$Pause replay when setting mark"), &data.PauseOnMarkSet));
Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
}
@@ -4475,6 +4481,8 @@ cReplayControl::cReplayControl(bool PauseLive)
cStatus::MsgReplaying(this, Recording.Name(), Recording.FileName(), true);
marks.Load(fileName, Recording.FramesPerSecond(), Recording.IsPesRecording());
SetTrackDescriptions(false);
+ if (Setup.ProgressDisplayTime)
+ ShowTimed(Setup.ProgressDisplayTime);
}
cReplayControl::~cReplayControl()
@@ -4685,6 +4693,7 @@ void cReplayControl::TimeSearchProcess(eKeys Key)
timeSearchActive = false;
}
break;
+ case kPlayPause:
case kPlay:
case kUp:
case kPause:
@@ -4739,7 +4748,7 @@ void cReplayControl::MarkToggle(void)
marks.Add(Current);
bool Play, Forward;
int Speed;
- if (GetReplayMode(Play, Forward, Speed) && !Play)
+ if (Setup.PauseOnMarkSet || GetReplayMode(Play, Forward, Speed) && !Play)
Goto(Current, true);
}
ShowTimed(2);
@@ -4749,15 +4758,19 @@ void cReplayControl::MarkToggle(void)
void cReplayControl::MarkJump(bool Forward)
{
- if (marks.Count()) {
- int Current, Total;
- if (GetIndex(Current, Total)) {
+ int Current, Total;
+ if (GetIndex(Current, Total)) {
+ if (marks.Count()) {
cMark *m = Forward ? marks.GetNext(Current) : marks.GetPrev(Current);
if (m) {
Goto(m->Position(), true);
displayFrames = true;
+ return;
}
}
+ // There are either no marks at all, or we already were at the first or last one,
+ // so jump to the very beginning or end:
+ Goto(Forward ? Total : 0, true);
}
}
@@ -4861,6 +4874,15 @@ eOSState cReplayControl::ProcessKey(eKeys Key)
TimeSearchProcess(Key);
return osContinue;
}
+ if (Key == kPlayPause) {
+ bool Play, Forward;
+ int Speed;
+ GetReplayMode(Play, Forward, Speed);
+ if (Speed >= 0)
+ Key = Play ? kPlay : kPause;
+ else
+ Key = Play ? kPause : kPlay;
+ }
bool DoShowMode = true;
switch (int(Key)) {
// Positioning:
diff --git a/menu.h b/menu.h
index 10ffc7a..196c038 100644
--- a/menu.h
+++ b/menu.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.h 2.12 2012/09/07 08:48:34 kls Exp $
+ * $Id: menu.h 2.13 2012/12/07 13:44:13 kls Exp $
*/
#ifndef __MENU_H
@@ -208,7 +208,6 @@ private:
eOSState Commands(eKeys Key = kNone);
protected:
cString DirectoryName(void);
- cRecording *GetRecording(cMenuRecordingItem *Item);
public:
cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
~cMenuRecordings();
diff --git a/osd.h b/osd.h
index 06c020a..0084caa 100644
--- a/osd.h
+++ b/osd.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osd.h 2.17 2012/06/02 10:32:38 kls Exp $
+ * $Id: osd.h 2.18 2012/12/03 13:49:02 kls Exp $
*/
#ifndef __OSD_H
@@ -735,7 +735,7 @@ protected:
///< Initializes the OSD with the given coordinates.
///< By default it is assumed that the full area will be able to display
///< full 32 bit graphics (ARGB with eight bit for each color and the alpha
- ///< value, repectively). However, the actual hardware in use may not be
+ ///< value, respectively). However, the actual hardware in use may not be
///< able to display such a high resolution OSD, so there is an option to
///< divide the full OSD area into several sub-areas with lower color depths
///< and individual palettes. The sub-areas need not necessarily cover the
diff --git a/osdbase.c b/osdbase.c
index 3743730..fafa9c7 100644
--- a/osdbase.c
+++ b/osdbase.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.c 2.6 2012/04/23 09:41:22 kls Exp $
+ * $Id: osdbase.c 2.7 2012/12/07 09:50:47 kls Exp $
*/
#include "osdbase.h"
@@ -55,6 +55,11 @@ void cOsdItem::SetFresh(bool Fresh)
fresh = Fresh;
}
+void cOsdItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable)
+{
+ DisplayMenu->SetItem(Text(), Index, Current, Selectable);
+}
+
eOSState cOsdItem::ProcessKey(eKeys Key)
{
return Key == kOk ? state : osUnknown;
@@ -246,7 +251,7 @@ void cOsdMenu::Display(void)
int n = 0;
for (cOsdItem *item = Get(first); item; item = Next(item)) {
bool CurrentSelectable = (i == current) && item->Selectable();
- displayMenu->SetItem(item->Text(), i - first, CurrentSelectable, item->Selectable());
+ item->SetMenuItem(displayMenu, i - first, CurrentSelectable, item->Selectable());
if (CurrentSelectable)
cStatus::MsgOsdCurrentItem(item->Text());
if (++n == displayMenuItems)
@@ -275,7 +280,7 @@ void cOsdMenu::DisplayCurrent(bool Current)
{
cOsdItem *item = Get(current);
if (item) {
- displayMenu->SetItem(item->Text(), current - first, Current && item->Selectable(), item->Selectable());
+ item->SetMenuItem(displayMenu, current - first, Current && item->Selectable(), item->Selectable());
if (Current && item->Selectable())
cStatus::MsgOsdCurrentItem(item->Text());
if (!Current)
@@ -296,7 +301,7 @@ void cOsdMenu::DisplayItem(cOsdItem *Item)
int Offset = Index - first;
if (Offset >= 0 && Offset < first + displayMenuItems) {
bool Current = Index == current;
- displayMenu->SetItem(Item->Text(), Offset, Current && Item->Selectable(), Item->Selectable());
+ Item->SetMenuItem(displayMenu, Offset, Current && Item->Selectable(), Item->Selectable());
if (Current && Item->Selectable())
cStatus::MsgOsdCurrentItem(Item->Text());
}
diff --git a/osdbase.h b/osdbase.h
index a2e9914..4635184 100644
--- a/osdbase.h
+++ b/osdbase.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.h 2.4 2012/04/23 09:40:07 kls Exp $
+ * $Id: osdbase.h 2.5 2012/12/07 09:49:35 kls Exp $
*/
#ifndef __OSDBASE_H
@@ -63,6 +63,7 @@ public:
void SetFresh(bool Fresh);
const char *Text(void) const { return text; }
virtual void Set(void) {}
+ virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
virtual eOSState ProcessKey(eKeys Key);
};
diff --git a/pat.c b/pat.c
index 826e0ea..a7791e2 100644
--- a/pat.c
+++ b/pat.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: pat.c 2.18 2012/04/15 09:54:53 kls Exp $
+ * $Id: pat.c 2.19 2012/11/25 14:12:21 kls Exp $
*/
#include "pat.h"
@@ -352,7 +352,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
switch (stream.getStreamType()) {
case 1: // STREAMTYPE_11172_VIDEO
case 2: // STREAMTYPE_13818_VIDEO
- case 0x1B: // MPEG4
+ case 0x1B: // H.264
Vpid = esPid;
Ppid = pmt.getPCRPid();
Vtype = stream.getStreamType();
diff --git a/po/ar.po b/po/ar.po
index c0fb31f..43b1c65 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-10-16 11:16-0400\n"
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
"Language-Team: Arabic <ar@li.org>\n"
@@ -417,6 +417,9 @@ msgstr "ازرق"
msgid "Key$Info"
msgstr "معلومات"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "عرض"
@@ -750,9 +753,6 @@ msgstr "افتح"
msgid "Commands"
msgstr "الاوامر"
-msgid "Error while accessing recording!"
-msgstr "حدث خطاء عند محاولة الوصول لتسجيلات"
-
msgid "Delete recording?"
msgstr "حذف التسجيل"
@@ -1127,6 +1127,12 @@ msgstr "اضهر طور الاعادة"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "رقم المواصلة"
@@ -1412,3 +1418,6 @@ msgstr "القرص الصلب"
msgid "free"
msgstr "مساحة حرة"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "حدث خطاء عند محاولة الوصول لتسجيلات"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index f08cd57..ea4dc9d 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@ msgstr "Blau"
msgid "Key$Info"
msgstr "Informaci"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Reproduir"
@@ -741,9 +744,6 @@ msgstr "Obrir"
msgid "Commands"
msgstr "Ordres"
-msgid "Error while accessing recording!"
-msgstr "Error a l'accedir a la gravaci!"
-
msgid "Delete recording?"
msgstr "Esborrar gravaci?"
@@ -1104,6 +1104,12 @@ msgstr "Mostrar mode de reproducci"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de Continuar"
@@ -1386,3 +1392,6 @@ msgstr "Disc"
msgid "free"
msgstr "lliure"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Error a l'accedir a la gravaci!"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 1a62102..2facfbd 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2010-05-06 11:00+0200\n"
"Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
"Language-Team: Czech <vdr@linuxtv.org>\n"
@@ -412,6 +412,9 @@ msgstr "Modrý"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Přehrát"
@@ -740,9 +743,6 @@ msgstr "Otevřít"
msgid "Commands"
msgstr "Příkazy"
-msgid "Error while accessing recording!"
-msgstr "Chyba při přístupu k nahrávkám!"
-
msgid "Delete recording?"
msgstr "Smazat nahrávku?"
@@ -1103,6 +1103,12 @@ msgstr "Zobrazit režim přehrávání"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID obnovení"
@@ -1385,3 +1391,6 @@ msgstr "Disk"
msgid "free"
msgstr "volno"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Chyba při přístupu k nahrávkám!"
diff --git a/po/da_DK.po b/po/da_DK.po
index 597539f..cbe950f 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr "Bl"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Afspil"
@@ -738,9 +741,6 @@ msgstr "bn"
msgid "Commands"
msgstr "Kommandoer"
-msgid "Error while accessing recording!"
-msgstr "Fejl ved lsning af optagelse!"
-
msgid "Delete recording?"
msgstr "Slet optagelse?"
@@ -1101,6 +1101,12 @@ msgstr "Vis afspilningsmodus"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Genoptagelses ID"
@@ -1383,3 +1389,6 @@ msgstr "Disk"
msgid "free"
msgstr "fri"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Fejl ved lsning af optagelse!"
diff --git a/po/de_DE.po b/po/de_DE.po
index c958758..1177d93 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2010-01-16 16:46+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr "Blau"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr "Wiedergabe/Pause"
+
msgid "Key$Play"
msgstr "Wiedergabe"
@@ -738,9 +741,6 @@ msgstr "ffnen"
msgid "Commands"
msgstr "Befehle"
-msgid "Error while accessing recording!"
-msgstr "Fehler beim Ansprechen der Aufzeichnung!"
-
msgid "Delete recording?"
msgstr "Aufzeichnung lschen?"
@@ -1101,6 +1101,12 @@ msgstr "Wiedergabestatus anzeigen"
msgid "Setup.Replay$Show remaining time"
msgstr "Verbleibende Zeit anzeigen"
+msgid "Setup.Replay$Progress display time (s)"
+msgstr "Anzeigedauer fr Fortschrittsanzeige (s)"
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr "Pause beim Setzen einer Schnittmarke"
+
msgid "Setup.Replay$Resume ID"
msgstr "Wiedergabe-ID"
@@ -1383,3 +1389,6 @@ msgstr "Disk"
msgid "free"
msgstr "frei"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Fehler beim Ansprechen der Aufzeichnung!"
diff --git a/po/el_GR.po b/po/el_GR.po
index 1347812..05f9e71 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr ""
msgid "Key$Info"
msgstr ""
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr ""
@@ -738,9 +741,6 @@ msgstr ""
msgid "Commands"
msgstr ""
-msgid "Error while accessing recording!"
-msgstr " !"
-
msgid "Delete recording?"
msgstr " ?"
@@ -1101,6 +1101,12 @@ msgstr " "
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID "
@@ -1383,3 +1389,6 @@ msgstr ""
msgid "free"
msgstr ""
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr " !"
diff --git a/po/es_ES.po b/po/es_ES.po
index 8e76063..9885f84 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@ msgstr "Azul"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Reproducir"
@@ -739,9 +742,6 @@ msgstr "Abrir"
msgid "Commands"
msgstr "rdenes"
-msgid "Error while accessing recording!"
-msgstr "Error al acceder a la grabacin!"
-
msgid "Delete recording?"
msgstr "Eliminar grabacion?"
@@ -1102,6 +1102,12 @@ msgstr "Mostrar modo de reproduccin"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de continuacin"
@@ -1384,3 +1390,6 @@ msgstr "Disco"
msgid "free"
msgstr "libre"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Error al acceder a la grabacin!"
diff --git a/po/et_EE.po b/po/et_EE.po
index 12c1f25..d9b0d77 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr "Sinine"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Start"
@@ -738,9 +741,6 @@ msgstr "Avada"
msgid "Commands"
msgstr "Käsud"
-msgid "Error while accessing recording!"
-msgstr "Salvestuse taasesitus nurjus!"
-
msgid "Delete recording?"
msgstr "Kustutada salvestus?"
@@ -1101,6 +1101,12 @@ msgstr "Korduse režiimi kuvamine"
msgid "Setup.Replay$Show remaining time"
msgstr "Järelejäänud aja kuvamine"
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Jätkamise ID"
@@ -1383,3 +1389,6 @@ msgstr "Ketas"
msgid "free"
msgstr "vaba"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Salvestuse taasesitus nurjus!"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 901328a..0dd0d59 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@ msgstr "Sininen"
msgid "Key$Info"
msgstr "Tiedot"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Toista"
@@ -741,9 +744,6 @@ msgstr "Avaa"
msgid "Commands"
msgstr "Komennot"
-msgid "Error while accessing recording!"
-msgstr "Tallenteen toistaminen epäonnistui!"
-
msgid "Delete recording?"
msgstr "Poistetaanko tallenne?"
@@ -1104,6 +1104,12 @@ msgstr "Näytä toiston tila"
msgid "Setup.Replay$Show remaining time"
msgstr "Näytä jäljellä oleva aika"
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Tallenteen paluutunniste"
@@ -1386,3 +1392,6 @@ msgstr "Levy"
msgid "free"
msgstr "vapaana"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Tallenteen toistaminen epäonnistui!"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index a0995ae..0ded14e 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
@@ -416,6 +416,9 @@ msgstr "Bleu"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Lecture"
@@ -744,9 +747,6 @@ msgstr "Ouvrir"
msgid "Commands"
msgstr "Commandes"
-msgid "Error while accessing recording!"
-msgstr "Impossible d'accder l'enregistrement"
-
msgid "Delete recording?"
msgstr "Supprimer l'enregistrement ?"
@@ -1107,6 +1107,12 @@ msgstr "Affichage mode de lecture"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de reprise"
@@ -1389,3 +1395,6 @@ msgstr "Disque"
msgid "free"
msgstr "restant"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Impossible d'accder l'enregistrement"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 44cfd09..c7c6571 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n"
@@ -412,6 +412,9 @@ msgstr "Plavo"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Start"
@@ -740,9 +743,6 @@ msgstr "Otvori"
msgid "Commands"
msgstr "Naredbe"
-msgid "Error while accessing recording!"
-msgstr "Greka pri pristupanju snimke!"
-
msgid "Delete recording?"
msgstr "Obrisati snimku?"
@@ -1103,6 +1103,12 @@ msgstr "Prikai nain prikazivanja"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka"
@@ -1385,3 +1391,6 @@ msgstr "Disk"
msgid "free"
msgstr "slobodno"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Greka pri pristupanju snimke!"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 30ab8ab..19aec43 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2012-01-02 11:54+0200\n"
"Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@ msgstr "Kk"
msgid "Key$Info"
msgstr "Informci"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Lejtszs"
@@ -741,9 +744,6 @@ msgstr "Kinyitni"
msgid "Commands"
msgstr "Parancsok"
-msgid "Error while accessing recording!"
-msgstr "Hiba a felvtel hozzfrsnl"
-
msgid "Delete recording?"
msgstr "Felvtel trlse?"
@@ -1105,6 +1105,12 @@ msgstr "Lejtszs feltntetse"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Lejtszs ID"
@@ -1387,3 +1393,6 @@ msgstr "Lemez"
msgid "free"
msgstr "szabad"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Hiba a felvtel hozzfrsnl"
diff --git a/po/it_IT.po b/po/it_IT.po
index 1258f23..6d0bd7c 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2012-06-06 22:50+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
@@ -417,6 +417,9 @@ msgstr "Blu"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Riproduci"
@@ -745,9 +748,6 @@ msgstr "Apri"
msgid "Commands"
msgstr "Comandi"
-msgid "Error while accessing recording!"
-msgstr "Errore accesso alla registrazione!"
-
msgid "Delete recording?"
msgstr "Eliminare la registrazione?"
@@ -1108,6 +1108,12 @@ msgstr "Mostra modalità riproduzione"
msgid "Setup.Replay$Show remaining time"
msgstr "Mostra tempo rimanente"
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID di ripristino"
@@ -1390,3 +1396,6 @@ msgstr "Disco"
msgid "free"
msgstr "disponibili"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Errore accesso alla registrazione!"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index b53c762..d2edb6e 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2010-10-30 11:55+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr "Mėlyna"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Grona"
@@ -738,9 +741,6 @@ msgstr "Atidaryti"
msgid "Commands"
msgstr "Komandos"
-msgid "Error while accessing recording!"
-msgstr "Klaida atidarant įrašą!"
-
msgid "Delete recording?"
msgstr "Ištrinti įrašą?"
@@ -1101,6 +1101,12 @@ msgstr "Rodyti pakartojimo ręžimą"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Kūrinio ID"
@@ -1383,3 +1389,6 @@ msgstr "Diskas"
msgid "free"
msgstr "laisva"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Klaida atidarant įrašą!"
diff --git a/po/mk_MK.po b/po/mk_MK.po
index 89e8b73..8a6dc58 100644
--- a/po/mk_MK.po
+++ b/po/mk_MK.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR-1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
-"PO-Revision-Date: 2010-03-11 00:54+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
+"PO-Revision-Date: 2012-11-19 15:18+0100\n"
"Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
"Language-Team: Macedonian <en@li.org>\n"
"Language: mk\n"
@@ -75,7 +75,7 @@ msgid "Rolloff"
msgstr "Рол-оф"
msgid "PlpId"
-msgstr ""
+msgstr "PlpId"
msgid "Starting EPG scan"
msgstr "Започнувам скенирање на EPG"
@@ -411,6 +411,9 @@ msgstr "Сино"
msgid "Key$Info"
msgstr "Инфо"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Старт"
@@ -644,10 +647,10 @@ msgid "Button$Folder"
msgstr "Директориум"
msgid "Button$Single"
-msgstr ""
+msgstr "Единчен"
msgid "Button$Repeating"
-msgstr ""
+msgstr "Периодичен"
msgid "First day"
msgstr "Прв ден"
@@ -739,14 +742,11 @@ msgstr "Отвори"
msgid "Commands"
msgstr "Наредби"
-msgid "Error while accessing recording!"
-msgstr "Грешка при пристап до снимката!"
-
msgid "Delete recording?"
msgstr "Избриши снимка?"
msgid "Recording is being edited - really delete?"
-msgstr ""
+msgstr "Снимката се уредува - бриши?"
msgid "Error while deleting recording!"
msgstr "Грешка при бришење на снимката!"
@@ -848,19 +848,19 @@ msgid "Setup.OSD$Folders in timer menu"
msgstr "Директориуми во менито за тајмер"
msgid "Setup.OSD$Number keys for characters"
-msgstr ""
+msgstr "Нумерички копчиња за букви"
msgid "Setup.OSD$Color key 0"
-msgstr ""
+msgstr "Копче во боја 0"
msgid "Setup.OSD$Color key 1"
-msgstr ""
+msgstr "Копче во боја 1"
msgid "Setup.OSD$Color key 2"
-msgstr ""
+msgstr "Копче во боја 2"
msgid "Setup.OSD$Color key 3"
-msgstr ""
+msgstr "Копче во боја 3"
msgid "EPG"
msgstr "EPG (електронски водич на програми)"
@@ -931,7 +931,7 @@ msgid "Setup.DVB$Primary DVB interface"
msgstr "Примарен DVB уред"
msgid "Setup.DVB$Standard compliance"
-msgstr ""
+msgstr "Согласност со стандард"
msgid "Setup.DVB$Video format"
msgstr "Видео формат"
@@ -986,10 +986,10 @@ msgstr "Форна LNB фрекфенција (MHz)"
#, c-format
msgid "Setup.LNB$Device %d connected to sat cable"
-msgstr ""
+msgstr "Уред %d поврзан со сателитски кабел"
msgid "Setup.LNB$own"
-msgstr ""
+msgstr "свој"
msgid "CAM reset"
msgstr "Рестартирај CAM"
@@ -1079,7 +1079,7 @@ msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Траење на директно снимање (мин)"
msgid "Setup.Recording$present event"
-msgstr ""
+msgstr "сегашен настан"
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Максимална големина на датотека (MB)"
@@ -1100,6 +1100,12 @@ msgid "Setup.Replay$Show replay mode"
msgstr "Прикажи начин на пуштање"
msgid "Setup.Replay$Show remaining time"
+msgstr "Прикажи преостанато време"
+
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
msgstr ""
msgid "Setup.Replay$Resume ID"
@@ -1136,7 +1142,7 @@ msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Премотување канали"
msgid "Setup.Miscellaneous$Show channel names with source"
-msgstr ""
+msgstr "Прикажи имиња на канали со извор"
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Итен излез"
@@ -1215,7 +1221,7 @@ msgid "No editing marks defined!"
msgstr "Нема одредено ознаки за сечење!"
msgid "No editing sequences defined!"
-msgstr ""
+msgstr "Нема одредено секвенци за уредување!"
msgid "Can't start editing process!"
msgstr "Не може да почне уредување!"
@@ -1260,7 +1266,7 @@ msgid "Index file regeneration complete"
msgstr "Регенерирањето на индексот заврши"
msgid "Index file regeneration failed!"
-msgstr ""
+msgstr "Регенерирањето на индексот е неуспешен!"
msgid "Can't shutdown - option '-s' not given!"
msgstr "Невозможно гаснење - недостасува опцијата '-s'!"
@@ -1299,22 +1305,22 @@ msgid "Classic VDR"
msgstr "Класичен VDR"
msgid "DISK"
-msgstr ""
+msgstr "ДИСК"
msgid "LOAD"
-msgstr ""
+msgstr "ТОВАР"
msgid "TIMERS"
-msgstr ""
+msgstr "ТАЈМЕР"
msgid "DEVICES"
-msgstr ""
+msgstr "УРЕДИ"
msgid "LIVE"
-msgstr ""
+msgstr "ЖИВО"
msgid "PLAY"
-msgstr ""
+msgstr "ПУШТИ"
msgid "ST:TNG Panels"
msgstr "ST:TNG Панели"
@@ -1384,3 +1390,6 @@ msgstr "Диск"
msgid "free"
msgstr "слободен"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Грешка при пристап до снимката!"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 5e515c3..958411c 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n"
@@ -414,6 +414,9 @@ msgstr "Blauw"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Weergeven"
@@ -742,9 +745,6 @@ msgstr "Openen"
msgid "Commands"
msgstr "Commando's"
-msgid "Error while accessing recording!"
-msgstr "Fout bij lezen opname!"
-
msgid "Delete recording?"
msgstr "Opname verwijderen?"
@@ -1105,6 +1105,12 @@ msgstr "Weergave mode aangeven"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Hervattings ID"
@@ -1387,3 +1393,6 @@ msgstr "Schijf"
msgid "free"
msgstr "vrij"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Fout bij lezen opname!"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index f366260..2aa373e 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@ msgstr "Bl"
msgid "Key$Info"
msgstr ""
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr ""
@@ -739,9 +742,6 @@ msgstr "pne"
msgid "Commands"
msgstr "Kommandoer"
-msgid "Error while accessing recording!"
-msgstr "Feil under lesing av opptak!"
-
msgid "Delete recording?"
msgstr "Slette opptak?"
@@ -1102,6 +1102,12 @@ msgstr "Vis avspillingsmodus"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Resume ID"
@@ -1384,3 +1390,6 @@ msgstr "Disk"
msgid "free"
msgstr "ledig"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Feil under lesing av opptak!"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index fbe8a86..0e6f098 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@ msgstr "Niebieski"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Odtwrz"
@@ -739,9 +742,6 @@ msgstr "Otwrz"
msgid "Commands"
msgstr "Polecenia"
-msgid "Error while accessing recording!"
-msgstr "Bld podczas dostpu do nagrania!"
-
msgid "Delete recording?"
msgstr "Usun nagranie?"
@@ -1102,6 +1102,12 @@ msgstr "Pokazuj tryb odtwarzania"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID wznowienia"
@@ -1384,3 +1390,6 @@ msgstr "Dysk"
msgid "free"
msgstr "wolnego"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Bld podczas dostpu do nagrania!"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index d69e069..e132769 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.15\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2010-03-28 22:49+0100\n"
"Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@ msgstr "Azul"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Reproduzir"
@@ -739,9 +742,6 @@ msgstr "Abrir"
msgid "Commands"
msgstr "Comandos"
-msgid "Error while accessing recording!"
-msgstr "Erro a aceder s gravaes!"
-
msgid "Delete recording?"
msgstr "Eliminar gravao?"
@@ -1102,6 +1102,12 @@ msgstr "Mostrar modo de reproduo"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de resumo"
@@ -1384,3 +1390,6 @@ msgstr "Disco"
msgid "free"
msgstr "livre"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Erro a aceder s gravaes!"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 03ae8f0..d5d6421 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2012-11-05 01:28+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@ msgstr "Albastru"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Redare"
@@ -741,9 +744,6 @@ msgstr "Deschide"
msgid "Commands"
msgstr "Comenzi"
-msgid "Error while accessing recording!"
-msgstr "Eroare la accesarea înregistrării"
-
msgid "Delete recording?"
msgstr "Şterg înregistrarea?"
@@ -1104,6 +1104,12 @@ msgstr "Afişează redarea"
msgid "Setup.Replay$Show remaining time"
msgstr "Arată timpul rămas"
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Identificator continuare"
@@ -1386,3 +1392,6 @@ msgstr "Disc"
msgid "free"
msgstr "liber"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Eroare la accesarea înregistrării"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index b58fd9a..892cfe7 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@ msgstr ""
msgid "Key$Info"
msgstr ""
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr ""
@@ -739,9 +742,6 @@ msgstr ""
msgid "Commands"
msgstr ""
-msgid "Error while accessing recording!"
-msgstr " !"
-
msgid "Delete recording?"
msgstr " ?"
@@ -1102,6 +1102,12 @@ msgstr " "
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID "
@@ -1384,3 +1390,6 @@ msgstr ""
msgid "free"
msgstr ""
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr " !"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index ab5035e..48d882b 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2011-02-15 16:29+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr "Modr"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Prehra"
@@ -738,9 +741,6 @@ msgstr "Otvori"
msgid "Commands"
msgstr "Prkazy"
-msgid "Error while accessing recording!"
-msgstr "Chyba pri prstupe k nahrvkam!"
-
msgid "Delete recording?"
msgstr "Zmaza nahrvku?"
@@ -1101,6 +1101,12 @@ msgstr "Zobrazi spsob prehrvania"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID obnovenie"
@@ -1383,3 +1389,6 @@ msgstr "Disk"
msgid "free"
msgstr "volne"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Chyba pri prstupe k nahrvkam!"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 9326d85..75514bc 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
@@ -411,6 +411,9 @@ msgstr "Modra"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Predvajaj"
@@ -739,9 +742,6 @@ msgstr "Odpri"
msgid "Commands"
msgstr "Ukazi"
-msgid "Error while accessing recording!"
-msgstr "Napaka pri dostopu do posnetka!"
-
msgid "Delete recording?"
msgstr "Izbrii posnetek?"
@@ -1102,6 +1102,12 @@ msgstr "Prikai reim predvajanja"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID za predvajanje"
@@ -1384,3 +1390,6 @@ msgstr "Disk"
msgid "free"
msgstr "prosto"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Napaka pri dostopu do posnetka!"
diff --git a/po/sr_SR.po b/po/sr_SR.po
index c7b97d5..5119647 100644
--- a/po/sr_SR.po
+++ b/po/sr_SR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.1\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2011-01-09 15:57+0100\n"
"Last-Translator: Milan Cvijanovi <elcom_cvijo@hotmail.com>\n"
"Language-Team: Serbian <vdr@linuxtv.org>\n"
@@ -412,6 +412,9 @@ msgstr "Plavo"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Start"
@@ -747,9 +750,6 @@ msgstr "Meni"
msgid "Commands"
msgstr "Naredbe"
-msgid "Error while accessing recording!"
-msgstr "Greka prilikom pristupa snimanju!"
-
msgid "Delete recording?"
msgstr "Obrii snimku?"
@@ -1124,6 +1124,12 @@ msgstr "Prikai reim reprodukcije"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka"
@@ -1410,3 +1416,6 @@ msgstr "Disk"
msgid "free"
msgstr "slobodno"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Greka prilikom pristupa snimanju!"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index dc4d620..067adf5 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@ msgstr "Bl"
msgid "Key$Info"
msgstr "Info"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Spela upp"
@@ -741,9 +744,6 @@ msgstr "ppna"
msgid "Commands"
msgstr "Kommandon"
-msgid "Error while accessing recording!"
-msgstr "Inspelningen gr inte att lsa!"
-
msgid "Delete recording?"
msgstr "Ta bort inspelningen?"
@@ -1104,6 +1104,12 @@ msgstr "Visa uppspelningslge"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "teruppta ID"
@@ -1386,3 +1392,6 @@ msgstr "Disk"
msgid "free"
msgstr "ledigt"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Inspelningen gr inte att lsa!"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 1f61944..78177e7 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr "Mavi"
msgid "Key$Info"
msgstr "Bilgi"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Gster"
@@ -738,9 +741,6 @@ msgstr "A"
msgid "Commands"
msgstr "Komutlar"
-msgid "Error while accessing recording!"
-msgstr "Kayt okuma hatas!"
-
msgid "Delete recording?"
msgstr "Kayt sil?"
@@ -1101,6 +1101,12 @@ msgstr "Gsteri bilgisi"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Gsteri ID'si"
@@ -1383,3 +1389,6 @@ msgstr "Disk"
msgid "free"
msgstr "bo"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Kayt okuma hatas!"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 72fe84c..edc5a7c 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2010-04-25 16:35+0200\n"
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
"Language-Team: Ukrainian <vdr@linuxtv.org>\n"
@@ -410,6 +410,9 @@ msgstr "Синя"
msgid "Key$Info"
msgstr "Інфо"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "Програвання"
@@ -738,9 +741,6 @@ msgstr "Відкрити"
msgid "Commands"
msgstr "Команди"
-msgid "Error while accessing recording!"
-msgstr "Помилка доступу до запису!"
-
msgid "Delete recording?"
msgstr "Витерти запис?"
@@ -1101,6 +1101,12 @@ msgstr "Віображати режим перегляду"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID продовження"
@@ -1383,3 +1389,6 @@ msgstr "Диск"
msgid "free"
msgstr "вільно"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "Помилка доступу до запису!"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 56b2de0..73e84fd 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@tvdr.de>\n"
-"POT-Creation-Date: 2012-11-18 14:31+0100\n"
+"POT-Creation-Date: 2012-12-07 14:59+0100\n"
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
@@ -413,6 +413,9 @@ msgstr "蓝"
msgid "Key$Info"
msgstr "信息"
+msgid "Key$Play/Pause"
+msgstr ""
+
msgid "Key$Play"
msgstr "播放"
@@ -741,9 +744,6 @@ msgstr "打开"
msgid "Commands"
msgstr "常用操作命令"
-msgid "Error while accessing recording!"
-msgstr "存取录像错误!"
-
msgid "Delete recording?"
msgstr "是否删除录像?"
@@ -1104,6 +1104,12 @@ msgstr "显示回放模式"
msgid "Setup.Replay$Show remaining time"
msgstr ""
+msgid "Setup.Replay$Progress display time (s)"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay when setting mark"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "恢复 ID"
@@ -1386,3 +1392,6 @@ msgstr "硬盘已使用"
msgid "free"
msgstr "可录像时间"
+
+#~ msgid "Error while accessing recording!"
+#~ msgstr "存取录像错误!"
diff --git a/recording.c b/recording.c
index 497bf2d..87ca8ef 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.73 2012/11/13 13:46:49 kls Exp $
+ * $Id: recording.c 2.78 2012/12/06 09:35:13 kls Exp $
*/
#include "recording.h"
@@ -455,7 +455,7 @@ bool cRecordingInfo::Read(FILE *f)
}
}
break;
- case 'F': framesPerSecond = atof(t);
+ case 'F': framesPerSecond = atod(t);
break;
case 'L': lifetime = atoi(t);
break;
@@ -482,7 +482,7 @@ bool cRecordingInfo::Write(FILE *f, const char *Prefix) const
if (channelID.Valid())
fprintf(f, "%sC %s%s%s\n", Prefix, *channelID.ToString(), channelName ? " " : "", channelName ? channelName : "");
event->Dump(f, Prefix, true);
- fprintf(f, "%sF %.10g\n", Prefix, framesPerSecond);
+ fprintf(f, "%sF %s\n", Prefix, *dtoa(framesPerSecond, "%.10g"));
fprintf(f, "%sP %d\n", Prefix, priority);
fprintf(f, "%sL %d\n", Prefix, lifetime);
if (aux)
@@ -691,7 +691,8 @@ cRecording::cRecording(const char *FileName)
FileName = fileName = strdup(FileName);
if (*(fileName + strlen(fileName) - 1) == '/')
*(fileName + strlen(fileName) - 1) = 0;
- FileName += strlen(VideoDirectory) + 1;
+ if (strstr(FileName, VideoDirectory) == FileName)
+ FileName += strlen(VideoDirectory) + 1;
const char *p = strrchr(FileName, '/');
name = NULL;
@@ -1498,8 +1499,11 @@ int cMarks::GetNumSequences(void)
NumSequences++;
BeginMark = GetNextBegin(EndMark);
}
- if (NumSequences == 0 && BeginMark->Position() > 0)
- NumSequences = 1; // there is only one actual "begin" mark at a non-zero offset, and no actual "end" mark
+ if (BeginMark) {
+ NumSequences++; // the last sequence had no actual "end" mark
+ if (NumSequences == 1 && BeginMark->Position() == 0)
+ NumSequences = 0; // there is only one actual "begin" mark at offset zero, and no actual "end" mark
+ }
}
return NumSequences;
}
@@ -1606,7 +1610,7 @@ void cIndexFileGenerator::Action(void)
int Pid = TsPid(p);
if (Pid == PATPID)
PatPmtParser.ParsePat(p, TS_SIZE);
- else if (Pid == PatPmtParser.PmtPid())
+ else if (PatPmtParser.IsPmtPid(Pid))
PatPmtParser.ParsePmt(p, TS_SIZE);
Length -= TS_SIZE;
p += TS_SIZE;
@@ -1639,6 +1643,14 @@ void cIndexFileGenerator::Action(void)
}
if (IndexFileComplete) {
if (IndexFileWritten) {
+ cRecordingInfo RecordingInfo(recordingName);
+ if (RecordingInfo.Read()) {
+ if (FrameDetector.FramesPerSecond() > 0 && !DoubleEqual(RecordingInfo.FramesPerSecond(), FrameDetector.FramesPerSecond())) {
+ RecordingInfo.SetFramesPerSecond(FrameDetector.FramesPerSecond());
+ RecordingInfo.Write();
+ Recordings.UpdateByName(recordingName);
+ }
+ }
Skins.QueueMessage(mtInfo, tr("Index file regeneration complete"));
return;
}
@@ -2132,7 +2144,7 @@ bool cFileName::GetLastPatPmtVersions(int &PatVersion, int &PmtVersion)
int Pid = TsPid(buf);
if (Pid == PATPID)
PatPmtParser.ParsePat(buf, sizeof(buf));
- else if (Pid == PatPmtParser.PmtPid()) {
+ else if (PatPmtParser.IsPmtPid(Pid)) {
PatPmtParser.ParsePmt(buf, sizeof(buf));
if (PatPmtParser.GetVersions(PatVersion, PmtVersion)) {
close(fd);
diff --git a/remux.c b/remux.c
index e3b34c6..38ad246 100644
--- a/remux.c
+++ b/remux.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.c 2.71 2012/11/18 12:18:08 kls Exp $
+ * $Id: remux.c 2.73 2012/11/25 14:16:11 kls Exp $
*/
#include "remux.h"
@@ -574,7 +574,7 @@ void cPatPmtParser::Reset(void)
{
pmtSize = 0;
patVersion = pmtVersion = -1;
- pmtPid = -1;
+ pmtPids[0] = 0;
vpid = vtype = 0;
ppid = 0;
}
@@ -594,14 +594,17 @@ void cPatPmtParser::ParsePat(const uchar *Data, int Length)
dbgpatpmt("PAT: TSid = %d, c/n = %d, v = %d, s = %d, ls = %d\n", Pat.getTransportStreamId(), Pat.getCurrentNextIndicator(), Pat.getVersionNumber(), Pat.getSectionNumber(), Pat.getLastSectionNumber());
if (patVersion == Pat.getVersionNumber())
return;
+ int NumPmtPids = 0;
SI::PAT::Association assoc;
for (SI::Loop::Iterator it; Pat.associationLoop.getNext(assoc, it); ) {
dbgpatpmt(" isNITPid = %d\n", assoc.isNITPid());
if (!assoc.isNITPid()) {
- pmtPid = assoc.getPid();
+ if (NumPmtPids <= MAX_PMT_PIDS)
+ pmtPids[NumPmtPids++] = assoc.getPid();
dbgpatpmt(" service id = %d, pid = %d\n", assoc.getServiceId(), assoc.getPid());
}
}
+ pmtPids[NumPmtPids] = 0;
patVersion = Pat.getVersionNumber();
}
else
@@ -673,7 +676,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
switch (stream.getStreamType()) {
case 0x01: // STREAMTYPE_11172_VIDEO
case 0x02: // STREAMTYPE_13818_VIDEO
- case 0x1B: // MPEG4
+ case 0x1B: // H.264
vpid = stream.getPid();
vtype = stream.getStreamType();
ppid = Pmt.getPCRPid();
@@ -839,7 +842,7 @@ bool cPatPmtParser::ParsePatPmt(const uchar *Data, int Length)
int Pid = TsPid(Data);
if (Pid == PATPID)
ParsePat(Data, TS_SIZE);
- else if (Pid == PmtPid()) {
+ else if (IsPmtPid(Pid)) {
ParsePmt(Data, TS_SIZE);
if (patVersion >= 0 && pmtVersion >= 0)
return true;
@@ -1107,9 +1110,9 @@ int cMpeg2Parser::Parse(const uchar *Data, int Length, int Pid)
return tsPayload.Used();
}
-// --- cMpeg4Parser ----------------------------------------------------------
+// --- cH264Parser -----------------------------------------------------------
-class cMpeg4Parser : public cFrameParser {
+class cH264Parser : public cFrameParser {
private:
enum eNalUnitType {
nutCodedSliceNonIdr = 1,
@@ -1141,14 +1144,14 @@ private:
void ParseSequenceParameterSet(void);
void ParseSliceHeader(void);
public:
- cMpeg4Parser(void);
- ///< Sets up a new MPEG-4 parser.
+ cH264Parser(void);
+ ///< Sets up a new H.264 parser.
///< This class parses only the data absolutely necessary to determine the
///< frame borders and field count of the given H264 material.
virtual int Parse(const uchar *Data, int Length, int Pid);
};
-cMpeg4Parser::cMpeg4Parser(void)
+cH264Parser::cH264Parser(void)
{
byte = 0;
bit = -1;
@@ -1161,7 +1164,7 @@ cMpeg4Parser::cMpeg4Parser(void)
gotSequenceParameterSet = false;
}
-uchar cMpeg4Parser::GetByte(bool Raw)
+uchar cH264Parser::GetByte(bool Raw)
{
uchar b = tsPayload.GetByte();
if (!Raw) {
@@ -1180,7 +1183,7 @@ uchar cMpeg4Parser::GetByte(bool Raw)
return b;
}
-uchar cMpeg4Parser::GetBit(void)
+uchar cH264Parser::GetBit(void)
{
if (bit < 0) {
byte = GetByte();
@@ -1189,7 +1192,7 @@ uchar cMpeg4Parser::GetBit(void)
return (byte & (1 << bit--)) ? 1 : 0;
}
-uint32_t cMpeg4Parser::GetBits(int Bits)
+uint32_t cH264Parser::GetBits(int Bits)
{
uint32_t b = 0;
while (Bits--)
@@ -1197,7 +1200,7 @@ uint32_t cMpeg4Parser::GetBits(int Bits)
return b;
}
-uint32_t cMpeg4Parser::GetGolombUe(void)
+uint32_t cH264Parser::GetGolombUe(void)
{
int z = -1;
for (int b = 0; !b; z++)
@@ -1205,7 +1208,7 @@ uint32_t cMpeg4Parser::GetGolombUe(void)
return (1 << z) - 1 + GetBits(z);
}
-int32_t cMpeg4Parser::GetGolombSe(void)
+int32_t cH264Parser::GetGolombSe(void)
{
uint32_t v = GetGolombUe();
if (v) {
@@ -1217,7 +1220,7 @@ int32_t cMpeg4Parser::GetGolombSe(void)
return v;
}
-int cMpeg4Parser::Parse(const uchar *Data, int Length, int Pid)
+int cH264Parser::Parse(const uchar *Data, int Length, int Pid)
{
newFrame = independentFrame = false;
tsPayload.Setup(const_cast<uchar *>(Data), Length, Pid);
@@ -1257,14 +1260,14 @@ int cMpeg4Parser::Parse(const uchar *Data, int Length, int Pid)
return tsPayload.Used();
}
-void cMpeg4Parser::ParseAccessUnitDelimiter(void)
+void cH264Parser::ParseAccessUnitDelimiter(void)
{
if (debug && gotSequenceParameterSet)
dbgframes("A");
GetByte(); // primary_pic_type
}
-void cMpeg4Parser::ParseSequenceParameterSet(void)
+void cH264Parser::ParseSequenceParameterSet(void)
{
uchar profile_idc = GetByte(); // profile_idc
GetByte(); // constraint_set[0-5]_flags, reserved_zero_2bits
@@ -1316,7 +1319,7 @@ void cMpeg4Parser::ParseSequenceParameterSet(void)
}
}
-void cMpeg4Parser::ParseSliceHeader(void)
+void cH264Parser::ParseSliceHeader(void)
{
newFrame = true;
GetGolombUe(); // first_mb_in_slice
@@ -1366,13 +1369,13 @@ void cFrameDetector::SetPid(int Pid, int Type)
{
pid = Pid;
type = Type;
- isVideo = type == 0x01 || type == 0x02 || type == 0x1B; // MPEG 1, 2 or 4
+ isVideo = type == 0x01 || type == 0x02 || type == 0x1B; // MPEG 1, 2 or H.264
delete parser;
parser = NULL;
if (type == 0x01 || type == 0x02)
parser = new cMpeg2Parser;
else if (type == 0x1B)
- parser = new cMpeg4Parser;
+ parser = new cH264Parser;
else if (type == 0x04 || type == 0x06) // MPEG audio or AC3 audio
parser = new cAudioParser;
else if (type != 0)
diff --git a/remux.h b/remux.h
index dd17e0d..19f9479 100644
--- a/remux.h
+++ b/remux.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.h 2.35 2012/11/18 12:17:23 kls Exp $
+ * $Id: remux.h 2.36 2012/11/19 10:22:28 kls Exp $
*/
#ifndef __REMUX_H
@@ -327,13 +327,15 @@ public:
// PAT/PMT Parser:
+#define MAX_PMT_PIDS 32
+
class cPatPmtParser {
private:
uchar pmt[MAX_SECTION_SIZE];
int pmtSize;
int patVersion;
int pmtVersion;
- int pmtPid;
+ int pmtPids[MAX_PMT_PIDS + 1]; // list is zero-terminated
int vpid;
int ppid;
int vtype;
@@ -373,9 +375,9 @@ public:
bool GetVersions(int &PatVersion, int &PmtVersion) const;
///< Returns true if a valid PAT/PMT has been parsed and stores
///< the current version numbers in the given variables.
- int PmtPid(void) const { return pmtPid; }
- ///< Returns the PMT pid as defined by the current PAT.
- ///< If no PAT has been received yet, -1 will be returned.
+ bool IsPmtPid(int Pid) const { for (int i = 0; pmtPids[i]; i++) if (pmtPids[i] == Pid) return true; return false; }
+ ///< Returns true if Pid the one of the PMT pids as defined by the current PAT.
+ ///< If no PAT has been received yet, false will be returned.
int Vpid(void) const { return vpid; }
///< Returns the video pid as defined by the current PMT, or 0 if no video
///< pid has been detected, yet.
diff --git a/skins.h b/skins.h
index f716448..2506126 100644
--- a/skins.h
+++ b/skins.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: skins.h 2.5 2012/05/12 11:10:30 kls Exp $
+ * $Id: skins.h 2.7 2012/12/07 17:18:44 kls Exp $
*/
#ifndef __SKINS_H
@@ -17,6 +17,7 @@
#include "recording.h"
#include "themes.h"
#include "thread.h"
+#include "timers.h"
#include "tools.h"
enum eMessageType { mtStatus = 0, mtInfo, mtWarning, mtError }; // will be used to calculate color offsets!
@@ -49,7 +50,7 @@ public:
class cSkinDisplayChannel : public cSkinDisplay {
///< This class is used to display the current channel, together with
- ///< the present and following EPG even. How and to what extent this
+ ///< the present and following EPG event. How and to what extent this
///< is done is totally up to the derived class.
public:
virtual void SetChannel(const cChannel *Channel, int Number) = 0;
@@ -152,13 +153,43 @@ public:
///< this function will be first called for the old current item
///< with Current set to false, and then for the new current item
///< with Current set to true.
- /*TODO
- virtual void SetItem(const cEvent *Event, int Index, bool Current, bool Selectable, bool NowNext???, bool Schedule???);
- virtual void SetItem(const cTimer *Timer, int Index, bool Current, bool Selectable);
- virtual void SetItem(const cChannel *Channel, int Index, bool Current, bool Selectable);
- virtual void SetItem(const cRecording *Recording, int Index, bool Current, bool Selectable);
- --> false: call SetItem(text)
- */
+ virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, int TimerMatch) { return false; }
+ ///< Sets the item at the given Index to Event. See SetItem() for more information.
+ ///< If a derived skin class implements this function, it can display an Event item
+ ///< in a more elaborate way than just a simple line of text.
+ ///< If Channel is not NULL, the channel's name and/or number shall be displayed.
+ ///< If WithDate is true, the date of the Event shall be displayed (in addition to the time).
+ ///< TimerMatch tells how much of this event will be recorded by a timer.
+ ///< If the skin displays the Event item in its own way, it shall return true.
+ ///< The default implementation does nothing and returns false, which results in
+ ///< a call to SetItem() with a proper text.
+ virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) { return false; }
+ ///< Sets the item at the given Index to Timer. See SetItem() for more information.
+ ///< If a derived skin class implements this function, it can display a Timer item
+ ///< in a more elaborate way than just a simple line of text.
+ ///< If the skin displays the Timer item in its own way, it shall return true.
+ ///< The default implementation does nothing and returns false, which results in
+ ///< a call to SetItem() with a proper text.
+ virtual bool SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) { return false; }
+ ///< Sets the item at the given Index to Channel. See SetItem() for more information.
+ ///< If a derived skin class implements this function, it can display a Channel item
+ ///< in a more elaborate way than just a simple line of text.
+ ///< If WithProvider ist true, the provider shall be displayed in addition to the
+ ///< channel's name.
+ ///< If the skin displays the Channel item in its own way, it shall return true.
+ ///< The default implementation does nothing and returns false, which results in
+ ///< a call to SetItem() with a proper text.
+ virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New) { return false; }
+ ///< Sets the item at the given Index to Recording. See SetItem() for more information.
+ ///< If a derived skin class implements this function, it can display a Recording item
+ ///< in a more elaborate way than just a simple line of text.
+ ///< Level is the currently displayed level of the video directory, where 0 is the
+ ///< top level. A value of -1 means that the full path names of the recordings
+ ///< shall be displayed. If Total is greater than 0, this is a directory with the given
+ ///< total number of entries, and New contains the number of new (unwatched) recordings.
+ ///< If the skin displays the Recording item in its own way, it shall return true.
+ ///< The default implementation does nothing and returns false, which results in
+ ///< a call to SetItem() with a proper text.
virtual void SetScrollbar(int Total, int Offset);
///< Sets the Total number of items in the currently displayed list, and the
///< Offset of the first item that is currently displayed (the skin knows how
diff --git a/svdrp.c b/svdrp.c
index f8db847..0313280 100644
--- a/svdrp.c
+++ b/svdrp.c
@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
- * $Id: svdrp.c 2.19 2012/05/12 11:55:18 kls Exp $
+ * $Id: svdrp.c 2.21 2012/12/04 12:08:36 kls Exp $
*/
#include "svdrp.h"
@@ -917,6 +917,10 @@ void cSVDRP::CmdHELP(const char *Option)
void cSVDRP::CmdHITK(const char *Option)
{
if (*Option) {
+ if (!cRemote::Enabled()) {
+ Reply(550, "Remote control currently disabled (key \"%s\" discarded)", Option);
+ return;
+ }
char buf[strlen(Option) + 1];
strcpy(buf, Option);
const char *delim = " \t";
@@ -1268,7 +1272,7 @@ void cSVDRP::CmdMOVC(const char *Option)
Reply(250,"Channel \"%d\" moved to \"%d\"", From, To);
}
else
- Reply(501, "Can't move channel to same postion");
+ Reply(501, "Can't move channel to same position");
}
else
Reply(501, "Channel \"%d\" not defined", To);
diff --git a/timers.c b/timers.c
index a29cf12..ab8e477 100644
--- a/timers.c
+++ b/timers.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.c 2.14 2012/10/16 08:22:39 kls Exp $
+ * $Id: timers.c 2.15 2012/12/07 13:14:00 kls Exp $
*/
#include "timers.h"
@@ -480,7 +480,7 @@ bool cTimer::Matches(time_t t, bool Directly, int Margin) const
#define FULLMATCH 1000
-int cTimer::Matches(const cEvent *Event, int *Overlap) const
+eTimerMatch cTimer::Matches(const cEvent *Event, int *Overlap) const
{
// Overlap is the percentage of the Event's duration that is covered by
// this timer (based on FULLMATCH for finer granularity than just 100).
@@ -758,12 +758,12 @@ cTimer *cTimers::GetMatch(time_t t)
return t0;
}
-cTimer *cTimers::GetMatch(const cEvent *Event, int *Match)
+cTimer *cTimers::GetMatch(const cEvent *Event, eTimerMatch *Match)
{
cTimer *t = NULL;
- int m = tmNone;
+ eTimerMatch m = tmNone;
for (cTimer *ti = First(); ti; ti = Next(ti)) {
- int tm = ti->Matches(Event);
+ eTimerMatch tm = ti->Matches(Event);
if (tm > m) {
t = ti;
m = tm;
diff --git a/timers.h b/timers.h
index e2734c6..cde8b3b 100644
--- a/timers.h
+++ b/timers.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.h 2.4 2012/04/15 13:21:31 kls Exp $
+ * $Id: timers.h 2.5 2012/12/07 13:13:40 kls Exp $
*/
#ifndef __TIMERS_H
@@ -77,7 +77,7 @@ public:
static time_t SetTime(time_t t, int SecondsFromMidnight);
void SetFile(const char *File);
bool Matches(time_t t = 0, bool Directly = false, int Margin = 0) const;
- int Matches(const cEvent *Event, int *Overlap = NULL) const;
+ eTimerMatch Matches(const cEvent *Event, int *Overlap = NULL) const;
bool Expired(void) const;
time_t StartTime(void) const;
time_t StopTime(void) const;
@@ -116,7 +116,7 @@ public:
cTimers(void);
cTimer *GetTimer(cTimer *Timer);
cTimer *GetMatch(time_t t);
- cTimer *GetMatch(const cEvent *Event, int *Match = NULL);
+ cTimer *GetMatch(const cEvent *Event, eTimerMatch *Match = NULL);
cTimer *GetNextActiveTimer(void);
int BeingEdited(void) { return beingEdited; }
void IncBeingEdited(void) { beingEdited++; }
diff --git a/tools.c b/tools.c
index 26c325b..ab46d02 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 2.26 2012/09/30 13:04:14 kls Exp $
+ * $Id: tools.c 2.29 2012/12/08 11:16:30 kls Exp $
*/
#include "tools.h"
@@ -18,6 +18,7 @@ extern "C" {
#include <jpeglib.h>
#undef boolean
}
+#include <locale.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/vfs.h>
@@ -302,6 +303,39 @@ cString AddDirectory(const char *DirName, const char *FileName)
return cString::sprintf("%s/%s", DirName && *DirName ? DirName : ".", FileName);
}
+#define DECIMAL_POINT_C '.'
+
+double atod(const char *s)
+{
+ static lconv *loc = localeconv();
+ if (*loc->decimal_point != DECIMAL_POINT_C) {
+ char buf[strlen(s) + 1];
+ char *p = buf;
+ while (*s) {
+ if (*s == DECIMAL_POINT_C)
+ *p = *loc->decimal_point;
+ else
+ *p = *s;
+ p++;
+ s++;
+ }
+ *p = 0;
+ return atof(buf);
+ }
+ else
+ return atof(s);
+}
+
+cString dtoa(double d, const char *Format)
+{
+ static lconv *loc = localeconv();
+ char buf[16];
+ snprintf(buf, sizeof(buf), Format, d);
+ if (*loc->decimal_point != DECIMAL_POINT_C)
+ strreplace(buf, *loc->decimal_point, DECIMAL_POINT_C);
+ return buf;
+}
+
cString itoa(int n)
{
char buf[16];
@@ -842,7 +876,8 @@ cCharSetConv::cCharSetConv(const char *FromCode, const char *ToCode)
cCharSetConv::~cCharSetConv()
{
free(result);
- iconv_close(cd);
+ if (cd != (iconv_t)-1)
+ iconv_close(cd);
}
void cCharSetConv::SetSystemCharacterTable(const char *CharacterTable)
diff --git a/tools.h b/tools.h
index 3e546a1..70c643f 100644
--- a/tools.h
+++ b/tools.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.h 2.22 2012/09/30 11:02:21 kls Exp $
+ * $Id: tools.h 2.23 2012/12/06 08:59:39 kls Exp $
*/
#ifndef __TOOLS_H
@@ -216,6 +216,14 @@ int64_t StrToNum(const char *s);
bool StrInArray(const char *a[], const char *s);
///< Returns true if the string s is equal to one of the strings pointed
///< to by the (NULL terminated) array a.
+double atod(const char *s);
+ ///< Converts the given string, which is a floating point number using a '.' as
+ ///< the decimal point, to a double value, independent of the currently selected
+ ///< locale.
+cString dtoa(double d, const char *Format = "%f");
+ ///< Converts the given double value to a string, making sure it uses a '.' as
+ ///< the decimal point, independent of the currently selected locale.
+ ///< If Format is given, it will be used instead of the default.
cString itoa(int n);
cString AddDirectory(const char *DirName, const char *FileName);
bool EntriesOnSameFileSystem(const char *File1, const char *File2);
diff --git a/vdr.c b/vdr.c
index 5494cf7..88b8956 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.tvdr.de
*
- * $Id: vdr.c 2.42 2012/10/13 12:48:56 kls Exp $
+ * $Id: vdr.c 2.45 2012/12/06 10:29:23 kls Exp $
*/
#include <getopt.h>
@@ -174,7 +174,6 @@ int main(int argc, char *argv[])
// Initiate locale:
setlocale(LC_ALL, "");
- setlocale(LC_NUMERIC, "C"); // makes sure any floating point numbers written use a decimal point
// Command line options:
@@ -1000,11 +999,11 @@ int main(int argc, char *argv[])
break;
// Direct main menu functions:
#define DirectMainFunction(function)\
- DELETE_MENU;\
+ { DELETE_MENU;\
if (cControl::Control())\
cControl::Control()->Hide();\
Menu = new cMenuMain(function);\
- key = kNone; // nobody else needs to see this key
+ key = kNone; } // nobody else needs to see this key
case kSchedule: DirectMainFunction(osSchedule); break;
case kChannels: DirectMainFunction(osChannels); break;
case kTimers: DirectMainFunction(osTimers); break;
@@ -1089,6 +1088,7 @@ int main(int argc, char *argv[])
key = kNone;
break;
// Pausing live video:
+ case kPlayPause:
case kPause:
if (!cControl::Control()) {
DELETE_MENU;