mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed blocking replaying in case an encrypted channel is being recorded on the primary device
This commit is contained in:
parent
ffb6153326
commit
41320eca4d
2
HISTORY
2
HISTORY
@ -1642,3 +1642,5 @@ Video Disk Recorder Revision History
|
||||
- Fixed a ternary expression in dvbspu.c.
|
||||
- Fixed handling 'Transfer Mode' on single device systems when recording an
|
||||
encrypted channel (thanks to Stefan Huelswitt).
|
||||
- Fixed blocking replaying in case an encrypted channel is being recorded on
|
||||
the primary device.
|
||||
|
27
PLUGINS.html
27
PLUGINS.html
@ -21,18 +21,18 @@ VDR program and present itself to the user.
|
||||
The <i>inside</i> interface provides the plugin code access to VDR's internal data
|
||||
structures and allows it to hook itself into specific areas to perform special actions.
|
||||
<p>
|
||||
<!--X1.1.9--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||
Important modifications introduced in version 1.1.9 are marked like this.
|
||||
<!--X1.1.9--></td></tr></table>
|
||||
<!--X1.1.11--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||
<!--X1.1.11--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||
Important modifications introduced in version 1.1.11 are marked like this.
|
||||
<!--X1.1.11--></td></tr></table>
|
||||
<!--X1.1.12--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||
<!--X1.1.12--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||
Important modifications introduced in version 1.1.12 are marked like this.
|
||||
<!--X1.1.12--></td></tr></table>
|
||||
<!--X1.1.13--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||
<!--X1.1.13--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||
Important modifications introduced in version 1.1.13 are marked like this.
|
||||
<!--X1.1.13--></td></tr></table>
|
||||
<!--X1.1.14--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||
Important modifications introduced in version 1.1.14 are marked like this.
|
||||
<!--X1.1.14--></td></tr></table>
|
||||
|
||||
<a name="Part I - The Outside Interface"><hr><center><h1>Part I - The Outside Interface</h1></center>
|
||||
|
||||
@ -964,7 +964,7 @@ bool DevicePoll(cPoller &Poller, int TimeoutMs = 0);
|
||||
</pre></td></tr></table><p>
|
||||
|
||||
to determine whether the device is ready for further data.
|
||||
<!--X1.1.13--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||
<!--X1.1.13--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||
<p>
|
||||
If the player can provide more than a single audio track, it can implement the
|
||||
following functions to make them available:
|
||||
@ -1194,9 +1194,8 @@ the <tt>cDvbDevice</tt>, which is used to access the DVB PCI cards.
|
||||
If the new device can receive, it most likely needs to provide a way of
|
||||
selecting which channel it shall tune to:
|
||||
|
||||
<!--X1.1.9--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
|
||||
<!--X1.1.12--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||
<!--X1.1.12--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||
virtual bool ProvidesSource(int Source) const;
|
||||
<!--X1.1.12--></td></tr></table>
|
||||
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL);
|
||||
@ -1206,8 +1205,7 @@ virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
|
||||
These functions will be called with the desired source or channel and shall return whether
|
||||
this device can provide the requested source or channel and whether tuning to it was successful,
|
||||
repectively.
|
||||
<!--X1.1.9--></td></tr></table>
|
||||
<!--X1.1.13--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||
<!--X1.1.13--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||
<p>
|
||||
<b>Audio selection</b>
|
||||
<p>
|
||||
@ -1230,9 +1228,7 @@ A device that can be used for recording must implement the functions
|
||||
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
|
||||
virtual bool OpenDvr(void);
|
||||
virtual void CloseDvr(void);
|
||||
<!--X1.1.9--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||
virtual bool GetTSPacket(uchar *&Data);
|
||||
<!--X1.1.9--></td></tr></table>
|
||||
</pre></td></tr></table><p>
|
||||
|
||||
which allow VDR to set the PIDs that shall be recorded, set up the device for
|
||||
@ -1256,6 +1252,9 @@ The functions to implement replaying capabilites are
|
||||
|
||||
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
|
||||
virtual bool HasDecoder(void) const;
|
||||
<!--X1.1.14--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||
virtual bool CanReplay(void) const;
|
||||
<!--X1.1.14--></td></tr></table>
|
||||
virtual bool SetPlayMode(ePlayMode PlayMode);
|
||||
virtual void TrickSpeed(int Speed);
|
||||
virtual void Clear(void);
|
||||
@ -1315,7 +1314,7 @@ shut down (delete) all devices when the program terminates. It is therefore
|
||||
important that the devices are created on the heap, using the <tt>new</tt>
|
||||
operator!
|
||||
|
||||
<!--X1.1.11--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||
<!--X1.1.11--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||
<hr><h2>Remote Control</h2>
|
||||
|
||||
<center><i><b>The joy of zapping!</b></i></center><p>
|
||||
|
13
device.c
13
device.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: device.c 1.31 2002/10/26 10:23:20 kls Exp $
|
||||
* $Id: device.c 1.32 2002/10/26 11:43:52 kls Exp $
|
||||
*/
|
||||
|
||||
#include "device.h"
|
||||
@ -324,7 +324,7 @@ bool cDevice::SwitchChannel(int Direction)
|
||||
cChannel *channel;
|
||||
while ((channel = Channels.GetByNumber(n, Direction)) != NULL) {
|
||||
// try only channels which are currently available
|
||||
if (PrimaryDevice()->ProvidesChannel(channel, Setup.PrimaryLimit) || GetDevice(channel, 0))
|
||||
if (PrimaryDevice()->ProvidesChannel(channel, Setup.PrimaryLimit) || PrimaryDevice()->CanReplay() && GetDevice(channel, 0))
|
||||
break;
|
||||
n = channel->Number() + Direction;
|
||||
}
|
||||
@ -360,7 +360,7 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
|
||||
|
||||
if (NeedsTransferMode) {
|
||||
cDevice *CaDevice = GetDevice(Channel, 0);
|
||||
if (CaDevice) {
|
||||
if (CaDevice && CanReplay()) {
|
||||
cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel
|
||||
if (CaDevice->SetChannel(Channel, false) == scrOk) // calling SetChannel() directly, not SwitchChannel()!
|
||||
cControl::Launch(new cTransferControl(CaDevice, Channel->Vpid(), Channel->Apid1(), Channel->Apid2(), Channel->Dpid1(), Channel->Dpid2()));//XXX+
|
||||
@ -446,6 +446,11 @@ void cDevice::SetAudioTrack(int Index)
|
||||
SetAudioTrackDevice(Index);
|
||||
}
|
||||
|
||||
bool cDevice::CanReplay(void) const
|
||||
{
|
||||
return HasDecoder();
|
||||
}
|
||||
|
||||
bool cDevice::SetPlayMode(ePlayMode PlayMode)
|
||||
{
|
||||
return false;
|
||||
@ -482,7 +487,7 @@ bool cDevice::Replaying(void) const
|
||||
|
||||
bool cDevice::AttachPlayer(cPlayer *Player)
|
||||
{
|
||||
if (HasDecoder()) {
|
||||
if (CanReplay()) {
|
||||
if (player)
|
||||
Detach(player);
|
||||
player = Player;
|
||||
|
4
device.h
4
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 1.24 2002/10/26 09:35:20 kls Exp $
|
||||
* $Id: device.h 1.25 2002/10/26 11:33:42 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __DEVICE_H
|
||||
@ -278,6 +278,8 @@ private:
|
||||
cPlayer *player;
|
||||
bool playerDetached;
|
||||
protected:
|
||||
virtual bool CanReplay(void) const;
|
||||
// Returns true if this device can currently start a replay session.
|
||||
virtual bool SetPlayMode(ePlayMode PlayMode);
|
||||
// Sets the device into the given play mode.
|
||||
// Returns true if the operation was successful.
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: dvbdevice.c 1.29 2002/10/26 11:11:42 kls Exp $
|
||||
* $Id: dvbdevice.c 1.30 2002/10/26 11:37:03 kls Exp $
|
||||
*/
|
||||
|
||||
#include "dvbdevice.h"
|
||||
@ -802,6 +802,11 @@ void cDvbDevice::SetAudioTrackDevice(int Index)
|
||||
}
|
||||
}
|
||||
|
||||
bool cDvbDevice::CanReplay(void) const
|
||||
{
|
||||
return cDevice::CanReplay() && !Ca(); // we can only replay if there is no Ca recording going on
|
||||
}
|
||||
|
||||
bool cDvbDevice::SetPlayMode(ePlayMode PlayMode)
|
||||
{
|
||||
if (PlayMode != pmExtern_THIS_SHOULD_BE_AVOIDED && fd_video < 0 && fd_audio < 0) {
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: dvbdevice.h 1.14 2002/10/12 11:15:39 kls Exp $
|
||||
* $Id: dvbdevice.h 1.15 2002/10/26 11:35:04 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __DVBDEVICE_H
|
||||
@ -101,6 +101,7 @@ private:
|
||||
|
||||
protected:
|
||||
ePlayMode playMode;
|
||||
virtual bool CanReplay(void) const;
|
||||
virtual bool SetPlayMode(ePlayMode PlayMode);
|
||||
public:
|
||||
virtual void TrickSpeed(int Speed);
|
||||
|
Loading…
Reference in New Issue
Block a user