diff options
| -rw-r--r-- | HISTORY | 4 | ||||
| -rw-r--r-- | MANUAL | 6 | ||||
| -rw-r--r-- | dvbapi.c | 144 | ||||
| -rw-r--r-- | dvbapi.h | 19 | ||||
| -rw-r--r-- | menu.c | 14 | 
5 files changed, 102 insertions, 85 deletions
| @@ -112,3 +112,7 @@ Video Disk Recorder Revision History  - New command line option '-l' to set the log level.  - Times in timers.conf are now always printed with 4 digits (leading '0').  - Slow forward/back mode (thanks to Guido Fiala!). +- The "Up" key in replay mode no longer restarts replay at the very beginning, +  but rather resumes normal replay mode after a "pause", "forward" or "backward" +  operation. Use the "Skip -60s" function repeatedly to go back to the beginning +  of the recording. @@ -10,7 +10,7 @@ Video Disk Recorder User's Manual    Key     Normal      Main       Channels   Timer      Edit/New      Recordings  Replay -  Up      Ch up       Crsr up    Crsr up    Crsr up    Crsr up       Crsr up     Begin +  Up      Ch up       Crsr up    Crsr up    Crsr up    Crsr up       Crsr up     Play    Down    Ch down     Crsr down  Crsr down  Crsr down  Crsr down     Crsr down   Pause    Left    -           -          -          Disable    Decrement     -           Search back    Right   -           -          -          Enable     Increment     -           Search forward @@ -93,8 +93,8 @@ Video Disk Recorder User's Manual    The following keys have the listed meaning in Replay mode: -  - Up      Positions to beginning of the recording and starts playback -            from there. +  - Up      Resumes normal replay from any "pause", "forward" or "backward" +            mode.    - Down    Halts playback at the current position. Press again to continue              playback.    - Blue    Stops playback and stores the current position, so that @@ -4,7 +4,7 @@   * See the main source file 'vdr.c' for copyright information and   * how to reach the author.   * - * $Id: dvbapi.c 1.18 2000/07/30 14:34:07 kls Exp $ + * $Id: dvbapi.c 1.19 2000/07/30 16:14:22 kls Exp $   */  #include "dvbapi.h" @@ -1105,7 +1105,7 @@ cDvbApi::~cDvbApi()  {    if (videoDev >= 0) {       Close(); -     StopReplay(); +     Stop();       StopRecord();       close(videoDev);       } @@ -1403,7 +1403,7 @@ bool cDvbApi::StartRecord(const char *FileName)       }    if (videoDev >= 0) { -     StopReplay(); // TODO: remove this if the driver is able to do record and replay at the same time +     Stop(); // TODO: remove this if the driver is able to do record and replay at the same time       // Check FileName: @@ -1525,7 +1525,7 @@ bool cDvbApi::StartReplay(const char *FileName, const char *Title)       esyslog(LOG_ERR, "ERROR: StartReplay() called while recording - ignored!");       return false;       } -  StopReplay(); +  Stop();    if (videoDev >= 0) {       lastProgress = lastTotal = -1; @@ -1596,65 +1596,69 @@ bool cDvbApi::StartReplay(const char *FileName, const char *Title)                       }                    if (FD_ISSET(fromMain, &setIn)) {                       switch (readchar(fromMain)) { -                       case dvbStop:        SetReplayMode(VID_PLAY_CLEAR_BUFFER); -                                            Buffer->Stop(); break; -                       case dvbPauseReplay: SetReplayMode(Paused ? VID_PLAY_NORMAL : VID_PLAY_PAUSE); -                                            Paused = !Paused; -                                            if (FastForward || FastRewind) { -                                               SetReplayMode(VID_PLAY_CLEAR_BUFFER); -                                               Buffer->Clear(); -                                               } -                                            FastForward = FastRewind = false; -                                            Buffer->SetMode(rmPlay); -                                            break; -                       case dvbFastForward: SetReplayMode(VID_PLAY_CLEAR_BUFFER); -                                            Buffer->Clear(); -                                            FastForward = !FastForward; -                                            FastRewind = false; -                                            if (Paused) { -                                               Buffer->SetMode(rmPlay); -                                               Buffer->Read(); -                                               SetReplayMode(FastForward ? VID_PLAY_SLOW_MOTION : VID_PLAY_PAUSE); -                                               Buffer->Write(); -                                               } -                                            else { -                                               SetReplayMode(VID_PLAY_NORMAL); -                                               Buffer->SetMode(FastForward ? rmFastForward : rmPlay); -                                               } -                                            break; -                       case dvbFastRewind:  SetReplayMode(VID_PLAY_CLEAR_BUFFER); +                       case dvbStop:     SetReplayMode(VID_PLAY_CLEAR_BUFFER); +                                         Buffer->Stop(); +                                         break; +                       case dvbPause:    SetReplayMode(Paused ? VID_PLAY_NORMAL : VID_PLAY_PAUSE); +                                         Paused = !Paused; +                                         if (FastForward || FastRewind) { +                                            SetReplayMode(VID_PLAY_CLEAR_BUFFER);                                              Buffer->Clear(); -                                            FastRewind = !FastRewind; -                                            FastForward = false; -                                            if (Paused) { -                                               Buffer->SetMode(FastRewind ? rmSlowRewind : rmPlay); -                                               Buffer->Read(); -                                               SetReplayMode(FastRewind ? VID_PLAY_NORMAL : VID_PLAY_PAUSE); -                                               Buffer->Write(); -                                               } -                                            else { -                                               SetReplayMode(VID_PLAY_NORMAL); -                                               Buffer->SetMode(FastRewind ? rmFastRewind : rmPlay); -                                               } -                                            break; -                       case dvbSkip:        { -                                              int Seconds; -                                              if (readint(fromMain, Seconds)) { -                                                 SetReplayMode(VID_PLAY_CLEAR_BUFFER); -                                                 SetReplayMode(VID_PLAY_NORMAL); -                                                 FastForward = FastRewind = Paused = false; -                                                 Buffer->SetMode(rmPlay); -                                                 Buffer->SkipSeconds(Seconds); -                                                 }                                              } -                                            break; -                       case dvbGetIndex:    { -                                              int Current, Total; -                                              Buffer->GetIndex(Current, Total); -                                              writeint(toMain, Current); -                                              writeint(toMain, Total); +                                         FastForward = FastRewind = false; +                                         Buffer->SetMode(rmPlay); +                                         break; +                       case dvbPlay:     if (FastForward || FastRewind || Paused) { +                                            SetReplayMode(VID_PLAY_CLEAR_BUFFER); +                                            SetReplayMode(VID_PLAY_NORMAL); +                                            FastForward = FastRewind = Paused = false; +                                            Buffer->SetMode(rmPlay); +                                            } +                                         break; +                       case dvbForward:  SetReplayMode(VID_PLAY_CLEAR_BUFFER); +                                         Buffer->Clear(); +                                         FastForward = !FastForward; +                                         FastRewind = false; +                                         if (Paused) { +                                            Buffer->SetMode(rmPlay); +                                            SetReplayMode(FastForward ? VID_PLAY_SLOW_MOTION : VID_PLAY_PAUSE); +                                            } +                                         else { +                                            SetReplayMode(VID_PLAY_NORMAL); +                                            Buffer->SetMode(FastForward ? rmFastForward : rmPlay);                                              } -                                            break; +                                         break; +                       case dvbBackward: SetReplayMode(VID_PLAY_CLEAR_BUFFER); +                                         Buffer->Clear(); +                                         FastRewind = !FastRewind; +                                         FastForward = false; +                                         if (Paused) { +                                            Buffer->SetMode(FastRewind ? rmSlowRewind : rmPlay); +                                            SetReplayMode(FastRewind ? VID_PLAY_NORMAL : VID_PLAY_PAUSE); +                                            } +                                         else { +                                            SetReplayMode(VID_PLAY_NORMAL); +                                            Buffer->SetMode(FastRewind ? rmFastRewind : rmPlay); +                                            } +                                         break; +                       case dvbSkip:     { +                                           int Seconds; +                                           if (readint(fromMain, Seconds)) { +                                              SetReplayMode(VID_PLAY_CLEAR_BUFFER); +                                              SetReplayMode(VID_PLAY_NORMAL); +                                              FastForward = FastRewind = Paused = false; +                                              Buffer->SetMode(rmPlay); +                                              Buffer->SkipSeconds(Seconds); +                                              } +                                         } +                                         break; +                       case dvbGetIndex: { +                                           int Current, Total; +                                           Buffer->GetIndex(Current, Total); +                                           writeint(toMain, Current); +                                           writeint(toMain, Total); +                                         } +                                         break;                         }                       }                    } @@ -1680,7 +1684,7 @@ bool cDvbApi::StartReplay(const char *FileName, const char *Title)    return false;  } -void cDvbApi::StopReplay(void) +void cDvbApi::Stop(void)  {    if (pidReplay) {       writechar(toReplay, dvbStop); @@ -1693,22 +1697,28 @@ void cDvbApi::StopReplay(void)       }  } -void cDvbApi::PauseReplay(void) +void cDvbApi::Pause(void) +{ +  if (pidReplay) +     writechar(toReplay, dvbPause); +} + +void cDvbApi::Play(void)  {    if (pidReplay) -     writechar(toReplay, dvbPauseReplay); +     writechar(toReplay, dvbPlay);  } -void cDvbApi::FastForward(void) +void cDvbApi::Forward(void)  {    if (pidReplay) -     writechar(toReplay, dvbFastForward); +     writechar(toReplay, dvbForward);  } -void cDvbApi::FastRewind(void) +void cDvbApi::Backward(void)  {    if (pidReplay) -     writechar(toReplay, dvbFastRewind); +     writechar(toReplay, dvbBackward);  }  void cDvbApi::Skip(int Seconds) @@ -4,7 +4,7 @@   * See the main source file 'vdr.c' for copyright information and   * how to reach the author.   * - * $Id: dvbapi.h 1.11 2000/06/24 14:03:57 kls Exp $ + * $Id: dvbapi.h 1.12 2000/07/30 15:01:01 kls Exp $   */  #ifndef __DVBAPI_H @@ -104,9 +104,10 @@ public:  private:    enum { dvbStop = 1, // let's not have 0 as a command -         dvbPauseReplay, -         dvbFastForward, -         dvbFastRewind, +         dvbPause, +         dvbPlay, +         dvbForward, +         dvbBackward,           dvbSkip,           dvbGetIndex,         }; @@ -136,13 +137,15 @@ public:         // If there is already a replay session active, it will be stopped         // and the new file will be played back.         // If provided Title will be used in the progress display. -  void StopReplay(void); +  void Stop(void);         // Stops the current replay session (if any). -  void PauseReplay(void); +  void Pause(void);         // Pauses the current replay session, or resumes a paused session. -  void FastForward(void); +  void Play(void); +       // Resumes normal replay mode. +  void Forward(void);         // Runs the current replay session forward at a higher speed. -  void FastRewind(void); +  void Backward(void);         // Runs the current replay session backwards at a higher speed.    void Skip(int Seconds);         // Skips the given number of seconds in the current replay session. @@ -4,7 +4,7 @@   * See the main source file 'vdr.c' for copyright information and   * how to reach the author.   * - * $Id: menu.c 1.20 2000/07/24 16:25:53 kls Exp $ + * $Id: menu.c 1.21 2000/07/30 15:04:10 kls Exp $   */  #include "menu.h" @@ -1243,7 +1243,7 @@ cReplayControl::cReplayControl(void)  cReplayControl::~cReplayControl()  {    Hide(); -  dvbApi->StopReplay(); +  dvbApi->Stop();  }  void cReplayControl::SetRecording(const char *FileName, const char *Title) @@ -1278,13 +1278,13 @@ eOSState cReplayControl::ProcessKey(eKeys Key)    if (visible)       shown = dvbApi->ShowProgress(!shown) || shown;    switch (Key) { -    case kUp:      dvbApi->Skip(-INT_MAX); break; -    case kDown:    dvbApi->PauseReplay(); break; +    case kUp:      dvbApi->Play(); break; +    case kDown:    dvbApi->Pause(); break;      case kBlue:    Hide(); -                   dvbApi->StopReplay(); +                   dvbApi->Stop();                     return osEnd; -    case kLeft:    dvbApi->FastRewind(); break; -    case kRight:   dvbApi->FastForward(); break; +    case kLeft:    dvbApi->Backward(); break; +    case kRight:   dvbApi->Forward(); break;      case kGreen:   dvbApi->Skip(-60); break;      case kYellow:  dvbApi->Skip(60); break;      case kMenu:    Hide(); return osMenu; // allow direct switching to menu | 
