[vdr] 07/09: Version 2.1.8 VDR developer version 2.1.8 is now available at

Tobias Grimm tiber-guest at moszumanska.debian.org
Sun Aug 30 16:18:10 UTC 2015


This is an automated email from the git hooks/post-receive script.

tiber-guest pushed a commit to annotated tag vdr-2.1.10
in repository vdr.

commit 4ee983a29469e5444a72a6cc31d02fad26b62ffd
Author: Klaus Schmidinger <Klaus (dot) Schmidinger (at) tvdr (dot) de>
Date:   Sun Feb 1 14:55:00 2015 +0100

    Version 2.1.8
    VDR developer version 2.1.8 is now available at
    
           ftp://ftp.tvdr.de/vdr/Developer/vdr-2.1.8.tar.bz2
    
    A 'diff' against the previous version is available at
    
           ftp://ftp.tvdr.de/vdr/Developer/vdr-2.1.7-2.1.8.diff
    
    MD5 checksums:
    
    1d2751e87def9b18b448513f24e635e9  vdr-2.1.8.tar.bz2
    0487e037278f6f6684a7933674910f05  vdr-2.1.7-2.1.8.diff
    
    WARNING:
    ========
    
    This is a *developer* version. Even though *I* use it in my productive
    environment, I strongly recommend that you only use it under controlled
    conditions and for testing and debugging.
    
    From the HISTORY file:
    - Updated the Italian OSD texts (thanks to Diego Pierotto).
    - Fixed "warning: invalid suffix on literal" with GCC 4.8 and C++11 (thanks to Joerg
      Bornkessel).
    - Fixed the link to "svdrpsend (1)" in the vdr.1 man page (thanks to Chris Mayo).
    - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
    - Updated the Romanian OSD texts (thanks to Lucian Muresan).
    - Added functionality based on the "jumpplay" patch from Torsten Kunkel and Thomas
      Günther:
      + The new option "Setup/Replay/Pause replay when jumping to a mark" can be used to
        turn off pausing replay when jumping to an editing mark with the '9' key.
      + The new option "Setup/Replay/Skip edited parts" can be used to automatically skip
        the edited parts of a recording during replay, without the need to actually cut
        the recording.
      + The new option "Setup/Replay/Pause replay at last mark" can be used to make replay
        go into Pause mode when it has reached the last "end" mark.
      + The '8' key for testing an edited sequence now also jumps to the next *end*
        mark if "Setup/Replay/Skip edited parts" is active. This allows for testing edits
        in recordings that have actually been cut, as well as recordings that have not
        been cut, in case "Skip edited parts" is enabled.
    - Added support for "Satellite Channel Routing" (SCR) according to EN50607, also
      known as "JESS" (thanks to Manfred Völkel and Frank Neumann).
    - The keys '1' and '3' can now be used in replay mode to position an editing mark
      in "binary" mode (based on a patch from Rolf Ahrenberg, with modifications by Helmut
      Auer). See MANUAL, section "Editing a Recording".
    - The Yellow button in the "Setup/CAM" menu can now be used to put the selected
      CAM into a mode where it remains assigned to a device that is tuned to the current
      channel until the smart card it contains is activated and the CAM thus starts to
      descramble (see MANUAL, section "Setup/CAM" for details).
    - Updated the Estonian OSD texts (thanks to Arthur Konovalov).
    - Added ARGSDIR to the ONEDIR section of Make.config.template (suggested by Derek
      Kelly).
    - Made cRecording::GetResume() public (suggested by Stefan Braun).
    - Fixed setting the read index in cDvbPlayer::Goto() in case Still is false.
    - The function cDvbPlayer::Goto() now automatically calls Play() if Still is false.
    - Added support for LCN (Logical Channel Numbers), which plugins may use to sort
      channels (thanks to Rolf Ahrenberg).
---
 CONTRIBUTORS         |  11 ++++
 HISTORY              |  58 +++++++++++++++++++
 INSTALL              |   5 +-
 MANUAL               |  71 +++++++++++++++++++++--
 Make.config.template |   3 +-
 channels.c           |  11 +++-
 channels.h           |   5 +-
 ci.c                 |  90 ++++++++++++++++++++++++++++-
 ci.h                 |  23 +++++++-
 config.c             |  17 +++++-
 config.h             |  15 +++--
 device.c             |  16 +++---
 diseqc.c             |  58 +++++++++++++------
 diseqc.conf          |  24 +++++++-
 dvbplayer.c          |  90 ++++++++++++++++++++++++-----
 dvbplayer.h          |   4 +-
 dvbsubtitle.c        |  12 ++--
 keys.h               |   4 +-
 menu.c               | 158 +++++++++++++++++++++++++++++++++++++++++++++------
 menu.h               |  18 +++++-
 nit.c                |  36 +++++++++++-
 po/ar.po             |  33 ++++++++++-
 po/ca_ES.po          |  33 ++++++++++-
 po/cs_CZ.po          |  33 ++++++++++-
 po/da_DK.po          |  33 ++++++++++-
 po/de_DE.po          |  33 ++++++++++-
 po/el_GR.po          |  33 ++++++++++-
 po/es_ES.po          |  33 ++++++++++-
 po/et_EE.po          |  53 +++++++++++++----
 po/fi_FI.po          |  37 +++++++++++-
 po/fr_FR.po          |  33 ++++++++++-
 po/hr_HR.po          |  33 ++++++++++-
 po/hu_HU.po          |  33 ++++++++++-
 po/it_IT.po          |  39 +++++++++++--
 po/lt_LT.po          |  33 ++++++++++-
 po/mk_MK.po          |  33 ++++++++++-
 po/nl_NL.po          |  33 ++++++++++-
 po/nn_NO.po          |  33 ++++++++++-
 po/pl_PL.po          |  33 ++++++++++-
 po/pt_PT.po          |  33 ++++++++++-
 po/ro_RO.po          | 145 +++++++++++++++++++++++++++-------------------
 po/ru_RU.po          |  33 ++++++++++-
 po/sk_SK.po          |  33 ++++++++++-
 po/sl_SI.po          |  33 ++++++++++-
 po/sr_RS.po          |  33 ++++++++++-
 po/sv_SE.po          |  33 ++++++++++-
 po/tr_TR.po          |  33 ++++++++++-
 po/uk_UA.po          |  33 ++++++++++-
 po/zh_CN.po          |  33 ++++++++++-
 recording.c          |  10 ++--
 recording.h          |   6 +-
 remote.c             |   4 +-
 scr.conf             |  22 ++++---
 vdr.1                |   4 +-
 54 files changed, 1636 insertions(+), 205 deletions(-)

diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 988a80f..64edccc 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -624,6 +624,7 @@ Helmut Auer <vdr at helmutauer.de>
  for helping to debug a problem with frame detection in MPEG-2 streams that have "bottom fields"
  or varying GOP structures
  for a patch that was used to implement the command line option --updindex
+ for modifying the "binary skip" patch to move editing marks
 
 Jeremy Hall <jhall at UU.NET>
  for fixing an incomplete initialization of the filter parameters in eit.c
@@ -1192,6 +1193,8 @@ Rolf Ahrenberg <Rolf.Ahrenberg at sci.fi>
  for adding support for "Pilot", "T2-System-Id" and "SISO/MISO" parameters
  for fixing a problem with subtitles not being displayed because the broadcaster
  doesn't set the data's version numbers as required by the DVB standard
+ for the "binary skip" patch
+ for adding support for LCN (Logical Channel Numbers)
 
 Ralf Klueber <ralf.klueber at vodafone.com>
  for reporting a bug in cutting a recording if there is only a single editing mark
@@ -2139,6 +2142,7 @@ Thomas G
  which results in using tr(FileNameChars)
  for fixing handling "none" color entries in XPM files
  for fixing displaying the frame number when setting an editing mark
+ for the "jumpplay" patch
 
 David Woodhouse <dwmw2 at infradead.org>
  for his help in replacing the get/put_unaligned() macros from asm/unaligned.h with
@@ -2677,6 +2681,7 @@ Torsten Kunkel <vdrml at tkunkel.de>
  for pointing out that it was not obvious how to initiate internationalization
  support for a plugin
  for suggesting to add a section about "Logging" to PLUGINS.html
+ for the "jumpplay" patch
 
 Michael Nival <mnival at club-internet.fr>
  for translating OSD texts to the French language
@@ -2824,6 +2829,7 @@ Derek Kelly <user.vdr at gmail.com>
  are no short names at all
  for reporting an incompatible change from DTV_DVBT2_PLP_ID to DTV_STREAM_ID in DVB API 5.8
  for reporting a missing template for DVBDIR in Make.config.template
+ for suggesting to add ARGSDIR to the ONEDIR section of Make.config.template
 
 Marcel Unbehaun <frostworks at gmx.de>
  for adding cRecordingInfo::GetEvent()
@@ -2969,6 +2975,7 @@ Dominik Strasser <dominik at die-strassers.de>
 Joerg Bornkessel <hd_brummy at gentoo.org>
  for adding LDFLAGS to the linker calls in the Makefiles
  for fixing font handling with fontconfig 2.9.0 or newer
+ for fixing "warning: invalid suffix on literal" with GCC 4.8 and C++11
 
 Andreas Oberritter <obi at opendreambox.org>
  for suggesting to retrieve the include path to the freetype2 header files
@@ -2981,6 +2988,7 @@ Frank Neumann <fnu at yavdr.org>
  for suggesting to reduce the thread and I/O priority cCuttingThread::Action()
  for reporting a problem with tuning timeouts when using SCR with multiple tuners
  for fixing the German translation of "VDR will shut down in %s minutes"
+ for adding support for "Satellite Channel Routing" (SCR) according to EN50607 ("JESS")
 
 Gerald Dachs <vdr at dachsweb.de>
  for reporting a problem with checking for minimum line length of 21 characters in
@@ -3045,6 +3053,7 @@ Frank Niederwipper <f.niederwipper at gmail.com>
 
 Chris Mayo <aklhfex at gmail.com>
  for reporting a problem with detecting frames on radio channels
+ for fixing the link to "svdrpsend (1)" in the vdr.1 man page
 
 Dominic Evans <oldmanuk at gmail.com>
  for making the SVDRP command LSTC accepts channel IDs
@@ -3229,6 +3238,7 @@ Stefan Braun <louis.braun at gmx.de>
  for reporting an endless loop in the DrawEllipse() functions for very small ellipses
  for suggesting to add the menu category mcRecordingEdit for marking menus that edit
  recording properties
+ for suggesting to make cRecording::GetResume() public
 
 Jochen Dolze <vdr at dolze.de>
  for changing cThread::SetIOPriority() from "best effort class" to "idle class" in order
@@ -3243,6 +3253,7 @@ Seppo Ingalsuo <seppo.ingalsuo at iki.fi>
 Manfred V�lkel <mvoelkel at digitaldevices.de>
  for suggesting to make all bonded devices (except for the master) turn off their LNB
  power completely to avoid problems when receiving vertically polarized transponders
+ for adding support for "Satellite Channel Routing" (SCR) according to EN50607 ("JESS")
 
 Thomas Maass <mase at setho.org>
  for reporting a difference in the internal sequence of actions when pressing the Blue
diff --git a/HISTORY b/HISTORY
index 6d934eb..2e8be67 100644
--- a/HISTORY
+++ b/HISTORY
@@ -8394,3 +8394,61 @@ Video Disk Recorder Revision History
   do so again with this version to make sure the index is OK.
 - Added the new command line option --updindex, which can be used to update an
   incomplete index of a recording (based on a patch from Helmut Auer).
