diff -Nru vdr-1.6.0/menu.c vdr-1.6.0-k0_stops_replay/menu.c --- vdr-1.6.0/menu.c 2008-04-07 20:59:21.000000000 +0200 +++ vdr-1.6.0-k0_stops_replay/menu.c 2008-04-07 20:58:28.000000000 +0200 @@ -4543,14 +4543,14 @@ } } -void cReplayControl::MarkMove(bool Forward) +void cReplayControl::MarkMove(bool Forward, int Frames) { int Current, Total; if (GetIndex(Current, Total)) { cMark *m = marks.Get(Current); if (m) { displayFrames = true; - int p = SkipFrames(Forward ? 1 : -1); + int p = SkipFrames(Forward ? Frames : -Frames); cMark *m2; if (Forward) { if ((m2 = marks.Next(m)) != NULL && m2->position <= p) @@ -4653,10 +4653,6 @@ case kGreen: SkipSeconds(-60); break; case kYellow|k_Repeat: case kYellow: SkipSeconds( 60); break; - case k1|k_Repeat: - case k1: SkipSeconds(-20); break; - case k3|k_Repeat: - case k3: SkipSeconds( 20); break; case kPrev|k_Repeat: case kPrev: if (lastSkipTimeout.TimedOut()) { lastSkipSeconds = REPLAYCONTROLSKIPSECONDS; @@ -4687,7 +4683,23 @@ DoShowMode = false; switch (Key) { // Editing: - case kMarkToggle: MarkToggle(); break; + case kMarkToggle: bool play, forward; + int speed; + if (GetReplayMode(play, forward, speed) && play) { + displayFrames = true; + Pause(); + MarkToggle(); + } else { + MarkToggle(); + int current, total; + // resume if we have deleted the mark + if (GetIndex(current, total, true)) { + cMark *m = marks.Get(current); + if (!m) Play(); + else displayFrames = true; + } + } + break; case kMarkJumpBack|k_Repeat: case kMarkJumpBack: MarkJump(false); break; case kMarkJumpForward|k_Repeat: @@ -4696,6 +4708,17 @@ case kMarkMoveBack: MarkMove(false); break; case kMarkMoveForward|k_Repeat: case kMarkMoveForward: MarkMove(true); break; +#ifdef VPID_OFFSET_H264_k // detect h264-patch + case k1|k_Repeat: + case k1: MarkMove(false, 5 * GetFramesPerSec()); break; + case k3|k_Repeat: + case k3: MarkMove(true, 5 * GetFramesPerSec()); break; +#else + case k1|k_Repeat: + case k1: MarkMove(false, 5 * FRAMESPERSEC); break; + case k3|k_Repeat: + case k3: MarkMove(true, 5 * FRAMESPERSEC); break; +#endif case kEditCut: EditCut(); break; case kEditTest: EditTest(); break; default: { diff -Nru vdr-1.6.0/menu.h vdr-1.6.0-k0_stops_replay/menu.h --- vdr-1.6.0/menu.h 2008-04-07 20:59:19.000000000 +0200 +++ vdr-1.6.0-k0_stops_replay/menu.h 2008-04-07 20:58:41.000000000 +0200 @@ -237,7 +237,7 @@ bool ShowProgress(bool Initial); void MarkToggle(void); void MarkJump(bool Forward); - void MarkMove(bool Forward); + void MarkMove(bool Forward, int Frames = 1); void EditCut(void); void EditTest(void); public: