mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 1.7.31
VDR developer version 1.7.31 is now available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.31.tar.bz2 A 'diff' against the previous version is available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.30-1.7.31.diff MD5 checksums: a3edd18a352465dd26c97c1990f7bcfd vdr-1.7.31.tar.bz2 32ff98697d1b383478a6e1932e4afc9c vdr-1.7.30-1.7.31.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. The default skin "LCARS" displays the signal strengths and qualities of all devices in its main menu. For devices that have an stb0899 frontend chip (like the TT-budget S2-3200) retrieving this information from the driver is rather slow, which results in a sluggish response to user input in the main menu. To speed this up you may want to apply the patches from ftp://ftp.tvdr.de/vdr/Developer/Driver-Patches to the LinuxDVB driver source. The changes since version 1.7.30: - 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 Lehtimäki). - 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 Sören Moch). - Fixed sorting folders before recordings in case of UTF-8 (thanks to Sören 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".
This commit is contained in:
parent
d34026c18b
commit
fa6845328c
27
CONTRIBUTORS
27
CONTRIBUTORS
@ -2312,6 +2312,8 @@ Pekka Mauno <pekka.mauno@iki.fi>
|
|||||||
|
|
||||||
Alexander Wenzel <hondansx@gmx.de>
|
Alexander Wenzel <hondansx@gmx.de>
|
||||||
for fixing the shutdown timeout
|
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>
|
Jan Lenz <email@JanLenz.de>
|
||||||
for reporting a bug in deleting recordings that have been removed externally when
|
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 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
|
for suggesting to move setting LC_NUMERIC further up to make sure any floating point
|
||||||
numbers use a decimal 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>
|
Helge Lenz <h.lenz@gmx.de>
|
||||||
for reporting a bug in setting the 'Delta' parameter when calling the shutdown
|
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
|
for adding support for automatically selecting subtitles when playing old PES
|
||||||
recordings made with the subtitles plugin
|
recordings made with the subtitles plugin
|
||||||
for pointing out -Werror=...
|
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>
|
Antti Hartikainen <ami+vdr@ah.fi>
|
||||||
for updating 'S13E' in 'sources.conf'
|
for updating 'S13E' in 'sources.conf'
|
||||||
@ -2739,6 +2741,7 @@ Francesco Saverio Schiavarelli <fschiava@libero.it>
|
|||||||
Matti Lehtimäki <matti.lehtimaki@gmail.com>
|
Matti Lehtimäki <matti.lehtimaki@gmail.com>
|
||||||
for implementing the setup option "Miscellaneous/Channels wrap"
|
for implementing the setup option "Miscellaneous/Channels wrap"
|
||||||
for reporting a missing change from -O2 to -O3 in Make.config.template
|
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 Austermühle <au@hcsd.de>
|
Stephan Austermühle <au@hcsd.de>
|
||||||
for suggesting to flush the file in cSafeFile::Close()
|
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
|
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
|
for reporting a sluggish response when manipulating editing marks while a cutting
|
||||||
thread is running
|
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>
|
Christian Ruppert <idl0r@gentoo.org>
|
||||||
for some improvements to the Makefiles
|
for some improvements to the Makefiles
|
||||||
@ -2939,3 +2946,17 @@ Dennis Bendlin <dennisbendlin@online.de>
|
|||||||
|
|
||||||
Oliver Schinagl <oliver@schinagl.nl>
|
Oliver Schinagl <oliver@schinagl.nl>
|
||||||
for a patch that was used to implement the setup options "OSD/Color key [0123]"
|
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
|
||||||
|
|
||||||
|
Sören 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
|
||||||
|
43
HISTORY
43
HISTORY
@ -6193,7 +6193,7 @@ Video Disk Recorder Revision History
|
|||||||
(thanks to Andreas Schaefers).
|
(thanks to Andreas Schaefers).
|
||||||
- Fixed references to old *.vdr file names in MANUAL (reported by Arthur Konovalov).
|
- Fixed references to old *.vdr file names in MANUAL (reported by Arthur Konovalov).
|
||||||
- Reverted "Removed limitation to PAL resolution from SPU handling" because it
|
- 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
|
- Fixed the default value for "Pause key handling" in the MANUAL (reported by
|
||||||
Diego Pierotto).
|
Diego Pierotto).
|
||||||
|
|
||||||
@ -6666,7 +6666,7 @@ Video Disk Recorder Revision History
|
|||||||
Udo Richter for suggesting the fix).
|
Udo Richter for suggesting the fix).
|
||||||
- Added a mechanism to defer timer handling in case of problems (reported by
|
- Added a mechanism to defer timer handling in case of problems (reported by
|
||||||
Frank Niederwipper).
|
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
|
(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).
|
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
|
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).
|
own way of retrieving section filter data (thanks to Deti Fliegl).
|
||||||
- The new function cDevice::HasInternalCam() can be implemented by devices that
|
- The new function cDevice::HasInternalCam() can be implemented by devices that
|
||||||
provide encrypted channels in an already decrypted form, without requiring explicit
|
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
|
- VDR can now be built according to the FHS ("File system Hierarchy Standard") by
|
||||||
activating the line
|
activating the line
|
||||||
#USEFHS = 1
|
#USEFHS = 1
|
||||||
@ -7234,3 +7234,40 @@ Video Disk Recorder Revision History
|
|||||||
Authors of plugins that implement skins may want to adapt their SetButtons()
|
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
|
function in order to make use of this new feature. See, for instance, the function
|
||||||
cSkinClassicDisplayMenu::SetButtons() in skinclassic.c for details.
|
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
|
||||||
|
Lehtimäki).
|
||||||
|
- 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
|
||||||
|
Sören Moch).
|
||||||
|
- Fixed sorting folders before recordings in case of UTF-8 (thanks to Sören 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".
|
||||||
|
8
INSTALL
8
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
|
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
|
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
|
The program will be called with two or three (in case of "edited") string
|
||||||
parameters. The first parameter is one of
|
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
|
before if this is *before* a recording starts
|
||||||
after if this is *after* a recording has finished
|
after if this is *after* a recording has finished
|
||||||
edited if this is after a recording has been *edited*
|
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
|
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).
|
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
|
In the "edited" case it will be the name of the edited version (second
|
||||||
parameter) and the name of the source version (third parameter).
|
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
|
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
|
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 "Edited recording $2"
|
||||||
echo "Source recording $3"
|
echo "Source recording $3"
|
||||||
;;
|
;;
|
||||||
|
deleted)
|
||||||
|
echo "Deleted recording $2"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "ERROR: unknown state: $1"
|
echo "ERROR: unknown state: $1"
|
||||||
;;
|
;;
|
||||||
|
5
MANUAL
5
MANUAL
@ -837,6 +837,11 @@ Version 1.6
|
|||||||
Default is 180 minutes (3 hours). The stop time of an
|
Default is 180 minutes (3 hours). The stop time of an
|
||||||
instant recording can be modified at any time by editing
|
instant recording can be modified at any time by editing
|
||||||
the respective timer in the "Timers" menu.
|
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
|
Max. video file size = 2000
|
||||||
The maximum size of a single recorded video file in MB.
|
The maximum size of a single recorded video file in MB.
|
||||||
|
4
config.c
4
config.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "config.h"
|
||||||
@ -383,7 +383,7 @@ cSetup::cSetup(void)
|
|||||||
MenuKeyCloses = 0;
|
MenuKeyCloses = 0;
|
||||||
MarkInstantRecord = 1;
|
MarkInstantRecord = 1;
|
||||||
strcpy(NameInstantRecord, "TITLE EPISODE");
|
strcpy(NameInstantRecord, "TITLE EPISODE");
|
||||||
InstantRecordTime = 180;
|
InstantRecordTime = DEFINSTRECTIME;
|
||||||
LnbSLOF = 11700;
|
LnbSLOF = 11700;
|
||||||
LnbFrequLo = 9750;
|
LnbFrequLo = 9750;
|
||||||
LnbFrequHi = 10600;
|
LnbFrequHi = 10600;
|
||||||
|
11
config.h
11
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __CONFIG_H
|
||||||
@ -22,13 +22,13 @@
|
|||||||
|
|
||||||
// VDR's own version number:
|
// VDR's own version number:
|
||||||
|
|
||||||
#define VDRVERSION "1.7.30"
|
#define VDRVERSION "1.7.31"
|
||||||
#define VDRVERSNUM 10730 // Version * 10000 + Major * 100 + Minor
|
#define VDRVERSNUM 10731 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// The plugin API's version number:
|
// The plugin API's version number:
|
||||||
|
|
||||||
#define APIVERSION "1.7.30"
|
#define APIVERSION "1.7.31"
|
||||||
#define APIVERSNUM 10730 // Version * 10000 + Major * 100 + Minor
|
#define APIVERSNUM 10731 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// When loading plugins, VDR searches them by their APIVERSION, which
|
// When loading plugins, VDR searches them by their APIVERSION, which
|
||||||
// may be smaller than VDRVERSION in case there have been no changes to
|
// 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 TRANSFERPRIORITY (LIVEPRIORITY - 1) // priority used for actual local Transfer Mode
|
||||||
#define IDLEPRIORITY (MINPRIORITY - 1) // priority of an idle device
|
#define IDLEPRIORITY (MINPRIORITY - 1) // priority of an idle device
|
||||||
#define MAXLIFETIME 99
|
#define MAXLIFETIME 99
|
||||||
|
#define DEFINSTRECTIME 180 // default instant recording time (minutes)
|
||||||
|
|
||||||
#define MINOSDWIDTH 480
|
#define MINOSDWIDTH 480
|
||||||
#define MAXOSDWIDTH 1920
|
#define MAXOSDWIDTH 1920
|
||||||
|
18
cutter.c
18
cutter.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "cutter.h"
|
||||||
@ -88,12 +88,28 @@ void cCuttingThread::Action(void)
|
|||||||
bool CheckForSeamlessStream = false;
|
bool CheckForSeamlessStream = false;
|
||||||
bool LastMark = false;
|
bool LastMark = false;
|
||||||
bool cutIn = true;
|
bool cutIn = true;
|
||||||
|
bool suspensionLogged = false;
|
||||||
while (Running()) {
|
while (Running()) {
|
||||||
uint16_t FileNumber;
|
uint16_t FileNumber;
|
||||||
off_t FileOffset;
|
off_t FileOffset;
|
||||||
int Length;
|
int Length;
|
||||||
bool Independent;
|
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:
|
// Make sure there is enough disk space:
|
||||||
|
|
||||||
AssertFreeDiskSpace(-1);
|
AssertFreeDiskSpace(-1);
|
||||||
|
3
device.c
3
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "device.h"
|
||||||
@ -1721,6 +1721,7 @@ cTSBuffer::cTSBuffer(int File, int Size, int CardIndex)
|
|||||||
delivered = false;
|
delivered = false;
|
||||||
ringBuffer = new cRingBufferLinear(Size, TS_SIZE, true, "TS");
|
ringBuffer = new cRingBufferLinear(Size, TS_SIZE, true, "TS");
|
||||||
ringBuffer->SetTimeouts(100, 100);
|
ringBuffer->SetTimeouts(100, 100);
|
||||||
|
ringBuffer->SetIoThrottle();
|
||||||
Start();
|
Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "dvbdevice.h"
|
||||||
@ -1540,7 +1540,7 @@ bool cDvbDevice::OpenDvr(void)
|
|||||||
CloseDvr();
|
CloseDvr();
|
||||||
fd_dvr = DvbOpen(DEV_DVB_DVR, adapter, frontend, O_RDONLY | O_NONBLOCK, true);
|
fd_dvr = DvbOpen(DEV_DVB_DVR, adapter, frontend, O_RDONLY | O_NONBLOCK, true);
|
||||||
if (fd_dvr >= 0)
|
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;
|
return fd_dvr >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
134
epg.c
134
epg.c
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* 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"
|
#include "epg.h"
|
||||||
@ -18,6 +18,7 @@
|
|||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
|
|
||||||
#define RUNNINGSTATUSTIMEOUT 30 // seconds before the running status is considered unknown
|
#define RUNNINGSTATUSTIMEOUT 30 // seconds before the running status is considered unknown
|
||||||
|
#define EPGDATAWRITEDELTA 600 // seconds between writing the epg.data file
|
||||||
|
|
||||||
// --- tComponent ------------------------------------------------------------
|
// --- tComponent ------------------------------------------------------------
|
||||||
|
|
||||||
@ -581,9 +582,20 @@ static void EpgBugFixStat(int Number, tChannelID ChannelID)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReportEpgBugFixStats(bool Reset)
|
void ReportEpgBugFixStats(bool Force)
|
||||||
{
|
{
|
||||||
if (Setup.EPGBugfixLevel > 0) {
|
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;
|
bool GotHits = false;
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
for (int i = 0; i < MAXEPGBUGFIXSTATS; i++) {
|
for (int i = 0; i < MAXEPGBUGFIXSTATS; i++) {
|
||||||
@ -622,14 +634,33 @@ void ReportEpgBugFixStats(bool Reset)
|
|||||||
if (*buffer)
|
if (*buffer)
|
||||||
dsyslog("%s", buffer);
|
dsyslog("%s", buffer);
|
||||||
}
|
}
|
||||||
if (Reset)
|
p->hits = p->n = 0;
|
||||||
p->hits = p->n = 0;
|
|
||||||
}
|
}
|
||||||
if (GotHits)
|
if (GotHits)
|
||||||
dsyslog("=====================");
|
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)
|
void cEvent::FixEpgBugs(void)
|
||||||
{
|
{
|
||||||
if (isempty(title)) {
|
if (isempty(title)) {
|
||||||
@ -839,15 +870,10 @@ Final:
|
|||||||
strreplace(p->description, '\n', ' ');
|
strreplace(p->description, '\n', ' ');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* TODO adapt to UTF-8
|
|
||||||
// Same for control characters:
|
// Same for control characters:
|
||||||
strreplace(title, '\x86', ' ');
|
StripControlCharacters(title);
|
||||||
strreplace(title, '\x87', ' ');
|
StripControlCharacters(shortText);
|
||||||
strreplace(shortText, '\x86', ' ');
|
StripControlCharacters(description);
|
||||||
strreplace(shortText, '\x87', ' ');
|
|
||||||
strreplace(description, '\x86', ' ');
|
|
||||||
strreplace(description, '\x87', ' ');
|
|
||||||
XXX*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- cSchedule -------------------------------------------------------------
|
// --- cSchedule -------------------------------------------------------------
|
||||||
@ -1109,6 +1135,47 @@ bool cSchedule::Read(FILE *f, cSchedules *Schedules)
|
|||||||
return false;
|
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::cSchedulesLock(bool WriteLock, int TimeoutMs)
|
cSchedulesLock::cSchedulesLock(bool WriteLock, int TimeoutMs)
|
||||||
@ -1126,7 +1193,6 @@ cSchedulesLock::~cSchedulesLock()
|
|||||||
|
|
||||||
cSchedules cSchedules::schedules;
|
cSchedules cSchedules::schedules;
|
||||||
char *cSchedules::epgDataFileName = NULL;
|
char *cSchedules::epgDataFileName = NULL;
|
||||||
time_t cSchedules::lastCleanup = time(NULL);
|
|
||||||
time_t cSchedules::lastDump = time(NULL);
|
time_t cSchedules::lastDump = time(NULL);
|
||||||
time_t cSchedules::modified = 0;
|
time_t cSchedules::modified = 0;
|
||||||
|
|
||||||
@ -1152,28 +1218,13 @@ void cSchedules::Cleanup(bool Force)
|
|||||||
if (Force)
|
if (Force)
|
||||||
lastDump = 0;
|
lastDump = 0;
|
||||||
time_t now = time(NULL);
|
time_t now = time(NULL);
|
||||||
struct tm tm_r;
|
if (now - lastDump > EPGDATAWRITEDELTA) {
|
||||||
struct tm *ptm = localtime_r(&now, &tm_r);
|
if (epgDataFileName) {
|
||||||
if (now - lastCleanup > 3600) {
|
if (Force)
|
||||||
isyslog("cleaning up schedules data");
|
EpgDataWriter.Perform();
|
||||||
cSchedulesLock SchedulesLock(true, 1000);
|
else if (!EpgDataWriter.Active())
|
||||||
cSchedules *s = (cSchedules *)Schedules(SchedulesLock);
|
EpgDataWriter.Start();
|
||||||
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();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
LOG_ERROR;
|
|
||||||
lastDump = now;
|
lastDump = now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1207,8 +1258,23 @@ bool cSchedules::Dump(FILE *f, const char *Prefix, eDumpMode DumpMode, time_t At
|
|||||||
cSchedulesLock SchedulesLock;
|
cSchedulesLock SchedulesLock;
|
||||||
cSchedules *s = (cSchedules *)Schedules(SchedulesLock);
|
cSchedules *s = (cSchedules *)Schedules(SchedulesLock);
|
||||||
if (s) {
|
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))
|
for (cSchedule *p = s->First(); p; p = s->Next(p))
|
||||||
p->Dump(f, Prefix, DumpMode, AtTime);
|
p->Dump(f, Prefix, DumpMode, AtTime);
|
||||||
|
if (sf) {
|
||||||
|
sf->Close();
|
||||||
|
delete sf;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
7
epg.h
7
epg.h
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* 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
|
#ifndef __EPG_H
|
||||||
@ -193,7 +193,6 @@ private:
|
|||||||
cRwLock rwlock;
|
cRwLock rwlock;
|
||||||
static cSchedules schedules;
|
static cSchedules schedules;
|
||||||
static char *epgDataFileName;
|
static char *epgDataFileName;
|
||||||
static time_t lastCleanup;
|
|
||||||
static time_t lastDump;
|
static time_t lastDump;
|
||||||
static time_t modified;
|
static time_t modified;
|
||||||
public:
|
public:
|
||||||
@ -207,7 +206,7 @@ public:
|
|||||||
static void Cleanup(bool Force = false);
|
static void Cleanup(bool Force = false);
|
||||||
static void ResetVersions(void);
|
static void ResetVersions(void);
|
||||||
static bool ClearAll(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);
|
static bool Read(FILE *f = NULL);
|
||||||
cSchedule *AddSchedule(tChannelID ChannelID);
|
cSchedule *AddSchedule(tChannelID ChannelID);
|
||||||
const cSchedule *GetSchedule(tChannelID ChannelID) const;
|
const cSchedule *GetSchedule(tChannelID ChannelID) const;
|
||||||
@ -220,7 +219,7 @@ public:
|
|||||||
virtual void Action(void);
|
virtual void Action(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
void ReportEpgBugFixStats(bool Reset = false);
|
void ReportEpgBugFixStats(bool Force = false);
|
||||||
|
|
||||||
class cEpgHandler : public cListObject {
|
class cEpgHandler : public cListObject {
|
||||||
public:
|
public:
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (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) {
|
if (l == 2 && Move) {
|
||||||
memmove(p, p + 1, len - 1); // we also copy the terminating 0!
|
memmove(p, p + 1, len - 1); // we also copy the terminating 0!
|
||||||
|
len -= 1;
|
||||||
l = 1;
|
l = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -480,6 +481,7 @@ void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int si
|
|||||||
if (*p == 0x86 || *p == 0x87) {
|
if (*p == 0x86 || *p == 0x87) {
|
||||||
IsShortName += (*p == 0x86) ? 1 : -1;
|
IsShortName += (*p == 0x86) ? 1 : -1;
|
||||||
memmove(to, to + l, len - l + 1); // we also copy the terminating 0!
|
memmove(to, to + l, len - l + 1); // we also copy the terminating 0!
|
||||||
|
len -= l;
|
||||||
l = 0;
|
l = 0;
|
||||||
}
|
}
|
||||||
if (l && IsShortName) {
|
if (l && IsShortName) {
|
||||||
|
4
menu.c
4
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "menu.h"
|
||||||
@ -3118,7 +3118,7 @@ cMenuSetupRecord::cMenuSetupRecord(void)
|
|||||||
Add(new cMenuEditIntItem( tr("Setup.Recording$VPS margin (s)"), &data.VpsMargin, 0));
|
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 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 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 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 cMenuEditBoolItem(tr("Setup.Recording$Split edited files"), &data.SplitEditedFiles));
|
||||||
Add(new cMenuEditStraItem(tr("Setup.Recording$Delete timeshift recording"),&data.DelTimeshiftRec, 3, delTimeshiftRecTexts));
|
Add(new cMenuEditStraItem(tr("Setup.Recording$Delete timeshift recording"),&data.DelTimeshiftRec, 3, delTimeshiftRecTexts));
|
||||||
|
8
po/ar.po
8
po/ar.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.0\n"
|
"Project-Id-Version: VDR 1.7.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-10-16 11:16-0400\n"
|
||||||
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
|
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
|
||||||
"Language-Team: Arabic <ar@li.org>\n"
|
"Language-Team: Arabic <ar@li.org>\n"
|
||||||
@ -1102,6 +1102,9 @@ msgstr "اسم التسجيل الفورى"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "مدة التسجيل الفورى بالدقيقة"
|
msgstr "مدة التسجيل الفورى بالدقيقة"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "اقصى حجم لملف الفيديو ب م ب"
|
msgstr "اقصى حجم لملف الفيديو ب م ب"
|
||||||
|
|
||||||
@ -1280,6 +1283,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "لا يمكن قفل الحاسوب الرمز s لم يحدد"
|
msgstr "لا يمكن قفل الحاسوب الرمز s لم يحدد"
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
||||||
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
||||||
"Language-Team: Catalan <vdr@linuxtv.org>\n"
|
"Language-Team: Catalan <vdr@linuxtv.org>\n"
|
||||||
@ -1080,6 +1080,9 @@ msgstr "Anomenar gravacions instant
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Temps de gravació instantània (min)"
|
msgstr "Temps de gravació instantània (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Mida màxima de l'arxiu (MB)"
|
msgstr "Mida màxima de l'arxiu (MB)"
|
||||||
|
|
||||||
@ -1255,6 +1258,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "No puc apagar, falta la opció -s !"
|
msgstr "No puc apagar, falta la opció -s !"
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.14\n"
|
"Project-Id-Version: VDR 1.7.14\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2010-05-06 11:00+0200\n"
|
||||||
"Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
|
"Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
|
||||||
"Language-Team: Czech <vdr@linuxtv.org>\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)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Délka okamžitého nahrávání (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)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maximální velikost nahrávky (MB)"
|
msgstr "Maximální velikost nahrávky (MB)"
|
||||||
|
|
||||||
@ -1254,6 +1257,9 @@ msgstr "Generování index souboru"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Generování index souboru dokončeno"
|
msgstr "Generování index souboru dokončeno"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Vypnutí není možné - chybí volba '-s'!"
|
msgstr "Vypnutí není možné - chybí volba '-s'!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
|
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
|
||||||
"Language-Team: Danish <vdr@linuxtv.org>\n"
|
"Language-Team: Danish <vdr@linuxtv.org>\n"
|
||||||
@ -1077,6 +1077,9 @@ msgstr "Navngiv direkte optagelse"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Længde af direkte optagelse (min)"
|
msgstr "Længde af direkte optagelse (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Max. video filstørrelse (MB)"
|
msgstr "Max. video filstørrelse (MB)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Kan ikke slukke - parameter '-s' ikke angivet!"
|
msgstr "Kan ikke slukke - parameter '-s' ikke angivet!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2010-01-16 16:46+0100\n"
|
||||||
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
|
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
|
||||||
"Language-Team: German <vdr@linuxtv.org>\n"
|
"Language-Team: German <vdr@linuxtv.org>\n"
|
||||||
@ -1077,6 +1077,9 @@ msgstr "Direktaufzeichnung benennen"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Dauer der Direktaufzeichnung (min)"
|
msgstr "Dauer der Direktaufzeichnung (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr "laufende Sendung"
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Max. Videodateigröße (MB)"
|
msgstr "Max. Videodateigröße (MB)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr "Index-Datei wird regeneriert"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Regenerierung der Index-Datei abgeschlossen"
|
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!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Ausschalten unmöglich - Option '-s' fehlt!"
|
msgstr "Ausschalten unmöglich - Option '-s' fehlt!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
|
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
|
||||||
"Language-Team: Greek <vdr@linuxtv.org>\n"
|
"Language-Team: Greek <vdr@linuxtv.org>\n"
|
||||||
@ -1077,6 +1077,9 @@ msgstr "
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "ÄéÜñêåéá óôãìéáßáò åããñáöÞò (ëåðôÜ)"
|
msgstr "ÄéÜñêåéá óôãìéáßáò åããñáöÞò (ëåðôÜ)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "ÌÝãéóôï ìÝãåèïò áñ÷åßïõ (MB)"
|
msgstr "ÌÝãéóôï ìÝãåèïò áñ÷åßïõ (MB)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Áäýíáôïí íá ãßíåé ôåñìáôéóìüò. Áíýðáñêôç ç ðáñÜìåôñïò '-s'!"
|
msgstr "Áäýíáôïí íá ãßíåé ôåñìáôéóìüò. Áíýðáñêôç ç ðáñÜìåôñïò '-s'!"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
||||||
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
||||||
"Language-Team: Spanish <vdr@linuxtv.org>\n"
|
"Language-Team: Spanish <vdr@linuxtv.org>\n"
|
||||||
@ -1078,6 +1078,9 @@ msgstr "Nombrar grabaciones inmediatas"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Tiempo de grabación inmediata (min)"
|
msgstr "Tiempo de grabación inmediata (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Tamaño máximo de fichero (MB)"
|
msgstr "Tamaño máximo de fichero (MB)"
|
||||||
|
|
||||||
@ -1253,6 +1256,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "¡No se puede apagar - falta el parámetro '-s'!"
|
msgstr "¡No se puede apagar - falta el parámetro '-s'!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
|
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
|
||||||
"Language-Team: Estonian <vdr@linuxtv.org>\n"
|
"Language-Team: Estonian <vdr@linuxtv.org>\n"
|
||||||
@ -1077,6 +1077,9 @@ msgstr "Kiirsalvestuse nimi"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Kiirsalvestuse kestus (min)"
|
msgstr "Kiirsalvestuse kestus (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maks. failisuurus (MB)"
|
msgstr "Maks. failisuurus (MB)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr "Indeksfaili regenereerimine"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Indeksfaili regenereerimine lõpetatud"
|
msgstr "Indeksfaili regenereerimine lõpetatud"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Väljalülitamine nurjus - '-s' parameeter puudub!"
|
msgstr "Väljalülitamine nurjus - '-s' parameeter puudub!"
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
|
||||||
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
||||||
"Language-Team: Finnish <vdr@linuxtv.org>\n"
|
"Language-Team: Finnish <vdr@linuxtv.org>\n"
|
||||||
@ -1080,6 +1080,9 @@ msgstr "Nimeä pikatallenne"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Pikatallennuksen kesto (min)"
|
msgstr "Pikatallennuksen kesto (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr "nykyinen tapahtuma"
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Suurin tiedostokoko (Mt)"
|
msgstr "Suurin tiedostokoko (Mt)"
|
||||||
|
|
||||||
@ -1255,6 +1258,9 @@ msgstr "Luodaan indeksitiedosto uudelleen"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Indeksitiedosto valmistui"
|
msgstr "Indeksitiedosto valmistui"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Sammutus ei onnistu - '-s' parametri puuttuu!"
|
msgstr "Sammutus ei onnistu - '-s' parametri puuttuu!"
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
|
||||||
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
|
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
|
||||||
"Language-Team: French <vdr@linuxtv.org>\n"
|
"Language-Team: French <vdr@linuxtv.org>\n"
|
||||||
@ -1083,6 +1083,9 @@ msgstr "Noms enregistr. imm
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Durée enregistr. immédiat (min)"
|
msgstr "Durée enregistr. immédiat (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Taille maxi des fichiers (Mo)"
|
msgstr "Taille maxi des fichiers (Mo)"
|
||||||
|
|
||||||
@ -1258,6 +1261,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Arrêt impossible - option '-s' absente !"
|
msgstr "Arrêt impossible - option '-s' absente !"
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
|
||||||
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
|
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
|
||||||
"Language-Team: Croatian <vdr@linuxtv.org>\n"
|
"Language-Team: Croatian <vdr@linuxtv.org>\n"
|
||||||
@ -1079,6 +1079,9 @@ msgstr "Imenuj direktno snimanje"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Trajanje direktnog snimanja (min)"
|
msgstr "Trajanje direktnog snimanja (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maksimalna velièina datoteke (MB)"
|
msgstr "Maksimalna velièina datoteke (MB)"
|
||||||
|
|
||||||
@ -1254,6 +1257,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Ga¹enje nemoguæe - nedostaje opcija '-s'!"
|
msgstr "Ga¹enje nemoguæe - nedostaje opcija '-s'!"
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2012-01-02 11:54+0200\n"
|
||||||
"Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
|
"Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
|
||||||
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
|
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
|
||||||
@ -1081,6 +1081,9 @@ msgstr "Direktfelv
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Direktfelvétel idõtartama (perc)"
|
msgstr "Direktfelvétel idõtartama (perc)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Max. video file méret (MB)"
|
msgstr "Max. video file méret (MB)"
|
||||||
|
|
||||||
@ -1256,6 +1259,9 @@ msgstr "Az index file
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Index file újragenerálása kész."
|
msgstr "Index file újragenerálása kész."
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "A leállítás nem lehetséges - Opció '-s' hiányzik!"
|
msgstr "A leállítás nem lehetséges - Opció '-s' hiányzik!"
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2012-06-06 22:50+0100\n"
|
||||||
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
||||||
"Language-Team: Italian <vdr@linuxtv.org>\n"
|
"Language-Team: Italian <vdr@linuxtv.org>\n"
|
||||||
@ -1084,6 +1084,9 @@ msgstr "Nome reg. immediata"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Durata reg. immediata (min)"
|
msgstr "Durata reg. immediata (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Dim. massima file video (MB)"
|
msgstr "Dim. massima file video (MB)"
|
||||||
|
|
||||||
@ -1259,6 +1262,9 @@ msgstr "Rigenerazione file indice"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Rigenerazione file indice completata"
|
msgstr "Rigenerazione file indice completata"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Impossibile spegnere - parametro '-s' non assegnato!"
|
msgstr "Impossibile spegnere - parametro '-s' non assegnato!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.16\n"
|
"Project-Id-Version: VDR 1.7.16\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2010-10-30 11:55+0200\n"
|
||||||
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
||||||
"Language-Team: Lithuanian <vdr@linuxtv.org>\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)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Rankiniu būdu vykdomo įrašo laikas (min)"
|
msgstr "Rankiniu būdu vykdomo įrašo laikas (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maks. video failo dydis (MB)"
|
msgstr "Maks. video failo dydis (MB)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr "Pergeneruojamas index failas"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Index failo pergeneravimas baigtas"
|
msgstr "Index failo pergeneravimas baigtas"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Sistemos negalima išjungti, nes starto metu nebuvo komandinėj eilutėj paduota savybė '-s'!"
|
msgstr "Sistemos negalima išjungti, nes starto metu nebuvo komandinėj eilutėj paduota savybė '-s'!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR-1.7.14\n"
|
"Project-Id-Version: VDR-1.7.14\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2010-03-11 00:54+0100\n"
|
||||||
"Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
|
"Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
|
||||||
"Language-Team: Macedonian <en@li.org>\n"
|
"Language-Team: Macedonian <en@li.org>\n"
|
||||||
@ -1078,6 +1078,9 @@ msgstr "Име на директно снимање"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Траење на директно снимање (мин)"
|
msgstr "Траење на директно снимање (мин)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Максимална големина на датотека (MB)"
|
msgstr "Максимална големина на датотека (MB)"
|
||||||
|
|
||||||
@ -1253,6 +1256,9 @@ msgstr "Регенерирање на индекс датотека"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Регенерирањето на индексот заврши"
|
msgstr "Регенерирањето на индексот заврши"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Невозможно гаснење - недостасува опцијата '-s'!"
|
msgstr "Невозможно гаснење - недостасува опцијата '-s'!"
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
|
||||||
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
|
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
|
||||||
"Language-Team: Dutch <vdr@linuxtv.org>\n"
|
"Language-Team: Dutch <vdr@linuxtv.org>\n"
|
||||||
@ -1081,6 +1081,9 @@ msgstr "Naam direkt-opname"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Duur van de directe opname (min)"
|
msgstr "Duur van de directe opname (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maximale omvang video file (MB)"
|
msgstr "Maximale omvang video file (MB)"
|
||||||
|
|
||||||
@ -1256,6 +1259,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Shutdown onmogelijk - Optie '-s' ontbreekt!"
|
msgstr "Shutdown onmogelijk - Optie '-s' ontbreekt!"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
|
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
|
||||||
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
|
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
|
||||||
@ -1078,6 +1078,9 @@ msgstr "Navngi direkteopptak"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maksimal størrelse på videofiler (MB)"
|
msgstr "Maksimal størrelse på videofiler (MB)"
|
||||||
|
|
||||||
@ -1253,6 +1256,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Kan ikke slå av - startet uten parameteret '-s'!"
|
msgstr "Kan ikke slå av - startet uten parameteret '-s'!"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
|
||||||
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
|
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
|
||||||
"Language-Team: Polish <vdr@linuxtv.org>\n"
|
"Language-Team: Polish <vdr@linuxtv.org>\n"
|
||||||
@ -1078,6 +1078,9 @@ msgstr "Nazywaj natychm. nagrywanie"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Czas natychm. nagrywania (min)"
|
msgstr "Czas natychm. nagrywania (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maksymalny rozmiar pliku (MB)"
|
msgstr "Maksymalny rozmiar pliku (MB)"
|
||||||
|
|
||||||
@ -1253,6 +1256,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Nie mo¿na wy³±czyæ - nie podano opcji '-s'!"
|
msgstr "Nie mo¿na wy³±czyæ - nie podano opcji '-s'!"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.15\n"
|
"Project-Id-Version: VDR 1.7.15\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2010-03-28 22:49+0100\n"
|
||||||
"Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
|
"Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
|
||||||
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
|
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
|
||||||
@ -1078,6 +1078,9 @@ msgstr "Nome da grava
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Validade da gravação instantânea (min)"
|
msgstr "Validade da gravação instantânea (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Tamanho máximo do ficheiro de vídeo (MB)"
|
msgstr "Tamanho máximo do ficheiro de vídeo (MB)"
|
||||||
|
|
||||||
@ -1253,6 +1256,9 @@ msgstr "A regenerar
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Regeneração do índice do ficheiro completa"
|
msgstr "Regeneração do índice do ficheiro completa"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Impossível desligar - falta o parâmetro '-s'!"
|
msgstr "Impossível desligar - falta o parâmetro '-s'!"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.12\n"
|
"Project-Id-Version: VDR 1.7.12\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2011-03-10 23:52+0100\n"
|
||||||
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
|
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
|
||||||
"Language-Team: Romanian <vdr@linuxtv.org>\n"
|
"Language-Team: Romanian <vdr@linuxtv.org>\n"
|
||||||
@ -1080,6 +1080,9 @@ msgstr "Nume
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Timpul de înregistare imediatã (min)"
|
msgstr "Timpul de înregistare imediatã (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Dimensiune maximã a fiºierului video (MB)"
|
msgstr "Dimensiune maximã a fiºierului video (MB)"
|
||||||
|
|
||||||
@ -1255,6 +1258,9 @@ msgstr "Generez index"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Generarea indexului s-a incheiat"
|
msgstr "Generarea indexului s-a incheiat"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Nu pot închide - vezi opþiunea '-s'"
|
msgstr "Nu pot închide - vezi opþiunea '-s'"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
|
||||||
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
||||||
"Language-Team: Russian <vdr@linuxtv.org>\n"
|
"Language-Team: Russian <vdr@linuxtv.org>\n"
|
||||||
@ -1078,6 +1078,9 @@ msgstr "
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "´ÛØâÕÛìÝÞáâì àãçÝÞÙ ×ÐßØáØ (ÜØÝ)"
|
msgstr "´ÛØâÕÛìÝÞáâì àãçÝÞÙ ×ÐßØáØ (ÜØÝ)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "¼ÐÚá. àÐ×ÜÕà ÒØÔÕÞäÐÙÛÐ (¼Ñ)"
|
msgstr "¼ÐÚá. àÐ×ÜÕà ÒØÔÕÞäÐÙÛÐ (¼Ñ)"
|
||||||
|
|
||||||
@ -1253,6 +1256,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "²ëÚÛîçÕÝØÕ ÝÕÒÞ×ÜÞÖÝÞ - ÝÕ ×ÐÔÐÝ ßÐàÐÜÕâà '-s'!"
|
msgstr "²ëÚÛîçÕÝØÕ ÝÕÒÞ×ÜÞÖÝÞ - ÝÕ ×ÐÔÐÝ ßÐàÐÜÕâà '-s'!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.16\n"
|
"Project-Id-Version: VDR 1.7.16\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2011-02-15 16:29+0100\n"
|
||||||
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
||||||
"Language-Team: Slovak <vdr@linuxtv.org>\n"
|
"Language-Team: Slovak <vdr@linuxtv.org>\n"
|
||||||
@ -1077,6 +1077,9 @@ msgstr "Premenova
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Då¾ka okam¾itého nahrávania (min)"
|
msgstr "Då¾ka okam¾itého nahrávania (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maximálna veµkos» nahrávky (MB)"
|
msgstr "Maximálna veµkos» nahrávky (MB)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr "Regenera
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Regenerácia indexového súboru hotová"
|
msgstr "Regenerácia indexového súboru hotová"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Vypnutie nie je mo¾né - chýba voµba '-s'!"
|
msgstr "Vypnutie nie je mo¾né - chýba voµba '-s'!"
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
|
||||||
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
|
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
|
||||||
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
|
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
|
||||||
@ -1078,6 +1078,9 @@ msgstr "Ime za direktno snemanje"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Èas direktnega snemanja (min)"
|
msgstr "Èas direktnega snemanja (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Najveèja velikost datoteke (MB)"
|
msgstr "Najveèja velikost datoteke (MB)"
|
||||||
|
|
||||||
@ -1253,6 +1256,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Zaustavitev ni izvedljiva - opcija '-s' ni podana!"
|
msgstr "Zaustavitev ni izvedljiva - opcija '-s' ni podana!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.1\n"
|
"Project-Id-Version: VDR 1.7.1\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2011-01-09 15:57+0100\n"
|
||||||
"Last-Translator: Milan Cvijanoviæ <elcom_cvijo@hotmail.com>\n"
|
"Last-Translator: Milan Cvijanoviæ <elcom_cvijo@hotmail.com>\n"
|
||||||
"Language-Team: Serbian <vdr@linuxtv.org>\n"
|
"Language-Team: Serbian <vdr@linuxtv.org>\n"
|
||||||
@ -1100,6 +1100,9 @@ msgstr "Imenuj trenutno snimanje"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Trajanje trenutnog snimanja (min)"
|
msgstr "Trajanje trenutnog snimanja (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maks. velièina datoteke (MB)"
|
msgstr "Maks. velièina datoteke (MB)"
|
||||||
|
|
||||||
@ -1278,6 +1281,9 @@ msgstr "Obnavljanje index datoteke"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Obnavljanje index datoteke zavr¹eno"
|
msgstr "Obnavljanje index datoteke zavr¹eno"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Ga¹enje nemoguæe - nedostaje opcija '-s'!"
|
msgstr "Ga¹enje nemoguæe - nedostaje opcija '-s'!"
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
|
||||||
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
|
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
|
||||||
"Language-Team: Swedish <vdr@linuxtv.org>\n"
|
"Language-Team: Swedish <vdr@linuxtv.org>\n"
|
||||||
@ -1080,6 +1080,9 @@ msgstr "Namnge direktinspelning"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Direktinspelning längd (min)"
|
msgstr "Direktinspelning längd (min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maximal filstorlek för inspelning (MB)"
|
msgstr "Maximal filstorlek för inspelning (MB)"
|
||||||
|
|
||||||
@ -1255,6 +1258,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Kan inte avsluta, måste använda parameter '-s'"
|
msgstr "Kan inte avsluta, måste använda parameter '-s'"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
|
||||||
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
|
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
|
||||||
"Language-Team: Turkish <vdr@linuxtv.org>\n"
|
"Language-Team: Turkish <vdr@linuxtv.org>\n"
|
||||||
@ -1077,6 +1077,9 @@ msgstr "Derhal
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Derhal çekim süresi (dak)"
|
msgstr "Derhal çekim süresi (dak)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Maksimum Video kütük büyüklügü (MB)"
|
msgstr "Maksimum Video kütük büyüklügü (MB)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Kapatýlamýyor - '-s' seçeneði verilmemiþ!"
|
msgstr "Kapatýlamýyor - '-s' seçeneði verilmemiþ!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.7\n"
|
"Project-Id-Version: VDR 1.7.7\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2010-04-25 16:35+0200\n"
|
||||||
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
|
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
|
||||||
"Language-Team: Ukrainian <vdr@linuxtv.org>\n"
|
"Language-Team: Ukrainian <vdr@linuxtv.org>\n"
|
||||||
@ -1077,6 +1077,9 @@ msgstr "Схема найменувань ручних записів"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "Протяжність ручного запису (хв)"
|
msgstr "Протяжність ручного запису (хв)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "Макс. размір відеофайлу (Мб)"
|
msgstr "Макс. размір відеофайлу (Мб)"
|
||||||
|
|
||||||
@ -1252,6 +1255,9 @@ msgstr "Регенерація файлу індексів"
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr "Регенерацію файлу індексу завершено"
|
msgstr "Регенерацію файлу індексу завершено"
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "Виключенння неможливе - не задано параметр '-s'!"
|
msgstr "Виключенння неможливе - не задано параметр '-s'!"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\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"
|
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
|
||||||
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
|
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
|
||||||
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
|
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
|
||||||
@ -1080,6 +1080,9 @@ msgstr "名字直接记录"
|
|||||||
msgid "Setup.Recording$Instant rec. time (min)"
|
msgid "Setup.Recording$Instant rec. time (min)"
|
||||||
msgstr "直接录像时间(min)"
|
msgstr "直接录像时间(min)"
|
||||||
|
|
||||||
|
msgid "Setup.Recording$present event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Recording$Max. video file size (MB)"
|
msgid "Setup.Recording$Max. video file size (MB)"
|
||||||
msgstr "最大的视频文件容量 (MB)"
|
msgstr "最大的视频文件容量 (MB)"
|
||||||
|
|
||||||
@ -1255,6 +1258,9 @@ msgstr ""
|
|||||||
msgid "Index file regeneration complete"
|
msgid "Index file regeneration complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Index file regeneration failed!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Can't shutdown - option '-s' not given!"
|
msgid "Can't shutdown - option '-s' not given!"
|
||||||
msgstr "不能关机 - 操作 '-s' 不允许!"
|
msgstr "不能关机 - 操作 '-s' 不允许!"
|
||||||
|
|
||||||
|
@ -4,13 +4,13 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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 "recorder.h"
|
||||||
#include "shutdown.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
|
// The maximum time we wait before assuming that a recorded video data stream
|
||||||
// is broken:
|
// 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 = new cRingBufferLinear(RECORDERBUFSIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE, true, "Recorder");
|
||||||
ringBuffer->SetTimeouts(0, 100);
|
ringBuffer->SetTimeouts(0, 100);
|
||||||
|
ringBuffer->SetIoThrottle();
|
||||||
|
|
||||||
int Pid = Channel->Vpid();
|
int Pid = Channel->Vpid();
|
||||||
int Type = Channel->Vtype();
|
int Type = Channel->Vtype();
|
||||||
|
33
recording.c
33
recording.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "recording.h"
|
||||||
@ -107,8 +107,10 @@ void cRemoveDeletedRecordingsThread::Action(void)
|
|||||||
}
|
}
|
||||||
r = DeletedRecordings.Next(r);
|
r = DeletedRecordings.Next(r);
|
||||||
}
|
}
|
||||||
if (deleted)
|
if (deleted) {
|
||||||
RemoveEmptyVideoDirectories();
|
const char *IgnoreFiles[] = { SORTMODEFILE, NULL };
|
||||||
|
RemoveEmptyVideoDirectories(IgnoreFiles);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -820,9 +822,13 @@ char *cRecording::StripEpisodeName(char *s)
|
|||||||
t++;
|
t++;
|
||||||
}
|
}
|
||||||
if (s1 && s2) {
|
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++;
|
s1++;
|
||||||
memmove(s1, s2, t - s2 + 1);
|
memmove(s1, s2, t - s2 + 1);
|
||||||
*s1 = 0xFF; // sorts folders before plain recordings
|
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -1010,8 +1016,10 @@ bool cRecording::Delete(void)
|
|||||||
RemoveVideoFile(NewName);
|
RemoveVideoFile(NewName);
|
||||||
}
|
}
|
||||||
isyslog("deleting recording '%s'", FileName());
|
isyslog("deleting recording '%s'", FileName());
|
||||||
if (access(FileName(), F_OK) == 0)
|
if (access(FileName(), F_OK) == 0) {
|
||||||
result = RenameVideoFile(FileName(), NewName);
|
result = RenameVideoFile(FileName(), NewName);
|
||||||
|
cRecordingUserCommand::InvokeCommand(RUC_DELETERECORDING, NewName);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
isyslog("recording '%s' vanished", FileName());
|
isyslog("recording '%s' vanished", FileName());
|
||||||
result = true; // well, we were going to delete it, anyway
|
result = true; // well, we were going to delete it, anyway
|
||||||
@ -1483,6 +1491,7 @@ cIndexFileGenerator::~cIndexFileGenerator()
|
|||||||
void cIndexFileGenerator::Action(void)
|
void cIndexFileGenerator::Action(void)
|
||||||
{
|
{
|
||||||
bool IndexFileComplete = false;
|
bool IndexFileComplete = false;
|
||||||
|
bool IndexFileWritten = false;
|
||||||
bool Rewind = false;
|
bool Rewind = false;
|
||||||
cFileName FileName(recordingName, false);
|
cFileName FileName(recordingName, false);
|
||||||
cUnbufferedFile *ReplayFile = FileName.Open();
|
cUnbufferedFile *ReplayFile = FileName.Open();
|
||||||
@ -1514,6 +1523,7 @@ void cIndexFileGenerator::Action(void)
|
|||||||
if (FrameDetector.NewFrame()) {
|
if (FrameDetector.NewFrame()) {
|
||||||
IndexFile.Write(FrameDetector.IndependentFrame(), FileName.Number(), FrameOffset >= 0 ? FrameOffset : FileSize);
|
IndexFile.Write(FrameDetector.IndependentFrame(), FileName.Number(), FrameOffset >= 0 ? FrameOffset : FileSize);
|
||||||
FrameOffset = -1;
|
FrameOffset = -1;
|
||||||
|
IndexFileWritten = true;
|
||||||
}
|
}
|
||||||
FileSize += Processed;
|
FileSize += Processed;
|
||||||
Buffer.Del(Processed);
|
Buffer.Del(Processed);
|
||||||
@ -1568,11 +1578,16 @@ void cIndexFileGenerator::Action(void)
|
|||||||
break;
|
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:
|
// Delete the index file if the recording has not been processed entirely:
|
||||||
if (IndexFileComplete)
|
IndexFile.Delete();
|
||||||
Skins.QueueMessage(mtInfo, tr("Index file regeneration complete"));
|
|
||||||
else
|
|
||||||
IndexFile.Delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- cIndexFile ------------------------------------------------------------
|
// --- cIndexFile ------------------------------------------------------------
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __RECORDING_H
|
||||||
@ -240,6 +240,7 @@ public:
|
|||||||
#define RUC_BEFORERECORDING "before"
|
#define RUC_BEFORERECORDING "before"
|
||||||
#define RUC_AFTERRECORDING "after"
|
#define RUC_AFTERRECORDING "after"
|
||||||
#define RUC_EDITEDRECORDING "edited"
|
#define RUC_EDITEDRECORDING "edited"
|
||||||
|
#define RUC_DELETERECORDING "deleted"
|
||||||
|
|
||||||
class cRecordingUserCommand {
|
class cRecordingUserCommand {
|
||||||
private:
|
private:
|
||||||
|
41
remux.c
41
remux.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "remux.h"
|
||||||
@ -622,6 +622,34 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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: ;
|
default: ;
|
||||||
}
|
}
|
||||||
dbgpatpmt("\n");
|
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 cFrameDetector::Analyze(const uchar *Data, int Length)
|
||||||
{
|
{
|
||||||
int SeenPayloadStart = false;
|
bool SeenPayloadStart = false;
|
||||||
|
bool SeenAccessUnitDelimiter = false;
|
||||||
int Processed = 0;
|
int Processed = 0;
|
||||||
newFrame = independentFrame = false;
|
newFrame = independentFrame = false;
|
||||||
while (Length >= TS_SIZE) {
|
while (Length >= TS_SIZE) {
|
||||||
@ -970,12 +999,16 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
|
|||||||
scanner = EMPTY_SCANNER;
|
scanner = EMPTY_SCANNER;
|
||||||
if (synced && !SeenPayloadStart && Processed)
|
if (synced && !SeenPayloadStart && Processed)
|
||||||
return Processed; // flush everything before this new frame
|
return Processed; // flush everything before this new frame
|
||||||
|
SeenAccessUnitDelimiter = true;
|
||||||
|
}
|
||||||
|
else if (SeenAccessUnitDelimiter && scanner == 0x00000001) { // NALU start
|
||||||
|
SeenAccessUnitDelimiter = false;
|
||||||
int FrameTypeOffset = i + 1;
|
int FrameTypeOffset = i + 1;
|
||||||
if (FrameTypeOffset >= TS_SIZE) // the byte to check is in the next TS packet
|
if (FrameTypeOffset >= TS_SIZE) // the byte to check is in the next TS packet
|
||||||
i = SkipPackets(Data, Length, Processed, FrameTypeOffset);
|
i = SkipPackets(Data, Length, Processed, FrameTypeOffset);
|
||||||
newFrame = true;
|
newFrame = true;
|
||||||
uchar FrameType = Data[FrameTypeOffset];
|
uchar FrameType = Data[FrameTypeOffset] & 0x1F;
|
||||||
independentFrame = FrameType == 0x10;
|
independentFrame = FrameType == 0x07;
|
||||||
if (synced) {
|
if (synced) {
|
||||||
if (framesPerPayloadUnit < 0) {
|
if (framesPerPayloadUnit < 0) {
|
||||||
payloadUnitOfFrame = (payloadUnitOfFrame + 1) % -framesPerPayloadUnit;
|
payloadUnitOfFrame = (payloadUnitOfFrame + 1) % -framesPerPayloadUnit;
|
||||||
|
22
ringbuffer.c
22
ringbuffer.c
@ -7,7 +7,7 @@
|
|||||||
* Parts of this file were inspired by the 'ringbuffy.c' from the
|
* Parts of this file were inspired by the 'ringbuffy.c' from the
|
||||||
* LinuxDVB driver (see linuxtv.org).
|
* 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"
|
#include "ringbuffer.h"
|
||||||
@ -20,6 +20,8 @@
|
|||||||
#define OVERFLOWREPORTDELTA 5 // seconds between reports
|
#define OVERFLOWREPORTDELTA 5 // seconds between reports
|
||||||
#define PERCENTAGEDELTA 10
|
#define PERCENTAGEDELTA 10
|
||||||
#define PERCENTAGETHRESHOLD 70
|
#define PERCENTAGETHRESHOLD 70
|
||||||
|
#define IOTHROTTLELOW 20
|
||||||
|
#define IOTHROTTLEHIGH 50
|
||||||
|
|
||||||
cRingBuffer::cRingBuffer(int Size, bool Statistics)
|
cRingBuffer::cRingBuffer(int Size, bool Statistics)
|
||||||
{
|
{
|
||||||
@ -31,10 +33,12 @@ cRingBuffer::cRingBuffer(int Size, bool Statistics)
|
|||||||
putTimeout = getTimeout = 0;
|
putTimeout = getTimeout = 0;
|
||||||
lastOverflowReport = 0;
|
lastOverflowReport = 0;
|
||||||
overflowCount = overflowBytes = 0;
|
overflowCount = overflowBytes = 0;
|
||||||
|
ioThrottle = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cRingBuffer::~cRingBuffer()
|
cRingBuffer::~cRingBuffer()
|
||||||
{
|
{
|
||||||
|
delete ioThrottle;
|
||||||
if (statistics)
|
if (statistics)
|
||||||
dsyslog("buffer stats: %d (%d%%) used", maxFill, maxFill * 100 / (size - 1));
|
dsyslog("buffer stats: %d (%d%%) used", maxFill, maxFill * 100 / (size - 1));
|
||||||
}
|
}
|
||||||
@ -50,6 +54,12 @@ void cRingBuffer::UpdatePercentage(int Fill)
|
|||||||
lastPercent = percent;
|
lastPercent = percent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ioThrottle) {
|
||||||
|
if (percent >= IOTHROTTLEHIGH)
|
||||||
|
ioThrottle->Activate();
|
||||||
|
else if (percent < IOTHROTTLELOW)
|
||||||
|
ioThrottle->Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cRingBuffer::WaitForPut(void)
|
void cRingBuffer::WaitForPut(void)
|
||||||
@ -66,13 +76,13 @@ void cRingBuffer::WaitForGet(void)
|
|||||||
|
|
||||||
void cRingBuffer::EnablePut(void)
|
void cRingBuffer::EnablePut(void)
|
||||||
{
|
{
|
||||||
if (putTimeout && Free() > Size() / 3)
|
if (putTimeout && Free() > Size() / 10)
|
||||||
readyForPut.Signal();
|
readyForPut.Signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
void cRingBuffer::EnableGet(void)
|
void cRingBuffer::EnableGet(void)
|
||||||
{
|
{
|
||||||
if (getTimeout && Available() > Size() / 3)
|
if (getTimeout && Available() > Size() / 10)
|
||||||
readyForGet.Signal();
|
readyForGet.Signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,6 +92,12 @@ void cRingBuffer::SetTimeouts(int PutTimeout, int GetTimeout)
|
|||||||
getTimeout = GetTimeout;
|
getTimeout = GetTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cRingBuffer::SetIoThrottle(void)
|
||||||
|
{
|
||||||
|
if (!ioThrottle)
|
||||||
|
ioThrottle = new cIoThrottle;
|
||||||
|
}
|
||||||
|
|
||||||
void cRingBuffer::ReportOverflow(int Bytes)
|
void cRingBuffer::ReportOverflow(int Bytes)
|
||||||
{
|
{
|
||||||
overflowCount++;
|
overflowCount++;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __RINGBUFFER_H
|
||||||
@ -22,6 +22,7 @@ private:
|
|||||||
time_t lastOverflowReport;
|
time_t lastOverflowReport;
|
||||||
int overflowCount;
|
int overflowCount;
|
||||||
int overflowBytes;
|
int overflowBytes;
|
||||||
|
cIoThrottle *ioThrottle;
|
||||||
protected:
|
protected:
|
||||||
tThreadId getThreadTid;
|
tThreadId getThreadTid;
|
||||||
int maxFill;//XXX
|
int maxFill;//XXX
|
||||||
@ -40,6 +41,7 @@ public:
|
|||||||
cRingBuffer(int Size, bool Statistics = false);
|
cRingBuffer(int Size, bool Statistics = false);
|
||||||
virtual ~cRingBuffer();
|
virtual ~cRingBuffer();
|
||||||
void SetTimeouts(int PutTimeout, int GetTimeout);
|
void SetTimeouts(int PutTimeout, int GetTimeout);
|
||||||
|
void SetIoThrottle(void);
|
||||||
void ReportOverflow(int Bytes);
|
void ReportOverflow(int Bytes);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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,
|
// "Star Trek: The Next Generation"(R) is a registered trademark of Paramount Pictures,
|
||||||
@ -1661,6 +1661,7 @@ private:
|
|||||||
bool modeOnly;
|
bool modeOnly;
|
||||||
int lineHeight;
|
int lineHeight;
|
||||||
tColor frameColor;
|
tColor frameColor;
|
||||||
|
int lastCurrentWidth;
|
||||||
cString lastDate;
|
cString lastDate;
|
||||||
tTrackId lastTrackId;
|
tTrackId lastTrackId;
|
||||||
void DrawDate(void);
|
void DrawDate(void);
|
||||||
@ -1685,6 +1686,7 @@ cSkinLCARSDisplayReplay::cSkinLCARSDisplayReplay(bool ModeOnly)
|
|||||||
modeOnly = ModeOnly;
|
modeOnly = ModeOnly;
|
||||||
lineHeight = font->Height();
|
lineHeight = font->Height();
|
||||||
frameColor = Theme.Color(clrReplayFrameBg);
|
frameColor = Theme.Color(clrReplayFrameBg);
|
||||||
|
lastCurrentWidth = 0;
|
||||||
int d = 5 * lineHeight;
|
int d = 5 * lineHeight;
|
||||||
xp00 = 0;
|
xp00 = 0;
|
||||||
xp01 = xp00 + d / 2;
|
xp01 = xp00 + d / 2;
|
||||||
@ -1801,8 +1803,9 @@ void cSkinLCARSDisplayReplay::SetProgress(int Current, int Total)
|
|||||||
void cSkinLCARSDisplayReplay::SetCurrent(const char *Current)
|
void cSkinLCARSDisplayReplay::SetCurrent(const char *Current)
|
||||||
{
|
{
|
||||||
const cFont *font = cFont::GetFont(fontOsd);
|
const cFont *font = cFont::GetFont(fontOsd);
|
||||||
int w = font->Width(Current) + 10;
|
int w = font->Width(Current);
|
||||||
osd->DrawText(xp03, yp03 - lineHeight, Current, Theme.Color(clrReplayPosition), Theme.Color(clrBackground), font, w, 0, taLeft);
|
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)
|
void cSkinLCARSDisplayReplay::SetTotal(const char *Total)
|
||||||
|
44
thread.c
44
thread.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "thread.h"
|
||||||
@ -398,6 +398,48 @@ bool cThreadLock::Lock(cThread *Thread)
|
|||||||
return false;
|
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 -----------------------------------------------------------------
|
||||||
|
|
||||||
// cPipe::Open() and cPipe::Close() are based on code originally received from
|
// cPipe::Open() and cPipe::Close() are based on code originally received from
|
||||||
|
25
thread.h
25
thread.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __THREAD_H
|
||||||
@ -157,6 +157,29 @@ public:
|
|||||||
|
|
||||||
#define LOCK_THREAD cThreadLock ThreadLock(this)
|
#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
|
// cPipe implements a pipe that closes all unnecessary file descriptors in
|
||||||
// the child process.
|
// the child process.
|
||||||
|
|
||||||
|
47
timers.c
47
timers.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "timers.h"
|
||||||
@ -32,6 +32,9 @@ cTimer::cTimer(bool Instant, bool Pause, cChannel *Channel)
|
|||||||
deferred = 0;
|
deferred = 0;
|
||||||
recording = pending = inVpsMargin = false;
|
recording = pending = inVpsMargin = false;
|
||||||
flags = tfNone;
|
flags = tfNone;
|
||||||
|
*file = 0;
|
||||||
|
aux = NULL;
|
||||||
|
event = NULL;
|
||||||
if (Instant)
|
if (Instant)
|
||||||
SetFlags(tfActive | tfInstant);
|
SetFlags(tfActive | tfInstant);
|
||||||
channel = Channel ? Channel : Channels.GetByNumber(cDevice::CurrentChannel());
|
channel = Channel ? Channel : Channels.GetByNumber(cDevice::CurrentChannel());
|
||||||
@ -41,15 +44,40 @@ cTimer::cTimer(bool Instant, bool Pause, cChannel *Channel)
|
|||||||
day = SetTime(t, 0);
|
day = SetTime(t, 0);
|
||||||
weekdays = 0;
|
weekdays = 0;
|
||||||
start = now->tm_hour * 100 + now->tm_min;
|
start = now->tm_hour * 100 + now->tm_min;
|
||||||
stop = now->tm_hour * 60 + now->tm_min + Setup.InstantRecordTime;
|
stop = 0;
|
||||||
stop = (stop / 60) * 100 + (stop % 60);
|
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)
|
if (stop >= 2400)
|
||||||
stop -= 2400;
|
stop -= 2400;
|
||||||
priority = Pause ? Setup.PausePriority : Setup.DefaultPriority;
|
priority = Pause ? Setup.PausePriority : Setup.DefaultPriority;
|
||||||
lifetime = Pause ? Setup.PauseLifetime : Setup.DefaultLifetime;
|
lifetime = Pause ? Setup.PauseLifetime : Setup.DefaultLifetime;
|
||||||
*file = 0;
|
|
||||||
aux = NULL;
|
|
||||||
event = NULL;
|
|
||||||
if (Instant && channel)
|
if (Instant && channel)
|
||||||
snprintf(file, sizeof(file), "%s%s", Setup.MarkInstantRecord ? "@" : "", *Setup.NameInstantRecord ? Setup.NameInstantRecord : channel->Name());
|
snprintf(file, sizeof(file), "%s%s", Setup.MarkInstantRecord ? "@" : "", *Setup.NameInstantRecord ? Setup.NameInstantRecord : channel->Name());
|
||||||
if (VfatFileSystem && (Utf8StrLen(file) > VFAT_MAX_FILENAME)) {
|
if (VfatFileSystem && (Utf8StrLen(file) > VFAT_MAX_FILENAME)) {
|
||||||
@ -66,6 +94,9 @@ cTimer::cTimer(const cEvent *Event)
|
|||||||
deferred = 0;
|
deferred = 0;
|
||||||
recording = pending = inVpsMargin = false;
|
recording = pending = inVpsMargin = false;
|
||||||
flags = tfActive;
|
flags = tfActive;
|
||||||
|
*file = 0;
|
||||||
|
aux = NULL;
|
||||||
|
event = NULL;
|
||||||
if (Event->Vps() && Setup.UseVps)
|
if (Event->Vps() && Setup.UseVps)
|
||||||
SetFlags(tfVps);
|
SetFlags(tfVps);
|
||||||
channel = Channels.GetByChannelID(Event->ChannelID(), true);
|
channel = Channels.GetByChannelID(Event->ChannelID(), true);
|
||||||
@ -86,7 +117,6 @@ cTimer::cTimer(const cEvent *Event)
|
|||||||
stop -= 2400;
|
stop -= 2400;
|
||||||
priority = Setup.DefaultPriority;
|
priority = Setup.DefaultPriority;
|
||||||
lifetime = Setup.DefaultLifetime;
|
lifetime = Setup.DefaultLifetime;
|
||||||
*file = 0;
|
|
||||||
const char *Title = Event->Title();
|
const char *Title = Event->Title();
|
||||||
if (!isempty(Title))
|
if (!isempty(Title))
|
||||||
Utf8Strn0Cpy(file, Event->Title(), sizeof(file));
|
Utf8Strn0Cpy(file, Event->Title(), sizeof(file));
|
||||||
@ -95,8 +125,7 @@ cTimer::cTimer(const cEvent *Event)
|
|||||||
file[Utf8SymChars(file, VFAT_MAX_FILENAME)] = 0;
|
file[Utf8SymChars(file, VFAT_MAX_FILENAME)] = 0;
|
||||||
dsyslog("timer file name truncated to '%s'", file);
|
dsyslog("timer file name truncated to '%s'", file);
|
||||||
}
|
}
|
||||||
aux = NULL;
|
SetEvent(Event);
|
||||||
event = NULL; // let SetEvent() be called to get a log message
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cTimer::cTimer(const cTimer &Timer)
|
cTimer::cTimer(const cTimer &Timer)
|
||||||
|
47
tools.c
47
tools.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "tools.h"
|
||||||
@ -285,6 +285,18 @@ int64_t StrToNum(const char *s)
|
|||||||
return n;
|
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)
|
cString AddDirectory(const char *DirName, const char *FileName)
|
||||||
{
|
{
|
||||||
return cString::sprintf("%s/%s", DirName && *DirName ? DirName : ".", FileName);
|
return cString::sprintf("%s/%s", DirName && *DirName ? DirName : ".", FileName);
|
||||||
@ -433,9 +445,9 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks)
|
|||||||
return true;
|
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);
|
cReadDir d(DirName);
|
||||||
if (d.Ok()) {
|
if (d.Ok()) {
|
||||||
bool empty = true;
|
bool empty = true;
|
||||||
@ -446,11 +458,11 @@ bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis)
|
|||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(buffer, &st) == 0) {
|
if (stat(buffer, &st) == 0) {
|
||||||
if (S_ISDIR(st.st_mode)) {
|
if (S_ISDIR(st.st_mode)) {
|
||||||
if (!RemoveEmptyDirectories(buffer, true))
|
if (!RemoveEmptyDirectories(buffer, true, IgnoreFiles))
|
||||||
empty = false;
|
empty = false;
|
||||||
}
|
}
|
||||||
else if (*e->d_name == '.') // "dot files" don't count
|
else if (RemoveThis && IgnoreFiles && StrInArray(IgnoreFiles, e->d_name))
|
||||||
HasDotFiles = true;
|
HasIgnoredFiles = true;
|
||||||
else
|
else
|
||||||
empty = false;
|
empty = false;
|
||||||
}
|
}
|
||||||
@ -461,21 +473,18 @@ bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (RemoveThis && empty) {
|
if (RemoveThis && empty) {
|
||||||
if (HasDotFiles) {
|
if (HasIgnoredFiles) {
|
||||||
cReadDir d(DirName);
|
while (*IgnoreFiles) {
|
||||||
if (d.Ok()) {
|
cString buffer = AddDirectory(DirName, *IgnoreFiles);
|
||||||
struct dirent *e;
|
if (access(buffer, F_OK) == 0) {
|
||||||
while ((e = d.Next()) != NULL) {
|
dsyslog("removing %s", *buffer);
|
||||||
if (*e->d_name == '.') { // for safety - should always be true
|
if (remove(buffer) < 0) {
|
||||||
cString buffer = AddDirectory(DirName, e->d_name);
|
LOG_ERROR_STR(*buffer);
|
||||||
dsyslog("removing %s", *buffer);
|
return false;
|
||||||
if (remove(buffer) < 0) {
|
|
||||||
LOG_ERROR_STR(*buffer);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
IgnoreFiles++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dsyslog("removing %s", DirName);
|
dsyslog("removing %s", DirName);
|
||||||
if (remove(DirName) < 0) {
|
if (remove(DirName) < 0) {
|
||||||
|
12
tools.h
12
tools.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#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
|
///< K, M, G or T to abbreviate Kilo-, Mega-, Giga- or Terabyte, respectively
|
||||||
///< (based on 1024). Everything after the first non-numeric character is
|
///< (based on 1024). Everything after the first non-numeric character is
|
||||||
///< silently ignored, as are any characters other than the ones mentioned here.
|
///< 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 itoa(int n);
|
||||||
cString AddDirectory(const char *DirName, const char *FileName);
|
cString AddDirectory(const char *DirName, const char *FileName);
|
||||||
bool EntriesOnSameFileSystem(const char *File1, const char *File2);
|
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 DirectoryOk(const char *DirName, bool LogErrors = false);
|
||||||
bool MakeDirs(const char *FileName, bool IsDirectory = false);
|
bool MakeDirs(const char *FileName, bool IsDirectory = false);
|
||||||
bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks = 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
|
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)
|
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);
|
bool SpinUpDisk(const char *FileName);
|
||||||
|
9
vdr.c
9
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.tvdr.de
|
* 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>
|
#include <getopt.h>
|
||||||
@ -466,7 +466,8 @@ int main(int argc, char *argv[])
|
|||||||
" -p PORT, --port=PORT use PORT for SVDRP (default: %d)\n"
|
" -p PORT, --port=PORT use PORT for SVDRP (default: %d)\n"
|
||||||
" 0 turns off SVDRP\n"
|
" 0 turns off SVDRP\n"
|
||||||
" -P OPT, --plugin=OPT load a plugin defined by the given options\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"
|
" --resdir=DIR read resource files from DIR (default: %s)\n"
|
||||||
" -s CMD, --shutdown=CMD call CMD to shutdown the computer\n"
|
" -s CMD, --shutdown=CMD call CMD to shutdown the computer\n"
|
||||||
" --split split edited files at the editing marks (only\n"
|
" --split split edited files at the editing marks (only\n"
|
||||||
@ -1294,6 +1295,8 @@ int main(int argc, char *argv[])
|
|||||||
PluginManager.Housekeeping();
|
PluginManager.Housekeeping();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReportEpgBugFixStats();
|
||||||
|
|
||||||
// Main thread hooks of plugins:
|
// Main thread hooks of plugins:
|
||||||
PluginManager.MainThreadHook();
|
PluginManager.MainThreadHook();
|
||||||
}
|
}
|
||||||
@ -1330,7 +1333,7 @@ Exit:
|
|||||||
EpgHandlers.Clear();
|
EpgHandlers.Clear();
|
||||||
PluginManager.Shutdown(true);
|
PluginManager.Shutdown(true);
|
||||||
cSchedules::Cleanup(true);
|
cSchedules::Cleanup(true);
|
||||||
ReportEpgBugFixStats();
|
ReportEpgBugFixStats(true);
|
||||||
if (WatchdogTimeout > 0)
|
if (WatchdogTimeout > 0)
|
||||||
dsyslog("max. latency time %d seconds", MaxLatencyTime);
|
dsyslog("max. latency time %d seconds", MaxLatencyTime);
|
||||||
if (LastSignal)
|
if (LastSignal)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "videodir.h"
|
||||||
@ -229,11 +229,11 @@ cString PrefixVideoFileName(const char *FileName, char Prefix)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveEmptyVideoDirectories(void)
|
void RemoveEmptyVideoDirectories(const char *IgnoreFiles[])
|
||||||
{
|
{
|
||||||
cVideoDirectory Dir;
|
cVideoDirectory Dir;
|
||||||
do {
|
do {
|
||||||
RemoveEmptyDirectories(Dir.Name());
|
RemoveEmptyDirectories(Dir.Name(), false, IgnoreFiles);
|
||||||
} while (Dir.Next());
|
} while (Dir.Next());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __VIDEODIR_H
|
||||||
@ -23,7 +23,7 @@ bool RemoveVideoFile(const char *FileName);
|
|||||||
bool VideoFileSpaceAvailable(int SizeMB);
|
bool VideoFileSpaceAvailable(int SizeMB);
|
||||||
int VideoDiskSpace(int *FreeMB = NULL, int *UsedMB = NULL); // returns the used disk space in percent
|
int VideoDiskSpace(int *FreeMB = NULL, int *UsedMB = NULL); // returns the used disk space in percent
|
||||||
cString PrefixVideoFileName(const char *FileName, char Prefix);
|
cString PrefixVideoFileName(const char *FileName, char Prefix);
|
||||||
void RemoveEmptyVideoDirectories(void);
|
void RemoveEmptyVideoDirectories(const char *IgnoreFiles[] = NULL);
|
||||||
bool IsOnVideoDirectoryFileSystem(const char *FileName);
|
bool IsOnVideoDirectoryFileSystem(const char *FileName);
|
||||||
|
|
||||||
class cVideoDiskUsage {
|
class cVideoDiskUsage {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user