summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--patches/vdr-1.4.6-Smooth_FastForward.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/patches/vdr-1.4.6-Smooth_FastForward.patch b/patches/vdr-1.4.6-Smooth_FastForward.patch
new file mode 100644
index 00000000..fc1383f6
--- /dev/null
+++ b/patches/vdr-1.4.6-Smooth_FastForward.patch
@@ -0,0 +1,79 @@
+Common subdirectories: vdr-1.4.6-orig/PLUGINS and vdr-1.4.6/PLUGINS
+diff -u vdr-1.4.6-orig/device.h vdr-1.4.6/device.h
+--- vdr-1.4.6-orig/device.h 2007-06-19 10:42:07.000000000 +0300
++++ vdr-1.4.6/device.h 2007-06-19 10:43:33.000000000 +0300
+@@ -452,6 +452,9 @@
+ ///< which is necessary for trick modes like 'fast forward'.
+ ///< Data must point to one single, complete PES packet.
+ public:
++#define DEVICE_SUPPORTS_IBP_TRICKSPEED
++ virtual bool HasIBPTrickSpeed(void) { return false; }
++ ///< Returns true if this device can all frames in fast fwd trick speeds.
+ virtual int64_t GetSTC(void);
+ ///< Gets the current System Time Counter, which can be used to
+ ///< synchronize audio and video. If this device is unable to
+Only in vdr-1.4.6: device.h.flc
+Only in vdr-1.4.6: device.h~
+diff -u vdr-1.4.6-orig/dvbplayer.c vdr-1.4.6/dvbplayer.c
+--- vdr-1.4.6-orig/dvbplayer.c 2007-06-19 10:42:07.000000000 +0300
++++ vdr-1.4.6/dvbplayer.c 2007-06-19 10:51:19.000000000 +0300
+@@ -400,7 +400,13 @@
+ 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))
+ continue;
+@@ -530,7 +536,8 @@
+ else {
+ LOCK_THREAD;
+ if (playMode == pmFast || (playMode == pmSlow && playDir == pdBackward))
+- Empty();
++ if (!(DeviceHasIBPTrickSpeed() && playDir == pdForward))
++ Empty();
+ DeviceFreeze();
+ playMode = pmPause;
+ }
+@@ -541,7 +548,8 @@
+ if (playMode != pmPlay) {
+ LOCK_THREAD;
+ if (playMode == pmStill || playMode == pmFast || (playMode == pmSlow && playDir == pdBackward))
+- Empty();
++ if (!(DeviceHasIBPTrickSpeed() && playDir == pdForward))
++ Empty();
+ DevicePlay();
+ playMode = pmPlay;
+ playDir = pdForward;
+@@ -564,7 +572,8 @@
+ // run into pmPlay
+ case pmPlay: {
+ LOCK_THREAD;
+- Empty();
++ if (! DeviceHasIBPTrickSpeed())
++ Empty();
+ DeviceMute();
+ playMode = pmFast;
+ playDir = pdForward;
+Only in vdr-1.4.6: dvbplayer.c.orig
+Only in vdr-1.4.6: dvbplayer.c~
+Common subdirectories: vdr-1.4.6-orig/libsi and vdr-1.4.6/libsi
+diff -u vdr-1.4.6-orig/player.h vdr-1.4.6/player.h
+--- vdr-1.4.6-orig/player.h 2007-06-19 10:42:07.000000000 +0300
++++ vdr-1.4.6/player.h 2007-06-19 10:42:20.000000000 +0300
+@@ -24,6 +24,7 @@
+ 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(); }
+Common subdirectories: vdr-1.4.6-orig/symbols and vdr-1.4.6/symbols