mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
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:
committed by
Dieter Hametner
parent
5a28d99936
commit
59f0138a7d
43
recording.c
43
recording.c
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user