diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2009-01-16 14:27:22 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2009-01-16 14:27:22 +0100 |
commit | 970622ccf294ce3ce34f230b163bf3ef9464019d (patch) | |
tree | fbe7b7d4c527966028a56f6b908c924643be033a | |
parent | 60c5248a3688eddaab8d1aaebd28c917016c5ad9 (diff) | |
download | vdr-970622ccf294ce3ce34f230b163bf3ef9464019d.tar.gz vdr-970622ccf294ce3ce34f230b163bf3ef9464019d.tar.bz2 |
The full-featured DVB cards are now given the TS data directly for replay
-rw-r--r-- | CONTRIBUTORS | 2 | ||||
-rw-r--r-- | HISTORY | 8 | ||||
-rw-r--r-- | device.h | 11 | ||||
-rw-r--r-- | dvbdevice.c | 27 |
4 files changed, 19 insertions, 29 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 7bc1b740..26674359 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -660,6 +660,8 @@ Oliver Endriss <o.endriss@gmx.de> the call to cStatus::MsgSetVolume() for providing a driver patch that allows replaying TS->PES converted video in Transfer Mode + for providing a driver patch that allows direct replaying of TS video on full-featured + DVB cards Reinhard Walter Buchner <rw.buchner@freenet.de> for adding some satellites to 'sources.conf' @@ -5912,7 +5912,13 @@ Video Disk Recorder Revision History can handle DVB-S2. The #define is still there to allow people with older drivers who don't need DVB-S2 to use this version without pathcing. -2009-01-06: Version 1.7.4 +2009-01-16: Version 1.7.4 - Removed the '#define FE_CAN_2ND_GEN_MODULATION', since it was wrong and the flag is now in the driver, anyway. +- The full-featured DVB cards are now given the TS data directly for replay + (thanks to Oliver Endriss for enhancing the av7110 driver to make it replay + TS data). The patch from ftp://ftp.cadsoft.de/vdr/Developer/av7110_ts_replay__1.diff + implements this change in the driver. + The the patch av7110_v4ldvb_api5_audiobuf_test_1.diff mentioned in version 1.7.2 + is no longer necessary. @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.h 2.4 2009/01/05 16:28:06 kls Exp $ + * $Id: device.h 2.5 2009/01/10 10:04:30 kls Exp $ */ #ifndef __DEVICE_H @@ -487,7 +487,7 @@ protected: ///< Plays the given data block as video. ///< Data points to exactly one complete PES packet of the given Length. ///< PlayVideo() shall process the packet either as a whole (returning - ///< Length) or not at all (returning 0 or -1 and setting 'errno' to EAGAIN). + ///< Length) or not at all (returning 0 or -1 and setting 'errno' accordingly). ///< \return Returns the number of bytes actually taken from Data, or -1 ///< in case of an error. virtual int PlayAudio(const uchar *Data, int Length, uchar Id); @@ -498,14 +498,14 @@ protected: ///< TS replay). Plugins that need to know this Id shall read it from the ///< actual PES data (it's the 4th byte). ///< PlayAudio() shall process the packet either as a whole (returning - ///< Length) or not at all (returning 0 or -1 and setting 'errno' to EAGAIN). + ///< Length) or not at all (returning 0 or -1 and setting 'errno' accordingly). ///< \return Returns the number of bytes actually taken from Data, or -1 ///< in case of an error. virtual int PlaySubtitle(const uchar *Data, int Length); ///< Plays the given data block as a subtitle. ///< Data points to exactly one complete PES packet of the given Length. ///< PlaySubtitle() shall process the packet either as a whole (returning - ///< Length) or not at all (returning 0 or -1 and setting 'errno' to EAGAIN). + ///< Length) or not at all (returning 0 or -1 and setting 'errno' accordingly). ///< \return Returns the number of bytes actually taken from Data, or -1 ///< in case of an error. virtual int PlayPesPacket(const uchar *Data, int Length, bool VideoOnly = false); @@ -610,8 +610,7 @@ public: ///< Returns -1 in case of error, otherwise the number of actually ///< processed bytes is returned, which must be Length. ///< PlayTs() shall process the packet either as a whole (returning - ///< a positive number, which needs not necessarily be Length) or not at all - ///< (returning 0 or -1 and setting 'errno' to EAGAIN). + ///< Length) or not at all returning 0 or -1 and setting 'errno' accordingly). bool Replaying(void) const; ///< Returns true if we are currently replaying. bool Transferring(void) const; diff --git a/dvbdevice.c b/dvbdevice.c index 3d4fddc9..56001917 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 2.11 2009/01/06 16:54:52 kls Exp $ + * $Id: dvbdevice.c 2.12 2009/01/10 10:07:33 kls Exp $ */ #include "dvbdevice.h" @@ -1297,39 +1297,22 @@ bool cDvbDevice::Flush(int TimeoutMs) int cDvbDevice::PlayVideo(const uchar *Data, int Length) { - int w; - do { - w = WriteAllOrNothing(fd_video, Data, Length, 1000, 10); - if (w < 0 && errno == EAGAIN) { - cPoller Poller(fd_video, true); - Poller.Poll(200); - } - } while (w != Length); - return w; + return WriteAllOrNothing(fd_video, Data, Length, 1000, 10); } int cDvbDevice::PlayAudio(const uchar *Data, int Length, uchar Id) { - int w; - do { - w = WriteAllOrNothing(fd_audio, Data, Length, 1000, 10); - if (w < 0 && errno == EAGAIN) { - cPoller Poller(fd_audio, true); - Poller.Poll(200); - } - } while (w != Length); - return w; + return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10); } int cDvbDevice::PlayTsVideo(const uchar *Data, int Length) { - return cDevice::PlayTsVideo(Data, Length); + return WriteAllOrNothing(fd_video, Data, Length, 1000, 10); } int cDvbDevice::PlayTsAudio(const uchar *Data, int Length) { - int w = PlayAudio(Data, TsGetPayload(&Data), 0); - return w >= 0 ? Length : w; + return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10); } bool cDvbDevice::OpenDvr(void) |