Hi, Magnus Hörlin schrieb: > Well, it's A LOT better than nothing. Reinhard, you are a true hero. Now > if only ffwd/rew/skip would be as smooth with vdr-xine as it is with > xineliboutput... Anyway, your xinelib-1.2 vdpau patches are brilliant. > I've used every one of them since day one. Well, have a look into xineDevice.c and locate cXineDevice::HasIBPTrickSpeed(). Then remove the comment and apply the attached patch to VDR. The problem is, that I don't know which speed calculation to use in SetTrickSpeed(). So I asked kls to supply this info as in the attached patch but he thinks of changing the semantic of SetTrickSpeed() at all. That's why I haven't released this functionality yet. Bye. -- Dipl.-Inform. (FH) Reinhard Nissl mailto:rnissl@xxxxxx
--- ../vdr-1.7.5-pre/./player.h 2009-03-08 13:29:10.000000000 +0100 +++ ./player.h 2009-04-02 20:53:04.000000000 +0200 @@ -27,7 +27,7 @@ protected: bool DeviceFlush(int TimeoutMs = 0) { return device ? device->Flush(TimeoutMs) : true; } bool DeviceHasIBPTrickSpeed(void) { return device ? device->HasIBPTrickSpeed() : false; } bool DeviceIsPlayingVideo(void) { return device ? device->IsPlayingVideo() : false; } - void DeviceTrickSpeed(int Speed) { if (device) device->TrickSpeed(Speed); } + void DeviceTrickSpeed(int Speed, bool IBP) { if (device) device->TrickSpeed(Speed, IBP); } void DeviceClear(void) { if (device) device->Clear(); } void DevicePlay(void) { if (device) device->Play(); } void DeviceFreeze(void) { if (device) device->Freeze(); } --- ../vdr-1.7.5-pre/./dvbdevice.c 2009-01-10 11:07:33.000000000 +0100 +++ ./dvbdevice.c 2009-04-02 20:52:05.000000000 +0200 @@ -1150,7 +1150,7 @@ int64_t cDvbDevice::GetSTC(void) return -1; } -void cDvbDevice::TrickSpeed(int Speed) +void cDvbDevice::TrickSpeed(int Speed, bool IBP) { if (fd_video >= 0) CHECK(ioctl(fd_video, VIDEO_SLOWMOTION, Speed)); --- ../vdr-1.7.5-pre/./dvbdevice.h 2008-12-06 14:31:12.000000000 +0100 +++ ./dvbdevice.h 2009-04-02 20:51:49.000000000 +0200 @@ -143,7 +143,7 @@ protected: virtual int PlayTsAudio(const uchar *Data, int Length); public: virtual int64_t GetSTC(void); - virtual void TrickSpeed(int Speed); + virtual void TrickSpeed(int Speed, bool IBP); virtual void Clear(void); virtual void Play(void); virtual void Freeze(void); --- ../vdr-1.7.5-pre/./dvbplayer.c 2009-03-29 18:39:43.000000000 +0200 +++ ./dvbplayer.c 2009-04-02 20:58:58.000000000 +0200 @@ -308,7 +308,7 @@ void cDvbPlayer::TrickSpeed(int Incremen int sp = (Speeds[nts] > 0) ? Mult / Speeds[nts] : -Speeds[nts] * Mult; if (sp > MAX_VIDEO_SLOWMOTION) sp = MAX_VIDEO_SLOWMOTION; - DeviceTrickSpeed(sp); + DeviceTrickSpeed(sp, playMode == pmFast && playDir == pdForward && DeviceHasIBPTrickSpeed()); } } --- ../vdr-1.7.5-pre/./device.h 2009-03-28 22:53:26.000000000 +0100 +++ ./device.h 2009-04-02 20:49:30.000000000 +0200 @@ -556,7 +556,7 @@ public: 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, bool IBP); ///< Sets the device into a mode where replay is done slower. ///< Every single frame shall then be displayed the given number of ///< times. --- ../vdr-1.7.5-pre/./device.c 2009-01-30 17:01:53.000000000 +0100 +++ ./device.c 2009-04-02 20:49:49.000000000 +0200 @@ -987,7 +987,7 @@ int64_t cDevice::GetSTC(void) return -1; } -void cDevice::TrickSpeed(int Speed) +void cDevice::TrickSpeed(int Speed, bool IBP) { }
_______________________________________________ vdr mailing list vdr@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr