summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS27
-rw-r--r--HISTORY43
-rw-r--r--INSTALL8
-rw-r--r--MANUAL5
-rw-r--r--config.c4
-rw-r--r--config.h11
-rw-r--r--cutter.c18
-rw-r--r--device.c3
-rw-r--r--dvbdevice.c4
-rw-r--r--epg.c134
-rw-r--r--epg.h7
-rw-r--r--libsi/si.c4
-rw-r--r--menu.c4
-rw-r--r--po/ar.po8
-rw-r--r--po/ca_ES.po8
-rw-r--r--po/cs_CZ.po8
-rw-r--r--po/da_DK.po8
-rw-r--r--po/de_DE.po8
-rw-r--r--po/el_GR.po8
-rw-r--r--po/es_ES.po8
-rw-r--r--po/et_EE.po8
-rw-r--r--po/fi_FI.po8
-rw-r--r--po/fr_FR.po8
-rw-r--r--po/hr_HR.po8
-rw-r--r--po/hu_HU.po8
-rw-r--r--po/it_IT.po8
-rw-r--r--po/lt_LT.po8
-rw-r--r--po/mk_MK.po8
-rw-r--r--po/nl_NL.po8
-rw-r--r--po/nn_NO.po8
-rw-r--r--po/pl_PL.po8
-rw-r--r--po/pt_PT.po8
-rw-r--r--po/ro_RO.po8
-rw-r--r--po/ru_RU.po8
-rw-r--r--po/sk_SK.po8
-rw-r--r--po/sl_SI.po8
-rw-r--r--po/sr_SR.po8
-rw-r--r--po/sv_SE.po8
-rw-r--r--po/tr_TR.po8
-rw-r--r--po/uk_UA.po8
-rw-r--r--po/zh_CN.po8
-rw-r--r--recorder.c5
-rw-r--r--recording.c33
-rw-r--r--recording.h3
-rw-r--r--remux.c41
-rw-r--r--ringbuffer.c22
-rw-r--r--ringbuffer.h4
-rw-r--r--skinlcars.c9
-rw-r--r--thread.c44
-rw-r--r--thread.h25
-rw-r--r--timers.c47
-rw-r--r--tools.c47
-rw-r--r--tools.h12
-rw-r--r--vdr.c9
-rw-r--r--videodir.c6
-rw-r--r--videodir.h4
56 files changed, 657 insertions, 150 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 515c3e1..a275edb 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -2312,6 +2312,8 @@ Pekka Mauno <pekka.mauno@iki.fi>
Alexander Wenzel <hondansx@gmx.de>
for fixing the shutdown timeout
+ for making the script given to VDR with the '-r' option be also called whenever a
+ recording is deleted
Jan Lenz <email@JanLenz.de>
for reporting a bug in deleting recordings that have been removed externally when
@@ -2348,9 +2350,6 @@ Tobias Grimm <tobias.grimm@e-tobi.net>
for avoiding a gcc 4.6 compiler error in the skincurses plugin.
for suggesting to move setting LC_NUMERIC further up to make sure any floating point
numbers use a decimal point
- for implementing cDevice::HasInternalCam(), which can be implemented by devices that
- provide encrypted channels in an already decrypted form, without requiring explicit
- handling of a CAM
Helge Lenz <h.lenz@gmx.de>
for reporting a bug in setting the 'Delta' parameter when calling the shutdown
@@ -2409,6 +2408,9 @@ Anssi Hannula <anssi.hannula@gmail.com>
for adding support for automatically selecting subtitles when playing old PES
recordings made with the subtitles plugin
for pointing out -Werror=...
+ for implementing cDevice::HasInternalCam(), which can be implemented by devices that
+ provide encrypted channels in an already decrypted form, without requiring explicit
+ handling of a CAM
Antti Hartikainen <ami+vdr@ah.fi>
for updating 'S13E' in 'sources.conf'
@@ -2739,6 +2741,7 @@ Francesco Saverio Schiavarelli <fschiava@libero.it>
Matti Lehtimki <matti.lehtimaki@gmail.com>
for implementing the setup option "Miscellaneous/Channels wrap"
for reporting a missing change from -O2 to -O3 in Make.config.template
+ for a patch that was used to implement instant recording of only the present event
Stephan Austermhle <au@hcsd.de>
for suggesting to flush the file in cSafeFile::Close()
@@ -2888,6 +2891,10 @@ Torsten Lang <info@torstenlang.de>
if the editing point merges two seamlessly fitting parts of the same stream
for reporting a sluggish response when manipulating editing marks while a cutting
thread is running
+ for suggesting to allow I/O intense threads to temporarily suspend their activities
+ in case buffers run full
+ for suggesting to increase the size of the TS buffer to 5MB and that of the Recorder
+ buffer to 20MB to better handle HD recordings
Christian Ruppert <idl0r@gentoo.org>
for some improvements to the Makefiles
@@ -2939,3 +2946,17 @@ Dennis Bendlin <dennisbendlin@online.de>
Oliver Schinagl <oliver@schinagl.nl>
for a patch that was used to implement the setup options "OSD/Color key [0123]"
+
+Andrey Pridvorov <ua0lnj@bk.ru>
+ for reporting a problem with detecting frames in MPEG 4 video, and pointing towards
+ a better way of doing it
+
+Jens Vogel <jens.vogel@akjv.de>
+ for suggesting to make cPatPmtParser::ParsePmt() also recognize stream type 0x81
+ as "AC3", so that recordings that have been converted from the old PES format to
+ TS can be played
+
+Sren Moch <smoch@web.de>
+ for a patch that was used to move cleaning up the EPG data and writing the epg.data
+ file into a separate thread to avoid sluggish response to user input on slow systems
+ for fixing sorting folders before recordings in case of UTF-8
diff --git a/HISTORY b/HISTORY
index 6dfb717..a1cb40c 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6193,7 +6193,7 @@ Video Disk Recorder Revision History
(thanks to Andreas Schaefers).
- Fixed references to old *.vdr file names in MANUAL (reported by Arthur Konovalov).
- Reverted "Removed limitation to PAL resolution from SPU handling" because it
- cause nothing but trouble. Besides, the core VDR doesn't use this, anyway.
+ caused nothing but trouble. Besides, the core VDR doesn't use this, anyway.
- Fixed the default value for "Pause key handling" in the MANUAL (reported by
Diego Pierotto).
@@ -6666,7 +6666,7 @@ Video Disk Recorder Revision History
Udo Richter for suggesting the fix).
- Added a mechanism to defer timer handling in case of problems (reported by
Frank Niederwipper).
-- Fixed distortions that happened when splitting recording into several files
+- Fixed distortions that happened when splitting a recording into several files
(was a side effect of "Fixed detecting frames in case the Picture Start Code or
Access Unit Delimiter extends over TS packet boundaries" in version 1.7.19).
cRecorder::Action() now buffers TS packets in case the frame type is
@@ -7213,7 +7213,7 @@ Video Disk Recorder Revision History
own way of retrieving section filter data (thanks to Deti Fliegl).
- The new function cDevice::HasInternalCam() can be implemented by devices that
provide encrypted channels in an already decrypted form, without requiring explicit
- handling of a CAM (thanks to Tobias Grimm).
+ handling of a CAM (thanks to Anssi Hannula).
- VDR can now be built according to the FHS ("File system Hierarchy Standard") by
activating the line
#USEFHS = 1
@@ -7234,3 +7234,40 @@ Video Disk Recorder Revision History
Authors of plugins that implement skins may want to adapt their SetButtons()
function in order to make use of this new feature. See, for instance, the function
cSkinClassicDisplayMenu::SetButtons() in skinclassic.c for details.
+
+2012-09-30: Version 1.7.31
+
+- If regenerating an index file fails and no data is written to the file, VDR now
+ reports this error and removes the empty index file.
+- The setup parameter "Recording/Instant rec. time (min)" can now be set to '0',
+ which means to record only the currently running event (based on a patch from Matti
+ Lehtimki).
+- Decreased the ring buffer put/get trigger sizes from 1/3 to 1/10.
+- The script given to VDR with the '-r' option is now also called whenever a
+ recording is deleted (thanks to Alexander Wenzel).
+- Improved detecting frames in MPEG 4 video (reported by Andrey Pridvorov).
+- cPatPmtParser::ParsePmt() now also recognizes stream type 0x81 as "AC3", so that
+ recordings that have been converted from the old PES format to TS can be played
+ (suggested by Jens Vogel).
+- Fixed a leftover frame counter in the LCARS skin's replay display after jumping to
+ an editing mark and resuming replay.
+- The new class cIoThrottle is used to allow I/O intense threads to temporarily
+ suspend their activities in case buffers run full (suggested by Torsten Lang).
+ Currently the cutter thread is suspended if the TS or Recorder buffer use more
+ than 50% of their capacity. Plugin authors may want to participate in this
+ mechanism if they use intense background I/O.
+- Increased the size of the TS buffer to 5MB and that of the Recorder buffer to
+ 20MB to better handle HD recordings (suggested by Torsten Lang).
+- Moved cleaning up the EPG data and writing the epg.data file into a separate
+ thread to avoid sluggish response to user input on slow systems (based on a patch from
+ Sren Moch).
+- Fixed sorting folders before recordings in case of UTF-8 (thanks to Sren Moch).
+- Reactivated stripping control characters from EPG texts and adapted it to UTF-8.
+- Added missing decrementing of 'len' in libsi/si.c's String::decodeText() functions.
+- When checking whether a video directory is empty, file names that start with a
+ dot ('.') are no longer automatically ignored and implicitly removed if the directory
+ contains no other files. Instead, RemoveEmptyDirectories() now has an additional
+ parameter that can be given a list of files that shall be ignored when considering
+ whether a directory is empty. This allows users to continue to use files such as
+ ".keep" to prevent a directory from being deleted when it is empty. Currently the
+ only file name that is ignored is ".sort".
diff --git a/INSTALL b/INSTALL
index 50c941e..07a5079 100644
--- a/INSTALL
+++ b/INSTALL
@@ -242,7 +242,7 @@ Executing commands before and after a recording:
You can use the '-r' option to define a program or script that gets called
before and after a recording is performed, and after an editing process
-has finished.
+has finished or a recording has been deleted.
The program will be called with two or three (in case of "edited") string
parameters. The first parameter is one of
@@ -250,11 +250,14 @@ parameters. The first parameter is one of
before if this is *before* a recording starts
after if this is *after* a recording has finished
edited if this is after a recording has been *edited*
+ deleted if this is after a recording has been *deleted*
and the second parameter contains the full name of the recording's
directory (which may not yet exists at that moment in the "before" case).
In the "edited" case it will be the name of the edited version (second
parameter) and the name of the source version (third parameter).
+In the "deleted" case the extension of the directory name is ".del"
+instead of ".rec".
Within this program you can do anything you would like to do before and/or
after a recording or after an editing process. However, the program must return
@@ -277,6 +280,9 @@ case "$1" in
echo "Edited recording $2"
echo "Source recording $3"
;;
+ deleted)
+ echo "Deleted recording $2"
+ ;;
*)
echo "ERROR: unknown state: $1"
;;
diff --git a/MANUAL b/MANUAL
index 56a304d..fb28462 100644
--- a/MANUAL
+++ b/MANUAL
@@ -837,6 +837,11 @@ Version 1.6
Default is 180 minutes (3 hours). The stop time of an
instant recording can be modified at any time by editing
the respective timer in the "Timers" menu.
+ If this parameter is set to 0 ("present event"), only the
+ currently running event will be recorded, using the stop
+ margin and VPS setting as configured.
+ Note that this parameter is also used when pausing live
+ video!
Max. video file size = 2000
The maximum size of a single recorded video file in MB.
diff --git a/config.c b/config.c
index 3fb4d6d..383bb61 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 2.27 2012/09/09 12:58:23 kls Exp $
+ * $Id: config.c 2.28 2012/09/15 11:52:03 kls Exp $
*/
#include "config.h"
@@ -383,7 +383,7 @@ cSetup::cSetup(void)
MenuKeyCloses = 0;
MarkInstantRecord = 1;
strcpy(NameInstantRecord, "TITLE EPISODE");
- InstantRecordTime = 180;
+ InstantRecordTime = DEFINSTRECTIME;
LnbSLOF = 11700;
LnbFrequLo = 9750;
LnbFrequHi = 10600;
diff --git a/config.h b/config.h
index a58b75c..a07310e 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 2.51 2012/09/09 12:57:33 kls Exp $
+ * $Id: config.h 2.53 2012/09/15 11:51:54 kls Exp $
*/
#ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number:
-#define VDRVERSION "1.7.30"
-#define VDRVERSNUM 10730 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.7.31"
+#define VDRVERSNUM 10731 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
-#define APIVERSION "1.7.30"
-#define APIVERSNUM 10730 // Version * 10000 + Major * 100 + Minor
+#define APIVERSION "1.7.31"
+#define APIVERSNUM 10731 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
@@ -42,6 +42,7 @@
#define TRANSFERPRIORITY (LIVEPRIORITY - 1) // priority used for actual local Transfer Mode
#define IDLEPRIORITY (MINPRIORITY - 1) // priority of an idle device
#define MAXLIFETIME 99
+#define DEFINSTRECTIME 180 // default instant recording time (minutes)
#define MINOSDWIDTH 480
#define MAXOSDWIDTH 1920
diff --git a/cutter.c b/cutter.c
index 62eae82..bcae2b7 100644
--- a/cutter.c
+++ b/cutter.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: cutter.c 2.13 2012/06/10 14:33:36 kls Exp $
+ * $Id: cutter.c 2.14 2012/09/20 09:12:47 kls Exp $
*/
#include "cutter.h"
@@ -88,12 +88,28 @@ void cCuttingThread::Action(void)
bool CheckForSeamlessStream = false;
bool LastMark = false;
bool cutIn = true;
+ bool suspensionLogged = false;
while (Running()) {
uint16_t FileNumber;
off_t FileOffset;
int Length;
bool Independent;
+ // Suspend cutting if we have severe throughput problems:
+
+ if (cIoThrottle::Engaged()) {
+ if (!suspensionLogged) {
+ dsyslog("suspending cutter thread");
+ suspensionLogged = true;
+ }
+ cCondWait::SleepMs(100);
+ continue;
+ }
+ else if (suspensionLogged) {
+ dsyslog("resuming cutter thread");
+ suspensionLogged = false;
+ }
+
// Make sure there is enough disk space:
AssertFreeDiskSpace(-1);
diff --git a/device.c b/device.c
index 6518e82..aa93a8e 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 2.67 2012/09/02 09:26:36 kls Exp $
+ * $Id: device.c 2.68 2012/09/20 09:32:26 kls Exp $
*/
#include "device.h"
@@ -1721,6 +1721,7 @@ cTSBuffer::cTSBuffer(int File, int Size, int CardIndex)
delivered = false;
ringBuffer = new cRingBufferLinear(Size, TS_SIZE, true, "TS");
ringBuffer->SetTimeouts(100, 100);
+ ringBuffer->SetIoThrottle();
Start();
}
diff --git a/dvbdevice.c b/dvbdevice.c
index 55cb912..9320da6 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 2.71 2012/05/09 08:33:59 kls Exp $
+ * $Id: dvbdevice.c 2.72 2012/09/20 10:07:54 kls Exp $
*/
#include "dvbdevice.h"
@@ -1540,7 +1540,7 @@ bool cDvbDevice::OpenDvr(void)
CloseDvr();
fd_dvr = DvbOpen(DEV_DVB_DVR, adapter, frontend, O_RDONLY | O_NONBLOCK, true);
if (fd_dvr >= 0)
- tsBuffer = new cTSBuffer(fd_dvr, MEGABYTE(2), CardIndex() + 1);
+ tsBuffer = new cTSBuffer(fd_dvr, MEGABYTE(5), CardIndex() + 1);
return fd_dvr >= 0;
}
diff --git a/epg.c b/epg.c
index 8ebfb6e..1c1ecdf 100644
--- a/epg.c
+++ b/epg.c
@@ -7,7 +7,7 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
- * $Id: epg.c 2.18 2012/08/25 11:10:29 kls Exp $
+ * $Id: epg.c 2.21 2012/09/29 14:29:49 kls Exp $
*/
#include "epg.h"
@@ -18,6 +18,7 @@
#include "timers.h"
#define RUNNINGSTATUSTIMEOUT 30 // seconds before the running status is considered unknown
+#define EPGDATAWRITEDELTA 600 // seconds between writing the epg.data file
// --- tComponent ------------------------------------------------------------
@@ -581,9 +582,20 @@ static void EpgBugFixStat(int Number, tChannelID ChannelID)
}
}
-void ReportEpgBugFixStats(bool Reset)
+void ReportEpgBugFixStats(bool Force)
{
if (Setup.EPGBugfixLevel > 0) {
+ static time_t LastReport = 0;
+ time_t now = time(NULL);
+ if (now - LastReport > 3600 || Force) {
+ LastReport = now;
+ struct tm tm_r;
+ struct tm *ptm = localtime_r(&now, &tm_r);
+ if (ptm->tm_hour != 5)
+ return;
+ }
+ else
+ return;
bool GotHits = false;
char buffer[1024];
for (int i = 0; i < MAXEPGBUGFIXSTATS; i++) {
@@ -622,14 +634,33 @@ void ReportEpgBugFixStats(bool Reset)
if (*buffer)
dsyslog("%s", buffer);
}
- if (Reset)
- p->hits = p->n = 0;
+ p->hits = p->n = 0;
}
if (GotHits)
dsyslog("=====================");
}
}
+static void StripControlCharacters(char *s)
+{
+ if (s) {
+ int len = strlen(s);
+ while (len > 0) {
+ int l = Utf8CharLen(s);
+ uchar *p = (uchar *)s;
+ if (l == 2 && *p == 0xC2) // UTF-8 sequence
+ p++;
+ if (*p == 0x86 || *p == 0x87) {
+ memmove(s, p + 1, len - l + 1); // we also copy the terminating 0!
+ len -= l;
+ l = 0;
+ }
+ s += l;
+ len -= l;
+ }
+ }
+}
+
void cEvent::FixEpgBugs(void)
{
if (isempty(title)) {
@@ -839,15 +870,10 @@ Final:
strreplace(p->description, '\n', ' ');
}
}
- /* TODO adapt to UTF-8
// Same for control characters:
- strreplace(title, '\x86', ' ');
- strreplace(title, '\x87', ' ');
- strreplace(shortText, '\x86', ' ');
- strreplace(shortText, '\x87', ' ');
- strreplace(description, '\x86', ' ');
- strreplace(description, '\x87', ' ');
- XXX*/
+ StripControlCharacters(title);
+ StripControlCharacters(shortText);
+ StripControlCharacters(description);
}
// --- cSchedule -------------------------------------------------------------
@@ -1109,6 +1135,47 @@ bool cSchedule::Read(FILE *f, cSchedules *Schedules)
return false;
}
+// --- cEpgDataWriter ---------------------------------------------------------
+
+class cEpgDataWriter : public cThread {
+private:
+ cMutex mutex;
+protected:
+ virtual void Action(void);
+public:
+ cEpgDataWriter(void);
+ void Perform(void);
+ };
+
+cEpgDataWriter::cEpgDataWriter(void)
+:cThread("epg data writer")
+{
+}
+
+void cEpgDataWriter::Action(void)
+{
+ SetPriority(19);
+ SetIOPriority(7);
+ Perform();
+}
+
+void cEpgDataWriter::Perform(void)
+{
+ cMutexLock MutexLock(&mutex); // to make sure fore- and background calls don't cause parellel dumps!
+ {
+ cSchedulesLock SchedulesLock(true, 1000);
+ cSchedules *s = (cSchedules *)cSchedules::Schedules(SchedulesLock);
+ if (s) {
+ time_t now = time(NULL);
+ for (cSchedule *p = s->First(); p; p = s->Next(p))
+ p->Cleanup(now);
+ }
+ }
+ cSchedules::Dump();
+}
+
+static cEpgDataWriter EpgDataWriter;
+
// --- cSchedulesLock --------------------------------------------------------
cSchedulesLock::cSchedulesLock(bool WriteLock, int TimeoutMs)
@@ -1126,7 +1193,6 @@ cSchedulesLock::~cSchedulesLock()
cSchedules cSchedules::schedules;
char *cSchedules::epgDataFileName = NULL;
-time_t cSchedules::lastCleanup = time(NULL);
time_t cSchedules::lastDump = time(NULL);
time_t cSchedules::modified = 0;
@@ -1152,28 +1218,13 @@ void cSchedules::Cleanup(bool Force)
if (Force)
lastDump = 0;
time_t now = time(NULL);
- struct tm tm_r;
- struct tm *ptm = localtime_r(&now, &tm_r);
- if (now - lastCleanup > 3600) {
- isyslog("cleaning up schedules data");
- cSchedulesLock SchedulesLock(true, 1000);
- cSchedules *s = (cSchedules *)Schedules(SchedulesLock);
- if (s) {
- for (cSchedule *p = s->First(); p; p = s->Next(p))
- p->Cleanup(now);
- }
- lastCleanup = now;
- if (ptm->tm_hour == 5)
- ReportEpgBugFixStats(true);
- }
- if (epgDataFileName && now - lastDump > 600) {
- cSafeFile f(epgDataFileName);
- if (f.Open()) {
- Dump(f);
- f.Close();
+ if (now - lastDump > EPGDATAWRITEDELTA) {
+ if (epgDataFileName) {
+ if (Force)
+ EpgDataWriter.Perform();
+ else if (!EpgDataWriter.Active())
+ EpgDataWriter.Start();
}
- else
- LOG_ERROR;
lastDump = now;
}
}
@@ -1207,8 +1258,23 @@ bool cSchedules::Dump(FILE *f, const char *Prefix, eDumpMode DumpMode, time_t At
cSchedulesLock SchedulesLock;
cSchedules *s = (cSchedules *)Schedules(SchedulesLock);
if (s) {
+ cSafeFile *sf = NULL;
+ if (!f) {
+ sf = new cSafeFile(epgDataFileName);
+ if (sf->Open())
+ f = *sf;
+ else {
+ LOG_ERROR;
+ delete sf;
+ return false;
+ }
+ }
for (cSchedule *p = s->First(); p; p = s->Next(p))
p->Dump(f, Prefix, DumpMode, AtTime);
+ if (sf) {
+ sf->Close();
+ delete sf;
+ }
return true;
}
return false;
diff --git a/epg.h b/epg.h
index b9a2093..3a7df77 100644
--- a/epg.h
+++ b/epg.h
@@ -7,7 +7,7 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
- * $Id: epg.h 2.14 2012/08/25 11:15:18 kls Exp $
+ * $Id: epg.h 2.15 2012/09/24 12:53:53 kls Exp $
*/
#ifndef __EPG_H
@@ -193,7 +193,6 @@ private:
cRwLock rwlock;
static cSchedules schedules;
static char *epgDataFileName;
- static time_t lastCleanup;
static time_t lastDump;
static time_t modified;
public:
@@ -207,7 +206,7 @@ public:
static void Cleanup(bool Force = false);
static void ResetVersions(void);
static bool ClearAll(void);
- static bool Dump(FILE *f, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0);
+ static bool Dump(FILE *f = NULL, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0);
static bool Read(FILE *f = NULL);
cSchedule *AddSchedule(tChannelID ChannelID);
const cSchedule *GetSchedule(tChannelID ChannelID) const;
@@ -220,7 +219,7 @@ public:
virtual void Action(void);
};
-void ReportEpgBugFixStats(bool Reset = false);
+void ReportEpgBugFixStats(bool Force = false);
class cEpgHandler : public cListObject {
public:
diff --git a/libsi/si.c b/libsi/si.c
index cd889bc..80d34d1 100644
--- a/libsi/si.c
+++ b/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 2.7 2012/08/21 08:10:00 kls Exp $
+ * $Id: si.c 2.8 2012/09/29 14:44:20 kls Exp $
* *
***************************************************************************/
@@ -454,6 +454,7 @@ void String::decodeText(char *buffer, int size) {
}
if (l == 2 && Move) {
memmove(p, p + 1, len - 1); // we also copy the terminating 0!
+ len -= 1;
l = 1;
}
}
@@ -480,6 +481,7 @@ void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int si
if (*p == 0x86 || *p == 0x87) {
IsShortName += (*p == 0x86) ? 1 : -1;
memmove(to, to + l, len - l + 1); // we also copy the terminating 0!
+ len -= l;
l = 0;
}
if (l && IsShortName) {
diff --git a/menu.c b/menu.c
index 1b9346c..cdd9d3a 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 2.60 2012/09/09 12:23:00 kls Exp $
+ * $Id: menu.c 2.61 2012/09/15 11:45:28 kls Exp $
*/
#include "menu.h"
@@ -3118,7 +3118,7 @@ cMenuSetupRecord::cMenuSetupRecord(void)
Add(new cMenuEditIntItem( tr("Setup.Recording$VPS margin (s)"), &data.VpsMargin, 0));
Add(new cMenuEditBoolItem(tr("Setup.Recording$Mark instant recording"), &data.MarkInstantRecord));
Add(new cMenuEditStrItem( tr("Setup.Recording$Name instant recording"), data.NameInstantRecord, sizeof(data.NameInstantRecord)));
- Add(new cMenuEditIntItem( tr("Setup.Recording$Instant rec. time (min)"), &data.InstantRecordTime, 1, MAXINSTANTRECTIME));
+ Add(new cMenuEditIntItem( tr("Setup.Recording$Instant rec. time (min)"), &data.InstantRecordTime, 0, MAXINSTANTRECTIME, tr("Setup.Recording$present event")));
Add(new cMenuEditIntItem( tr("Setup.Recording$Max. video file size (MB)"), &data.MaxVideoFileSize, MINVIDEOFILESIZE, MAXVIDEOFILESIZETS));
Add(new cMenuEditBoolItem(tr("Setup.Recording$Split edited files"), &data.SplitEditedFiles));
Add(new cMenuEditStraItem(tr("Setup.Recording$Delete timeshift recording"),&data.DelTimeshiftRec, 3, delTimeshiftRecTexts));
diff --git a/po/ar.po b/po/ar.po
index 8347285..14e8126 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-10-16 11:16-0400\n"
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
"Language-Team: Arabic <ar@li.org>\n"
@@ -1102,6 +1102,9 @@ msgstr "اسم التسجيل الفورى"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "مدة التسجيل الفورى بالدقيقة"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "اقصى حجم لملف الفيديو ب م ب"
@@ -1280,6 +1283,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "لا يمكن قفل الحاسوب الرمز s لم يحدد"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index ce863de..c67265b 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n"
@@ -1080,6 +1080,9 @@ msgstr "Anomenar gravacions instantnies"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Temps de gravaci instantnia (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Mida mxima de l'arxiu (MB)"
@@ -1255,6 +1258,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "No puc apagar, falta la opci -s !"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 96f6b14..55053f9 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2010-05-06 11:00+0200\n"
"Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
"Language-Team: Czech <vdr@linuxtv.org>\n"
@@ -1079,6 +1079,9 @@ msgstr "Pojmenovat okamžité nahrávky"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Délka okamžitého nahrávání (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maximální velikost nahrávky (MB)"
@@ -1254,6 +1257,9 @@ msgstr "Generování index souboru"
msgid "Index file regeneration complete"
msgstr "Generování index souboru dokončeno"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Vypnutí není možné - chybí volba '-s'!"
diff --git a/po/da_DK.po b/po/da_DK.po
index 3615bc7..fac5800 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr "Navngiv direkte optagelse"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Lngde af direkte optagelse (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Max. video filstrrelse (MB)"
@@ -1252,6 +1255,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Kan ikke slukke - parameter '-s' ikke angivet!"
diff --git a/po/de_DE.po b/po/de_DE.po
index aaa92ea..a321b50 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2010-01-16 16:46+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr "Direktaufzeichnung benennen"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Dauer der Direktaufzeichnung (min)"
+msgid "Setup.Recording$present event"
+msgstr "laufende Sendung"
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Max. Videodateigre (MB)"
@@ -1252,6 +1255,9 @@ msgstr "Index-Datei wird regeneriert"
msgid "Index file regeneration complete"
msgstr "Regenerierung der Index-Datei abgeschlossen"
+msgid "Index file regeneration failed!"
+msgstr "Regenerierung der Index-Datei fehlgeschlagen!"
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Ausschalten unmglich - Option '-s' fehlt!"
diff --git a/po/el_GR.po b/po/el_GR.po
index 42bd8be..8936408 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr " "
msgid "Setup.Recording$Instant rec. time (min)"
msgstr " ()"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr " (MB)"
@@ -1252,6 +1255,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr " . '-s'!"
diff --git a/po/es_ES.po b/po/es_ES.po
index 2bda405..bc80a11 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n"
@@ -1078,6 +1078,9 @@ msgstr "Nombrar grabaciones inmediatas"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Tiempo de grabacin inmediata (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Tamao mximo de fichero (MB)"
@@ -1253,6 +1256,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "No se puede apagar - falta el parmetro '-s'!"
diff --git a/po/et_EE.po b/po/et_EE.po
index ddf9a80..0dea999 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr "Kiirsalvestuse nimi"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Kiirsalvestuse kestus (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maks. failisuurus (MB)"
@@ -1252,6 +1255,9 @@ msgstr "Indeksfaili regenereerimine"
msgid "Index file regeneration complete"
msgstr "Indeksfaili regenereerimine lõpetatud"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Väljalülitamine nurjus - '-s' parameeter puudub!"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 11a74ad..daad22a 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-13 13:15+0200\n"
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
@@ -1080,6 +1080,9 @@ msgstr "Nimeä pikatallenne"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Pikatallennuksen kesto (min)"
+msgid "Setup.Recording$present event"
+msgstr "nykyinen tapahtuma"
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Suurin tiedostokoko (Mt)"
@@ -1255,6 +1258,9 @@ msgstr "Luodaan indeksitiedosto uudelleen"
msgid "Index file regeneration complete"
msgstr "Indeksitiedosto valmistui"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Sammutus ei onnistu - '-s' parametri puuttuu!"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 5d65eaa..3ca3c06 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
@@ -1083,6 +1083,9 @@ msgstr "Noms enregistr. immdiats"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Dure enregistr. immdiat (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Taille maxi des fichiers (Mo)"
@@ -1258,6 +1261,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Arrt impossible - option '-s' absente !"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index b7b8983..dcb1a21 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n"
@@ -1079,6 +1079,9 @@ msgstr "Imenuj direktno snimanje"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Trajanje direktnog snimanja (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maksimalna veliina datoteke (MB)"
@@ -1254,6 +1257,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Gaenje nemogue - nedostaje opcija '-s'!"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 58cf9ce..c391b67 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2012-01-02 11:54+0200\n"
"Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
@@ -1081,6 +1081,9 @@ msgstr "Direktfelvtel megnevezse"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Direktfelvtel idtartama (perc)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Max. video file mret (MB)"
@@ -1256,6 +1259,9 @@ msgstr "Az index file jragenerlsa"
msgid "Index file regeneration complete"
msgstr "Index file jragenerlsa ksz."
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "A lellts nem lehetsges - Opci '-s' hinyzik!"
diff --git a/po/it_IT.po b/po/it_IT.po
index 59b763f..b63d93d 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2012-06-06 22:50+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
@@ -1084,6 +1084,9 @@ msgstr "Nome reg. immediata"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Durata reg. immediata (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Dim. massima file video (MB)"
@@ -1259,6 +1262,9 @@ msgstr "Rigenerazione file indice"
msgid "Index file regeneration complete"
msgstr "Rigenerazione file indice completata"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Impossibile spegnere - parametro '-s' non assegnato!"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index d9bf213..95f8e83 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2010-10-30 11:55+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr "Rankiniu būdu vykdomų įrašų įvardinimo schama"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Rankiniu būdu vykdomo įrašo laikas (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maks. video failo dydis (MB)"
@@ -1252,6 +1255,9 @@ msgstr "Pergeneruojamas index failas"
msgid "Index file regeneration complete"
msgstr "Index failo pergeneravimas baigtas"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Sistemos negalima išjungti, nes starto metu nebuvo komandinėj eilutėj paduota savybė '-s'!"
diff --git a/po/mk_MK.po b/po/mk_MK.po
index 46d9419..fd16ec8 100644
--- a/po/mk_MK.po
+++ b/po/mk_MK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR-1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2010-03-11 00:54+0100\n"
"Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
"Language-Team: Macedonian <en@li.org>\n"
@@ -1078,6 +1078,9 @@ msgstr "Име на директно снимање"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Траење на директно снимање (мин)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Максимална големина на датотека (MB)"
@@ -1253,6 +1256,9 @@ msgstr "Регенерирање на индекс датотека"
msgid "Index file regeneration complete"
msgstr "Регенерирањето на индексот заврши"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Невозможно гаснење - недостасува опцијата '-s'!"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index df75d23..6c3825d 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n"
@@ -1081,6 +1081,9 @@ msgstr "Naam direkt-opname"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Duur van de directe opname (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maximale omvang video file (MB)"
@@ -1256,6 +1259,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Shutdown onmogelijk - Optie '-s' ontbreekt!"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index f221214..41ce5c3 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
@@ -1078,6 +1078,9 @@ msgstr "Navngi direkteopptak"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr ""
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maksimal strrelse p videofiler (MB)"
@@ -1253,6 +1256,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Kan ikke sl av - startet uten parameteret '-s'!"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 1913389..f4c1876 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
@@ -1078,6 +1078,9 @@ msgstr "Nazywaj natychm. nagrywanie"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Czas natychm. nagrywania (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maksymalny rozmiar pliku (MB)"
@@ -1253,6 +1256,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Nie mona wyczy - nie podano opcji '-s'!"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 11fdb4c..5cfc203 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.15\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2010-03-28 22:49+0100\n"
"Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
@@ -1078,6 +1078,9 @@ msgstr "Nome da gravao instantnea"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Validade da gravao instantnea (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Tamanho mximo do ficheiro de vdeo (MB)"
@@ -1253,6 +1256,9 @@ msgstr "A regenerar ndice do ficheiro"
msgid "Index file regeneration complete"
msgstr "Regenerao do ndice do ficheiro completa"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Impossvel desligar - falta o parmetro '-s'!"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 40571e5..cd638dc 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2011-03-10 23:52+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n"
@@ -1080,6 +1080,9 @@ msgstr "Nume nregistrare imediat"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Timpul de nregistare imediat (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Dimensiune maxim a fiierului video (MB)"
@@ -1255,6 +1258,9 @@ msgstr "Generez index"
msgid "Index file regeneration complete"
msgstr "Generarea indexului s-a incheiat"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Nu pot nchide - vezi opiunea '-s'"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index f159d1e..d8e1e8e 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
@@ -1078,6 +1078,9 @@ msgstr " "
msgid "Setup.Recording$Instant rec. time (min)"
msgstr " ()"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr ". ()"
@@ -1253,6 +1256,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr " - '-s'!"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index fc75998..0de2d06 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2011-02-15 16:29+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr "Premenova okamit nahrvky"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Dka okamitho nahrvania (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maximlna vekos nahrvky (MB)"
@@ -1252,6 +1255,9 @@ msgstr "Regeneran indexov sbor"
msgid "Index file regeneration complete"
msgstr "Regenercia indexovho sboru hotov"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Vypnutie nie je mon - chba voba '-s'!"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 95a45df..9556868 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
@@ -1078,6 +1078,9 @@ msgstr "Ime za direktno snemanje"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "as direktnega snemanja (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Najveja velikost datoteke (MB)"
@@ -1253,6 +1256,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Zaustavitev ni izvedljiva - opcija '-s' ni podana!"
diff --git a/po/sr_SR.po b/po/sr_SR.po
index 0e6f9cd..c4149dd 100644
--- a/po/sr_SR.po
+++ b/po/sr_SR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.1\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2011-01-09 15:57+0100\n"
"Last-Translator: Milan Cvijanovi <elcom_cvijo@hotmail.com>\n"
"Language-Team: Serbian <vdr@linuxtv.org>\n"
@@ -1100,6 +1100,9 @@ msgstr "Imenuj trenutno snimanje"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Trajanje trenutnog snimanja (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maks. veliina datoteke (MB)"
@@ -1278,6 +1281,9 @@ msgstr "Obnavljanje index datoteke"
msgid "Index file regeneration complete"
msgstr "Obnavljanje index datoteke zavreno"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Gaenje nemogue - nedostaje opcija '-s'!"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index aa66721..951dd04 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n"
@@ -1080,6 +1080,9 @@ msgstr "Namnge direktinspelning"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Direktinspelning lngd (min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maximal filstorlek fr inspelning (MB)"
@@ -1255,6 +1258,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Kan inte avsluta, mste anvnda parameter '-s'"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index e4acde3..8b161b3 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr "Derhal ekimi isimlendir"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Derhal ekim sresi (dak)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Maksimum Video ktk byklg (MB)"
@@ -1252,6 +1255,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Kapatlamyor - '-s' seenei verilmemi!"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 62b5fc6..45e57ee 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2010-04-25 16:35+0200\n"
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
"Language-Team: Ukrainian <vdr@linuxtv.org>\n"
@@ -1077,6 +1077,9 @@ msgstr "Схема найменувань ручних записів"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Протяжність ручного запису (хв)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Макс. размір відеофайлу (Мб)"
@@ -1252,6 +1255,9 @@ msgstr "Регенерація файлу індексів"
msgid "Index file regeneration complete"
msgstr "Регенерацію файлу індексу завершено"
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "Виключенння неможливе - не задано параметр '-s'!"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 2277a94..4e2b951 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-09-09 15:20+0200\n"
+"POT-Creation-Date: 2012-09-15 14:04+0200\n"
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
@@ -1080,6 +1080,9 @@ msgstr "名字直接记录"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "直接录像时间(min)"
+msgid "Setup.Recording$present event"
+msgstr ""
+
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "最大的视频文件容量 (MB)"
@@ -1255,6 +1258,9 @@ msgstr ""
msgid "Index file regeneration complete"
msgstr ""
+msgid "Index file regeneration failed!"
+msgstr ""
+
msgid "Can't shutdown - option '-s' not given!"
msgstr "不能关机 - 操作 '-s' 不允许!"
diff --git a/recorder.c b/recorder.c
index a6cab47..a9cc8c9 100644
--- a/recorder.c
+++ b/recorder.c
@@ -4,13 +4,13 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recorder.c 2.15 2011/09/04 09:26:44 kls Exp $
+ * $Id: recorder.c 2.17 2012/09/22 11:53:57 kls Exp $
*/
#include "recorder.h"
#include "shutdown.h"
-#define RECORDERBUFSIZE (MEGABYTE(5) / TS_SIZE * TS_SIZE) // multiple of TS_SIZE
+#define RECORDERBUFSIZE (MEGABYTE(20) / TS_SIZE * TS_SIZE) // multiple of TS_SIZE
// The maximum time we wait before assuming that a recorded video data stream
// is broken:
@@ -33,6 +33,7 @@ cRecorder::cRecorder(const char *FileName, const cChannel *Channel, int Priority
ringBuffer = new cRingBufferLinear(RECORDERBUFSIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE, true, "Recorder");
ringBuffer->SetTimeouts(0, 100);
+ ringBuffer->SetIoThrottle();
int Pid = Channel->Vpid();
int Type = Channel->Vtype();
diff --git a/recording.c b/recording.c
index 9c80505..1eeb82d 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.60 2012/09/06 09:57:31 kls Exp $
+ * $Id: recording.c 2.64 2012/09/30 13:05:14 kls Exp $
*/
#include "recording.h"
@@ -107,8 +107,10 @@ void cRemoveDeletedRecordingsThread::Action(void)
}
r = DeletedRecordings.Next(r);
}
- if (deleted)
- RemoveEmptyVideoDirectories();
+ if (deleted) {
+ const char *IgnoreFiles[] = { SORTMODEFILE, NULL };
+ RemoveEmptyVideoDirectories(IgnoreFiles);
+ }
}
}
@@ -820,9 +822,13 @@ char *cRecording::StripEpisodeName(char *s)
t++;
}
if (s1 && s2) {
+ // To have folders sorted before plain recordings, the '/' s1 points to
+ // is replaced by the character 'b'. All other slashes will be replaced
+ // by 'a' in SortName() (see below), which will result in the desired
+ // sequence:
+ *s1 = 'b';
s1++;
memmove(s1, s2, t - s2 + 1);
- *s1 = 0xFF; // sorts folders before plain recordings
}
return s;
}
@@ -1010,8 +1016,10 @@ bool cRecording::Delete(void)
RemoveVideoFile(NewName);
}
isyslog("deleting recording '%s'", FileName());
- if (access(FileName(), F_OK) == 0)
+ if (access(FileName(), F_OK) == 0) {
result = RenameVideoFile(FileName(), NewName);
+ cRecordingUserCommand::InvokeCommand(RUC_DELETERECORDING, NewName);
+ }
else {
isyslog("recording '%s' vanished", FileName());
result = true; // well, we were going to delete it, anyway
@@ -1483,6 +1491,7 @@ cIndexFileGenerator::~cIndexFileGenerator()
void cIndexFileGenerator::Action(void)
{
bool IndexFileComplete = false;
+ bool IndexFileWritten = false;
bool Rewind = false;
cFileName FileName(recordingName, false);
cUnbufferedFile *ReplayFile = FileName.Open();
@@ -1514,6 +1523,7 @@ void cIndexFileGenerator::Action(void)
if (FrameDetector.NewFrame()) {
IndexFile.Write(FrameDetector.IndependentFrame(), FileName.Number(), FrameOffset >= 0 ? FrameOffset : FileSize);
FrameOffset = -1;
+ IndexFileWritten = true;
}
FileSize += Processed;
Buffer.Del(Processed);
@@ -1568,11 +1578,16 @@ void cIndexFileGenerator::Action(void)
break;
}
}
+ if (IndexFileComplete) {
+ if (IndexFileWritten) {
+ Skins.QueueMessage(mtInfo, tr("Index file regeneration complete"));
+ return;
+ }
+ else
+ Skins.QueueMessage(mtError, tr("Index file regeneration failed!"));
+ }
// Delete the index file if the recording has not been processed entirely:
- if (IndexFileComplete)
- Skins.QueueMessage(mtInfo, tr("Index file regeneration complete"));
- else
- IndexFile.Delete();
+ IndexFile.Delete();
}
// --- cIndexFile ------------------------------------------------------------
diff --git a/recording.h b/recording.h
index 84a23b3..ac44ad5 100644
--- a/recording.h
+++ b/recording.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.h 2.36 2012/09/06 09:59:11 kls Exp $
+ * $Id: recording.h 2.37 2012/09/17 08:53:23 kls Exp $
*/
#ifndef __RECORDING_H
@@ -240,6 +240,7 @@ public:
#define RUC_BEFORERECORDING "before"
#define RUC_AFTERRECORDING "after"
#define RUC_EDITEDRECORDING "edited"
+#define RUC_DELETERECORDING "deleted"
class cRecordingUserCommand {
private:
diff --git a/remux.c b/remux.c
index bd06e7c..6450da4 100644
--- a/remux.c
+++ b/remux.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.c 2.64 2012/03/02 10:56:49 kls Exp $
+ * $Id: remux.c 2.67 2012/09/19 10:28:42 kls Exp $
*/
#include "remux.h"
@@ -622,6 +622,34 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
}
}
break;
+ case 0x81: // STREAMTYPE_USER_PRIVATE
+ {
+ dbgpatpmt(" AC3");
+ char lang[MAXLANGCODE1] = { 0 };
+ SI::Descriptor *d;
+ for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) {
+ switch (d->getDescriptorTag()) {
+ case SI::ISO639LanguageDescriptorTag: {
+ SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
+ dbgpatpmt(" '%s'", ld->languageCode);
+ strn0cpy(lang, I18nNormalizeLanguageCode(ld->languageCode), MAXLANGCODE1);
+ }
+ break;
+ default: ;
+ }
+ delete d;
+ }
+ if (NumDpids < MAXDPIDS) {
+ dpids[NumDpids] = stream.getPid();
+ dtypes[NumDpids] = SI::AC3DescriptorTag;
+ strn0cpy(dlangs[NumDpids], lang, sizeof(dlangs[NumDpids]));
+ if (updatePrimaryDevice && Setup.UseDolbyDigital)
+ cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, stream.getPid(), lang);
+ NumDpids++;
+ dpids[NumDpids]= 0;
+ }
+ }
+ break;
default: ;
}
dbgpatpmt("\n");
@@ -843,7 +871,8 @@ int cFrameDetector::SkipPackets(const uchar *&Data, int &Length, int &Processed,
int cFrameDetector::Analyze(const uchar *Data, int Length)
{
- int SeenPayloadStart = false;
+ bool SeenPayloadStart = false;
+ bool SeenAccessUnitDelimiter = false;
int Processed = 0;
newFrame = independentFrame = false;
while (Length >= TS_SIZE) {
@@ -970,12 +999,16 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
scanner = EMPTY_SCANNER;
if (synced && !SeenPayloadStart && Processed)
return Processed; // flush everything before this new frame
+ SeenAccessUnitDelimiter = true;
+ }
+ else if (SeenAccessUnitDelimiter && scanner == 0x00000001) { // NALU start
+ SeenAccessUnitDelimiter = false;
int FrameTypeOffset = i + 1;
if (FrameTypeOffset >= TS_SIZE) // the byte to check is in the next TS packet
i = SkipPackets(Data, Length, Processed, FrameTypeOffset);
newFrame = true;
- uchar FrameType = Data[FrameTypeOffset];
- independentFrame = FrameType == 0x10;
+ uchar FrameType = Data[FrameTypeOffset] & 0x1F;
+ independentFrame = FrameType == 0x07;
if (synced) {
if (framesPerPayloadUnit < 0) {
payloadUnitOfFrame = (payloadUnitOfFrame + 1) % -framesPerPayloadUnit;
diff --git a/ringbuffer.c b/ringbuffer.c
index 1bdeacc..abe7899 100644
--- a/ringbuffer.c
+++ b/ringbuffer.c
@@ -7,7 +7,7 @@
* Parts of this file were inspired by the 'ringbuffy.c' from the
* LinuxDVB driver (see linuxtv.org).
*
- * $Id: ringbuffer.c 2.3 2009/11/22 11:14:36 kls Exp $
+ * $Id: ringbuffer.c 2.5 2012/09/22 11:26:49 kls Exp $
*/
#include "ringbuffer.h"
@@ -20,6 +20,8 @@
#define OVERFLOWREPORTDELTA 5 // seconds between reports
#define PERCENTAGEDELTA 10
#define PERCENTAGETHRESHOLD 70
+#define IOTHROTTLELOW 20
+#define IOTHROTTLEHIGH 50
cRingBuffer::cRingBuffer(int Size, bool Statistics)
{
@@ -31,10 +33,12 @@ cRingBuffer::cRingBuffer(int Size, bool Statistics)
putTimeout = getTimeout = 0;
lastOverflowReport = 0;
overflowCount = overflowBytes = 0;
+ ioThrottle = NULL;
}
cRingBuffer::~cRingBuffer()
{
+ delete ioThrottle;
if (statistics)
dsyslog("buffer stats: %d (%d%%) used", maxFill, maxFill * 100 / (size - 1));
}
@@ -50,6 +54,12 @@ void cRingBuffer::UpdatePercentage(int Fill)
lastPercent = percent;
}
}
+ if (ioThrottle) {
+ if (percent >= IOTHROTTLEHIGH)
+ ioThrottle->Activate();
+ else if (percent < IOTHROTTLELOW)
+ ioThrottle->Release();
+ }
}
void cRingBuffer::WaitForPut(void)
@@ -66,13 +76,13 @@ void cRingBuffer::WaitForGet(void)
void cRingBuffer::EnablePut(void)
{
- if (putTimeout && Free() > Size() / 3)
+ if (putTimeout && Free() > Size() / 10)
readyForPut.Signal();
}
void cRingBuffer::EnableGet(void)
{
- if (getTimeout && Available() > Size() / 3)
+ if (getTimeout && Available() > Size() / 10)
readyForGet.Signal();
}
@@ -82,6 +92,12 @@ void cRingBuffer::SetTimeouts(int PutTimeout, int GetTimeout)
getTimeout = GetTimeout;
}
+void cRingBuffer::SetIoThrottle(void)
+{
+ if (!ioThrottle)
+ ioThrottle = new cIoThrottle;
+}
+
void cRingBuffer::ReportOverflow(int Bytes)
{
overflowCount++;
diff --git a/ringbuffer.h b/ringbuffer.h
index d234502..5b2eeb1 100644
--- a/ringbuffer.h
+++ b/ringbuffer.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ringbuffer.h 2.3 2011/12/04 13:38:17 kls Exp $
+ * $Id: ringbuffer.h 2.4 2012/09/20 09:29:32 kls Exp $
*/
#ifndef __RINGBUFFER_H
@@ -22,6 +22,7 @@ private:
time_t lastOverflowReport;
int overflowCount;
int overflowBytes;
+ cIoThrottle *ioThrottle;
protected:
tThreadId getThreadTid;
int maxFill;//XXX
@@ -40,6 +41,7 @@ public:
cRingBuffer(int Size, bool Statistics = false);
virtual ~cRingBuffer();
void SetTimeouts(int PutTimeout, int GetTimeout);
+ void SetIoThrottle(void);
void ReportOverflow(int Bytes);
};
diff --git a/skinlcars.c b/skinlcars.c
index 39d0374..b2dab50 100644
--- a/skinlcars.c
+++ b/skinlcars.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: skinlcars.c 2.14 2012/09/09 12:16:50 kls Exp $
+ * $Id: skinlcars.c 2.15 2012/09/19 11:05:50 kls Exp $
*/
// "Star Trek: The Next Generation"(R) is a registered trademark of Paramount Pictures,
@@ -1661,6 +1661,7 @@ private:
bool modeOnly;
int lineHeight;
tColor frameColor;
+ int lastCurrentWidth;
cString lastDate;
tTrackId lastTrackId;
void DrawDate(void);
@@ -1685,6 +1686,7 @@ cSkinLCARSDisplayReplay::cSkinLCARSDisplayReplay(bool ModeOnly)
modeOnly = ModeOnly;
lineHeight = font->Height();
frameColor = Theme.Color(clrReplayFrameBg);
+ lastCurrentWidth = 0;
int d = 5 * lineHeight;
xp00 = 0;
xp01 = xp00 + d / 2;
@@ -1801,8 +1803,9 @@ void cSkinLCARSDisplayReplay::SetProgress(int Current, int Total)
void cSkinLCARSDisplayReplay::SetCurrent(const char *Current)
{
const cFont *font = cFont::GetFont(fontOsd);
- int w = font->Width(Current) + 10;
- osd->DrawText(xp03, yp03 - lineHeight, Current, Theme.Color(clrReplayPosition), Theme.Color(clrBackground), font, w, 0, taLeft);
+ int w = font->Width(Current);
+ osd->DrawText(xp03, yp03 - lineHeight, Current, Theme.Color(clrReplayPosition), Theme.Color(clrBackground), font, lastCurrentWidth > w ? lastCurrentWidth : w, 0, taLeft);
+ lastCurrentWidth = w;
}
void cSkinLCARSDisplayReplay::SetTotal(const char *Total)
diff --git a/thread.c b/thread.c
index 5bcc9a5..a650fab 100644
--- a/thread.c
+++ b/thread.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.c 2.4 2012/05/08 11:15:57 kls Exp $
+ * $Id: thread.c 2.5 2012/09/20 09:05:50 kls Exp $
*/
#include "thread.h"
@@ -398,6 +398,48 @@ bool cThreadLock::Lock(cThread *Thread)
return false;
}
+// --- cIoThrottle -----------------------------------------------------------
+
+cMutex cIoThrottle::mutex;
+int cIoThrottle::count = 0;
+
+cIoThrottle::cIoThrottle(void)
+{
+ active = false;
+}
+
+cIoThrottle::~cIoThrottle()
+{
+ Release();
+}
+
+void cIoThrottle::Activate(void)
+{
+ if (!active) {
+ mutex.Lock();
+ count++;
+ active = true;
+ dsyslog("i/o throttle activated, count = %d (tid=%d)", count, cThread::ThreadId());
+ mutex.Unlock();
+ }
+}
+
+void cIoThrottle::Release(void)
+{
+ if (active) {
+ mutex.Lock();
+ count--;
+ active = false;
+ dsyslog("i/o throttle released, count = %d (tid=%d)", count, cThread::ThreadId());
+ mutex.Unlock();
+ }
+}
+
+bool cIoThrottle::Engaged(void)
+{
+ return count > 0;
+}
+
// --- cPipe -----------------------------------------------------------------
// cPipe::Open() and cPipe::Close() are based on code originally received from
diff --git a/thread.h b/thread.h
index d4919eb..f77e819 100644
--- a/thread.h
+++ b/thread.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.h 2.1 2009/04/13 13:50:39 kls Exp $
+ * $Id: thread.h 2.2 2012/09/20 08:46:27 kls Exp $
*/
#ifndef __THREAD_H
@@ -157,6 +157,29 @@ public:
#define LOCK_THREAD cThreadLock ThreadLock(this)
+class cIoThrottle {
+private:
+ static cMutex mutex;
+ static int count;
+ bool active;
+public:
+ cIoThrottle(void);
+ ~cIoThrottle();
+ void Activate(void);
+ ///< Activates the global I/O throttling mechanism.
+ ///< This function may be called any number of times, but only
+ ///< the first call after an inactive state will have an effect.
+ void Release(void);
+ ///< Releases the global I/O throttling mechanism.
+ ///< This function may be called any number of times, but only
+ ///< the first call after an active state will have an effect.
+ bool Active(void) { return active; }
+ ///< Returns true if this I/O throttling object is currently active.
+ static bool Engaged(void);
+ ///< Returns true if any I/O throttling object is currently active.
+ };
+
+
// cPipe implements a pipe that closes all unnecessary file descriptors in
// the child process.
diff --git a/timers.c b/timers.c
index c4f4f7a..7d4c70b 100644
--- a/timers.c
+++ b/timers.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.c 2.11 2012/06/09 14:37:24 kls Exp $
+ * $Id: timers.c 2.12 2012/09/15 13:34:03 kls Exp $
*/
#include "timers.h"
@@ -32,6 +32,9 @@ cTimer::cTimer(bool Instant, bool Pause, cChannel *Channel)
deferred = 0;
recording = pending = inVpsMargin = false;
flags = tfNone;
+ *file = 0;
+ aux = NULL;
+ event = NULL;
if (Instant)
SetFlags(tfActive | tfInstant);
channel = Channel ? Channel : Channels.GetByNumber(cDevice::CurrentChannel());
@@ -41,15 +44,40 @@ cTimer::cTimer(bool Instant, bool Pause, cChannel *Channel)
day = SetTime(t, 0);
weekdays = 0;
start = now->tm_hour * 100 + now->tm_min;
- stop = now->tm_hour * 60 + now->tm_min + Setup.InstantRecordTime;
- stop = (stop / 60) * 100 + (stop % 60);
+ stop = 0;
+ if (!Setup.InstantRecordTime && channel) {
+ cSchedulesLock SchedulesLock;
+ if (const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock)) {
+ if (const cSchedule *Schedule = Schedules->GetSchedule(channel)) {
+ if (const cEvent *Event = Schedule->GetPresentEvent()) {
+ time_t tstart = Event->StartTime();
+ time_t tstop = Event->EndTime();
+ if (Event->Vps() && Setup.UseVps) {
+ SetFlags(tfVps);
+ tstart = Event->Vps();
+ }
+ else {
+ tstop += Setup.MarginStop * 60;
+ tstart -= Setup.MarginStart * 60;
+ }
+ day = SetTime(tstart, 0);
+ struct tm *time = localtime_r(&tstart, &tm_r);
+ start = time->tm_hour * 100 + time->tm_min;
+ time = localtime_r(&tstop, &tm_r);
+ stop = time->tm_hour * 100 + time->tm_min;
+ SetEvent(Event);
+ }
+ }
+ }
+ }
+ if (!stop) {
+ stop = now->tm_hour * 60 + now->tm_min + (Setup.InstantRecordTime ? Setup.InstantRecordTime : DEFINSTRECTIME);
+ stop = (stop / 60) * 100 + (stop % 60);
+ }
if (stop >= 2400)
stop -= 2400;
priority = Pause ? Setup.PausePriority : Setup.DefaultPriority;
lifetime = Pause ? Setup.PauseLifetime : Setup.DefaultLifetime;
- *file = 0;
- aux = NULL;
- event = NULL;
if (Instant && channel)
snprintf(file, sizeof(file), "%s%s", Setup.MarkInstantRecord ? "@" : "", *Setup.NameInstantRecord ? Setup.NameInstantRecord : channel->Name());
if (VfatFileSystem && (Utf8StrLen(file) > VFAT_MAX_FILENAME)) {
@@ -66,6 +94,9 @@ cTimer::cTimer(const cEvent *Event)
deferred = 0;
recording = pending = inVpsMargin = false;
flags = tfActive;
+ *file = 0;
+ aux = NULL;
+ event = NULL;
if (Event->Vps() && Setup.UseVps)
SetFlags(tfVps);
channel = Channels.GetByChannelID(Event->ChannelID(), true);
@@ -86,7 +117,6 @@ cTimer::cTimer(const cEvent *Event)
stop -= 2400;
priority = Setup.DefaultPriority;
lifetime = Setup.DefaultLifetime;
- *file = 0;
const char *Title = Event->Title();
if (!isempty(Title))
Utf8Strn0Cpy(file, Event->Title(), sizeof(file));
@@ -95,8 +125,7 @@ cTimer::cTimer(const cEvent *Event)
file[Utf8SymChars(file, VFAT_MAX_FILENAME)] = 0;
dsyslog("timer file name truncated to '%s'", file);
}
- aux = NULL;
- event = NULL; // let SetEvent() be called to get a log message
+ SetEvent(Event);
}
cTimer::cTimer(const cTimer &Timer)
diff --git a/tools.c b/tools.c
index 3d9c513..26c325b 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 2.25 2012/08/21 10:34:37 kls Exp $
+ * $Id: tools.c 2.26 2012/09/30 13:04:14 kls Exp $
*/
#include "tools.h"
@@ -285,6 +285,18 @@ int64_t StrToNum(const char *s)
return n;
}
+bool StrInArray(const char *a[], const char *s)
+{
+ if (a) {
+ while (*a) {
+ if (strcmp(*a, s) == 0)
+ return true;
+ a++;
+ }
+ }
+ return false;
+}
+
cString AddDirectory(const char *DirName, const char *FileName)
{
return cString::sprintf("%s/%s", DirName && *DirName ? DirName : ".", FileName);
@@ -433,9 +445,9 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks)
return true;
}
-bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis)
+bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis, const char *IgnoreFiles[])
{
- bool HasDotFiles = false;
+ bool HasIgnoredFiles = false;
cReadDir d(DirName);
if (d.Ok()) {
bool empty = true;
@@ -446,11 +458,11 @@ bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis)
struct stat st;
if (stat(buffer, &st) == 0) {
if (S_ISDIR(st.st_mode)) {
- if (!RemoveEmptyDirectories(buffer, true))
+ if (!RemoveEmptyDirectories(buffer, true, IgnoreFiles))
empty = false;
}
- else if (*e->d_name == '.') // "dot files" don't count
- HasDotFiles = true;
+ else if (RemoveThis && IgnoreFiles && StrInArray(IgnoreFiles, e->d_name))
+ HasIgnoredFiles = true;
else
empty = false;
}
@@ -461,21 +473,18 @@ bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis)
}
}
if (RemoveThis && empty) {
- if (HasDotFiles) {
- cReadDir d(DirName);
- if (d.Ok()) {
- struct dirent *e;
- while ((e = d.Next()) != NULL) {
- if (*e->d_name == '.') { // for safety - should always be true
- cString buffer = AddDirectory(DirName, e->d_name);
- dsyslog("removing %s", *buffer);
- if (remove(buffer) < 0) {
- LOG_ERROR_STR(*buffer);
- return false;
- }
+ if (HasIgnoredFiles) {
+ while (*IgnoreFiles) {
+ cString buffer = AddDirectory(DirName, *IgnoreFiles);
+ if (access(buffer, F_OK) == 0) {
+ dsyslog("removing %s", *buffer);
+ if (remove(buffer) < 0) {
+ LOG_ERROR_STR(*buffer);
+ return false;
}
}
- }
+ IgnoreFiles++;
+ }
}
dsyslog("removing %s", DirName);
if (remove(DirName) < 0) {
diff --git a/tools.h b/tools.h
index b73448d..3e546a1 100644
--- a/tools.h
+++ b/tools.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.h 2.21 2012/05/20 13:58:06 kls Exp $
+ * $Id: tools.h 2.22 2012/09/30 11:02:21 kls Exp $
*/
#ifndef __TOOLS_H
@@ -213,6 +213,9 @@ int64_t StrToNum(const char *s);
///< K, M, G or T to abbreviate Kilo-, Mega-, Giga- or Terabyte, respectively
///< (based on 1024). Everything after the first non-numeric character is
///< silently ignored, as are any characters other than the ones mentioned here.
+bool StrInArray(const char *a[], const char *s);
+ ///< Returns true if the string s is equal to one of the strings pointed
+ ///< to by the (NULL terminated) array a.
cString itoa(int n);
cString AddDirectory(const char *DirName, const char *FileName);
bool EntriesOnSameFileSystem(const char *File1, const char *File2);
@@ -220,7 +223,12 @@ int FreeDiskSpaceMB(const char *Directory, int *UsedMB = NULL);
bool DirectoryOk(const char *DirName, bool LogErrors = false);
bool MakeDirs(const char *FileName, bool IsDirectory = false);
bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks = false);
-bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis = false);
+bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis = false, const char *IgnoreFiles[] = NULL);
+ ///< Removes all empty directories under the given directory DirName.
+ ///< If RemoveThis is true, DirName will also be removed if it is empty.
+ ///< IgnoreFiles can be set to an array of file names that will be ignored when
+ ///< considering whether a directory is empty. If IgnoreFiles is given, the array
+ ///< must end with a NULL pointer.
int DirSizeMB(const char *DirName); ///< returns the total size of the files in the given directory, or -1 in case of an error
char *ReadLink(const char *FileName); ///< returns a new string allocated on the heap, which the caller must delete (or NULL in case of an error)
bool SpinUpDisk(const char *FileName);
diff --git a/vdr.c b/vdr.c
index f5896ca..2e097ba 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.tvdr.de
*
- * $Id: vdr.c 2.38 2012/09/01 13:30:19 kls Exp $
+ * $Id: vdr.c 2.40 2012/09/24 12:43:04 kls Exp $
*/
#include <getopt.h>
@@ -466,7 +466,8 @@ int main(int argc, char *argv[])
" -p PORT, --port=PORT use PORT for SVDRP (default: %d)\n"
" 0 turns off SVDRP\n"
" -P OPT, --plugin=OPT load a plugin defined by the given options\n"
- " -r CMD, --record=CMD call CMD before and after a recording\n"
+ " -r CMD, --record=CMD call CMD before and after a recording, and after\n"
+ " a recording has been edited or deleted\n"
" --resdir=DIR read resource files from DIR (default: %s)\n"
" -s CMD, --shutdown=CMD call CMD to shutdown the computer\n"
" --split split edited files at the editing marks (only\n"
@@ -1294,6 +1295,8 @@ int main(int argc, char *argv[])
PluginManager.Housekeeping();
}
+ ReportEpgBugFixStats();
+
// Main thread hooks of plugins:
PluginManager.MainThreadHook();
}
@@ -1330,7 +1333,7 @@ Exit:
EpgHandlers.Clear();
PluginManager.Shutdown(true);
cSchedules::Cleanup(true);
- ReportEpgBugFixStats();
+ ReportEpgBugFixStats(true);
if (WatchdogTimeout > 0)
dsyslog("max. latency time %d seconds", MaxLatencyTime);
if (LastSignal)
diff --git a/videodir.c b/videodir.c
index c64a5c6..d39ab05 100644
--- a/videodir.c
+++ b/videodir.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: videodir.c 2.3 2012/09/01 10:57:44 kls Exp $
+ * $Id: videodir.c 2.4 2012/09/30 12:06:33 kls Exp $
*/
#include "videodir.h"
@@ -229,11 +229,11 @@ cString PrefixVideoFileName(const char *FileName, char Prefix)
return NULL;
}
-void RemoveEmptyVideoDirectories(void)
+void RemoveEmptyVideoDirectories(const char *IgnoreFiles[])
{
cVideoDirectory Dir;
do {
- RemoveEmptyDirectories(Dir.Name());
+ RemoveEmptyDirectories(Dir.Name(), false, IgnoreFiles);
} while (Dir.Next());
}
diff --git a/videodir.h b/videodir.h
index 40d7b05..a25ac31 100644
--- a/videodir.h
+++ b/videodir.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: videodir.h 2.2 2012/09/01 10:57:07 kls Exp $
+ * $Id: videodir.h 2.3 2012/09/30 11:01:15 kls Exp $
*/
#ifndef __VIDEODIR_H
@@ -23,7 +23,7 @@ bool RemoveVideoFile(const char *FileName);
bool VideoFileSpaceAvailable(int SizeMB);
int VideoDiskSpace(int *FreeMB = NULL, int *UsedMB = NULL); // returns the used disk space in percent
cString PrefixVideoFileName(const char *FileName, char Prefix);
-void RemoveEmptyVideoDirectories(void);
+void RemoveEmptyVideoDirectories(const char *IgnoreFiles[] = NULL);
bool IsOnVideoDirectoryFileSystem(const char *FileName);
class cVideoDiskUsage {