mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 2.1.3
VDR developer version 2.1.3 is now available at
ftp://ftp.tvdr.de/vdr/Developer/vdr-2.1.3.tar.bz2
A 'diff' against the previous version is available at
ftp://ftp.tvdr.de/vdr/Developer/vdr-2.1.2-2.1.3.diff
MD5 checksums:
054f80e0045aa6fad118e9285b52f4f2 vdr-2.1.3.tar.bz2
3c5ab05d5c4d0b984b34e84190e80949 vdr-2.1.2-2.1.3.diff
WARNING:
========
This is a *developer* version. Even though *I* use it in my productive
environment, I strongly recommend that you only use it under controlled
conditions and for testing and debugging.
Originally I intended to release this version only after the new DiSEqC
configuration dialog was finished. But in the meantime quite a few other things
have come up, so I decided to postpone that dialog and first release what has
piled up so far.
From the HISTORY file:
- Changed the return value of cPositioner::HorizonLongitude() to 0 in case the
latitude of the antenna location is beyond +/-81 degrees.
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Fixed some compiler warnings with gcc-4.6.3 (thanks to Rolf Ahrenberg).
- Changed the name of the SVDRP command RENR to MOVR (suggested by Rolf Ahrenberg).
- When cutting a recording it is now checked whether there is already an edited
version of this recording (with the same name, but starting with '%'), and the
user is prompted for confirmation to overwrite it (suggested by Rolf Ahrenberg).
- Revoked "Added maximum signal strength value for TechniSat SkyStar 2 DVB-S rev 2.3P"
because it broke things for the "TechniSat AirStar 2" DVB-T card.
- The LIRC remote control now connects to the socket even if it doesn't yet exist when
VDR is started (thanks to Lars Hanisch).
- Changed the absolute latitude limit for visible satellites to 81.2 degrees.
- Added code for parsing LCN and AVC descriptors to libsi (thanks to Rolf Ahrenberg).
- In the "Select folder" menu pressing Ok now selects the folder, even if this is a
folder that contains sub folders (marked with "..."). To open such a folder you
can press the Red key.
- Fixed a possible access to uninitialized data in cEIT::cEIT() (reported by Dominik
Strasser).
- The new menu category mcRecordingEdit is now used to mark menus that edit recording
properties (suggested by Stefan Braun).
- Changes in the teletext PID no longer cause retuning (and thus interrupting a
recording).
- Removed '_' from the FileNameChars and CharMap translations in uk_UA.po.
- Updated the Italian OSD texts (thanks to Diego Pierotto).
- Fixed a missing initialization in the c'tor of cSkinLCARSDisplayChannel (thanks to
Marko Mäkelä).
- Simplified some conditional expressions in skinlcars.c and skinsttng.c (suggested
by Marko Mäkelä).
- Fixed uninitialized item area coordinates in cSkinLCARSDisplayMenu (reported by
Marko Mäkelä).
- Fixed a possible crash if the recordings list is updated externally while the
Recordings menu is open (reported by Lars Hanisch).
- Added a missing closing ')' in the help and man page entry of the --vfat option
(reported by Lars Hanisch).
- Fixed setting the name of the video directory to avoid a crash when using --genindex,
and also to use the correct directory with --edit (the latter reported by Marko
Mäkelä).
- The Recordings menu can now be called with a cRecordingFilter, which allows the
caller to have it display only a certain subset of the recordings (thanks to Lars
Hanisch).
- Added handling UTF-8 'umlaut' characters to cKbdRemote (thanks to Lars Hanisch).
- Made it clear that the Data parameter in cDevice::StillPicture() may point to a
series of packets, not just a single one (thanks to Thomas Reufer).
- cDevice::TrickSpeed() now has an additional parameter named Forward, which indicates
the direction in which replay is being done (suggested by Thomas Reufer). This
information may be necessary for some output devices in order to properly implement
trick modes. Authors of plugins that implement output devices will need to add this
parameter to their derived cDevice class, regardless of whether they will make use
of it or not.
- Added a note to ePlayMode in device.h that VDR itself always uses pmAudioVideo when
replaying a recording (suggested by Thomas Reufer).
- Fixed some spellings in positioner.h and Doxyfile (thanks to Ville Skyttä).
- Changed '%a' to the POSIX compliant '%m' in all scanf() calls (thanks to Ville
Skyttä).
- The new function cCamSlot::Decrypt() can be used by derived classes to implement a
CAM slot that can be freely assigned to any device, without being directly inserted
into the full TS data stream in hardware. A derived class that implements Decrypt()
will also need to set the new parameter ReceiveCaPids in the call to the cCamSlot
base class constructor to true, in order to receive the CA pid TS packets that
contain data necessary for decrypting.
- Many member functions of cCamSlot have been made virtual to allow for easier
implementation of derived classes.
- cTSBuffer now provides the number of available bytes in its Get() function.
- cDvbDevice::GetTSPacket() now calls CamSlot()->Decrypt() in order to allow CAM slots
that can be freely assigned to any device access to the TS data stream.
- Added a check to avoid a possible NULL pointer dereference in cCiSession::SendData()
(reported by Ville Skyttä).
- Deleted a superfluous assignment in cPipe::Open() (reported by Ville Skyttä).
- The script given to VDR with the '-r' option is now also called after the recording
process has actually started (thanks to Christian Kaiser).
- Avoiding unnecessary pkg-config warnings in plugin Makefiles (thanks to Ville Skyttä).
Plugin authors may want to apply the following change to their Makefile:
-PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell pkg-config --variable=$(1) vdr || pkg-config --variable=$(1) ../../../vdr.pc))
+PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." pkg-config --variable=$(1) vdr))
- Eliminated MAXDVBDEVICES (suggested by Oliver Endriss).
- Channels that are no longer contained in the current SDT of a transponder are now
marked with the keyword OBSOLETE in their name and provider fields. That way you can
identify obsolete channels when you switch to them, and you can get the complete
overview of all obsolete channels by sorting the Channels list by provider (by
pressing the 0 key twice). Automatic deletion of obsolete channels may follow later.
This commit is contained in:
committed by
Dieter Hametner
parent
277d66bfe1
commit
716c03a47e
73
ci.h
73
ci.h
@@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: ci.h 3.0 2012/02/29 10:24:27 kls Exp $
|
||||
* $Id: ci.h 3.3 2014/01/02 10:14:39 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __CI_H
|
||||
@@ -121,6 +121,7 @@ class cTPDU;
|
||||
class cCiTransportConnection;
|
||||
class cCiSession;
|
||||
class cCiCaProgramData;
|
||||
class cReceiver;
|
||||
|
||||
class cCamSlot : public cListObject {
|
||||
friend class cCiAdapter;
|
||||
@@ -129,6 +130,7 @@ private:
|
||||
cMutex mutex;
|
||||
cCondVar processed;
|
||||
cCiAdapter *ciAdapter;
|
||||
cReceiver *caPidReceiver;
|
||||
int slotIndex;
|
||||
int slotNumber;
|
||||
cCiTransportConnection *tc[MAX_CONNECTIONS_PER_CAM_SLOT + 1]; // connection numbering starts with 1
|
||||
@@ -147,10 +149,13 @@ private:
|
||||
void Write(cTPDU *TPDU);
|
||||
cCiSession *GetSessionByResourceId(uint32_t ResourceId);
|
||||
public:
|
||||
cCamSlot(cCiAdapter *CiAdapter);
|
||||
cCamSlot(cCiAdapter *CiAdapter, bool ReceiveCaPids = false);
|
||||
///< Creates a new CAM slot for the given CiAdapter.
|
||||
///< The CiAdapter will take care of deleting the CAM slot,
|
||||
///< so the caller must not delete it!
|
||||
///< If ReceiveCaPids is true, the CAM slot will take care that the CA pids
|
||||
///< of the selected programmes will be included in the TS data stream that
|
||||
///< is presented to the Decrypt() function.
|
||||
virtual ~cCamSlot();
|
||||
bool Assign(cDevice *Device, bool Query = false);
|
||||
///< Assigns this CAM slot to the given Device, if this is possible.
|
||||
@@ -169,50 +174,50 @@ public:
|
||||
int SlotNumber(void) { return slotNumber; }
|
||||
///< Returns the number of this CAM slot within the whole system.
|
||||
///< The first slot has the number 1.
|
||||
bool Reset(void);
|
||||
virtual bool Reset(void);
|
||||
///< Resets the CAM in this slot.
|
||||
///< Returns true if the operation was successful.
|
||||
eModuleStatus ModuleStatus(void);
|
||||
virtual eModuleStatus ModuleStatus(void);
|
||||
///< Returns the status of the CAM in this slot.
|
||||
const char *GetCamName(void);
|
||||
virtual const char *GetCamName(void);
|
||||
///< Returns the name of the CAM in this slot, or NULL if there is
|
||||
///< no ready CAM in this slot.
|
||||
bool Ready(void);
|
||||
virtual bool Ready(void);
|
||||
///< Returns 'true' if the CAM in this slot is ready to decrypt.
|
||||
bool HasMMI(void);
|
||||
virtual bool HasMMI(void);
|
||||
///< Returns 'true' if the CAM in this slot has an active MMI.
|
||||
bool HasUserIO(void);
|
||||
virtual bool HasUserIO(void);
|
||||
///< Returns true if there is a pending user interaction, which shall
|
||||
///< be retrieved via GetMenu() or GetEnquiry().
|
||||
bool EnterMenu(void);
|
||||
virtual bool EnterMenu(void);
|
||||
///< Requests the CAM in this slot to start its menu.
|
||||
cCiMenu *GetMenu(void);
|
||||
virtual cCiMenu *GetMenu(void);
|
||||
///< Gets a pending menu, or NULL if there is no menu.
|
||||
cCiEnquiry *GetEnquiry(void);
|
||||
virtual cCiEnquiry *GetEnquiry(void);
|
||||
///< Gets a pending enquiry, or NULL if there is no enquiry.
|
||||
int Priority(void);
|
||||
///< Returns the priority if the device this slot is currently assigned
|
||||
///< to, or IDLEPRIORITY if it is not assigned to any device.
|
||||
bool ProvidesCa(const int *CaSystemIds);
|
||||
virtual bool ProvidesCa(const int *CaSystemIds);
|
||||
///< Returns true if the CAM in this slot provides one of the given
|
||||
///< CaSystemIds. This doesn't necessarily mean that it will be
|
||||
///< possible to actually decrypt such a programme, since CAMs
|
||||
///< usually advertise several CA system ids, while the actual
|
||||
///< decryption is controlled by the smart card inserted into
|
||||
///< the CAM.
|
||||
void AddPid(int ProgramNumber, int Pid, int StreamType);
|
||||
virtual void AddPid(int ProgramNumber, int Pid, int StreamType);
|
||||
///< Adds the given PID information to the list of PIDs. A later call
|
||||
///< to SetPid() will (de)activate one of these entries.
|
||||
void SetPid(int Pid, bool Active);
|
||||
virtual void SetPid(int Pid, bool Active);
|
||||
///< Sets the given Pid (which has previously been added through a
|
||||
///< call to AddPid()) to Active. A later call to StartDecrypting() will
|
||||
///< send the full list of currently active CA_PMT entries to the CAM.
|
||||
void AddChannel(const cChannel *Channel);
|
||||
virtual void AddChannel(const cChannel *Channel);
|
||||
///< Adds all PIDs if the given Channel to the current list of PIDs.
|
||||
///< If the source or transponder of the channel are different than
|
||||
///< what was given in a previous call to AddChannel(), any previously
|
||||
///< added PIDs will be cleared.
|
||||
bool CanDecrypt(const cChannel *Channel);
|
||||
virtual bool CanDecrypt(const cChannel *Channel);
|
||||
///< Returns true if there is a CAM in this slot that is able to decrypt
|
||||
///< the given Channel (or at least claims to be able to do so).
|
||||
///< Since the QUERY/REPLY mechanism for CAMs is pretty unreliable (some
|
||||
@@ -223,13 +228,43 @@ public:
|
||||
///< to the initial QUERY will perform this check at all. CAMs that never
|
||||
///< replied to the initial QUERY are assumed not to be able to handle
|
||||
///< more than one channel at a time.
|
||||
void StartDecrypting(void);
|
||||
virtual void StartDecrypting(void);
|
||||
///< Triggers sending all currently active CA_PMT entries to the CAM,
|
||||
///< so that it will start decrypting.
|
||||
void StopDecrypting(void);
|
||||
virtual void StopDecrypting(void);
|
||||
///< Clears the list of CA_PMT entries and tells the CAM to stop decrypting.
|
||||
bool IsDecrypting(void);
|
||||
virtual bool IsDecrypting(void);
|
||||
///< Returns true if the CAM in this slot is currently used for decrypting.
|
||||
virtual uchar *Decrypt(uchar *Data, int &Count);
|
||||
///< If this is a CAM slot that can be freely assigned to any device,
|
||||
///< but will not be directly inserted into the full TS data stream
|
||||
///< in hardware, it can implement this function to be given access
|
||||
///< to the data in the device's TS buffer. Data points to a buffer
|
||||
///< of Count bytes of TS data. The first byte in Data is guaranteed
|
||||
///< to be a TS_SYNC_BYTE.
|
||||
///< There are three possible ways a CAM can handle decryption:
|
||||
///< 1. If the full TS data is physically routed through the CAM in hardware,
|
||||
///< there is no need to reimplement this function.
|
||||
///< The default implementation simply sets Count to TS_SIZE and returns Data.
|
||||
///< 2. If the CAM works directly on Data and decrypts the TS "in place" it
|
||||
///< shall decrypt at least the very first TS packet in Data, set Count to
|
||||
///< TS_SIZE and return Data. It may decrypt as many TS packets in Data as it
|
||||
///< wants, but it must decrypt at least the very first TS packet. Only this
|
||||
///< very first TS packet will be further processed after the call to this
|
||||
///< function. The next call will be done with Data pointing to the TS packet
|
||||
///< immediately following the previous one.
|
||||
///< 3. If the CAM needs to copy the data into a buffer of its own, and/or send
|
||||
///< the data to some file handle for processing and later retrieval, it shall
|
||||
///< set Count to the number of bytes it has read from Data and return a pointer
|
||||
///< to the next available decrypted TS packet (which will *not* be in the
|
||||
///< memory area pointed to by Data, but rather in some buffer that is under
|
||||
///< the CAM's control). If no decrypted TS packet is currently available, NULL
|
||||
///< shall be returned. If no data from Data can currently be processed, Count
|
||||
///< shall be set to 0 and the same Data pointer will be offered in the next
|
||||
///< call to Decrypt().
|
||||
///< A derived class that implements this function will also need
|
||||
///< to set the ReceiveCaPids parameter in the call to the base class
|
||||
///< constructor to true in order to receive the CA pid data.
|
||||
};
|
||||
|
||||
class cCamSlots : public cList<cCamSlot> {};
|
||||
|
||||
Reference in New Issue
Block a user