Version 1.7.23

Original announce message:
VDR developer version 1.7.23 is now available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.23.tar.bz2

A 'diff' against the previous version is available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.22-1.7.23.diff

MD5 checksums:

de136f7be28c4b6f1fa0e2218b4acc11  vdr-1.7.23.tar.bz2
2977b75cd8dacad187d11c10b867d56a  vdr-1.7.22-1.7.23.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.

From the HISTORY file:
- Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one).
- Fixed bonding more than two devices.
- Fixed handling symbolic links in cRecordings::ScanVideoDir() (reported by
  Sundararaj Reel).
- Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many
  link levels (reported by Sundararaj Reel).
- Removed redundant memset() in the ctor of cSatCableNumbers (triggered by
  Ville Skyttä pointing out that the argument sequence in the call was wrong).
- Removed a redundant NULL check in cDvbSpuDecoder::setTime() (thanks to Ville Skyttä).
- Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality()
  (triggered by Ville Skyttä pointing out that the variable HasSnr was unused).
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Added support for HbbTV to libsi (thanks to Christoph Haubrich).
- Added support for devices with more than one delivery system per frontend.
  This requires a DVB driver with version 5.5 or higher that can handle the
  DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery
  system per frontend.
- Updated the Hungarian language texts (thanks to István Füley).
- cDvbTuner::ExecuteDiseqc() now makes sure only one tuner sends SCR commands
  at any given time (reported by Frank Neumann).
- cEvent::FixEpgBugs() now replaces any newline characters in stream component
  descriptions with blanks (thanks to Torsten Lang for reporting a problem with
  EPG data from BSkyB's "MTV MUSIC", S28.2E-2-2010-7012).
- Fixed cDvbSubtitleConverter::SetOsdData() (thanks to Rolf Ahrenberg).
- Fixed cListBase::Move() in case From and To are equal (reported by Sundararaj
  Reel).
- Added support for DVB-T2 to libsi (thanks to Rolf Ahrenberg).
- Added support for handling DVB-T2 transponders.  This requires a DVB driver
  with version 5.3 or higher that can handle the DTV_DVBT2_PLP_ID call (thanks
  to Rolf Ahrenberg).
- Fixed cConfig::Load() for g++ version 4.7.0 (thanks to Ville Skyttä).
- Fixed a possible memory corruption in cTsToPes::GetPes() in case of broken
  TS packets, e.g. when switching channels.
- Fixed the SVDRP command CLRE for a single channel in case there are events
  that have a timer (thanks to Timo Eskola).
- BIDI support now checks at runtime whether the system runs with UTF-8 (suggested
  by Torsten Lang).
- Added member functions Adapter() and Frontend() to cDvbDevice (suggested by
  Rolf Ahrenberg).
- The parameters that are only used by "second generation" delivery systems (DVB-S2
  and DVB-T2) are no longer written into channels.conf for "first generation"
  delivery systems (DVB-S and DVB-T).
- Changed IndexToHMSF() so that it can handle negative Index values.
- Added option -N to the msgmerge call in the Makefile, because fuzzy translation
  mostly resulted in useless strings.
- The new setup option "Replay/Show remaining time" can be used to switch between
  showing the total length or the remaining time of the recording that is currently
  replayed.
- Fixed wrongfully displaying the length of a recording in the title of the replay
  progress display.
- Fixed frozen live view with device bonding in case the bonded master is used for
  live viewing (reported by Uwe Scheffler).
This commit is contained in:
Klaus Schmidinger
2012-01-15 16:10:00 +01:00
committed by Dieter Hametner
parent 5a28d99936
commit 59f0138a7d
55 changed files with 963 additions and 328 deletions

View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: recording.c 2.39 2011/12/04 13:51:44 kls Exp $
* $Id: recording.c 2.43 2012/01/15 11:04:24 kls Exp $
*/
#include "recording.h"
@@ -873,16 +873,23 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
s++;
else
s = name;
titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%c%d:%02d%c%c%s",
cString Length("");
if (NewIndicator) {
int Seconds = max(0, LengthInSeconds());
Length = cString::sprintf("%c%d:%02d",
Delimiter,
Seconds / 3600,
Seconds / 60 % 60
);
}
titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%s%c%c%s",
t->tm_mday,
t->tm_mon + 1,
t->tm_year % 100,
Delimiter,
t->tm_hour,
t->tm_min,
Delimiter,
(LengthInSeconds() >= 0) ? LengthInSeconds() / 3600 : 0,
(LengthInSeconds() >= 0) ? LengthInSeconds() / 60 % 60 : 0,
*Length,
New,
Delimiter,
s));
@@ -1103,25 +1110,21 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
struct dirent *e;
while ((Foreground || Running()) && (e = d.Next()) != NULL) {
if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) {
char *buffer = strdup(AddDirectory(DirName, e->d_name));
cString buffer = AddDirectory(DirName, e->d_name);
struct stat st;
if (stat(buffer, &st) == 0) {
if (lstat(buffer, &st) == 0) {
int Link = 0;
if (S_ISLNK(st.st_mode)) {
if (LinkLevel > MAX_LINK_LEVEL) {
isyslog("max link level exceeded - not scanning %s", buffer);
isyslog("max link level exceeded - not scanning %s", *buffer);
continue;
}
Link = 1;
char *old = buffer;
buffer = ReadLink(old);
free(old);
if (!buffer)
buffer = ReadLink(buffer);
if (!*buffer)
continue;
if (stat(buffer, &st) != 0) {
free(buffer);
if (stat(buffer, &st) != 0)
continue;
}
}
if (S_ISDIR(st.st_mode)) {
if (endswith(buffer, deleted ? DELEXT : RECEXT)) {
@@ -1144,7 +1147,6 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
ScanVideoDir(buffer, Foreground, LinkLevel + Link);
}
}
free(buffer);
}
}
}
@@ -2040,15 +2042,18 @@ cUnbufferedFile *cFileName::NextFile(void)
cString IndexToHMSF(int Index, bool WithFrame, double FramesPerSecond)
{
char buffer[16];
const char *Sign = "";
if (Index < 0) {
Index = -Index;
Sign = "-";
}
double Seconds;
int f = int(modf((Index + 0.5) / FramesPerSecond, &Seconds) * FramesPerSecond + 1);
int s = int(Seconds);
int m = s / 60 % 60;
int h = s / 3600;
s %= 60;
snprintf(buffer, sizeof(buffer), WithFrame ? "%d:%02d:%02d.%02d" : "%d:%02d:%02d", h, m, s, f);
return buffer;
return cString::sprintf(WithFrame ? "%s%d:%02d:%02d.%02d" : "%s%d:%02d:%02d", Sign, h, m, s, f);
}
int HMSFToIndex(const char *HMSF, double FramesPerSecond)