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:rni...@gmx.de
--- ../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@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to