mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
The full-featured DVB cards are now given the TS data directly for replay
This commit is contained in:
parent
60c5248a36
commit
970622ccf2
@ -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'
|
||||
|
8
HISTORY
8
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.
|
||||
|
11
device.h
11
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;
|
||||
|
27
dvbdevice.c
27
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)
|
||||
|
Loading…
Reference in New Issue
Block a user