mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Implemented sending all frames to devices that can handle them in fast forward trick speeds
This commit is contained in:
parent
b943bf2c50
commit
78ecc96e17
@ -2190,3 +2190,7 @@ Denis Knauf <denis.knauf@gmail.com>
|
|||||||
|
|
||||||
Diego Pierotto <vdr-italian@tiscali.it>
|
Diego Pierotto <vdr-italian@tiscali.it>
|
||||||
for translating OSD texts to the Italian language
|
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
|
||||||
|
2
HISTORY
2
HISTORY
@ -5464,3 +5464,5 @@ Video Disk Recorder Revision History
|
|||||||
Richter).
|
Richter).
|
||||||
- Fixed a new[]/delete mismatch in cMenuEditStrItem::LeaveEditMode() (thanks to
|
- Fixed a new[]/delete mismatch in cMenuEditStrItem::LeaveEditMode() (thanks to
|
||||||
Udo Richter).
|
Udo Richter).
|
||||||
|
- Implemented sending all frames to devices that can handle them in fast forward
|
||||||
|
trick speeds (thansk to Timo Eskola).
|
||||||
|
27
PLUGINS.html
27
PLUGINS.html
@ -14,18 +14,18 @@ Copyright © 2006 Klaus Schmidinger<br>
|
|||||||
<a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a>
|
<a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a>
|
||||||
</center>
|
</center>
|
||||||
<p>
|
<p>
|
||||||
<!--X1.5.1--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
<!--X1.5.3--><table width=100%><tr><td bgcolor=#0000AA> </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> </td><td width=100%>
|
|
||||||
Important modifications introduced in version 1.5.3 are marked like this.
|
Important modifications introduced in version 1.5.3 are marked like this.
|
||||||
<!--X1.5.3--></td></tr></table>
|
<!--X1.5.3--></td></tr></table>
|
||||||
<!--X1.5.7--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
<!--X1.5.7--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||||
Important modifications introduced in version 1.5.7 are marked like this.
|
Important modifications introduced in version 1.5.7 are marked like this.
|
||||||
<!--X1.5.7--></td></tr></table>
|
<!--X1.5.7--></td></tr></table>
|
||||||
<!--X1.5.8--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
<!--X1.5.8--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||||
Important modifications introduced in version 1.5.8 are marked like this.
|
Important modifications introduced in version 1.5.8 are marked like this.
|
||||||
<!--X1.5.8--></td></tr></table>
|
<!--X1.5.8--></td></tr></table>
|
||||||
|
<!--X1.5.10--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||||
|
Important modifications introduced in version 1.5.10 are marked like this.
|
||||||
|
<!--X1.5.10--></td></tr></table>
|
||||||
<p>
|
<p>
|
||||||
VDR provides an easy to use plugin interface that allows additional functionality
|
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.
|
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="#Housekeeping">Housekeeping</a>
|
||||||
<li><a href="#Main thread hook">Main thread hook</a>
|
<li><a href="#Main thread hook">Main thread hook</a>
|
||||||
<li><a href="#Activity">Activity</a>
|
<li><a href="#Activity">Activity</a>
|
||||||
<!--X1.5.1--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
|
||||||
<li><a href="#Wakeup">Wakeup</a>
|
<li><a href="#Wakeup">Wakeup</a>
|
||||||
<!--X1.5.1--></td></tr></table>
|
|
||||||
<li><a href="#Setup parameters">Setup parameters</a>
|
<li><a href="#Setup parameters">Setup parameters</a>
|
||||||
<li><a href="#The Setup menu">The Setup menu</a>
|
<li><a href="#The Setup menu">The Setup menu</a>
|
||||||
<li><a href="#Configuration files">Configuration files</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
|
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.
|
further plugins will be queried and no shutdown will be done.
|
||||||
|
|
||||||
<!--X1.5.1--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
|
||||||
<a name="Wakeup"><hr><h2>Wakeup</h2>
|
<a name="Wakeup"><hr><h2>Wakeup</h2>
|
||||||
|
|
||||||
<center><i><b>Wake me up before you go-go</b></i></center><p>
|
<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
|
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
|
again instantly. If <tt>WakeupTime()</tt> returns a time that is not in
|
||||||
the future, the time will be ignored.
|
the future, the time will be ignored.
|
||||||
<!--X1.5.1--></td></tr></table>
|
|
||||||
|
|
||||||
<a name="Setup parameters"><hr><h2>Setup parameters</h2>
|
<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>
|
<center><i><b>Welcome to Babylon!</b></i></center><p>
|
||||||
|
|
||||||
<!--X1.5.7--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
<!--X1.5.7--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||||
If a plugin displays texts to the user, it should prepare for internationalization
|
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
|
of these texts. All that is necessary for this is to mark every text that is
|
||||||
presented to the user as translatable, as in
|
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
|
The text given here must be the English version, and the returned pointer is either
|
||||||
a translated version (if available) or the original string.
|
a translated version (if available) or the original string.
|
||||||
<!--X1.5.8--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
<!--X1.5.8--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||||
Texts are searched for in the domain registered for this plugin.
|
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
|
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
|
the special <tt>trVDR()</tt> macro to mark these texts without having them
|
||||||
@ -944,7 +940,7 @@ for (int i = 0; i < 3; i++)
|
|||||||
</pre></td></tr></table><p>
|
</pre></td></tr></table><p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<!--X1.5.3--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
<!--X1.5.3--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||||
The system VDR is running on may use a character encoding where a single character
|
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,
|
(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).
|
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
|
areas. Drawing areas are always rectangular and may not overlap (but do not need
|
||||||
to be adjacent).
|
to be adjacent).
|
||||||
<p>
|
<p>
|
||||||
<!--X1.5.3--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
<!--X1.5.3--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||||
Special consideration may have to be given to color usage if the OSD provides
|
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>,
|
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
|
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 CanReplay(void) const;
|
||||||
virtual bool SetPlayMode(ePlayMode PlayMode);
|
virtual bool SetPlayMode(ePlayMode PlayMode);
|
||||||
virtual int64_t GetSTC(void);
|
virtual int64_t GetSTC(void);
|
||||||
|
<!--X1.5.10--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||||
|
virtual bool HasIBPTrickSpeed(void);
|
||||||
|
<!--X1.5.10--></td></tr></table>
|
||||||
virtual void TrickSpeed(int Speed);
|
virtual void TrickSpeed(int Speed);
|
||||||
virtual void Clear(void);
|
virtual void Clear(void);
|
||||||
virtual void Play(void);
|
virtual void Play(void);
|
||||||
|
5
device.h
5
device.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __DEVICE_H
|
||||||
@ -494,6 +494,9 @@ public:
|
|||||||
///< Gets the current System Time Counter, which can be used to
|
///< Gets the current System Time Counter, which can be used to
|
||||||
///< synchronize audio and video. If this device is unable to
|
///< synchronize audio and video. If this device is unable to
|
||||||
///< provide the STC, -1 will be returned.
|
///< 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);
|
virtual void TrickSpeed(int Speed);
|
||||||
///< Sets the device into a mode where replay is done slower.
|
///< Sets the device into a mode where replay is done slower.
|
||||||
///< Every single frame shall then be displayed the given number of
|
///< Every single frame shall then be displayed the given number of
|
||||||
|
10
dvbplayer.c
10
dvbplayer.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "dvbplayer.h"
|
||||||
@ -400,7 +400,13 @@ void cDvbPlayer::Action(void)
|
|||||||
uchar FileNumber;
|
uchar FileNumber;
|
||||||
int FileOffset;
|
int FileOffset;
|
||||||
bool TimeShiftMode = index->IsStillRecording();
|
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 (Index >= 0) {
|
||||||
if (!NextFile(FileNumber, FileOffset)) {
|
if (!NextFile(FileNumber, FileOffset)) {
|
||||||
readIndex = Index;
|
readIndex = Index;
|
||||||
|
3
player.h
3
player.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __PLAYER_H
|
||||||
@ -24,6 +24,7 @@ protected:
|
|||||||
bool DeviceSetCurrentAudioTrack(eTrackType Type) { return device ? device->SetCurrentAudioTrack(Type) : false; }
|
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 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 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 DeviceTrickSpeed(int Speed) { if (device) device->TrickSpeed(Speed); }
|
||||||
void DeviceClear(void) { if (device) device->Clear(); }
|
void DeviceClear(void) { if (device) device->Clear(); }
|
||||||
void DevicePlay(void) { if (device) device->Play(); }
|
void DevicePlay(void) { if (device) device->Play(); }
|
||||||
|
Loading…
Reference in New Issue
Block a user