+
+2015-01-20: Version 2.0.7
+
+- Fixed a possible division by zero in frame rate detection.
+- Fixed a bug in the Makefile when installing plugins with LCLBLD=1 (thanks to
+  Stefan Huelswitt).
+- Fixed jumping to an absolute position via the Red key in case replay was paused
+  (reported by Dieter Ferdinand).
+- Now returning from removing deleted recordings after at most 10 seconds, or if the
+  user presses a remote control key, to keep the system from getting unresponsive
+  when removing a huge number of files (reported by Dieter Ferdinand).
+- Fixed generating the index file of an existing recording in case at the of a TS file
+  there is less data in the buffer than needed by the frame detector. In such a case
+  it was possible that frames were missed, and there was most likely a distortion
+  when replaying that part of a recording. This is mostly a problem for recordings that
+  consist of more than one *.ts file. Single file recordings could only lose some
+  frames at their very end, which probably doesn't matter. At any rate, if you have
+  generated an index file with VDR version 2.0.6 you may want to do so again with this
+  version to make sure the index is OK.
+
+2015-02-01: Version 2.1.8
+
+- Updated the Italian OSD texts (thanks to Diego Pierotto).
+- Fixed "warning: invalid suffix on literal" with GCC 4.8 and C++11 (thanks to Joerg
+  Bornkessel).
+- Fixed the link to "svdrpsend (1)" in the vdr.1 man page (thanks to Chris Mayo).
+- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
+- Updated the Romanian OSD texts (thanks to Lucian Muresan).
+- Added functionality based on the "jumpplay" patch from Torsten Kunkel and Thomas
+  G�nther:
+  + The new option "Setup/Replay/Pause replay when jumping to a mark" can be used to
+    turn off pausing replay when jumping to an editing mark with the '9' key.
+  + The new option "Setup/Replay/Skip edited parts" can be used to automatically skip
+    the edited parts of a recording during replay, without the need to actually cut
+    the recording.
+  + The new option "Setup/Replay/Pause replay at last mark" can be used to make replay
+    go into Pause mode when it has reached the last "end" mark.
+  + The '8' key for testing an edited sequence now also jumps to the next *end*
+    mark if "Setup/Replay/Skip edited parts" is active. This allows for testing edits
+    in recordings that have actually been cut, as well as recordings that have not
+    been cut, in case "Skip edited parts" is enabled.
+- Added support for "Satellite Channel Routing" (SCR) according to EN50607, also
+  known as "JESS" (thanks to Manfred V�lkel and Frank Neumann).
+- The keys '1' and '3' can now be used in replay mode to position an editing mark
+  in "binary" mode (based on a patch from Rolf Ahrenberg, with modifications by Helmut
+  Auer). See MANUAL, section "Editing a Recording".
+- The Yellow button in the "Setup/CAM" menu can now be used to put the selected
+  CAM into a mode where it remains assigned to a device that is tuned to the current
+  channel until the smart card it contains is activated and the CAM thus starts to
+  descramble (see MANUAL, section "Setup/CAM" for details).
+- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
+- Added ARGSDIR to the ONEDIR section of Make.config.template (suggested by Derek
+  Kelly).
+- Made cRecording::GetResume() public (suggested by Stefan Braun).
+- Fixed setting the read index in cDvbPlayer::Goto() in case Still is false.
+- The function cDvbPlayer::Goto() now automatically calls Play() if Still is false.
+- Added support for LCN (Logical Channel Numbers), which plugins may use to sort
+  channels (thanks to Rolf Ahrenberg).
diff --git a/INSTALL b/INSTALL
index 2dff5e3..07581b5 100644
--- a/INSTALL
+++ b/INSTALL
@@ -391,8 +391,9 @@ access your DiSEqC equipment (see man vdr(5) for details).
 A special form of DiSEqC is used to connect several receivers to one signal
 source using only a single cable. This method, known as "Satellite Channel Routing"
 according to EN50494 (aka "Unicable(TM)", "OLT(TM)", "SatCR", "Single Cable
-Distribution", "Channel Stacking System" or "Single Cable Interface") uses
-the file "scr.conf" to specify which SCR channels use which user band frequency.
+Distribution", "Channel Stacking System" or "Single Cable Interface") or
+EN50607 (aka "JESS") uses the file "scr.conf" to specify which SCR channels
+use which user band frequency.
 
 If DVB-S devices need to be connected to the same satellite cable, but no
 "Satellite Channel Routing" is available, they can be set to be "bonded" in
diff --git a/MANUAL b/MANUAL
index 4c7e6c8..4f783c4 100644
--- a/MANUAL
+++ b/MANUAL
@@ -363,15 +363,29 @@ Version 2.0
   - 0       Toggles an editing mark. If the mark indicator shows a red triangle,
             the current mark is deleted. Otherwise a new mark is set at the
             current position.
-  - 4, 6    Move an editing mark back and forward. You need to first jump to
-            an editing mark for this to work.
+  - 1, 3    Move an editing mark back and forward in "binary" mode. Pressing
+            either of these keys for the first time moves the mark 120 seconds
+            in the given direction (configurable via "Setup/Replay/Binary skip
+            initial value"). Further presses of the same key keep moving
+            the mark by the same value. Once the other key is pressed, the value
+            is divided by 2 (hence the name "binary") with every further press
+            of either key. Pressing '1' and '3' alternatingly divides the
+            distance all the way down to a single I-frame. That way a particular
+            place in a recording (for instance the beginning or end of a
+            commercial break) can be found very quickly. If none of these two
+            keys is pressed for a while (configurable via "Setup/Replay/Binary
+            skip timeout") the distance falls back to the initial value.
+            If replay is not in Pause mode, or if there is no mark at the
+            current position, the skip is performed without moving any mark.
+  - 4, 6    Move an editing mark back and forward by one I-frame. 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. 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.
+  - 2       Starts the actual cutting process.
 
   Editing marks are represented by black, vertical lines in the progress display.
   A small black triangle at the top of the mark means that this is a "begin"
@@ -831,7 +845,19 @@ Version 2.0
                          if it is in the process of being reset, its current status
                          is displayed.  The "Red" key can be pressed to enter the CAM
                          menu, and the "Green" key triggers a reset of the selected
-                         slot. The "Ok" key also opens the CAM menu.
+                         slot. The "Ok" key also opens the CAM menu. The "Yellow" key
+                         assigns the selected CAM to a device and switches it to the
+                         current channel. The CAM/device combination remains tuned to
+                         the current channel until the smart card in the CAM has been
+                         activated and thus starts to descramble, or until a recording
+                         needs this device. Pressing the "Yellow" key while a CAM is
+                         in activation mode cancels the activation. The activation mode
+                         remains in effect even if you switch to a different channel
+                         (provided there is more than one device in the system) or
+                         watch a recording. To activate your smart card simply switch
+                         to the channel you want to watch, open the "Setup/CAM" menu,
+                         select the CAM that contains the smart card (in case you
+                         have more than one CAM) and press the "Yellow" key.
 
   Recording:
 
@@ -943,6 +969,43 @@ Version 2.0
                          Defines whether the player automatically goes into Pause
                          mode when setting an editing mark.
 
+  Pause replay when jumping to a mark = yes
+                         By default replay is automatically paused whenever you jump
+                         to an editing mark with the '7' or '9' key in order to allow
+                         you to easily adjust those marks. If this option is set to
+                         'no', the '9' key will not pause if you are in Play mode and
+                         the mark you jump to is not within 3 seconds of the end of
+                         the recording.
+
+  Skip edited parts = no Defines whether the edited parts of a recording are
+                         automatically skipped during replay. This includes jumping
+                         to the first mark if replay starts at the beginning of the
+                         recording, and stopping at the last mark.
+                         In order to work, this option must be enabled before starting
+                         replay.
+
+  Pause replay at last mark = no
+                         If enabled, replay of a recording will go into Pause mode
+                         when it has reached the last "end" mark (if any). Note that
+                         the actual position at which the pause occurs may be a couple
+                         of frames before the last "end" mark, depending on how much
+                         data is buffered by your output device.
+                         In order to work, this option must be enabled before starting
+                         replay.
+
+  Binary skip initial value (s) = 120
+                         Defines the number of seconds to jump from the current replay
+                         position in either direction, when pressing the '1' or '3'
+                         key for the first time after the "Binary skip timeout".
+                         The valid range is 10...600.
+
+  Binary skip timeout (s) = 3
+                         Defines the number of seconds after which pressing the
+                         '1' or '3' key falls back to the "Binary skip initial value".
+                         The valid range is 0...10. Setting the timeout to 0 disables
+                         the binary mode and makes '1' and '3' always skip the number
+                         of seconds configured as the initial value.
+
   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/Make.config.template b/Make.config.template
index dbb5414..88b6286 100644
--- a/Make.config.template
+++ b/Make.config.template
@@ -6,7 +6,7 @@
 # See the main source file 'vdr.c' for copyright information and
 # how to reach the author.
 #
-# $Id: Make.config.template 3.1 2014/04/14 11:43:53 kls Exp $
+# $Id: Make.config.template 3.2 2015/01/30 15:18:47 kls Exp $
 
 ### The C compiler and options:
 
@@ -58,6 +58,7 @@ ifdef ONEDIR
 VIDEODIR     = /video
 CACHEDIR     = $(VIDEODIR)
 CONFDIR      = $(VIDEODIR)
+ARGSDIR      = $(VIDEODIR)/conf.d
 RESDIR       = $(VIDEODIR)
 endif
 
diff --git a/channels.c b/channels.c
index b91df6d..564088f 100644
--- a/channels.c
+++ b/channels.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: channels.c 3.7 2015/01/14 12:15:03 kls Exp $
+ * $Id: channels.c 3.8 2015/02/01 13:47:05 kls Exp $
  */
 
 #include "channels.h"
@@ -248,6 +248,15 @@ void cChannel::SetId(int Nid, int Tid, int Sid, int Rid)
      }
 }
 
+void cChannel::SetLcn(int Lcn)
+{
+  if (lcn != Lcn) {
+     if (Number())
+        dsyslog("changing lcn of channel %d (%s) from %d to %d\n", Number(), name, lcn, Lcn);
+     lcn = Lcn;
+     }
+}
+
 void cChannel::SetName(const char *Name, const char *ShortName, const char *Provider)
 {
   if (!isempty(Name)) {
diff --git a/channels.h b/channels.h
index 7ca1e3e..3323882 100644
--- a/channels.h
+++ b/channels.h
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: channels.h 3.2 2014/01/04 15:01:21 kls Exp $
+ * $Id: channels.h 3.3 2015/02/01 13:30:26 kls Exp $
  */
 
 #ifndef __CHANNELS_H
@@ -121,6 +121,7 @@ private:
   int tid;
   int sid;
   int rid;
+  int lcn;       // Logical channel number assigned by data stream (or -1 if not available)
   int number;    // Sequence number assigned on load
   bool groupSep;
   int __EndData__;
@@ -174,6 +175,7 @@ public:
   int Tid(void) const { return tid; }
   int Sid(void) const { return sid; }
   int Rid(void) const { return rid; }
+  int Lcn(void) const { return lcn; }
   int Number(void) const { return number; }
   void SetNumber(int Number) { number = Number; }
   bool GroupSep(void) const { return groupSep; }
@@ -192,6 +194,7 @@ public:
   void CopyTransponderData(const cChannel *Channel);
   bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
   void SetId(int Nid, int Tid, int Sid, int Rid = 0);
+  void SetLcn(int Lcn);
   void SetName(const char *Name, const char *ShortName, const char *Provider);
   void SetPortalName(const char *PortalName);
   void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, int *Atypes, char ALangs[][MAXLANGCODE2], int *Dpids, int *Dtypes, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
diff --git a/ci.c b/ci.c
index 1072695..b1958bd 100644
--- a/ci.c
+++ b/ci.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: ci.c 3.17 2015/01/15 09:14:57 kls Exp $
+ * $Id: ci.c 3.18 2015/01/30 12:24:53 kls Exp $
  */
 
 #include "ci.h"
@@ -22,6 +22,7 @@
 #include "receiver.h"
 #include "remux.h"
 #include "libsi/si.h"
+#include "skins.h"
 #include "tools.h"
 
 // Set these to 'true' for debug output:
@@ -236,6 +237,53 @@ void cCaPidReceiver::Receive(uchar *Data, int Length)
      }
 }
 
+// --- cCaActivationReceiver -------------------------------------------------
+
+// A receiver that is used to make the device stay on a given channel and
+// keep the CAM slot assigned.
+
+#define UNSCRAMBLE_TIME     5 // seconds of receiving purely unscrambled data before considering the smart card "activated"
+#define TS_PACKET_FACTOR 1024 // only process every TS_PACKET_FACTORth packet to keep the load down
+
+class cCaActivationReceiver : public cReceiver {
+private:
+  cCamSlot *camSlot;
+  time_t lastScrambledTime;
+  int numTsPackets;
+protected:
+  virtual void Receive(uchar *Data, int Length);
+public:
+  cCaActivationReceiver(const cChannel *Channel, cCamSlot *CamSlot);
+  virtual ~cCaActivationReceiver();
+  };
+
+cCaActivationReceiver::cCaActivationReceiver(const cChannel *Channel, cCamSlot *CamSlot)
+:cReceiver(Channel, MINPRIORITY + 1)
+{
+  camSlot = CamSlot;
+  lastScrambledTime = time(NULL);
+  numTsPackets = 0;
+}
+
+cCaActivationReceiver::~cCaActivationReceiver()
+{
+  Detach();
+}
+
+void cCaActivationReceiver::Receive(uchar *Data, int Length)
+{
+  if (numTsPackets++ % TS_PACKET_FACTOR == 0) {
+     time_t Now = time(NULL);
+     if (TsIsScrambled(Data))
+        lastScrambledTime = Now;
+     else if (Now - lastScrambledTime > UNSCRAMBLE_TIME) {
+        dsyslog("CAM %d: activated!", camSlot->SlotNumber());
+        Skins.QueueMessage(mtInfo, tr("CAM activated!"));
+        Detach();
+        }
+     }
+}
+
 // --- cTPDU -----------------------------------------------------------------
 
 #define MAX_TPDU_SIZE  2048
@@ -1696,6 +1744,7 @@ cCamSlot::cCamSlot(cCiAdapter *CiAdapter, bool ReceiveCaPids)
   ciAdapter = CiAdapter;
   assignedDevice = NULL;
   caPidReceiver = ReceiveCaPids ? new cCaPidReceiver : NULL;
+  caActivationReceiver = NULL;
   slotIndex = -1;
   lastModuleStatus = msReset; // avoids initial reset log message
   resetTime = 0;
@@ -1715,6 +1764,7 @@ cCamSlot::~cCamSlot()
   if (assignedDevice)
      assignedDevice->SetCamSlot(NULL);
   delete caPidReceiver;
+  delete caActivationReceiver;
   CamSlots.Del(this, false);
   DeleteAllConnections();
 }
@@ -1735,8 +1785,10 @@ bool cCamSlot::Assign(cDevice *Device, bool Query)
                  Device->SetCamSlot(this);
                  dsyslog("CAM %d: assigned to device %d", slotNumber, Device->DeviceNumber() + 1);
                  }
-              else
+              else {
+                 CancelActivation();
                  dsyslog("CAM %d: unassigned", slotNumber);
+                 }
               }
            else
               return false;
