From 59f0138a7d03fed4fc33e1083928bf5b28e0e4ff Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 15 Jan 2012 16:10:00 +0100 Subject: Version 1.7.23 Original announce message: VDR developer version 1.7.23 is now available at MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- recording.c | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'recording.c') diff --git a/recording.c b/recording.c index 6b11fbd..cf35bb7 100644 --- a/recording.c +++ b/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) -- cgit v1.2.3