summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2009-01-16 14:27:22 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2009-01-16 14:27:22 +0100
commit970622ccf294ce3ce34f230b163bf3ef9464019d (patch)
treefbe7b7d4c527966028a56f6b908c924643be033a
parent60c5248a3688eddaab8d1aaebd28c917016c5ad9 (diff)
downloadvdr-970622ccf294ce3ce34f230b163bf3ef9464019d.tar.gz
vdr-970622ccf294ce3ce34f230b163bf3ef9464019d.tar.bz2
The full-featured DVB cards are now given the TS data directly for replay
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY8
-rw-r--r--device.h11
-rw-r--r--dvbdevice.c27
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'
diff --git a/HISTORY b/HISTORY
index 9dd40649..2b26bc3c 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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.
diff --git a/device.h b/device.h
index 7c4a7098..13a77e39 100644
--- a/device.h
+++ b/device.h
@@ -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)