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
|