@@ -1772,6 +1824,8 @@ void cCamSlot::DeleteAllConnections(void)
 void cCamSlot::Process(cTPDU *TPDU)
 {
   cMutexLock MutexLock(&mutex);
+  if (caActivationReceiver && !caActivationReceiver->IsAttached())
+     CancelActivation();
   if (TPDU) {
      int n = TPDU->Tcid();
      if (1 <= n && n <= MAX_CONNECTIONS_PER_CAM_SLOT) {
@@ -1795,6 +1849,7 @@ void cCamSlot::Process(cTPDU *TPDU)
                dbgprotocol("Slot %d: no module present\n", slotNumber);
                isyslog("CAM %d: no module present", slotNumber);
                DeleteAllConnections();
+               CancelActivation();
                break;
           case msReset:
                dbgprotocol("Slot %d: module reset\n", slotNumber);
@@ -1856,6 +1911,37 @@ bool cCamSlot::Reset(void)
   return false;
 }
 
+bool cCamSlot::CanActivate(void)
+{
+  return ModuleStatus() == msReady;
+}
+
+void cCamSlot::StartActivation(void)
+{
+  cMutexLock MutexLock(&mutex);
+  if (!caActivationReceiver) {
+     if (cDevice *d = Device()) {
+        if (cChannel *Channel = Channels.GetByNumber(cDevice::CurrentChannel())) {
+           caActivationReceiver = new cCaActivationReceiver(Channel, this);
+           d->AttachReceiver(caActivationReceiver);
+           dsyslog("CAM %d: activating on device %d with channel %d (%s)", SlotNumber(), d->DeviceNumber() + 1, Channel->Number(), Channel->Name());
+           }
+        }
+     }
+}
+
+void cCamSlot::CancelActivation(void)
+{
+  cMutexLock MutexLock(&mutex);
+  delete caActivationReceiver;
+  caActivationReceiver = NULL;
+}
+
+bool cCamSlot::IsActivating(void)
+{
+  return caActivationReceiver;
+}
+
 eModuleStatus cCamSlot::ModuleStatus(void)
 {
   cMutexLock MutexLock(&mutex);
diff --git a/ci.h b/ci.h
index 8fea34f..5a4dc98 100644
--- a/ci.h
+++ b/ci.h
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: ci.h 3.9 2015/01/15 09:18:09 kls Exp $
+ * $Id: ci.h 3.11 2015/01/31 14:36:41 kls Exp $
  */
 
 #ifndef __CI_H
@@ -123,6 +123,7 @@ class cCiTransportConnection;
 class cCiSession;
 class cCiCaProgramData;
 class cCaPidReceiver;
+class cCaActivationReceiver;
 
 class cCamSlot : public cListObject {
   friend class cCiAdapter;
@@ -133,6 +134,7 @@ private:
   cCiAdapter *ciAdapter;
   cDevice *assignedDevice;
   cCaPidReceiver *caPidReceiver;
+  cCaActivationReceiver *caActivationReceiver;
   int slotIndex;
   int slotNumber;
   cCiTransportConnection *tc[MAX_CONNECTIONS_PER_CAM_SLOT + 1];  // connection numbering starts with 1
@@ -182,6 +184,23 @@ public:
   virtual bool Reset(void);
        ///< Resets the CAM in this slot.
        ///< Returns true if the operation was successful.
+  virtual bool CanActivate(void);
+       ///< Returns true if there is a CAM in this slot that can be put into
+       ///< activation mode.
+  virtual void StartActivation(void);
+       ///< Puts the CAM in this slot into a mode where an inserted smart card
+       ///< can be activated. The default action is to make IsActivating() return
+       ///< true, which causes the device this CAM slot is attached to to never
+       ///< automatically detach any receivers with negative priority if the
+       ///< PIDs they want to receive are not decrypted by the CAM.
+       ///< StartActivation() must be called *after* the CAM slot has been assigned
+       ///< to a device. The CAM slot will stay in activation mode until the CAM
+       ///< begins to decrypt, a call to CancelActivation() is made, or the device
+       ///< is needed for a recording.
+  virtual void CancelActivation(void);
+       ///< Cancels a previously started activation (if any).
+  virtual bool IsActivating(void);
+       ///< Returns true if this CAM slot is currently activating a smart card.
   virtual eModuleStatus ModuleStatus(void);
        ///< Returns the status of the CAM in this slot.
   virtual const char *GetCamName(void);
@@ -201,7 +220,7 @@ public:
   virtual cCiEnquiry *GetEnquiry(void);
        ///< Gets a pending enquiry, or NULL if there is no enquiry.
   int Priority(void);
-       ///< Returns the priority if the device this slot is currently assigned
+       ///< Returns the priority of the device this slot is currently assigned
        ///< to, or IDLEPRIORITY if it is not assigned to any device.
   virtual bool ProvidesCa(const int *CaSystemIds);
        ///< Returns true if the CAM in this slot provides one of the given
diff --git a/config.c b/config.c
index af791b3..9e6f301 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 3.3 2015/01/12 14:32:17 kls Exp $
+ * $Id: config.c 3.6 2015/01/29 09:01:30 kls Exp $
  */
 
 #include "config.h"
@@ -470,6 +470,11 @@ cSetup::cSetup(void)
   ShowRemainingTime = 0;
   ProgressDisplayTime = 0;
   PauseOnMarkSet = 0;
+  PauseOnMarkJump = 1;
+  SkipEdited = 0;
+  PauseAtLastMark = 0;
+  BinarySkipInitial = 120;
+  BinarySkipTimeout = 3;
   ResumeID = 0;
   CurrentChannel = -1;
   CurrentVolume = MAXVOLUME;
@@ -683,6 +688,11 @@ bool cSetup::Parse(const char *Name, const char *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, "PauseOnMarkJump"))     PauseOnMarkJump    = atoi(Value);
+  else if (!strcasecmp(Name, "SkipEdited"))          SkipEdited         = atoi(Value);
+  else if (!strcasecmp(Name, "PauseAtLastMark"))     PauseAtLastMark    = atoi(Value);
+  else if (!strcasecmp(Name, "BinarySkipInitial"))   BinarySkipInitial  = atoi(Value);
+  else if (!strcasecmp(Name, "BinarySkipTimeout"))   BinarySkipTimeout  = 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);
@@ -800,6 +810,11 @@ bool cSetup::Save(void)
   Store("ShowRemainingTime",  ShowRemainingTime);
   Store("ProgressDisplayTime",ProgressDisplayTime);
   Store("PauseOnMarkSet",     PauseOnMarkSet);
+  Store("PauseOnMarkJump",    PauseOnMarkJump);
+  Store("SkipEdited",         SkipEdited);
+  Store("PauseAtLastMark",    PauseAtLastMark);
+  Store("BinarySkipInitial",  BinarySkipInitial);
+  Store("BinarySkipTimeout",  BinarySkipTimeout);
   Store("ResumeID",           ResumeID);
   Store("CurrentChannel",     CurrentChannel);
   Store("CurrentVolume",      CurrentVolume);
diff --git a/config.h b/config.h
index c8808ed..6eeda2c 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 3.10 2015/01/12 14:32:17 kls Exp $
+ * $Id: config.h 3.13 2015/01/27 10:50:11 kls Exp $
  */
 
 #ifndef __CONFIG_H
@@ -22,13 +22,13 @@
 
 // VDR's own version number:
 
-#define VDRVERSION  "2.1.7"
-#define VDRVERSNUM   20107  // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION  "2.1.8"
+#define VDRVERSNUM   20108  // Version * 10000 + Major * 100 + Minor
 
 // The plugin API's version number:
 
-#define APIVERSION  "2.1.7"
-#define APIVERSNUM   20107  // Version * 10000 + Major * 100 + Minor
+#define APIVERSION  "2.1.8"
+#define APIVERSNUM   20108  // 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
@@ -333,6 +333,11 @@ public:
   int ShowRemainingTime;
   int ProgressDisplayTime;
   int PauseOnMarkSet;
+  int PauseOnMarkJump;
+  int SkipEdited;
+  int PauseAtLastMark;
+  int BinarySkipInitial;
+  int BinarySkipTimeout;
   int ResumeID;
   int CurrentChannel;
   int CurrentVolume;
diff --git a/device.c b/device.c
index 3d57611..14ab07d 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 3.19 2015/01/14 12:02:44 kls Exp $
+ * $Id: device.c 3.20 2015/01/30 12:11:30 kls Exp $
  */
 
 #include "device.h"
@@ -756,7 +756,7 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
 
   cDevice *Device = (LiveView && IsPrimaryDevice()) ? GetDevice(Channel, LIVEPRIORITY, true) : this;
 
-  bool NeedsTransferMode = Device != this;
+  bool NeedsTransferMode = LiveView && Device != PrimaryDevice();
   // If the CAM slot wants the TS data, we need to switch to Transfer Mode:
   if (!NeedsTransferMode && LiveView && IsPrimaryDevice() && CamSlot() && CamSlot()->WantsTsData())
      NeedsTransferMode = true;
@@ -767,7 +767,7 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
   // use the card that actually can receive it and transfer data from there:
 
   if (NeedsTransferMode) {
-     if (Device && CanReplay()) {
+     if (Device && PrimaryDevice()->CanReplay()) {
         if (Device->SetChannel(Channel, false) == scrOk) // calling SetChannel() directly, not SwitchChannel()!
            cControl::Launch(new cTransferControl(Device, Channel));
         else
@@ -1585,13 +1585,13 @@ void cDevice::Action(void)
                  bool DetachReceivers = false;
                  bool DescramblingOk = false;
                  int CamSlotNumber = 0;
+                 cCamSlot *cs = NULL;
                  if (startScrambleDetection) {
-                    cCamSlot *cs = CamSlot();
+                    cs = CamSlot();
                     CamSlotNumber = cs ? cs->SlotNumber() : 0;
                     if (CamSlotNumber) {
-                       bool Scrambled = b[3] & TS_SCRAMBLING_CONTROL;
                        int t = time(NULL) - startScrambleDetection;
-                       if (Scrambled) {
+                       if (TsIsScrambled(b)) {
                           if (t > TS_SCRAMBLING_TIMEOUT)
                              DetachReceivers = true;
                           }
@@ -1605,7 +1605,7 @@ void cDevice::Action(void)
                  Lock();
                  for (int i = 0; i < MAXRECEIVERS; i++) {
                      if (receiver[i] && receiver[i]->WantsPid(Pid)) {
-                        if (DetachReceivers) {
+                        if (DetachReceivers && cs && (!cs->IsActivating() || receiver[i]->Priority() >= LIVEPRIORITY)) {
                            dsyslog("detaching receiver - won't decrypt channel %s with CAM %d", *receiver[i]->ChannelID().ToString(), CamSlotNumber);
                            ChannelCamRelations.SetChecked(receiver[i]->ChannelID(), CamSlotNumber);
                            Detach(receiver[i]);
@@ -1704,7 +1704,7 @@ void cDevice::Detach(cReceiver *Receiver)
   if (camSlot) {
      if (Receiver->priority > MINPRIORITY) { // priority check to avoid an infinite loop with the CAM slot's caPidReceiver
         camSlot->StartDecrypting();
-        if (!camSlot->IsDecrypting())
+        if (!camSlot->IsDecrypting() && !camSlot->IsActivating())
            camSlot->Assign(NULL);
         }
      }
diff --git a/diseqc.c b/diseqc.c
index 2517caf..de64257 100644
--- a/diseqc.c
+++ b/diseqc.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: diseqc.c 3.3 2013/12/28 11:33:08 kls Exp $
+ * $Id: diseqc.c 3.4 2015/01/26 12:02:14 kls Exp $
  */
 
 #include "diseqc.h"
@@ -164,7 +164,7 @@ bool cScr::Parse(const char *s)
   bool result = false;
   int fields = sscanf(s, "%d %u %d", &channel, &userBand, &pin);
   if (fields == 2 || fields == 3) {
-     if (channel >= 0 && channel < 8) {
+     if (channel >= 0 && channel < 32) {
         result = true;
         if (fields == 3 && (pin < 0 || pin > 255)) {
            esyslog("Error: invalid SCR pin '%d'", pin);
@@ -255,26 +255,52 @@ bool cDiseqc::Parse(const char *s)
 
 uint cDiseqc::SetScrFrequency(uint SatFrequency, const cScr *Scr, uint8_t *Codes) const
 {
-  uint t = SatFrequency == 0 ? 0 : (SatFrequency + Scr->UserBand() + 2) / 4 - 350; // '+ 2' together with '/ 4' results in rounding!
-  if (t < 1024 && Scr->Channel() >= 0 && Scr->Channel() < 8) {
-     Codes[3] = t >> 8 | (t == 0 ? 0 : scrBank << 2) | Scr->Channel() << 5;
-     Codes[4] = t;
-     if (t)
-        return (t + 350) * 4 - SatFrequency;
+  if ((Codes[0] & 0xF0) == 0x70 ) { // EN50607 aka JESS
+     uint t = SatFrequency == 0 ? 0 : (SatFrequency - 100);
+     if (t < 2048 && Scr->Channel() >= 0 && Scr->Channel() < 32) {
+        Codes[1] = t >> 8 | Scr->Channel() << 3;
+        Codes[2] = t;
+        Codes[3] = (t == 0 ? 0 : scrBank);
+        if (t)
+           return Scr->UserBand();
+        }
+     }
+  else { // EN50494 aka Unicable
+     uint t = SatFrequency == 0 ? 0 : (SatFrequency + Scr->UserBand() + 2) / 4 - 350; // '+ 2' together with '/ 4' results in rounding!
+     if (t < 1024 && Scr->Channel() >= 0 && Scr->Channel() < 8) {
+        Codes[3] = t >> 8 | (t == 0 ? 0 : scrBank << 2) | Scr->Channel() << 5;
+        Codes[4] = t;
+        if (t)
+           return (t + 350) * 4 - SatFrequency;
+        }
      }
+  esyslog("ERROR: invalid SCR channel number %d or frequency %d", Scr->Channel(),SatFrequency);
   return 0;
 }
 
 int cDiseqc::SetScrPin(const cScr *Scr, uint8_t *Codes) const
 {
-  if (Scr->Pin() >= 0 && Scr->Pin() <= 255) {
-     Codes[2] = 0x5C;
-     Codes[5] = Scr->Pin();
-     return 6;
+  if ((Codes[0] & 0xF0) == 0x70 ) { // EN50607 aka JESS
+     if (Scr->Pin() >= 0 && Scr->Pin() <= 255) {
+        Codes[0] = 0x71;
+        Codes[4] = Scr->Pin();
+        return 5;
+        }
+     else {
+        Codes[0] = 0x70;
+        return 4;
+        }
      }
-  else {
-     Codes[2] = 0x5A;
-     return 5;
+  else { // EN50494 aka Unicable
+     if (Scr->Pin() >= 0 && Scr->Pin() <= 255) {
+        Codes[2] = 0x5C;
+        Codes[5] = Scr->Pin();
+        return 6;
+        }
+     else {
+        Codes[2] = 0x5A;
+        return 5;
+        }
      }
 }
 
@@ -319,7 +345,7 @@ const char *cDiseqc::GetScrBank(const char *s) const
   char *p = NULL;
   errno = 0;
   int n = strtol(s, &p, 10);
-  if (!errno && p != s && n >= 0 && n < 8) {
+  if (!errno && p != s && n >= 0 && n < 256) {
      if (parsing) {
         if (scrBank < 0)
            scrBank = n;
diff --git a/diseqc.conf b/diseqc.conf
index 4c48ecc..77324b8 100644
--- a/diseqc.conf
+++ b/diseqc.conf
@@ -82,7 +82,7 @@ S13.0E  99999 H 10600  t V W15 [E0 10 38 F7] W15 B W15 T
 # S19.2E  12110 V 11080 t v
 # S19.2E  99999 V 10720 t v
 #
-# SCR (Satellite Channel Routing):
+# SCR (Satellite Channel Routing) EN50494:
 #
 # S19.2E  11700 V  9750  t V W10 S0 [E0 10 5A 00 00] W10 v
 # S19.2E  99999 V 10600  t V W10 S1 [E0 10 5A 00 00] W10 v
@@ -94,6 +94,28 @@ S13.0E  99999 H 10600  t V W15 [E0 10 38 F7] W15 B W15 T
 # S13.0E  11700 H  9750  t V W10 S6 [E0 10 5A 00 00] W10 v
 # S13.0E  99999 H 10600  t V W10 S7 [E0 10 5A 00 00] W10 v
 #
+# SCR (Satellite Channel Routing) EN50607 "JESS":
+#
+# S19.2E  11700 V  9750  t V W10 S0 [70 00 00 00] W10 v
+# S19.2E  99999 V 10600  t V W10 S1 [70 00 00 00] W10 v
+# S19.2E  11700 H  9750  t V W10 S2 [70 00 00 00] W10 v
+# S19.2E  99999 H 10600  t V W10 S3 [70 00 00 00] W10 v
+#
+# S13.0E  11700 V  9750  t V W10 S4 [70 00 00 00] W10 v
+# S13.0E  99999 V 10600  t V W10 S5 [70 00 00 00] W10 v
+# S13.0E  11700 H  9750  t V W10 S6 [70 00 00 00] W10 v
+# S13.0E  99999 H 10600  t V W10 S7 [70 00 00 00] W10 v
+#
+# S23.0E  11700 V  9750  t V W10 S8 [70 00 00 00] W10 v
+# S23.0E  99999 V 10600  t V W10 S9 [70 00 00 00] W10 v
+# S23.0E  11700 H  9750  t V W10 S10 [70 00 00 00] W10 v
+# S23.0E  99999 H 10600  t V W10 S11 [70 00 00 00] W10 v
+#
+# S28.2E  11700 V  9750  t V W10 S12 [70 00 00 00] W10 v
+# S28.2E  99999 V 10600  t V W10 S13 [70 00 00 00] W10 v
+# S28.2E  11700 H  9750  t V W10 S14 [70 00 00 00] W10 v
+# S28.2E  99999 H 10600  t V W10 S15 [70 00 00 00] W10 v
+#
 # Positioner for steerable dish:
 #
 # S360E  11700 V  9750  t V W20 P W20 t v
diff --git a/dvbplayer.c b/dvbplayer.c
index 1858cb9..0d7b390 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbplayer.c 3.1 2013/12/25 13:24:07 kls Exp $
+ * $Id: dvbplayer.c 3.3 2015/02/01 10:45:41 kls Exp $
  */
 
 #include "dvbplayer.h"
@@ -211,6 +211,7 @@ private:
   cNonBlockingFileReader *nonBlockingFileReader;
   cRingBufferFrame *ringBuffer;
   cPtsIndex ptsIndex;
+  cMarks marks;
   cFileName *fileName;
   cIndexFile *index;
   cUnbufferedFile *replayFile;
@@ -296,6 +297,8 @@ cDvbPlayer::cDvbPlayer(const char *FileName, bool PauseLive)
      }
   else if (PauseLive)
      framesPerSecond = cRecording(FileName).FramesPerSecond(); // the fps rate might have changed from the default
+  if (Setup.SkipEdited || Setup.PauseAtLastMark)
+     marks.Load(FileName, framesPerSecond, isPesRecording);
 }
 
 cDvbPlayer::~cDvbPlayer()
@@ -402,8 +405,19 @@ void cDvbPlayer::Action(void)
   int pc = 0;
 
   readIndex = Resume();
-  if (readIndex >= 0)
+  if (readIndex > 0)
      isyslog("resuming replay at index %d (%s)", readIndex, *IndexToHMSF(readIndex, true, framesPerSecond));
+  else if (Setup.SkipEdited) {
+     if (marks.First() && index) {
+        int Index = marks.First()->Position();
+        uint16_t FileNumber;
+        off_t FileOffset;
+        if (index->Get(Index, &FileNumber, &FileOffset) && NextFile(FileNumber, FileOffset)) {
+           isyslog("starting replay at first mark %d (%s)", Index, *IndexToHMSF(Index, true, framesPerSecond));
+           readIndex = Index;
+           }
+        }
+     }
 
   nonBlockingFileReader = new cNonBlockingFileReader;
   int Length = 0;
@@ -413,6 +427,8 @@ void cDvbPlayer::Action(void)
   uint32_t LastStc = 0;
   int LastReadIFrame = -1;
   int SwitchToPlayFrame = 0;
+  bool CutIn = false;
+  bool AtLastMark = false;
 
   if (pauseLive)
      Goto(0, true);
@@ -431,7 +447,7 @@ void cDvbPlayer::Action(void)
 
           // Read the next frame from the file:
 
-          if (playMode != pmStill && playMode != pmPause) {
+          if (playMode != pmStill && playMode != pmPause && !AtLastMark) {
              if (!readFrame && (replayFile || readIndex >= 0)) {
                 if (!nonBlockingFileReader->Reading()) {
                    if (!SwitchToPlayFrame && (playMode == pmFast || (playMode == pmSlow && playDir == pdBackward))) {
@@ -468,8 +484,30 @@ void cDvbPlayer::Action(void)
                    else if (index) {
                       uint16_t FileNumber;
                       off_t FileOffset;
-                      if (index->Get(readIndex + 1, &FileNumber, &FileOffset, &readIndependent, &Length) && NextFile(FileNumber, FileOffset))
+                      if (index->Get(readIndex + 1, &FileNumber, &FileOffset, &readIndependent, &Length) && NextFile(FileNumber, FileOffset)) {
                          readIndex++;
+                         if (Setup.SkipEdited || Setup.PauseAtLastMark) {
+                            marks.Update();
+                            cMark *m = marks.Get(readIndex);
+                            if (m && (m->Index() & 0x01) != 0) { // we're at an end mark
+                               m = marks.GetNextBegin(m);
+                               int Index = -1;
+                               if (m)
+                                  Index = m->Position(); // skip to next begin mark
+                               else if (Setup.PauseAtLastMark)
+                                  AtLastMark = true; // triggers going into Pause mode
+                               else if (index->IsStillRecording())
+                                  Index = index->GetNextIFrame(index->Last() - int(round(MAXSTUCKATEOF * framesPerSecond)), false); // skip, but stay off end of live-recordings
+                               else
+                                  AtLastMark = true; // triggers stopping replay
+                               if (Setup.SkipEdited && Index > readIndex) {
+                                  isyslog("skipping from %d (%s) to %d (%s)", readIndex - 1, *IndexToHMSF(readIndex - 1, true, framesPerSecond), Index, *IndexToHMSF(Index, true, framesPerSecond));
+                                  readIndex = Index;
+                                  CutIn = true;
+                                  }
+                               }
+                            }
+                         }
                       else
                          eof = true;
                       }
@@ -512,6 +550,11 @@ void cDvbPlayer::Action(void)
              // Store the frame in the buffer:
 
              if (readFrame) {
+                if (CutIn) {
+                   if (isPesRecording)
+                      cRemux::SetBrokenLink(readFrame->Data(), readFrame->Count());
+                   CutIn = false;
+                   }
                 if (ringBuffer->Put(readFrame))
                    readFrame = NULL;
                 else
@@ -578,8 +621,17 @@ void cDvbPlayer::Action(void)
                 p = NULL;
                 }
              }
-          else
+          else {
+             if (AtLastMark) {
+                if (Setup.PauseAtLastMark) {
+                   playMode = pmPause;
+                   AtLastMark = false;
+                   }
+                else
+                   eof = true;
+                }
              Sleep = true;
+             }
 
           // Handle hitting begin/end of recording:
 
@@ -800,18 +852,26 @@ void cDvbPlayer::Goto(int Index, bool Still)
      off_t FileOffset;
      int Length;
      Index = index->GetNextIFrame(Index, false, &FileNumber, &FileOffset, &Length);
-     if (Index >= 0 && NextFile(FileNumber, FileOffset) && Still) {
-        uchar b[MAXFRAMESIZE];
-        int r = ReadFrame(replayFile, b, Length, sizeof(b));
-        if (r > 0) {
-           if (playMode == pmPause)
-              DevicePlay();
-           DeviceStillPicture(b, r);
-           ptsIndex.Put(isPesRecording ? PesGetPts(b) : TsGetPts(b, r), Index);
+     if (Index >= 0) {
+        if (Still) {
+           if (NextFile(FileNumber, FileOffset)) {
+              uchar b[MAXFRAMESIZE];
+              int r = ReadFrame(replayFile, b, Length, sizeof(b));
+              if (r > 0) {
+                 if (playMode == pmPause)
+                    DevicePlay();
+                 DeviceStillPicture(b, r);
+                 ptsIndex.Put(isPesRecording ? PesGetPts(b) : TsGetPts(b, r), Index);
+                 }
+              playMode = pmStill;
+              readIndex = Index;
+              }
+           }
+        else {
+           readIndex = Index - 1; // Action() will first increment it!
+           Play();
            }
-        playMode = pmStill;
         }
-     readIndex = Index;
      }
 }
 
diff --git a/dvbplayer.h b/dvbplayer.h
index 7c75951..678c969 100644
--- a/dvbplayer.h
+++ b/dvbplayer.h
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbplayer.h 3.0 2012/02/19 11:40:36 kls Exp $
+ * $Id: dvbplayer.h 3.1 2015/02/01 11:20:54 kls Exp $
  */
 
 #ifndef __DVBPLAYER_H
@@ -56,7 +56,7 @@ public:
        // and >0 if this is multi speed mode.
   void Goto(int Index, bool Still = false);
        // Positions to the given index and displays that frame as a still picture
-       // if Still is true.
+       // if Still is true. If Still is false, Play() will be called.
   };
 
 #endif //__DVBPLAYER_H
diff --git a/dvbsubtitle.c b/dvbsubtitle.c
index 5df8cdb..d5ae60b 100644
--- a/dvbsubtitle.c
+++ b/dvbsubtitle.c
@@ -7,7 +7,7 @@
  * Original author: Marco Schluessler <marco at lordzodiac.de>
  * With some input from the "subtitles plugin" by Pekka Virtanen <pekka.virtanen at sci.fi>
  *
- * $Id: dvbsubtitle.c 3.9 2015/01/14 11:31:09 kls Exp $
+ * $Id: dvbsubtitle.c 3.10 2015/01/20 14:53:57 kls Exp $
  */
 
 #include "dvbsubtitle.h"
@@ -1042,7 +1042,7 @@ void cDvbSubtitlePage::Parse(int64_t Pts, cBitStream &bs)
     default: dbgpages("unknown page state: %d<br>\n", pageState);
     }
   bs.SkipBits(2); // reserved
-  dbgpages("<hr>\n<b>page</b> id %d version %d pts %"PRId64" timeout %d state %d<br>\n", pageId, pageVersionNumber, pts, pageTimeout, pageState);
+  dbgpages("<hr>\n<b>page</b> id %d version %d pts %" PRId64 " timeout %d state %d<br>\n", pageId, pageVersionNumber, pts, pageTimeout, pageState);
   regionRefs.Clear();
   while (!bs.IsEOF())
         regionRefs.Add(new cSubtitleRegionRef(bs));
@@ -1073,7 +1073,7 @@ void cDvbSubtitlePage::ParsePgs(int64_t Pts, cBitStream &bs)
     default: dbgpages("unknown page state: %d<br>\n", pageState);
     }
   bs.SkipBits(6);
-  dbgpages("<hr>\n<b>page</b> id %d version %d pts %"PRId64" timeout %d state %d<br>\n", pageId, pageVersionNumber, pts, pageTimeout, pageState);
+  dbgpages("<hr>\n<b>page</b> id %d version %d pts %" PRId64 " timeout %d state %d<br>\n", pageId, pageVersionNumber, pts, pageTimeout, pageState);
   regionRefs.Clear();
   pending = true;
 }
@@ -1384,7 +1384,7 @@ int cDvbSubtitleConverter::ConvertFragments(const uchar *Data, int Length)
      if (Length > PayloadOffset + SubstreamHeaderLength) {
         int64_t pts = PesHasPts(Data) ? PesGetPts(Data) : -1;
         if (pts >= 0)
-           dbgconverter("converter PTS: %"PRId64"<br>\n", pts);
+           dbgconverter("converter PTS: %" PRId64 "<br>\n", pts);
         const uchar *data = Data + PayloadOffset + SubstreamHeaderLength; // skip substream header
         int length = Length - PayloadOffset - SubstreamHeaderLength; // skip substream header
         if (ResetSubtitleAssembler)
@@ -1420,7 +1420,7 @@ int cDvbSubtitleConverter::Convert(const uchar *Data, int Length)
      if (Length > PayloadOffset) {
         int64_t pts = PesHasPts(Data) ? PesGetPts(Data) : -1;
         if (pts >= 0)
-           dbgconverter("converter PTS: %"PRId64"<br>\n", pts);
+           dbgconverter("converter PTS: %" PRId64 "<br>\n", pts);
         const uchar *data = Data + PayloadOffset;
         int length = Length - PayloadOffset;
         if (length > 0) {
@@ -1488,7 +1488,7 @@ void cDvbSubtitleConverter::Action(void)
                         dbgoutput("showing bitmap #%d of %d<br>\n", sb->Index() + 1, bitmaps->Count());
                         sb->Draw(osd);
                         Timeout.Set(sb->Timeout() * 1000);
-                        dbgconverter("PTS: %"PRId64"  STC: %"PRId64" (%"PRId64") timeout: %d<br>\n", sb->Pts(), STC, Delta, sb->Timeout());
+                        dbgconverter("PTS: %" PRId64 "  STC: %" PRId64 " (%" PRId64 ") timeout: %d<br>\n", sb->Pts(), STC, Delta, sb->Timeout());
                         }
                      }
                   else
diff --git a/keys.h b/keys.h
index 4586548..5e861a5 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 3.0 2012/12/04 12:51:25 kls Exp $
+ * $Id: keys.h 3.1 2015/01/27 10:45:18 kls Exp $
  */
 
 #ifndef __KEYS_H
@@ -65,6 +65,8 @@ enum eKeys { // "Up" and "Down" must be the first two keys!
 
 // This is in preparation for having more key codes:
 #define kMarkToggle      k0
+#define kMarkSkipBack    k1
+#define kMarkSkipForward k3
 #define kMarkMoveBack    k4
 #define kMarkMoveForward k6
 #define kMarkJumpBack    k7
diff --git a/menu.c b/menu.c
index a48bfda..16f98c4 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 3.28 2015/01/15 11:14:21 kls Exp $
+ * $Id: menu.c 3.35 2015/02/01 10:42:11 kls Exp $
  */
 
 #include "menu.h"
@@ -3419,7 +3419,7 @@ cMenuSetupCAMItem::cMenuSetupCAMItem(cCamSlot *CamSlot)
 
 bool cMenuSetupCAMItem::Changed(void)
 {
-  char buffer[32];
+  const char *Activating = "";
   const char *CamName = camSlot->GetCamName();
   if (!CamName) {
      switch (camSlot->ModuleStatus()) {
@@ -3429,7 +3429,10 @@ bool cMenuSetupCAMItem::Changed(void)
        default:        CamName = "-"; break;
        }
      }
-  snprintf(buffer, sizeof(buffer), " %d %s", camSlot->SlotNumber(), CamName);
+  else if (camSlot->IsActivating())
+     // TRANSLATORS: note the leading blank!
+     Activating = tr(" (activating)");
+  cString buffer = cString::sprintf(" %d %s%s", camSlot->SlotNumber(), CamName, Activating);
   if (strcmp(buffer, Text()) != 0) {
      SetText(buffer);
      return true;
@@ -3439,8 +3442,11 @@ bool cMenuSetupCAMItem::Changed(void)
 
 class cMenuSetupCAM : public cMenuSetupBase {
 private:
+  const char *activationHelp;
   eOSState Menu(void);
   eOSState Reset(void);
+  eOSState Activate(void);
+  void SetHelpKeys(void);
 public:
   cMenuSetupCAM(void);
   virtual eOSState ProcessKey(eKeys Key);
@@ -3448,13 +3454,33 @@ public:
 
 cMenuSetupCAM::cMenuSetupCAM(void)
 {
+  activationHelp = NULL;
   SetMenuCategory(mcSetupCam);
   SetSection(tr("CAM"));
   SetCols(15);
   SetHasHotkeys();
   for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot))
       Add(new cMenuSetupCAMItem(CamSlot));
-  SetHelp(tr("Button$Menu"), tr("Button$Reset"));
+  SetHelpKeys();
+}
+
+void cMenuSetupCAM::SetHelpKeys(void)
+{
+  if (HasSubMenu())
+     return;
+  cMenuSetupCAMItem *item = (cMenuSetupCAMItem *)Get(Current());
+  const char *NewActivationHelp = "";
+  if (item) {
+     cCamSlot *CamSlot = item->CamSlot();
+     if (CamSlot->IsActivating())
+        NewActivationHelp = tr("Button$Cancel activation");
+     else if (CamSlot->CanActivate())
+        NewActivationHelp = tr("Button$Activate");
+     }
+  if (NewActivationHelp != activationHelp) {
+     activationHelp = NewActivationHelp;
+     SetHelp(tr("Button$Menu"), tr("Button$Reset"), activationHelp);
+     }
 }
 
 eOSState cMenuSetupCAM::Menu(void)
@@ -3484,6 +3510,43 @@ eOSState cMenuSetupCAM::Menu(void)
   return osContinue;
 }
 
+eOSState cMenuSetupCAM::Activate(void)
+{
+  cMenuSetupCAMItem *item = (cMenuSetupCAMItem *)Get(Current());
+  if (item) {
+     cCamSlot *CamSlot = item->CamSlot();
+     if (CamSlot->IsActivating())
+        CamSlot->CancelActivation();
+     else if (CamSlot->CanActivate()) {
+        if (CamSlot->Priority() < LIVEPRIORITY) { // don't interrupt recordings
+           if (cChannel *Channel = Channels.GetByNumber(cDevice::CurrentChannel())) {
+              for (int i = 0; i < cDevice::NumDevices(); i++) {
+                  if (cDevice *Device = cDevice::GetDevice(i)) {
+                     if (Device->ProvidesChannel(Channel)) {
+                        if (Device->Priority() < LIVEPRIORITY) { // don't interrupt recordings
+                           if (CamSlot->CanActivate()) {
+                              if (CamSlot->Assign(Device, true)) { // query
+                                 cControl::Shutdown(); // must end transfer mode before assigning CAM, otherwise it might be unassigned again
+                                 if (CamSlot->Assign(Device)) {
+                                    if (Device->SwitchChannel(Channel, true)) {
+                                       CamSlot->StartActivation();
+                                       return osContinue;
+                                       }
+                                    }
+                                 }
+                              }
+                           }
+                        }
+                     }
+                  }
+              }
+           }
+        Skins.Message(mtError, tr("Can't activate CAM!"));
+        }
+     }
+  return osContinue;
+}
+
 eOSState cMenuSetupCAM::Reset(void)
 {
   cMenuSetupCAMItem *item = (cMenuSetupCAMItem *)Get(Current());
@@ -3505,12 +3568,14 @@ eOSState cMenuSetupCAM::ProcessKey(eKeys Key)
        case kOk:
        case kRed:    return Menu();
        case kGreen:  state = Reset(); break;
+       case kYellow: state = Activate(); break;
        default: break;
        }
      for (cMenuSetupCAMItem *ci = (cMenuSetupCAMItem *)First(); ci; ci = (cMenuSetupCAMItem *)ci->Next()) {
          if (ci->Changed())
             DisplayItem(ci);
          }
+     SetHelpKeys();
      }
   return state;
 }
@@ -3571,6 +3636,11 @@ cMenuSetupReplay::cMenuSetupReplay(void)
   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 cMenuEditBoolItem(tr("Setup.Replay$Pause replay when jumping to a mark"), &data.PauseOnMarkJump));
+  Add(new cMenuEditBoolItem(tr("Setup.Replay$Skip edited parts"), &data.SkipEdited));
+  Add(new cMenuEditBoolItem(tr("Setup.Replay$Pause replay at last mark"), &data.PauseAtLastMark));
+  Add(new cMenuEditIntItem( tr("Setup.Replay$Binary skip initial value (s)"), &data.BinarySkipInitial, 10, 600));
+  Add(new cMenuEditIntItem( tr("Setup.Replay$Binary skip timeout (s)"), &data.BinarySkipTimeout, 0, 10));
   Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
 }
 
@@ -4910,6 +4980,39 @@ bool cRecordControls::StateChanged(int &State)
   return Result;
 }
 
+// --- cBinarySkipper --------------------------------------------------------
+
+cBinarySkipper::cBinarySkipper(void)
+{
+  initialValue = NULL;
+  currentValue = 0;
+  framesPerSecond = 0;
+  lastKey = kNone;
+}
+
+void cBinarySkipper::Initialize(int *InitialValue, double FramesPerSecond)
+{
+  initialValue = InitialValue;
+  framesPerSecond = FramesPerSecond;
+  currentValue = 0;
+}
+
+int cBinarySkipper::GetValue(eKeys Key)
+{
+  if (!initialValue)
+     return 0;
+  if (timeout.TimedOut()) {
+     currentValue = int(round(*initialValue * framesPerSecond));
+     lastKey = Key;
+     }
+  else if (Key != lastKey) {
+     currentValue /= 2;
+     lastKey = kNone; // once the direction has changed, every further call halves the value
+     }
+  timeout.Set(Setup.BinarySkipTimeout * 1000);
+  return max(currentValue, 1);
+}
+
 // --- cReplayControl --------------------------------------------------------
 
 cReplayControl *cReplayControl::currentReplayControl = NULL;
@@ -4931,6 +5034,7 @@ cReplayControl::cReplayControl(bool PauseLive)
   cRecording Recording(fileName);
   cStatus::MsgReplaying(this, Recording.Name(), Recording.FileName(), true);
   marks.Load(fileName, Recording.FramesPerSecond(), Recording.IsPesRecording());
+  binarySkipper.Initialize(&Setup.BinarySkipInitial, Recording.FramesPerSecond());
   SetTrackDescriptions(false);
   if (Setup.ProgressDisplayTime)
      ShowTimed(Setup.ProgressDisplayTime);
@@ -5158,8 +5262,6 @@ void cReplayControl::TimeSearchProcess(eKeys Key)
             Seconds = min(Total - STAY_SECONDS_OFF_END, Seconds);
             bool Still = Key == kDown || Key == kPause || Key == kOk;
             Goto(SecondsToFrames(Seconds, FramesPerSecond()), Still);
-            if (!Still)
-               Play();
             }
          timeSearchActive = false;
          break;
@@ -5223,6 +5325,14 @@ void cReplayControl::MarkJump(bool Forward)
   if (GetIndex(Current, Total)) {
      if (marks.Count()) {
         if (cMark *m = Forward ? marks.GetNext(Current) : marks.GetPrev(Current)) {
+           if (!Setup.PauseOnMarkJump) {
+              bool Playing, Fwd;
+              int Speed;
+              if (GetReplayMode(Playing, Fwd, Speed) && Playing && Forward && m->Position() < Total - SecondsToFrames(3, FramesPerSecond())) {
+                 Goto(m->Position());
+                 return;
+                 }
+              }
            Goto(m->Position(), true);
            displayFrames = true;
            return;
@@ -5234,26 +5344,40 @@ void cReplayControl::MarkJump(bool Forward)
      }
 }
 
-void cReplayControl::MarkMove(bool Forward)
+void cReplayControl::MarkMove(int Frames, bool MarkRequired)
 {
   int Current, Total;
   if (GetIndex(Current, Total)) {
-     if (cMark *m = marks.Get(Current)) {
+     bool Play, Forward;
+     int Speed;
+     GetReplayMode(Play, Forward, Speed);
+     cMark *m = marks.Get(Current);
+     if (!Play && m) {
         displayFrames = true;
-        int p = SkipFrames(Forward ? 1 : -1);
         cMark *m2;
-        if (Forward) {
+        if (Frames > 0) {
+           // Handle marks at the same offset:
            while ((m2 = marks.Next(m)) != NULL && m2->Position() == m->Position())
                  m = m2;
+           // Don't skip the next mark:
+           if ((m2 = marks.Next(m)) != NULL)
+              Frames = min(Frames, m2->Position() - m->Position() - 1);
            }
         else {
+           // Handle marks at the same offset:
            while ((m2 = marks.Prev(m)) != NULL && m2->Position() == m->Position())
                  m = m2;
+           // Don't skip the next mark:
+           if ((m2 = marks.Prev(m)) != NULL)
+              Frames = -min(-Frames, m->Position() - m2->Position() - 1);
            }
+        int p = SkipFrames(Frames);
         m->SetPosition(p);
         Goto(m->Position(), true);
         marksModified = true;
         }
+     else if (!MarkRequired)
+        Goto(SkipFrames(Frames), !Play);
      }
 }
 
@@ -5287,12 +5411,10 @@ void cReplayControl::EditTest(void)
      if (!m)
         m = marks.GetNext(Current);
      if (m) {
-        if ((m->Index() & 0x01) != 0)
+        if ((m->Index() & 0x01) != 0 && !Setup.SkipEdited) // when skipping edited parts we also need to jump to end marks
            m = marks.Next(m);
-        if (m) {
+        if (m)
            Goto(m->Position() - SecondsToFrames(3, FramesPerSecond()));
-           Play();
-           }
         }
      }
 }
@@ -5384,9 +5506,13 @@ eOSState cReplayControl::ProcessKey(eKeys Key)
         case kMarkJumpForward|k_Repeat:
         case kMarkJumpForward: MarkJump(true); break;
         case kMarkMoveBack|k_Repeat:
-        case kMarkMoveBack:    MarkMove(false); break;
+        case kMarkMoveBack:    MarkMove(-1, true); break;
         case kMarkMoveForward|k_Repeat:
-        case kMarkMoveForward: MarkMove(true); break;
+        case kMarkMoveForward: MarkMove(+1, true); break;
+        case kMarkSkipBack|k_Repeat:
+        case kMarkSkipBack:    MarkMove(-binarySkipper.GetValue(RAWKEY(Key)), false); break;
+        case kMarkSkipForward|k_Repeat:
+        case kMarkSkipForward: MarkMove(+binarySkipper.GetValue(RAWKEY(Key)), false); break;
         case kEditCut:         EditCut(); break;
         case kEditTest:        EditTest(); break;
         default: {
diff --git a/menu.h b/menu.h
index 87670c7..f602b96 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 3.6 2015/01/15 11:12:57 kls Exp $
+ * $Id: menu.h 3.7 2015/01/27 11:38:20 kls Exp $
  */
 
 #ifndef __MENU_H
@@ -270,9 +270,23 @@ public:
   static bool StateChanged(int &State);
   };
 
+class cBinarySkipper {
+private:
+  int *initialValue;
+  int currentValue;
+  double framesPerSecond;
+  eKeys lastKey;
+  cTimeMs timeout;
+public:
+  cBinarySkipper(void);
+  void Initialize(int *InitialValue, double FramesPerSecond);
+  int GetValue(eKeys Key);
+  };
+
 class cReplayControl : public cDvbPlayerControl {
 private:
   cSkinDisplayReplay *displayReplay;
+  cBinarySkipper binarySkipper;
   cMarks marks;
   bool marksModified;
   bool visible, modeOnly, shown, displayFrames;
@@ -292,7 +306,7 @@ private:
   bool ShowProgress(bool Initial);
   void MarkToggle(void);
   void MarkJump(bool Forward);
-  void MarkMove(bool Forward);
+  void MarkMove(int Frames, bool MarkRequired);
   void EditCut(void);
   void EditTest(void);
 public:
diff --git a/nit.c b/nit.c
index f3fe923..d9ec1f8 100644
--- a/nit.c
+++ b/nit.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: nit.c 3.3 2014/03/16 10:38:31 kls Exp $
+ * $Id: nit.c 3.4 2015/02/01 13:46:00 kls Exp $
  */
 
 #include "nit.h"
@@ -357,6 +357,40 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
                    }
                  }
                  break;
+            case SI::LogicalChannelDescriptorTag: {
+                 SI::LogicalChannelDescriptor *lcd = (SI::LogicalChannelDescriptor *)d;
+                 SI::LogicalChannelDescriptor::LogicalChannel LogicalChannel;
+                 for (SI::Loop::Iterator it4; lcd->logicalChannelLoop.getNext(LogicalChannel, it4); ) {
+                     int lcn = LogicalChannel.getLogicalChannelNumber();
+                     int sid = LogicalChannel.getServiceId();
+                     if (LogicalChannel.getVisibleServiceFlag()) {
+                        for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
+                            if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
+                               Channel->SetLcn(lcn);
+                               break;
+                               }
+                            }
+                        }
+                     }
+                 }
+                 break;
+            case SI::HdSimulcastLogicalChannelDescriptorTag: {
+                 SI::HdSimulcastLogicalChannelDescriptor *lcd = (SI::HdSimulcastLogicalChannelDescriptor *)d;
+                 SI::HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel HdSimulcastLogicalChannel;
+                 for (SI::Loop::Iterator it4; lcd->hdSimulcastLogicalChannelLoop.getNext(HdSimulcastLogicalChannel, it4); ) {
+                     int lcn = HdSimulcastLogicalChannel.getLogicalChannelNumber();
+                     int sid = HdSimulcastLogicalChannel.getServiceId();
+                     if (HdSimulcastLogicalChannel.getVisibleServiceFlag()) {
+                        for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
+                            if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
+                               Channel->SetLcn(lcn);
+                               break;
+                               }
+                            }
+                        }
+                     }
+                 }
+                 break;
             default: ;
             }
           delete d;
diff --git a/po/ar.po b/po/ar.po
index 827973c..e26a430 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2008-10-16 11:16-0400\n"
 "Last-Translator: Osama Alrawab <alrawab at hotmail.com>\n"
 "Language-Team: Arabic <ar at li.org>\n"
@@ -23,6 +23,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** قناة خاطئة ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "القناة غير متاحة"
 
@@ -1112,9 +1115,19 @@ msgstr "الكامة موجودة"
 msgid "CAM ready"
 msgstr "الكامة جاهزة"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "الكامة "
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "القائمة"
 
@@ -1127,6 +1140,9 @@ msgstr "فتح قائمة الكامة"
 msgid "Can't open CAM menu!"
 msgstr "تعذر فتح قائمة الكامة"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "الكامة مستخدمة الان هل تريد اعادة تشغيلها"
 
@@ -1220,6 +1236,21 @@ msgstr "Progress display time (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pause replay when setting mark"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "رقم المواصلة"
 
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 207901c..4d91025 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2008-03-02 19:02+0100\n"
 "Last-Translator: Luca Olivetti <luca at ventoso.org>\n"
 "Language-Team: Catalan <vdr at linuxtv.org>\n"
@@ -22,6 +22,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Canal incorrecte ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Canal no disponible!"
 
@@ -1111,9 +1114,19 @@ msgstr "CAM present"
 msgid "CAM ready"
 msgstr "CAM preparat"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Men�"
 
@@ -1126,6 +1139,9 @@ msgstr "Obrint menu CAM..."
 msgid "Can't open CAM menu!"
 msgstr "No puc obrir el men� de la CAM!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM en �s - reiniciar?"
 
@@ -1219,6 +1235,21 @@ msgstr "Visualitzaci
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pausar reproducci� en establir marca"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de Continuar"
 
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index d39933d..78fa408 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2010-05-06 11:00+0200\n"
 "Last-Translator: Aleš Juřík <ajurik at quick.cz>\n"
 "Language-Team: Czech <vdr at linuxtv.org>\n"
@@ -22,6 +22,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Neplatný kanál ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanál není dostupný!"
 
@@ -1111,9 +1114,19 @@ msgstr "CAM přítomen"
 msgid "CAM ready"
 msgstr "CAM připraven"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1126,6 +1139,9 @@ msgstr "Otevírá se menu CAM..."
 msgid "Can't open CAM menu!"
 msgstr "Menu CAM není dostupné"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM se používá - opravdu restartovat?"
 
@@ -1219,6 +1235,21 @@ msgstr "Čas zobrazení ukazatele průběhu (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pozastavit přehrávání při nastavování značky"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID obnovení"
 
diff --git a/po/da_DK.po b/po/da_DK.po
index 5436690..c2773f8 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Mogens Elneff <mogens at elneff.dk>\n"
 "Language-Team: Danish <vdr at linuxtv.org>\n"
@@ -19,6 +19,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Ugyldig kanal! ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanal er ikke tilg�ngelig!"
 
@@ -1108,9 +1111,19 @@ msgstr "CAM til stede"
 msgid "CAM ready"
 msgstr "CAM klar"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1123,6 +1136,9 @@ msgstr "
 msgid "Can't open CAM menu!"
 msgstr "Kan ikke �bne CAM menuen!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM er i brug - virkelig nulstille?"
 
@@ -1216,6 +1232,21 @@ msgstr ""
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr ""
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Genoptagelses ID"
 
diff --git a/po/de_DE.po b/po/de_DE.po
index 4512b44..2d0ff56 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2010-01-16 16:46+0100\n"
 "Last-Translator: Klaus Schmidinger <vdr at tvdr.de>\n"
 "Language-Team: German <vdr at linuxtv.org>\n"
@@ -19,6 +19,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Ung�ltiger Kanal ***"
 
+msgid "CAM activated!"
+msgstr "CAM aktiviert!"
+
 msgid "Channel not available!"
 msgstr "Kanal nicht verf�gbar!"
 
@@ -1108,9 +1111,19 @@ msgstr "CAM vorhanden"
 msgid "CAM ready"
 msgstr "CAM bereit"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr " (wird aktiviert)"
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr "Aktivierung abbrechen"
+
+msgid "Button$Activate"
+msgstr "Aktivieren"
+
 msgid "Button$Menu"
 msgstr "Men�"
 
@@ -1123,6 +1136,9 @@ msgstr "CAM-Men
 msgid "Can't open CAM menu!"
 msgstr "CAM-Men� kann nicht ge�ffnet werden!"
 
+msgid "Can't activate CAM!"
+msgstr "CAM kann nicht aktiviert werden!"
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM wird benutzt - wirklich zur�cksetzen?"
 
@@ -1216,6 +1232,21 @@ msgstr "Anzeigedauer f
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pause beim Setzen einer Schnittmarke"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr "Pause beim Sprung auf eine Schnittmarke"
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr "Herausgeschnittene Teile �berspringen"
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr "Pause an der letzten Schnittmarke"
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr "Anfangswert f�r bin�res Springen (s)"
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr "Zeitlimit f�r bin�res Springen (ms)"
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Wiedergabe-ID"
 
diff --git a/po/el_GR.po b/po/el_GR.po
index a6c4c30..ab60f68 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Dimitrios Dimitrakos <mail at dimitrios.de>\n"
 "Language-Team: Greek <vdr at linuxtv.org>\n"
@@ -19,6 +19,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** ����� ������ ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "�� ������ ��� ����� ���������!"
 
@@ -1108,9 +1111,19 @@ msgstr ""
 msgid "CAM ready"
 msgstr ""
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "M����"
 
@@ -1123,6 +1136,9 @@ msgstr ""
 msgid "Can't open CAM menu!"
 msgstr "������� � �������� ��� CAM �����!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr ""
 
@@ -1216,6 +1232,21 @@ msgstr ""
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr ""
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID ������������"
 
diff --git a/po/es_ES.po b/po/es_ES.po
index e142518..40d7208 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2008-03-02 19:02+0100\n"
 "Last-Translator: Luca Olivetti <luca at ventoso.org>\n"
 "Language-Team: Spanish <vdr at linuxtv.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Canal no v�lido ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "�Canal no disponible!"
 
@@ -1109,9 +1112,19 @@ msgstr "CAM presente"
 msgid "CAM ready"
 msgstr "CAM preparado"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Men�"
 
@@ -1124,6 +1137,9 @@ msgstr "Abriendo el men
 msgid "Can't open CAM menu!"
 msgstr "�No se puede abrir el men� CAM!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM en uso - �reiniciar?"
 
@@ -1217,6 +1233,21 @@ msgstr "Visualizaci
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pausar reproducci�n al establecer marca"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de continuaci�n"
 
diff --git a/po/et_EE.po b/po/et_EE.po
index 75ba6be..607f734 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Arthur Konovalov <artlov at gmail.com>\n"
 "Language-Team: Estonian <vdr at linuxtv.org>\n"
@@ -17,7 +17,10 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 msgid "*** Invalid Channel ***"
-msgstr "*** Vigane kanal ***"
+msgstr "*** Kehtetu kanal ***"
+
+msgid "CAM activated!"
+msgstr ""
 
 msgid "Channel not available!"
 msgstr "Kanal ei ole kättesaadav!"
@@ -74,16 +77,16 @@ msgid "Rolloff"
 msgstr "Rolloff"
 
 msgid "StreamId"
-msgstr "Stream-tunnus"
+msgstr "Vootunnus"
 
 msgid "Pilot"
-msgstr ""
+msgstr "Piloot"
 
 msgid "T2SystemId"
-msgstr ""
+msgstr "T2 tunnus"
 
 msgid "SISO/MISO"
-msgstr ""
+msgstr "SISO/MISO"
 
 msgid "Starting EPG scan"
 msgstr "EPG skaneerimine käivitatud"
@@ -573,10 +576,10 @@ msgid "Sid"
 msgstr "Sid"
 
 msgid "Nid"
-msgstr ""
+msgstr "Nid"
 
 msgid "Tid"
-msgstr ""
+msgstr "Tid"
 
 msgid "Channel settings are not unique!"
 msgstr "Kanaliseaded ei ole unikaalsed!"
@@ -597,7 +600,7 @@ msgid "Button$Mark"
 msgstr "Märkimine"
 
 msgid "Channel is being used by a timer!"
-msgstr "Kanal on taimeri kasutuses!"
+msgstr "Kanal on taimeris kasutusel!"
 
 msgid "Delete channel?"
 msgstr "Kustutada kanal?"
@@ -1108,9 +1111,19 @@ msgstr "CAM esitletud"
 msgid "CAM ready"
 msgstr "CAM töövalmis"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menüü"
 
@@ -1123,6 +1136,9 @@ msgstr "CAM-menüü avamine..."
 msgid "Can't open CAM menu!"
 msgstr "Ei saa avada CAM menüüd!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM on kasutuses - taaskäivitada?"
 
@@ -1216,6 +1232,21 @@ msgstr "Edenemiseriba kuvamise aeg (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Taasesituse peatamine markeri seadmisel"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Jätkamise ID"
 
@@ -1253,10 +1284,10 @@ msgid "Setup.Miscellaneous$Initial volume"
 msgstr "Helitugevus käivitamisel"
 
 msgid "Setup.Miscellaneous$Volume steps"
-msgstr ""
+msgstr "Helitugevuse samm"
 
 msgid "Setup.Miscellaneous$Volume linearize"
-msgstr ""
+msgstr "Helitugevuse lineariseerimine"
 
 msgid "Setup.Miscellaneous$Channels wrap"
 msgstr "Kanalite ringkerimine"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 2668c44..cd59767 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2007-08-15 15:52+0200\n"
 "Last-Translator: Matti Lehtimäki <matti.lehtimaki at gmail.com>\n"
 "Language-Team: Finnish <vdr at linuxtv.org>\n"
@@ -23,6 +23,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Virheellinen kanavavalinta ***"
 
+msgid "CAM activated!"
+msgstr "CA-moduuli aktivoitu!"
+
 msgid "Channel not available!"
 msgstr "Kanava ei ole käytettävissä!"
 
@@ -1112,9 +1115,19 @@ msgstr "CAM havaittu"
 msgid "CAM ready"
 msgstr "CAM valmis"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr " (aktivoidaan)"
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr "Peruuta aktivointi"
+
+msgid "Button$Activate"
+msgstr "Aktivoi"
+
 msgid "Button$Menu"
 msgstr "Valikko"
 
@@ -1127,6 +1140,9 @@ msgstr "Avataan CA-moduulin valikkoa..."
 msgid "Can't open CAM menu!"
 msgstr "CA-moduulin valikko ei saatavilla"
 
+msgid "Can't activate CAM!"
+msgstr "CA-moduulin aktivointi epäonnistui!"
+
 msgid "CAM is in use - really reset?"
 msgstr "CA-moduuli käytössä - nollataanko?"
 
@@ -1220,6 +1236,21 @@ msgstr "Näytä toiston kontrollit (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pysäytä toisto asetettaessa merkki"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr "Pysäytä toisto hypätessä merkkiin"
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr "Ohita muokatut kohdat"
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr "Pysäytä toisto viimeiseen merkkiin"
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr "Binäärihypyn oletuspituus (s)"
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr "Binäärihypyn odotusaika (ms)"
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Tallenteen paluutunniste"
 
@@ -1257,10 +1288,10 @@ msgid "Setup.Miscellaneous$Initial volume"
 msgstr "Äänenvoimakkuus käynnistettäessä"
 
 msgid "Setup.Miscellaneous$Volume steps"
-msgstr ""
+msgstr "Äänenvoimakkuuden askellus"
 
 msgid "Setup.Miscellaneous$Volume linearize"
-msgstr ""
+msgstr "Äänenvoimakkuuden lineaarisuus"
 
 msgid "Setup.Miscellaneous$Channels wrap"
 msgstr "Kanavien rullaus"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 01c9750..65ed4fb 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-02-24 12:56+0100\n"
 "Last-Translator: Dominique Plu <dplu at free.fr>\n"
 "Language-Team: French <vdr at linuxtv.org>\n"
@@ -29,6 +29,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Chaîne invalide ! ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Chaîne non disponible !"
 
@@ -1118,9 +1121,19 @@ msgstr "CAM présent"
 msgid "CAM ready"
 msgstr "CAM prêt"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1133,6 +1146,9 @@ msgstr "Ouverture du menu CAM..."
 msgid "Can't open CAM menu!"
 msgstr "Impossible d'ouvrir le menu CAM !"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM en cours d'utilisation - confirmer réinitialisation ?"
 
@@ -1226,6 +1242,21 @@ msgstr "Afficher la barre de progression (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Arrêt lecture si ajout marqueur"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de reprise"
 
diff --git a/po/hr_HR.po b/po/hr_HR.po
index eea285b..b9bd700 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2008-03-17 19:00+0100\n"
 "Last-Translator: Adrian Caval <anrxc at sysphere.org>\n"
 "Language-Team: Croatian <vdr at linuxtv.org>\n"
@@ -21,6 +21,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Neispravan Program ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Program nije dostupan!"
 
@@ -1110,9 +1113,19 @@ msgstr "CAM prisutan"
 msgid "CAM ready"
 msgstr "CAM spreman"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Izbornik"
 
@@ -1125,6 +1138,9 @@ msgstr "Otvaram CAM izbornik..."
 msgid "Can't open CAM menu!"
 msgstr "Otvaranje CAM izbornika neuspje�no!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM se koristi - ponovno pokrenuti unato�?"
 
@@ -1218,6 +1234,21 @@ msgstr ""
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr ""
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID nastavka"
 
diff --git a/po/hu_HU.po b/po/hu_HU.po
index f4b3734..00dcc24 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-03-01 19:22+0200\n"
 "Last-Translator: István Füley <ifuley at tigercomp.ro>\n"
 "Language-Team: Hungarian <vdr at linuxtv.org>\n"
@@ -23,6 +23,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Érvénytelen csatorna ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Az adó nem elérhető"
 
@@ -1112,9 +1115,19 @@ msgstr "CAM jelen"
 msgid "CAM ready"
 msgstr "CAM működik"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menü"
 
@@ -1127,6 +1140,9 @@ msgstr "A CAM menü nyitása..."
 msgid "Can't open CAM menu!"
 msgstr "A CAM menü nem nyitható"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM használatban - valóban újraindítjuk?"
 
@@ -1220,6 +1236,21 @@ msgstr "Lejátszósáv felüntetésének ideje (mp)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "A visszajátszás megállítása vágópont kijelölésnél"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Lejátszás ID"
 
diff --git a/po/it_IT.po b/po/it_IT.po
index fbec241..7845643 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
-"PO-Revision-Date: 2014-03-23 00:54+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
+"PO-Revision-Date: 2015-01-19 20:19+0100\n"
 "Last-Translator: Diego Pierotto <vdr-italian at tiscali.it>\n"
 "Language-Team: Italian <vdr at linuxtv.org>\n"
 "Language: it\n"
@@ -26,6 +26,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Canale NON valido ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Canale non disponibile!"
 
@@ -1115,9 +1118,19 @@ msgstr "La CAM è presente"
 msgid "CAM ready"
 msgstr "La CAM è pronta"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "Accesso condizionato CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1130,6 +1143,9 @@ msgstr "Apertura menu CAM..."
 msgid "Can't open CAM menu!"
 msgstr "Impossibile aprire il menu CAM!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "La CAM è in uso - vuoi reimpostarla?"
 
@@ -1223,6 +1239,21 @@ msgstr "Mostra tempo elaborazione (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pausa riproduzione durante impostazione segni"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID di ripristino"
 
@@ -1260,10 +1291,10 @@ msgid "Setup.Miscellaneous$Initial volume"
 msgstr "Volume iniziale"
 
 msgid "Setup.Miscellaneous$Volume steps"
-msgstr ""
+msgstr "Volume a tacche"
 
 msgid "Setup.Miscellaneous$Volume linearize"
-msgstr ""
+msgstr "Volume lineare"
 
 msgid "Setup.Miscellaneous$Channels wrap"
 msgstr "Riavvolgimento canali"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index 10f1ffe..e76ef36 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2010-10-30 11:55+0200\n"
 "Last-Translator: Valdemaras Pipiras <varas at ambernet.lt>\n"
 "Language-Team: Lithuanian <vdr at linuxtv.org>\n"
@@ -19,6 +19,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Blogi kanalo nustatymai ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanalas neegzistuoja!"
 
@@ -1108,9 +1111,19 @@ msgstr "Dekodavimo modulis (CAM) įjungtas"
 msgid "CAM ready"
 msgstr "Dekodavimo modulis (CAM) paruoštas darbui"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "Dekodavimo modulis (CAM)"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Meniu"
 
@@ -1123,6 +1136,9 @@ msgstr "Atidaromas dekodavimo modulio meniu..."
 msgid "Can't open CAM menu!"
 msgstr "Negali atidaryti dekodavimo modulio meniu!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "Dekodavimo modulis šiuo metu naudojamas - tikrai perkrauti?"
 
@@ -1216,6 +1232,21 @@ msgstr "Progreso rodymo laikas (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pristabdyti pakartojimą kai vyksta žymėjimas"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Kūrinio ID"
 
diff --git a/po/mk_MK.po b/po/mk_MK.po
index 556032c..418381c 100644
--- a/po/mk_MK.po
+++ b/po/mk_MK.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2012-11-19 15:18+0100\n"
 "Last-Translator: Dimitar Petrovski <dimeptr at gmail.com>\n"
 "Language-Team: Macedonian <en at li.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Невалиден Канал ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Каналот е недостапен!"
 
@@ -1109,9 +1112,19 @@ msgstr "CAM присутен"
 msgid "CAM ready"
 msgstr "CAM спремен"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Мени"
 
@@ -1124,6 +1137,9 @@ msgstr "Отварам CAM мени..."
 msgid "Can't open CAM menu!"
 msgstr "Неуспешно отварање на CAM менито!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM е во употреба - рестартирај?"
 
@@ -1217,6 +1233,21 @@ msgstr "Време на прикажување на прогрес (сек)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Паузирај репродукција кога се внесува ознака"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID на продолжеток"
 
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 1f46225..7f9af10 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2008-02-26 17:20+0100\n"
 "Last-Translator: Cedric Dewijs <cedric.dewijs at telfort.nl>\n"
 "Language-Team: Dutch <vdr at linuxtv.org>\n"
@@ -24,6 +24,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Ongeldig kanaal ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanaal niet beschikbaar"
 
@@ -1113,9 +1116,19 @@ msgstr "CAM aanwezig"
 msgid "CAM ready"
 msgstr "CAM gereed"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1128,6 +1141,9 @@ msgstr "CAM-menu wordt geopend..."
 msgid "Can't open CAM menu!"
 msgstr "Kan CAM-menu niet openen!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM wordt gebruikt - werkelijk herstarten?"
 
@@ -1221,6 +1237,21 @@ msgstr "Verlopen tijd tijd (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pauzeer wanneer markering wordt geplaatst"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Hervattings ID"
 
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 2ee0816..6eb63fa 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2007-08-12 14:17+0200\n"
 "Last-Translator: Truls Slevigen <truls at slevigen.no>\n"
 "Language-Team: Norwegian Nynorsk <vdr at linuxtv.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Ugyldig Kanal! ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr ""
 
@@ -1109,9 +1112,19 @@ msgstr ""
 msgid "CAM ready"
 msgstr ""
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Meny"
 
@@ -1124,6 +1137,9 @@ msgstr ""
 msgid "Can't open CAM menu!"
 msgstr ""
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr ""
 
@@ -1217,6 +1233,21 @@ msgstr ""
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr ""
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "Resume ID"
 
diff --git a/po/pl_PL.po b/po/pl_PL.po
index e7c81b7..18c8662 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2008-03-09 12:59+0100\n"
 "Last-Translator: Marek Nazarko <mnazarko at gmail.com>\n"
 "Language-Team: Polish <vdr at linuxtv.org>\n"
@@ -21,6 +21,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Niepoprawny kana� ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kana� nie jest dost�pny!"
 
@@ -1110,9 +1113,19 @@ msgstr "CAM obecny"
 msgid "CAM ready"
 msgstr "CAM gotowy"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1125,6 +1138,9 @@ msgstr "Otwieram menu CAM..."
 msgid "Can't open CAM menu!"
 msgstr "Nie mo�na otworzy� menu CAM!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM jest w u�yciu - naprawd� zresetowa�?"
 
@@ -1218,6 +1234,21 @@ msgstr "Wy
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Wstrzymaj odtwarzanie podczas ustawiania zaznaczania"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID wznowienia"
 
diff --git a/po/pt_PT.po b/po/pt_PT.po
index b58b483..b3a891c 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2010-03-28 22:49+0100\n"
 "Last-Translator: Cris Silva <hudokkow at gmail.com>\n"
 "Language-Team: Portuguese <vdr at linuxtv.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Canal inv�lido ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Canal indispon�vel!"
 
@@ -1109,9 +1112,19 @@ msgstr "CAM presente"
 msgid "CAM ready"
 msgstr "CAM pronta"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1124,6 +1137,9 @@ msgstr "A abrir menu da CAM..."
 msgid "Can't open CAM menu!"
 msgstr "Imposs�vel abrir menu da CAM!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM em uso - reiniciar mesmo?"
 
@@ -1217,6 +1233,21 @@ msgstr ""
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr ""
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID de resumo"
 
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 5616348..25766cf 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,19 +8,22 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
-"PO-Revision-Date: 2013-02-09 23:01+0100\n"
-"Last-Translator: Lucian Muresan <lucianm at users.sorceforge.net>\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
+"PO-Revision-Date: 2015-01-21 22:34+0100\n"
+"Last-Translator: Lucian Muresan <lucianm at users.sourceforge.net>\n"
 "Language-Team: Romanian <vdr at linuxtv.org>\n"
 "Language: ro\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.5\n"
+"X-Generator: Poedit 1.6.9\n"
 
 msgid "*** Invalid Channel ***"
 msgstr "*** Canal invalid ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Canal indisponibil"
 
@@ -79,13 +82,13 @@ msgid "StreamId"
 msgstr "Identificator Stream"
 
 msgid "Pilot"
-msgstr ""
+msgstr "Pilot"
 
 msgid "T2SystemId"
-msgstr ""
+msgstr "ID sistem T2"
 
 msgid "SISO/MISO"
-msgstr ""
+msgstr "SISO/MISO"
 
 msgid "Starting EPG scan"
 msgstr "Pornesc achiziţia EPG"
@@ -575,10 +578,10 @@ msgid "Sid"
 msgstr "Sid"
 
 msgid "Nid"
-msgstr ""
+msgstr "Nid"
 
 msgid "Tid"
-msgstr ""
+msgstr "Tid"
 
 msgid "Channel settings are not unique!"
 msgstr "Parametrii canalului nu sunt univoci!"
@@ -741,71 +744,71 @@ msgid "CAM not responding!"
 msgstr "CAM-ul nu reacţionează!"
 
 msgid "Edit path"
-msgstr ""
+msgstr "Editează calea"
 
 msgid "Folder"
-msgstr ""
+msgstr "Director"
 
 msgid "This folder is currently in use - no changes are possible!"
-msgstr ""
+msgstr "Acest director tocmai este accesat - nu sunt posibile modificări!"
 
 #, c-format
 msgid "Move entire folder containing %d recordings?"
-msgstr ""
+msgstr "Mut întregul director conținând %d înregistrări?"
 
 msgid "Error while moving folder!"
-msgstr ""
+msgstr "Eroare la mutarea directorului!"
 
 msgid "Edit recording"
-msgstr ""
+msgstr "Editează înregistrarea"
 
 msgid "This recording is currently in use - no changes are possible!"
-msgstr ""
+msgstr "Această înregistrare tocmai este accesată - nu sunt posibile modificări!"
 
 msgid "Button$Cancel cutting"
-msgstr ""
+msgstr "Anulează tăierea"
 
 msgid "Button$Stop cutting"
-msgstr ""
+msgstr "Oprește tăierea"
 
 msgid "Button$Cancel moving"
-msgstr ""
+msgstr "Anuleaza mutarea"
 
 msgid "Button$Stop moving"
-msgstr ""
+msgstr "Oprește mutarea"
 
 msgid "Button$Cancel copying"
-msgstr ""
+msgstr "Anulează copierea"
 
 msgid "Button$Stop copying"
-msgstr ""
+msgstr "Oprește copierea"
 
 msgid "Button$Cut"
-msgstr ""
+msgstr "Taie"
 
 msgid "Button$Delete marks"
-msgstr ""
+msgstr "Șterge marcajele"
 
 msgid "Recording vanished!"
-msgstr ""
+msgstr "Înregistrarea a dispărut!"
 
 msgid "Edited version already exists - overwrite?"
-msgstr ""
+msgstr "Deja există o versiune editată - o suprascriu?"
 
 msgid "Error while queueing recording for cutting!"
-msgstr ""
+msgstr "Eroare la punerea în coada pentru tăiere!"
 
 msgid "Delete editing marks for this recording?"
-msgstr ""
+msgstr "Șterg marcajele de editare pentru această înregistrare?"
 
 msgid "Error while deleting editing marks!"
-msgstr ""
+msgstr "Eroare la ștergerea marcajelor de editare!"
 
 msgid "Error while changing priority/lifetime!"
-msgstr ""
+msgstr "Eroare la schimbarea priorității/timpului de păstrare!"
 
 msgid "Error while changing folder/name!"
-msgstr ""
+msgstr "Eroare la schimbarea directorului/numelui!"
 
 msgid "Recording info"
 msgstr "Detaliile înregistrării"
@@ -826,7 +829,7 @@ msgid "Delete recording?"
 msgstr "Şterg înregistrarea?"
 
 msgid "Recording is being edited - really delete?"
-msgstr "Montajul înregistrării e în curs de desfășurare - șterg totuși?"
+msgstr "Editarea înregistrării e în curs de desfășurare - șterg totuși?"
 
 msgid "Error while deleting recording!"
 msgstr "Eroare la ştergerea înregistrării!"
@@ -1075,31 +1078,31 @@ msgid "Setup.LNB$own"
 msgstr "propriu"
 
 msgid "Setup.LNB$Use dish positioner"
-msgstr ""
+msgstr "Folosește actuator de poziționare"
 
 msgid "Setup.LNB$Site latitude (degrees)"
-msgstr ""
+msgstr "Latitudinea locului (grade)"
 
 msgid "South"
-msgstr ""
+msgstr "Sud"
 
 msgid "North"
-msgstr ""
+msgstr "Nord"
 
 msgid "Setup.LNB$Site longitude (degrees)"
-msgstr ""
+msgstr "Longitudinea locului (grade)"
 
 msgid "West"
-msgstr ""
+msgstr "Vest"
 
 msgid "East"
-msgstr ""
+msgstr "Est"
 
 msgid "Setup.LNB$Max. positioner swing (degrees)"
-msgstr ""
+msgstr "Unghi maxim al actuatorului (grade)"
 
 msgid "Setup.LNB$Positioner speed (degrees/s)"
-msgstr ""
+msgstr "Viteza actuatorului (grade/s)"
 
 msgid "CAM reset"
 msgstr "Resetare CAM"
@@ -1110,9 +1113,19 @@ msgstr "CAM prezent"
 msgid "CAM ready"
 msgstr "CAM pregătit"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Meniu"
 
@@ -1125,6 +1138,9 @@ msgstr "Deschid meniul CAM..."
 msgid "Can't open CAM menu!"
 msgstr "Nu pot deschide meniul CAM"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM-ul este in folosinţă - totuşi resetez?"
 
@@ -1195,7 +1211,7 @@ msgid "Setup.Recording$Max. video file size (MB)"
 msgstr "Dimensiune maximă a fişierului video (MB)"
 
 msgid "Setup.Recording$Split edited files"
-msgstr "Separare fişiere montate"
+msgstr "Separare fişiere editate"
 
 msgid "Setup.Recording$Delete timeshift recording"
 msgstr "Şterge înregistrarea pentru vizionare decalată"
@@ -1216,7 +1232,22 @@ msgid "Setup.Replay$Progress display time (s)"
 msgstr "Durata afișării indicatorului de progres (s) "
 
 msgid "Setup.Replay$Pause replay when setting mark"
-msgstr "Pauză la punerea marcajului de montaj"
+msgstr "Pauză la punerea marcajului de editare"
+
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
 
 msgid "Setup.Replay$Resume ID"
 msgstr "Identificator continuare"
@@ -1255,10 +1286,10 @@ msgid "Setup.Miscellaneous$Initial volume"
 msgstr "Volumul la pornire"
 
 msgid "Setup.Miscellaneous$Volume steps"
-msgstr ""
+msgstr "Numărul de pași ai reglajului de volum"
 
 msgid "Setup.Miscellaneous$Volume linearize"
-msgstr ""
+msgstr "Liniarizează caracteristica de volum"
 
 msgid "Setup.Miscellaneous$Channels wrap"
 msgstr "Lista de canale în buclă"
@@ -1306,13 +1337,13 @@ msgstr "Continuă redarea"
 
 #. TRANSLATORS: note the leading blank!
 msgid " Cancel editing"
-msgstr " Opreşte montajul înregistrării"
+msgstr " Anulează editarea înregistrării"
 
 msgid "Stop recording?"
 msgstr "Opresc înregistrarea?"
 
 msgid "Cancel editing?"
-msgstr "Opresc montajul înregistrării?"
+msgstr "Anulez editarea înregistrării?"
 
 msgid "No audio available!"
 msgstr "Lipseşte sunetul!"
@@ -1340,19 +1371,19 @@ msgid "Jump: "
 msgstr "Salt la: "
 
 msgid "No editing marks defined!"
-msgstr "Nu s-au pus marcaje de montaj pentru această înregistrare"
+msgstr "Nu s-au pus marcaje de editare pentru această înregistrare"
 
 msgid "No editing sequences defined!"
-msgstr "Nu s-au definit secvențe pentru montaj!"
+msgstr "Nu s-au definit secvențe pentru editare!"
 
 msgid "Can't start editing process!"
-msgstr "Nu pot porni montajul înregistrării!"
+msgstr "Nu pot porni editarea înregistrării!"
 
 msgid "Editing process started"
-msgstr "Montajul înregistrării a început"
+msgstr "Editarea înregistrării a început"
 
 msgid "Editing process already active!"
-msgstr "Montajul înregistrării este deja activ!"
+msgstr "Editarea înregistrării este deja activă!"
 
 msgid "FileNameChars$ abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&"
 msgstr " aăâbcdefghiîjklmnopqrsştţuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&"
@@ -1394,7 +1425,7 @@ msgid "Can't shutdown - option '-s' not given!"
 msgstr "Nu pot închide - vezi opţiunea '-s'"
 
 msgid "Editing - shut down anyway?"
-msgstr "Montajul tocmai se efectuează - închid, totuşi?"
+msgstr "Editarea tocmai se efectuează - închid, totuşi?"
 
 msgid "Recording - shut down anyway?"
 msgstr "Tocmai se înregistrează - închid, totuşi?"
@@ -1411,7 +1442,7 @@ msgid "Plugin %s wakes up in %ld min, continue?"
 msgstr "Plugin-ul %s se va trezi +n %ld min, continui?"
 
 msgid "Editing - restart anyway?"
-msgstr "Montajul tocmai se efectuează - repornesc, totuşi?"
+msgstr "Editarea tocmai se efectuează - repornesc, totuşi?"
 
 msgid "Recording - restart anyway?"
 msgstr "Tocmai se înregistrează - repornesc, totuşi?"
@@ -1446,7 +1477,7 @@ msgstr "REDARE"
 
 #, c-format
 msgid "Moving dish to %.1f..."
-msgstr ""
+msgstr "Rotesc antena la %.1f..."
 
 msgid "ST:TNG Panels"
 msgstr "Cons. ST:TNG"
@@ -1499,10 +1530,10 @@ msgid "Switching primary DVB..."
 msgstr "Comut dispozitiv DVB primar..."
 
 msgid "Editing process failed!"
-msgstr "Montajul înregistrării a eşuat"
+msgstr "Editarea înregistrării a eşuat"
 
 msgid "Editing process finished"
-msgstr "Montajul înregistrării s-a terminat"
+msgstr "Editarea înregistrării s-a încheiat"
 
 msgid "Press any key to cancel restart"
 msgstr "Apăsaţi orice tastă pentru a anula repornirea"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 4a7a293..e0a291a 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-03-10 17:13+0100\n"
 "Last-Translator: Oleg Roitburd <oroitburd at gmail.com>\n"
 "Language-Team: Russian <vdr at linuxtv.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** ������������ ����� ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "����� ����������!"
 
@@ -1109,9 +1112,19 @@ msgstr "CAM 
 msgid "CAM ready"
 msgstr "CAM �����"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "�������� ������"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "����"
 
@@ -1124,6 +1137,9 @@ msgstr "
 msgid "Can't open CAM menu!"
 msgstr "���� CAM-������ ����������!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM ������������ - ������������� �����������?"
 
@@ -1217,6 +1233,21 @@ msgstr "
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "����� ��� ��������� ����������"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID ���������������"
 
diff --git a/po/sk_SK.po b/po/sk_SK.po
index 80d340a..c8c4225 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-03-04 21:24+0100\n"
 "Last-Translator: Milan Hrala <hrala.milan at gmail.com>\n"
 "Language-Team: Slovak <vdr at linuxtv.org>\n"
@@ -19,6 +19,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Neplatn� kan�l ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kan�l nie je dostupn�!"
 
@@ -1108,9 +1111,19 @@ msgstr "CAM pr
 msgid "CAM ready"
 msgstr "CAM pripraven�"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM (modul podmienen�ho pr�stupu)"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Menu"
 
@@ -1123,6 +1136,9 @@ msgstr "Otv
 msgid "Can't open CAM menu!"
 msgstr "Menu CAM nie je dostupn�"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM sa pou��va - naozaj re�tartova�?"
 
@@ -1216,6 +1232,21 @@ msgstr "Doba zobrazenia ukazovate
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pozastavi� prehr�vanie pri stanoven� zna�ky"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ident. ��slo obnovenia prehr�vania"
 
diff --git a/po/sl_SI.po b/po/sl_SI.po
index b0b4135..9d58dd5 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-03-04 12:46+0100\n"
 "Last-Translator: Matjaz Thaler <matjaz.thaler at guest.arnes.si>\n"
 "Language-Team: Slovenian <vdr at linuxtv.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Neznan kanal ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanal ni razpolo�ljiv!"
 
@@ -1109,9 +1112,19 @@ msgstr "CAM prisoten"
 msgid "CAM ready"
 msgstr "CAM pripravljen"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Meni"
 
@@ -1124,6 +1137,9 @@ msgstr "Odpiram CAM meni..."
 msgid "Can't open CAM menu!"
 msgstr "Ne morem odpreti CAM menija!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM je v uporabi - zares resetiraj?"
 
@@ -1217,6 +1233,21 @@ msgstr "Progresivni 
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pavza predvajanja pri postavitvi zan�ke"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID za predvajanje"
 
diff --git a/po/sr_RS.po b/po/sr_RS.po
index 42423d3..dbe75fd 100644
--- a/po/sr_RS.po
+++ b/po/sr_RS.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-03-16 15:05+0100\n"
 "Last-Translator: Zoran Turalija <zoran.turalija at gmail.com>\n"
 "Language-Team: Serbian <vdr at linuxtv.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Neispravan Kanal ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanal nije dostupan!"
 
@@ -1109,9 +1112,19 @@ msgstr "CAM prisutan"
 msgid "CAM ready"
 msgstr "CAM spreman"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Meni"
 
@@ -1124,6 +1137,9 @@ msgstr "Otvaram CAM meni..."
 msgid "Can't open CAM menu!"
 msgstr "Otvaranje CAM menija neuspe�no!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM u upotrebi - stvarno ponovno pokrenuti?"
 
@@ -1217,6 +1233,21 @@ msgstr "Trajanje prikazivanja progresa (s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pauziraj reprodukciju prilikom obele�avanja"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID reprodukcije"
 
diff --git a/po/sv_SE.po b/po/sv_SE.po
index 63ab5db..33add95 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-02-18 17:04+0100\n"
 "Last-Translator: Richard Lithvall <r-vdr at boomer.se>\n"
 "Language-Team: Swedish <vdr at linuxtv.org>\n"
@@ -23,6 +23,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Felaktig kanal ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanalen �r inte tillg�nglig!"
 
@@ -1112,9 +1115,19 @@ msgstr "CAM n
 msgid "CAM ready"
 msgstr "CAM klar"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Meny"
 
@@ -1127,6 +1140,9 @@ msgstr "
 msgid "Can't open CAM menu!"
 msgstr "Det g�r inte att �ppna CAM menyn!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM upptagen, vill du verkligen �terst�lla?"
 
@@ -1220,6 +1236,21 @@ msgstr "Tid f
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Pausa uppspelningen vid s�ttande av redigeringsm�rke"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "�terupptagnings-ID"
 
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 1ced923..e670842 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2008-02-28 00:33+0100\n"
 "Last-Translator: Oktay Yolge�en <oktay_73 at yahoo.de>\n"
 "Language-Team: Turkish <vdr at linuxtv.org>\n"
@@ -19,6 +19,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Ge�ersiz kanal ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Kanal kullan�lam�yor!"
 
@@ -1108,9 +1111,19 @@ msgstr "CAM mevcut"
 msgid "CAM ready"
 msgstr "CAM haz�r"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Men�"
 
@@ -1123,6 +1136,9 @@ msgstr "CAM men
 msgid "Can't open CAM menu!"
 msgstr "CAM men�s� a��lam�yor!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM kullan�l�yor - ger�ekden s�f�rla?"
 
@@ -1216,6 +1232,21 @@ msgstr ""
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr ""
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "G�steri� ID'si"
 
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 3a20b3e..351d94d 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-02-09 16:00+0100\n"
 "Last-Translator: Yarema aka Knedlyk <yupadmin at gmail.com>\n"
 "Language-Team: Ukrainian <vdr at linuxtv.org>\n"
@@ -20,6 +20,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "*** Неправильний канал ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "Канал недоступний!"
 
@@ -1109,9 +1112,19 @@ msgstr "CAM присутній"
 msgid "CAM ready"
 msgstr "CAM готовий"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM (Умовний доступ)"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "Меню"
 
@@ -1124,6 +1137,9 @@ msgstr "Відкривання меню CAM-модуля..."
 msgid "Can't open CAM menu!"
 msgstr "Меню CAM-модуля недоступне!"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM використовується - дійсно перезапустити?"
 
@@ -1217,6 +1233,21 @@ msgstr "Час показу індикатора (с)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "Пауза програвання при встановленні мітки"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "ID продовження"
 
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 0e061a5..bf25381 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs at tvdr.de>\n"
-"POT-Creation-Date: 2015-01-12 15:40+0100\n"
+"POT-Creation-Date: 2015-01-30 13:14+0100\n"
 "PO-Revision-Date: 2013-03-04 14:52+0800\n"
 "Last-Translator: NFVDR <nfvdr at live.com>\n"
 "Language-Team: Chinese (simplified) <nfvdr at live.com>\n"
@@ -21,6 +21,9 @@ msgstr ""
 msgid "*** Invalid Channel ***"
 msgstr "***无效的频道 ***"
 
+msgid "CAM activated!"
+msgstr ""
+
 msgid "Channel not available!"
 msgstr "频道不可用!"
 
@@ -1110,9 +1113,19 @@ msgstr "存在的CAM"
 msgid "CAM ready"
 msgstr "CAM准备"
 
+#. TRANSLATORS: note the leading blank!
+msgid " (activating)"
+msgstr ""
+
 msgid "CAM"
 msgstr "CAM设置"
 
+msgid "Button$Cancel activation"
+msgstr ""
+
+msgid "Button$Activate"
+msgstr ""
+
 msgid "Button$Menu"
 msgstr "菜单"
 
@@ -1125,6 +1138,9 @@ msgstr "打开CAM菜单..."
 msgid "Can't open CAM menu!"
 msgstr "不能打开CAM菜单"
 
+msgid "Can't activate CAM!"
+msgstr ""
+
 msgid "CAM is in use - really reset?"
 msgstr "CAM正在使用-是否重启?"
 
@@ -1218,6 +1234,21 @@ msgstr "处理显示时间(s)"
 msgid "Setup.Replay$Pause replay when setting mark"
 msgstr "暂停回放时,设置标志"
 
+msgid "Setup.Replay$Pause replay when jumping to a mark"
+msgstr ""
+
+msgid "Setup.Replay$Skip edited parts"
+msgstr ""
+
+msgid "Setup.Replay$Pause replay at last mark"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip initial value (s)"
+msgstr ""
+
+msgid "Setup.Replay$Binary skip timeout (s)"
+msgstr ""
+
 msgid "Setup.Replay$Resume ID"
 msgstr "恢复 ID"
 
diff --git a/recording.c b/recording.c
index e9a6b16..079e0de 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 3.21 2015/01/17 14:52:28 kls Exp $
+ * $Id: recording.c 3.24 2015/01/25 15:39:24 kls Exp $
  */
 
 #include "recording.h"
@@ -1749,7 +1749,7 @@ void cDirCopier::Action(void)
                     off_t FileSizeSrc = FileSize(FileNameSrc);
                     off_t FileSizeDst = FileSize(FileNameDst);
                     if (FileSizeSrc != FileSizeDst) {
-                       esyslog("ERROR: file size discrepancy: %"PRId64" != %"PRId64, FileSizeSrc, FileSizeDst);
+                       esyslog("ERROR: file size discrepancy: %" PRId64 " != %" PRId64, FileSizeSrc, FileSizeDst);
                        break;
                        }
                     }
@@ -2072,7 +2072,7 @@ bool cMarks::Load(const char *RecordingFileName, double FramesPerSecond, bool Is
 bool cMarks::Update(void)
 {
   time_t t = time(NULL);
-  if (t > nextUpdate) {
+  if (t > nextUpdate && *fileName) {
      time_t LastModified = LastModifiedTime(fileName);
      if (LastModified != lastFileTime) // change detected, or first run
         lastChange = LastModified > 0 ? LastModified : t;
@@ -2476,7 +2476,7 @@ cIndexFile::cIndexFile(const char *FileName, bool Record, bool IsPesRecording, b
            delta = int(buf.st_size % sizeof(tIndexTs));
            if (delta) {
               delta = sizeof(tIndexTs) - delta;
-              esyslog("ERROR: invalid file size (%"PRId64") in '%s'", buf.st_size, *fileName);
+              esyslog("ERROR: invalid file size (%" PRId64 ") in '%s'", buf.st_size, *fileName);
               }
            last = int((buf.st_size + delta) / sizeof(tIndexTs) - 1);
            if ((!Record || Update) && last >= 0) {
@@ -2741,7 +2741,7 @@ int cIndexFile::Get(uint16_t FileNumber, off_t FileOffset)
   return -1;
 }
 
-bool cIndexFile::IsStillRecording()
+bool cIndexFile::IsStillRecording(void)
 {
   return f >= 0;
 }
diff --git a/recording.h b/recording.h
index c9e950b..1079ae1 100644
--- a/recording.h
+++ b/recording.h
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: recording.h 3.5 2015/01/17 14:33:05 kls Exp $
+ * $Id: recording.h 3.6 2015/01/31 13:34:44 kls Exp $
  */
 
 #ifndef __RECORDING_H
@@ -117,7 +117,6 @@ private:
   static char *StripEpisodeName(char *s, bool Strip);
   char *SortName(void) const;
   void ClearSortName(void);
-  int GetResume(void) const;
   time_t start;
   int priority;
   int lifetime;
@@ -160,6 +159,9 @@ public:
   int FileSizeMB(void) const;
        ///< Returns the total file size of this recording (in MB), or -1 if the file
        ///< size is unknown.
+  int GetResume(void) const;
+       ///< Returns the index of the frame where replay of this recording shall
+       ///< be resumed, or -1 in case of an error.
   bool IsNew(void) const { return GetResume() <= 0; }
   bool IsEdited(void) const;
   bool IsPesRecording(void) const { return isPesRecording; }
diff --git a/remote.c b/remote.c
index 5cb2ccb..ac10dce 100644
--- a/remote.c
+++ b/remote.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: remote.c 3.2 2014/02/15 12:40:39 kls Exp $
+ * $Id: remote.c 3.3 2015/01/20 14:53:57 kls Exp $
  */
 
 #include "remote.h"
@@ -124,7 +124,7 @@ bool cRemote::PutMacro(eKeys Key)
 bool cRemote::Put(uint64_t Code, bool Repeat, bool Release)
 {
   char buffer[32];
-  snprintf(buffer, sizeof(buffer), "%016"PRIX64, Code);
+  snprintf(buffer, sizeof(buffer), "%016" PRIX64, Code);
   return Put(buffer, Repeat, Release);
 }
 
diff --git a/scr.conf b/scr.conf
index 61e09f1..84cdcec 100644
--- a/scr.conf
+++ b/scr.conf
@@ -14,11 +14,17 @@
 #
 # Examples:
 
-# 0 1284
-# 1 1400
-# 2 1516
-# 3 1632
-# 4 1748
-# 5 1864
-# 6 1980
-# 7 2096
+# EN50494 & EN50607 ("JESS")
+# 0 974
+# 1 1076
+# 2 1178
+# 3 1280
+# 4 1382
+# 5 1484
+# 6 1586
+# 7 1688
+# EN50607 ("JESS") only
+# 8 1790
+# 9 1892
+# 10 1994
+# 11 2096
diff --git a/vdr.1 b/vdr.1
index 5727ee5..7605bf2 100644
--- a/vdr.1
+++ b/vdr.1
@@ -8,7 +8,7 @@
 .\" License as specified in the file COPYING that comes with the
 .\" vdr distribution.
 .\"
-.\" $Id: vdr.1 3.3 2015/01/17 14:46:22 kls Exp $
+.\" $Id: vdr.1 3.4 2015/01/20 15:34:29 kls Exp $
 .\"
 .TH vdr 1 "31 Mar 2013" "2.0" "Video Disk Recorder"
 .SH NAME
@@ -299,7 +299,7 @@ also be read at program startup to have the full EPG data available immediately.
 If this file is present in the video directory, its last modification time will
 be used to trigger an update of the list of recordings in the "Recordings" menu.
 .SH SEE ALSO
-.BR vdr (5), svdrp(1)
+.BR vdr (5), svdrpsend (1)
 .SH AUTHOR
 Written by Klaus Schmidinger, with contributions from many others.
 See the file \fICONTRIBUTORS\fR in the \fBvdr\fR source distribution.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vdr-dvb/vdr.git



More information about the pkg-vdr-dvb-changes mailing list