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()
|
the call to cStatus::MsgSetVolume()
|
||||||
for providing a driver patch that allows replaying TS->PES converted video in
|
for providing a driver patch that allows replaying TS->PES converted video in
|
||||||
Transfer Mode
|
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>
|
Reinhard Walter Buchner <rw.buchner@freenet.de>
|
||||||
for adding some satellites to 'sources.conf'
|
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
|
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.
|
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
|
- Removed the '#define FE_CAN_2ND_GEN_MODULATION', since it was wrong and the
|
||||||
flag is now in the driver, anyway.
|
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
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __DEVICE_H
|
||||||
@ -487,7 +487,7 @@ protected:
|
|||||||
///< Plays the given data block as video.
|
///< Plays the given data block as video.
|
||||||
///< Data points to exactly one complete PES packet of the given Length.
|
///< Data points to exactly one complete PES packet of the given Length.
|
||||||
///< PlayVideo() shall process the packet either as a whole (returning
|
///< 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
|
///< \return Returns the number of bytes actually taken from Data, or -1
|
||||||
///< in case of an error.
|
///< in case of an error.
|
||||||
virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
|
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
|
///< TS replay). Plugins that need to know this Id shall read it from the
|
||||||
///< actual PES data (it's the 4th byte).
|
///< actual PES data (it's the 4th byte).
|
||||||
///< PlayAudio() shall process the packet either as a whole (returning
|
///< 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
|
///< \return Returns the number of bytes actually taken from Data, or -1
|
||||||
///< in case of an error.
|
///< in case of an error.
|
||||||
virtual int PlaySubtitle(const uchar *Data, int Length);
|
virtual int PlaySubtitle(const uchar *Data, int Length);
|
||||||
///< Plays the given data block as a subtitle.
|
///< Plays the given data block as a subtitle.
|
||||||
///< Data points to exactly one complete PES packet of the given Length.
|
///< Data points to exactly one complete PES packet of the given Length.
|
||||||
///< PlaySubtitle() shall process the packet either as a whole (returning
|
///< 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
|
///< \return Returns the number of bytes actually taken from Data, or -1
|
||||||
///< in case of an error.
|
///< in case of an error.
|
||||||
virtual int PlayPesPacket(const uchar *Data, int Length, bool VideoOnly = false);
|
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
|
///< Returns -1 in case of error, otherwise the number of actually
|
||||||
///< processed bytes is returned, which must be Length.
|
///< processed bytes is returned, which must be Length.
|
||||||
///< PlayTs() shall process the packet either as a whole (returning
|
///< PlayTs() shall process the packet either as a whole (returning
|
||||||
///< a positive number, which needs not necessarily be Length) or not at all
|
///< Length) or not at all returning 0 or -1 and setting 'errno' accordingly).
|
||||||
///< (returning 0 or -1 and setting 'errno' to EAGAIN).
|
|
||||||
bool Replaying(void) const;
|
bool Replaying(void) const;
|
||||||
///< Returns true if we are currently replaying.
|
///< Returns true if we are currently replaying.
|
||||||
bool Transferring(void) const;
|
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
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "dvbdevice.h"
|
||||||
@ -1297,39 +1297,22 @@ bool cDvbDevice::Flush(int TimeoutMs)
|
|||||||
|
|
||||||
int cDvbDevice::PlayVideo(const uchar *Data, int Length)
|
int cDvbDevice::PlayVideo(const uchar *Data, int Length)
|
||||||
{
|
{
|
||||||
int w;
|
return WriteAllOrNothing(fd_video, Data, Length, 1000, 10);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cDvbDevice::PlayAudio(const uchar *Data, int Length, uchar Id)
|
int cDvbDevice::PlayAudio(const uchar *Data, int Length, uchar Id)
|
||||||
{
|
{
|
||||||
int w;
|
return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cDvbDevice::PlayTsVideo(const uchar *Data, int Length)
|
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 cDvbDevice::PlayTsAudio(const uchar *Data, int Length)
|
||||||
{
|
{
|
||||||
int w = PlayAudio(Data, TsGetPayload(&Data), 0);
|
return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10);
|
||||||
return w >= 0 ? Length : w;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cDvbDevice::OpenDvr(void)
|
bool cDvbDevice::OpenDvr(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user