diff options
Diffstat (limited to 'patches/vdr-1.4.6-Smooth_FastForward.patch')
-rw-r--r-- | patches/vdr-1.4.6-Smooth_FastForward.patch | 79 |
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 |