summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2007-10-13 12:28:35 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2007-10-13 12:28:35 +0200
commit78ecc96e17981a688f5d373c47298ca2b448a6fa (patch)
tree2bd22a9b6eaead1b08475650da02003581fe8b34
parentb943bf2c503baa79184d8088d28fa740b656db74 (diff)
downloadvdr-78ecc96e17981a688f5d373c47298ca2b448a6fa.tar.gz
vdr-78ecc96e17981a688f5d373c47298ca2b448a6fa.tar.bz2
Implemented sending all frames to devices that can handle them in fast forward trick speeds
-rw-r--r--CONTRIBUTORS4
-rw-r--r--HISTORY2
-rw-r--r--PLUGINS.html27
-rw-r--r--device.h5
-rw-r--r--dvbplayer.c10
-rw-r--r--player.h3
6 files changed, 33 insertions, 18 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 3b92a9f9..39cd6dd2 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -2190,3 +2190,7 @@ Denis Knauf <denis.knauf@gmail.com>
Diego Pierotto <vdr-italian@tiscali.it>
for translating OSD texts to the Italian language
+
+Timo Eskola <timo@tolleri.net>
+ 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 &copy; 2006 Klaus Schmidinger<br>
<a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a>
</center>
<p>
-<!--X1.5.1--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
-Important modifications introduced in version 1.5.1 are marked like this.
-<!--X1.5.1--></td></tr></table>
-<!--X1.5.3--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
+<!--X1.5.3--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.5.3 are marked like this.
<!--X1.5.3--></td></tr></table>
-<!--X1.5.7--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
+<!--X1.5.7--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.5.7 are marked like this.
<!--X1.5.7--></td></tr></table>
-<!--X1.5.8--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+<!--X1.5.8--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.5.8 are marked like this.
<!--X1.5.8--></td></tr></table>
+<!--X1.5.10--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+Important modifications introduced in version 1.5.10 are marked like this.
+<!--X1.5.10--></td></tr></table>
<p>
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
<li><a href="#Housekeeping">Housekeeping</a>
<li><a href="#Main thread hook">Main thread hook</a>
<li><a href="#Activity">Activity</a>
-<!--X1.5.1--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<li><a href="#Wakeup">Wakeup</a>
-<!--X1.5.1--></td></tr></table>
<li><a href="#Setup parameters">Setup parameters</a>
<li><a href="#The Setup menu">The Setup menu</a>
<li><a href="#Configuration files">Configuration files</a>
@@ -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.
-<!--X1.5.1--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<a name="Wakeup"><hr><h2>Wakeup</h2>
<center><i><b>Wake me up before you go-go</b></i></center><p>
@@ -718,7 +715,6 @@ After wakeup, the plugin shall continue to return the wakeup time and shall
return a string when <tt>Active()</tt> is called at that time, otherwise VDR may shut down
again instantly. If <tt>WakeupTime()</tt> returns a time that is not in
the future, the time will be ignored.
-<!--X1.5.1--></td></tr></table>
<a name="Setup parameters"><hr><h2>Setup parameters</h2>
@@ -910,7 +906,7 @@ const char *MyConfigDir = cPlugin::ConfigDirectory();
<center><i><b>Welcome to Babylon!</b></i></center><p>
-<!--X1.5.7--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
+<!--X1.5.7--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
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.
-<!--X1.5.8--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+<!--X1.5.8--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
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 <tt>trVDR()</tt> macro to mark these texts without having them
@@ -944,7 +940,7 @@ for (int i = 0; i &lt; 3; i++)
</pre></td></tr></table><p>
<p>
-<!--X1.5.3--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
+<!--X1.5.3--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
The system VDR is running on may use a character encoding where a single character
(or <i>symbol</i>) 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).
<p>
-<!--X1.5.3--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
+<!--X1.5.3--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
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 <i>anti-aliasing</i>,
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);
+<!--X1.5.10--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
+virtual bool HasIBPTrickSpeed(void);
+<!--X1.5.10--></td></tr></table>
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(); }