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
@@ -6,7 +6,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: descriptor.c 3.0 2012/01/11 11:35:17 kls Exp $
|
||||
* $Id: descriptor.c 3.1 2013/10/30 10:16:18 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@@ -922,6 +922,48 @@ int T2DeliverySystemDescriptor::getTfsFlag() const {
|
||||
return extended_data_flag ? s->tfs_flag : -1;
|
||||
}
|
||||
|
||||
void LogicalChannelDescriptor::Parse() {
|
||||
//this descriptor is only a header and a loop
|
||||
logicalChannelLoop.setData(data+sizeof(descr_logical_channel), getLength()-sizeof(descr_logical_channel));
|
||||
}
|
||||
|
||||
int LogicalChannelDescriptor::LogicalChannel::getServiceId() const {
|
||||
return HILO(s->service_id);
|
||||
}
|
||||
|
||||
int LogicalChannelDescriptor::LogicalChannel::getVisibleServiceFlag() const {
|
||||
return s->visible_service_flag;
|
||||
}
|
||||
|
||||
int LogicalChannelDescriptor::LogicalChannel::getLogicalChannelNumber() const {
|
||||
return HILO(s->logical_channel_number);
|
||||
}
|
||||
|
||||
void LogicalChannelDescriptor::LogicalChannel::Parse() {
|
||||
s=data.getData<const item_logical_channel>();
|
||||
}
|
||||
|
||||
void HdSimulcastLogicalChannelDescriptor::Parse() {
|
||||
//this descriptor is only a header and a loop
|
||||
hdSimulcastLogicalChannelLoop.setData(data+sizeof(descr_hd_simulcast_logical_channel), getLength()-sizeof(descr_hd_simulcast_logical_channel));
|
||||
}
|
||||
|
||||
int HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel::getServiceId() const {
|
||||
return HILO(s->service_id);
|
||||
}
|
||||
|
||||
int HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel::getVisibleServiceFlag() const {
|
||||
return s->visible_service_flag;
|
||||
}
|
||||
|
||||
int HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel::getLogicalChannelNumber() const {
|
||||
return HILO(s->logical_channel_number);
|
||||
}
|
||||
|
||||
void HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel::Parse() {
|
||||
s=data.getData<const item_hd_simulcast_logical_channel>();
|
||||
}
|
||||
|
||||
int PremiereContentTransmissionDescriptor::getOriginalNetworkId() const {
|
||||
return HILO(s->original_network_id);
|
||||
}
|
||||
@@ -1145,4 +1187,59 @@ void RegistrationDescriptor::Parse() {
|
||||
privateData.assign(data.getData(offset), getLength()-offset);
|
||||
}
|
||||
|
||||
int AVCDescriptor::getProfileIdc() const {
|
||||
return s->profile_idc;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getConstraintSet0Flag() const {
|
||||
return s->constraint_set0_flag;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getConstraintSet1Flag() const {
|
||||
return s->constraint_set1_flag;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getConstraintSet2Flag() const {
|
||||
return s->constraint_set2_flag;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getConstraintSet3Flag() const {
|
||||
return s->constraint_set3_flag;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getConstraintSet4Flag() const {
|
||||
return s->constraint_set4_flag;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getConstraintSet5Flag() const {
|
||||
return s->constraint_set5_flag;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getAVCCompatibleFlags() const {
|
||||
return s->avc_compatible_flags;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getLevelIdc() const {
|
||||
return s->level_idc;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getAVCStillPresent() const {
|
||||
return s->avc_still_present;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getAVC24HourPictureFlag() const {
|
||||
return s->avc_24_hour_picture_flag;
|
||||
}
|
||||
|
||||
int AVCDescriptor::getFramePackingSEINotPresentFlag() const {
|
||||
return s->frame_packing_sei_not_present_flag;
|
||||
}
|
||||
|
||||
void AVCDescriptor::Parse() {
|
||||
int offset=0;
|
||||
data.setPointerAndOffset<const descr_avc>(s, offset);
|
||||
if (checkSize(getLength()-offset))
|
||||
privateData.assign(data.getData(offset), getLength()-offset);
|
||||
}
|
||||
|
||||
} //end of namespace
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: descriptor.h 3.0 2012/01/11 11:35:17 kls Exp $
|
||||
* $Id: descriptor.h 3.1 2013/10/30 10:16:18 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@@ -557,6 +557,42 @@ private:
|
||||
int extended_data_flag;
|
||||
};
|
||||
|
||||
class LogicalChannelDescriptor : public Descriptor {
|
||||
public:
|
||||
class LogicalChannel : public LoopElement {
|
||||
public:
|
||||
int getServiceId() const;
|
||||
int getVisibleServiceFlag() const;
|
||||
int getLogicalChannelNumber() const;
|
||||
virtual int getLength() { return sizeof(item_logical_channel); }
|
||||
protected:
|
||||
virtual void Parse();
|
||||
private:
|
||||
const item_logical_channel *s;
|
||||
};
|
||||
StructureLoop<LogicalChannel> logicalChannelLoop;
|
||||
protected:
|
||||
virtual void Parse();
|
||||
};
|
||||
|
||||
class HdSimulcastLogicalChannelDescriptor : public Descriptor {
|
||||
public:
|
||||
class HdSimulcastLogicalChannel : public LoopElement {
|
||||
public:
|
||||
int getServiceId() const;
|
||||
int getVisibleServiceFlag() const;
|
||||
int getLogicalChannelNumber() const;
|
||||
virtual int getLength() { return sizeof(item_hd_simulcast_logical_channel); }
|
||||
protected:
|
||||
virtual void Parse();
|
||||
private:
|
||||
const item_hd_simulcast_logical_channel *s;
|
||||
};
|
||||
StructureLoop<HdSimulcastLogicalChannel> hdSimulcastLogicalChannelLoop;
|
||||
protected:
|
||||
virtual void Parse();
|
||||
};
|
||||
|
||||
// Private DVB Descriptor Premiere.de
|
||||
// 0xF2 Content Transmission Descriptor
|
||||
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html
|
||||
@@ -735,6 +771,27 @@ private:
|
||||
const descr_registration *s;
|
||||
};
|
||||
|
||||
class AVCDescriptor : public Descriptor {
|
||||
public:
|
||||
int getProfileIdc() const;
|
||||
int getConstraintSet0Flag() const;
|
||||
int getConstraintSet1Flag() const;
|
||||
int getConstraintSet2Flag() const;
|
||||
int getConstraintSet3Flag() const;
|
||||
int getConstraintSet4Flag() const;
|
||||
int getConstraintSet5Flag() const;
|
||||
int getAVCCompatibleFlags() const;
|
||||
int getLevelIdc() const;
|
||||
int getAVCStillPresent() const;
|
||||
int getAVC24HourPictureFlag() const;
|
||||
int getFramePackingSEINotPresentFlag() const;
|
||||
CharArray privateData;
|
||||
protected:
|
||||
virtual void Parse();
|
||||
private:
|
||||
const descr_avc *s;
|
||||
};
|
||||
|
||||
} //end of namespace
|
||||
|
||||
#endif //LIBSI_TABLE_H
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: headers.h 3.0 2012/06/09 14:37:24 kls Exp $
|
||||
* $Id: headers.h 3.1 2013/10/30 10:16:18 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@@ -1870,6 +1870,54 @@ struct descr_t2_delivery_system {
|
||||
fields looping to the end */
|
||||
};
|
||||
|
||||
/* 0x83 logical_channel_descriptor */
|
||||
|
||||
#define DESCR_LOGICAL_CHANNEL_LEN 2
|
||||
struct descr_logical_channel {
|
||||
u_char descriptor_tag :8;
|
||||
u_char descriptor_length :8;
|
||||
};
|
||||
|
||||
#define ITEM_LOGICAL_CHANNEL_LEN 4
|
||||
struct item_logical_channel {
|
||||
u_char service_id_hi :8;
|
||||
u_char service_id_lo :8;
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_char visible_service_flag :1;
|
||||
u_char reserved :5;
|
||||
u_char logical_channel_number_hi :2;
|
||||
#else
|
||||
u_char logical_channel_number_hi :2;
|
||||
u_char reserved :5;
|
||||
u_char visible_service_flag :1;
|
||||
#endif
|
||||
u_char logical_channel_number_lo :8;
|
||||
};
|
||||
|
||||
/* 0x88 hd_simulcast_logical_channel_descriptor */
|
||||
|
||||
#define DESCR_HD_SIMULCAST_LOGICAL_CHANNEL_LEN 2
|
||||
struct descr_hd_simulcast_logical_channel {
|
||||
u_char descriptor_tag :8;
|
||||
u_char descriptor_length :8;
|
||||
};
|
||||
|
||||
#define ITEM_HD_SIMULCAST_LOGICAL_CHANNEL_LEN 4
|
||||
struct item_hd_simulcast_logical_channel {
|
||||
u_char service_id_hi :8;
|
||||
u_char service_id_lo :8;
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_char visible_service_flag :1;
|
||||
u_char reserved :5;
|
||||
u_char logical_channel_number_hi :2;
|
||||
#else
|
||||
u_char logical_channel_number_hi :2;
|
||||
u_char reserved :5;
|
||||
u_char visible_service_flag :1;
|
||||
#endif
|
||||
u_char logical_channel_number_lo :8;
|
||||
};
|
||||
|
||||
/* MHP 0x00 application_descriptor */
|
||||
|
||||
#define DESCR_APPLICATION_LEN 3
|
||||
@@ -2088,6 +2136,27 @@ struct descr_registration {
|
||||
u_char format_identifier_lo_lo :8;
|
||||
};
|
||||
|
||||
/* 0x28 avc_descriptor */
|
||||
|
||||
#define DESCR_AVC_LEN 6
|
||||
struct descr_avc {
|
||||
u_char descriptor_tag :8;
|
||||
u_char descriptor_length :8;
|
||||
u_char profile_idc :8;
|
||||
u_char constraint_set0_flag :1;
|
||||
u_char constraint_set1_flag :1;
|
||||
u_char constraint_set2_flag :1;
|
||||
u_char constraint_set3_flag :1;
|
||||
u_char constraint_set4_flag :1;
|
||||
u_char constraint_set5_flag :1;
|
||||
u_char avc_compatible_flags :2;
|
||||
u_char level_idc :8;
|
||||
u_char avc_still_present :1;
|
||||
u_char avc_24_hour_picture_flag :1;
|
||||
u_char frame_packing_sei_not_present_flag :1;
|
||||
u_char reserved :5;
|
||||
};
|
||||
|
||||
} //end of namespace
|
||||
|
||||
#endif //LIBSI_HEADERS_H
|
||||
|
||||
11
libsi/si.c
11
libsi/si.c
@@ -6,7 +6,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: si.c 3.0 2012/09/29 14:44:20 kls Exp $
|
||||
* $Id: si.c 3.1 2013/10/30 10:16:18 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@@ -508,6 +508,9 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
|
||||
case CarouselIdentifierDescriptorTag:
|
||||
d=new CarouselIdentifierDescriptor();
|
||||
break;
|
||||
case AVCDescriptorTag:
|
||||
d=new AVCDescriptor();
|
||||
break;
|
||||
case NetworkNameDescriptorTag:
|
||||
d=new NetworkNameDescriptor();
|
||||
break;
|
||||
@@ -614,6 +617,12 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
|
||||
case ExtensionDescriptorTag:
|
||||
d=new ExtensionDescriptor();
|
||||
break;
|
||||
case LogicalChannelDescriptorTag:
|
||||
d=new LogicalChannelDescriptor();
|
||||
break;
|
||||
case HdSimulcastLogicalChannelDescriptorTag:
|
||||
d=new HdSimulcastLogicalChannelDescriptor();
|
||||
break;
|
||||
case RegistrationDescriptorTag:
|
||||
d=new RegistrationDescriptor();
|
||||
break;
|
||||
|
||||
18
libsi/si.h
18
libsi/si.h
@@ -6,7 +6,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: si.h 3.0 2012/10/15 11:56:06 kls Exp $
|
||||
* $Id: si.h 3.1 2013/10/30 10:16:18 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@@ -70,6 +70,10 @@ enum DescriptorTag {
|
||||
// defined by ISO-13818-6 (DSM-CC)
|
||||
CarouselIdentifierDescriptorTag = 0x13,
|
||||
// 0x14 - 0x3F Reserved
|
||||
// defined by ISO/IEC 13818-1 Amendment
|
||||
AVCDescriptorTag = 0x28,
|
||||
SVCExtensionDescriptorTag = 0x30,
|
||||
MVCExtensionDescriptorTag = 0x31,
|
||||
// defined by ETSI (EN 300 468)
|
||||
NetworkNameDescriptorTag = 0x40,
|
||||
ServiceListDescriptorTag = 0x41,
|
||||
@@ -134,6 +138,12 @@ enum DescriptorTag {
|
||||
DTSDescriptorTag = 0x7B,
|
||||
AACDescriptorTag = 0x7C,
|
||||
ExtensionDescriptorTag = 0x7F,
|
||||
// defined by EICTA/EACEM/DIGITALEUROPE
|
||||
LogicalChannelDescriptorTag = 0x83,
|
||||
PreferredNameListDescriptorTag = 0x84,
|
||||
PreferredNameIdentifierDescriptorTag = 0x85,
|
||||
EacemStreamIdentifierDescriptorTag = 0x86,
|
||||
HdSimulcastLogicalChannelDescriptorTag = 0x88,
|
||||
// Extension descriptors
|
||||
ImageIconDescriptorTag = 0x00,
|
||||
CpcmDeliverySignallingDescriptor = 0x01,
|
||||
@@ -147,6 +157,12 @@ enum DescriptorTag {
|
||||
TargetRegionDescriptorTag = 0x09,
|
||||
TargetRegionNameDescriptorTag = 0x0A,
|
||||
ServiceRelocatedDescriptorTag = 0x0B,
|
||||
// defined by ETSI (EN 300 468) v 1.12.1
|
||||
XAITPidDescriptorTag = 0x0C,
|
||||
C2DeliverySystemDescriptorTag = 0x0D,
|
||||
// 0x0E - 0x0F Reserved
|
||||
VideoDepthRangeDescriptorTag = 0x10,
|
||||
T2MIDescriptorTag = 0x11,
|
||||
|
||||
// Defined by ETSI TS 102 812 (MHP)
|
||||
// They once again start with 0x00 (see page 234, MHP specification)
|
||||
|
||||
Reference in New Issue
Block a user