diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 3b92a9f9..39cd6dd2 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2190,3 +2190,7 @@ Denis Knauf Diego Pierotto for translating OSD texts to the Italian language + +Timo Eskola + for implementing sending all frames to devices that can handle them in fast forward + trick speeds diff --git a/HISTORY b/HISTORY index fa0a29e5..dbe85b90 100644 --- a/HISTORY +++ b/HISTORY @@ -5464,3 +5464,5 @@ Video Disk Recorder Revision History Richter). - Fixed a new[]/delete mismatch in cMenuEditStrItem::LeaveEditMode() (thanks to Udo Richter). +- Implemented sending all frames to devices that can handle them in fast forward + trick speeds (thansk to Timo Eskola). diff --git a/PLUGINS.html b/PLUGINS.html index 0b0b4956..1dff44c7 100644 --- a/PLUGINS.html +++ b/PLUGINS.html @@ -14,18 +14,18 @@ Copyright © 2006 Klaus Schmidinger
www.cadsoft.de/vdr

-
  -Important modifications introduced in version 1.5.1 are marked like this. -
-
  +
  Important modifications introduced in version 1.5.3 are marked like this.
-
  +
  Important modifications introduced in version 1.5.7 are marked like this.
-
  +
  Important modifications introduced in version 1.5.8 are marked like this.
+
  +Important modifications introduced in version 1.5.10 are marked like this. +

VDR provides an easy to use plugin interface that allows additional functionality to be added to the program by implementing a dynamically loadable library file. @@ -64,9 +64,7 @@ structures and allows it to hook itself into specific areas to perform special a

  • Housekeeping
  • Main thread hook
  • Activity -
     
  • Wakeup -
  • Setup parameters
  • The Setup menu
  • Configuration files @@ -685,7 +683,6 @@ be queried, and further prompts may show up. If all prompts have been confirmed, the shutdown will take place. As soon as one prompt is not confirmed, no further plugins will be queried and no shutdown will be done. -
     

    Wakeup

    Wake me up before you go-go

    @@ -718,7 +715,6 @@ After wakeup, the plugin shall continue to return the wakeup time and shall return a string when Active() is called at that time, otherwise VDR may shut down again instantly. If WakeupTime() returns a time that is not in the future, the time will be ignored. -


    Setup parameters

    @@ -910,7 +906,7 @@ const char *MyConfigDir = cPlugin::ConfigDirectory();
    Welcome to Babylon!

    -
      +
      If a plugin displays texts to the user, it should prepare for internationalization of these texts. All that is necessary for this is to mark every text that is presented to the user as translatable, as in @@ -921,7 +917,7 @@ const char *s = tr("Hello world!"); The text given here must be the English version, and the returned pointer is either a translated version (if available) or the original string. -
      +
      Texts are searched for in the domain registered for this plugin. If a plugin wants to make use of texts defined by the core VDR code, it can use the special trVDR() macro to mark these texts without having them @@ -944,7 +940,7 @@ for (int i = 0; i < 3; i++)

    -
      +
      The system VDR is running on may use a character encoding where a single character (or symbol) consists of more than one byte (UTF-8, as opposed to, for instance, ISO8859-1, where every character is represented by a single byte in memory). @@ -1606,7 +1602,7 @@ with the full required resolution. Only if this fails shall it use alternate areas. Drawing areas are always rectangular and may not overlap (but do not need to be adjacent).

    -
      +
      Special consideration may have to be given to color usage if the OSD provides 8bpp (256 colors). In that case, fonts may be drawn using anti-aliasing, which requires several blended color values between the foreground and background @@ -1824,6 +1820,9 @@ virtual bool HasDecoder(void) const; virtual bool CanReplay(void) const; virtual bool SetPlayMode(ePlayMode PlayMode); virtual int64_t GetSTC(void); +
      +virtual bool HasIBPTrickSpeed(void); +
    virtual void TrickSpeed(int Speed); virtual void Clear(void); virtual void Play(void); diff --git a/device.h b/device.h index ceccaddd..c306e004 100644 --- a/device.h +++ b/device.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.h 1.83 2007/10/12 13:53:50 kls Exp $ + * $Id: device.h 1.84 2007/10/13 12:25:26 kls Exp $ */ #ifndef __DEVICE_H @@ -494,6 +494,9 @@ public: ///< Gets the current System Time Counter, which can be used to ///< synchronize audio and video. If this device is unable to ///< provide the STC, -1 will be returned. + virtual bool HasIBPTrickSpeed(void) { return false; } + ///< Returns true if this device can handle all frames in 'fast forward' + ///< trick speeds. virtual void TrickSpeed(int Speed); ///< Sets the device into a mode where replay is done slower. ///< Every single frame shall then be displayed the given number of diff --git a/dvbplayer.c b/dvbplayer.c index 99b3f5ce..a072a445 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 1.46 2007/04/28 14:55:22 kls Exp $ + * $Id: dvbplayer.c 1.47 2007/10/13 12:20:58 kls Exp $ */ #include "dvbplayer.h" @@ -400,7 +400,13 @@ void cDvbPlayer::Action(void) uchar FileNumber; int FileOffset; bool TimeShiftMode = index->IsStillRecording(); - int Index = index->GetNextIFrame(readIndex, playDir == pdForward, &FileNumber, &FileOffset, &Length, TimeShiftMode); + int Index = -1; + if (DeviceHasIBPTrickSpeed() && playDir == pdForward) { + if (index->Get(readIndex + 1, &FileNumber, &FileOffset, NULL, &Length)) + Index = readIndex + 1; + } + else + Index = index->GetNextIFrame(readIndex, playDir == pdForward, &FileNumber, &FileOffset, &Length, TimeShiftMode); if (Index >= 0) { if (!NextFile(FileNumber, FileOffset)) { readIndex = Index; diff --git a/player.h b/player.h index 11d16563..87957e9d 100644 --- a/player.h +++ b/player.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: player.h 1.19 2006/01/06 11:29:27 kls Exp $ + * $Id: player.h 1.20 2007/10/13 12:18:10 kls Exp $ */ #ifndef __PLAYER_H @@ -24,6 +24,7 @@ protected: bool DeviceSetCurrentAudioTrack(eTrackType Type) { return device ? device->SetCurrentAudioTrack(Type) : false; } bool DevicePoll(cPoller &Poller, int TimeoutMs = 0) { return device ? device->Poll(Poller, TimeoutMs) : false; } bool DeviceFlush(int TimeoutMs = 0) { return device ? device->Flush(TimeoutMs) : true; } + bool DeviceHasIBPTrickSpeed(void) { return device ? device->HasIBPTrickSpeed() : false; } void DeviceTrickSpeed(int Speed) { if (device) device->TrickSpeed(Speed); } void DeviceClear(void) { if (device) device->Clear(); } void DevicePlay(void) { if (device) device->Play(); }