summaryrefslogtreecommitdiff
path: root/patches/vdr-1.4.6-Smooth_FastForward.patch
blob: fc1383f634e65f19fbe87e2739b5a0200100e573 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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