summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2012-01-15 16:10:00 +0100
committerDieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>2012-01-15 16:38:48 +0100
commit59f0138a7d03fed4fc33e1083928bf5b28e0e4ff (patch)
tree5d238aabf1b703dff01c9f381a7e552ed6bdf092
parent5a28d999363f8ace192489d4f6b13dfeb6cfc20b (diff)
downloadvdr-patches-59f0138a7d03fed4fc33e1083928bf5b28e0e4ff.tar.gz
vdr-patches-59f0138a7d03fed4fc33e1083928bf5b28e0e4ff.tar.bz2
Version 1.7.23
Original announce message: VDR developer version 1.7.23 is now available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.23.tar.bz2 A 'diff' against the previous version is available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.22-1.7.23.diff MD5 checksums: de136f7be28c4b6f1fa0e2218b4acc11 vdr-1.7.23.tar.bz2 2977b75cd8dacad187d11c10b867d56a vdr-1.7.22-1.7.23.diff WARNING: ======== This is a developer version. Even though I use it in my productive environment. I strongly recommend that you only use it under controlled conditions and for testing and debugging. From the HISTORY file: - Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one). - Fixed bonding more than two devices. - Fixed handling symbolic links in cRecordings::ScanVideoDir() (reported by Sundararaj Reel). - Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many link levels (reported by Sundararaj Reel). - Removed redundant memset() in the ctor of cSatCableNumbers (triggered by Ville Skyttä pointing out that the argument sequence in the call was wrong). - Removed a redundant NULL check in cDvbSpuDecoder::setTime() (thanks to Ville Skyttä). - Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality() (triggered by Ville Skyttä pointing out that the variable HasSnr was unused). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Added support for HbbTV to libsi (thanks to Christoph Haubrich). - Added support for devices with more than one delivery system per frontend. This requires a DVB driver with version 5.5 or higher that can handle the DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery system per frontend. - Updated the Hungarian language texts (thanks to István Füley). - cDvbTuner::ExecuteDiseqc() now makes sure only one tuner sends SCR commands at any given time (reported by Frank Neumann). - cEvent::FixEpgBugs() now replaces any newline characters in stream component descriptions with blanks (thanks to Torsten Lang for reporting a problem with EPG data from BSkyB's "MTV MUSIC", S28.2E-2-2010-7012). - Fixed cDvbSubtitleConverter::SetOsdData() (thanks to Rolf Ahrenberg). - Fixed cListBase::Move() in case From and To are equal (reported by Sundararaj Reel). - Added support for DVB-T2 to libsi (thanks to Rolf Ahrenberg). - Added support for handling DVB-T2 transponders. This requires a DVB driver with version 5.3 or higher that can handle the DTV_DVBT2_PLP_ID call (thanks to Rolf Ahrenberg). - Fixed cConfig::Load() for g++ version 4.7.0 (thanks to Ville Skyttä). - Fixed a possible memory corruption in cTsToPes::GetPes() in case of broken TS packets, e.g. when switching channels. - Fixed the SVDRP command CLRE for a single channel in case there are events that have a timer (thanks to Timo Eskola). - BIDI support now checks at runtime whether the system runs with UTF-8 (suggested by Torsten Lang). - Added member functions Adapter() and Frontend() to cDvbDevice (suggested by Rolf Ahrenberg). - The parameters that are only used by "second generation" delivery systems (DVB-S2 and DVB-T2) are no longer written into channels.conf for "first generation" delivery systems (DVB-S and DVB-T). - Changed IndexToHMSF() so that it can handle negative Index values. - Added option -N to the msgmerge call in the Makefile, because fuzzy translation mostly resulted in useless strings. - The new setup option "Replay/Show remaining time" can be used to switch between showing the total length or the remaining time of the recording that is currently replayed. - Fixed wrongfully displaying the length of a recording in the title of the replay progress display. - Fixed frozen live view with device bonding in case the bonded master is used for live viewing (reported by Uwe Scheffler).
-rw-r--r--CONTRIBUTORS28
-rw-r--r--HISTORY55
-rw-r--r--MANUAL4
-rw-r--r--Makefile4
-rw-r--r--PLUGINS/src/pictures/HISTORY4
-rwxr-xr-xPLUGINS/src/pictures/pic2mpg17
-rw-r--r--config.c6
-rw-r--r--config.h13
-rw-r--r--dvbdevice.c308
-rw-r--r--dvbdevice.h25
-rw-r--r--dvbspu.c4
-rw-r--r--dvbsubtitle.c4
-rw-r--r--epg.c24
-rw-r--r--font.c40
-rw-r--r--libsi/descriptor.c83
-rw-r--r--libsi/descriptor.h42
-rw-r--r--libsi/headers.h54
-rw-r--r--libsi/si.c5
-rw-r--r--libsi/si.h17
-rw-r--r--menu.c16
-rw-r--r--nit.c46
-rw-r--r--po/ar.po8
-rw-r--r--po/ca_ES.po8
-rw-r--r--po/cs_CZ.po8
-rw-r--r--po/da_DK.po8
-rw-r--r--po/de_DE.po8
-rw-r--r--po/el_GR.po8
-rw-r--r--po/es_ES.po8
-rw-r--r--po/et_EE.po8
-rw-r--r--po/fi_FI.po12
-rw-r--r--po/fr_FR.po8
-rw-r--r--po/hr_HR.po8
-rw-r--r--po/hu_HU.po169
-rw-r--r--po/it_IT.po8
-rw-r--r--po/lt_LT.po8
-rw-r--r--po/mk_MK.po8
-rw-r--r--po/nl_NL.po8
-rw-r--r--po/nn_NO.po8
-rw-r--r--po/pl_PL.po8
-rw-r--r--po/pt_PT.po8
-rw-r--r--po/ro_RO.po8
-rw-r--r--po/ru_RU.po8
-rw-r--r--po/sk_SK.po8
-rw-r--r--po/sl_SI.po8
-rw-r--r--po/sr_SR.po8
-rw-r--r--po/sv_SE.po8
-rw-r--r--po/tr_TR.po8
-rw-r--r--po/uk_UA.po8
-rw-r--r--po/zh_CN.po8
-rw-r--r--recording.c43
-rw-r--r--remux.c6
-rw-r--r--svdrp.c6
-rwxr-xr-xsvdrpsend (renamed from svdrpsend.pl)0
-rw-r--r--tools.c4
-rw-r--r--vdr.544
55 files changed, 963 insertions, 328 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index c3456a2..2a3d858 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -271,6 +271,7 @@ Uwe Scheffler <linux_dvb@uni.de>
for his help in keeping 'channels.conf.cable' and 'channels.conf.terr' up to date
for helping to test new DVB-T handling
for reporting a bug in switching the video format in the Setup/DVB menu
+ for reporting a problem with frozen live view in conjunction with device bonding
Matjaz Thaler <matjaz.thaler@guest.arnes.si>
for improving AC3 decoding when replaying DVDs
@@ -1120,6 +1121,10 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for fixing handling DVB subtitles and implementing decoding textual DVB subtitles
for adding file name and line number to LOG_ERROR_STR()
for replacing all calls to sleep() with cCondWait::SleepMs()
+ for fixing cDvbSubtitleConverter::SetOsdData()
+ for adding support for DVB-T2 to libsi
+ for adding support for handling DVB-T2 transponders
+ for suggesting to add member functions Adapter() and Frontend() to cDvbDevice
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark
@@ -1927,8 +1932,13 @@ Ville Skytt <ville.skytta@iki.fi>
for fixing a crash when deleting a recording while cutting it
for fixing several spelling errors
for adding generating a pkg-config file to the Makefile
- for removing the '.pl' suffix from all scripts (thanks to Ville Skytt).
+ for removing the '.pl' suffix from all scripts
for changing the default location for the LIRC socket to /var/run/lirc/lircd
+ for pointing out that the argument sequence in the memset() call in the ctor of
+ cSatCableNumbers was wrong
+ for removing a redundant NULL check in cDvbSpuDecoder::setTime()
+ for pointing out that the variable HasSnr was unused in cDvbTuner::GetSignalQuality()
+ for fixing cConfig::Load() for g++ version 4.7.0
Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next
@@ -2256,6 +2266,7 @@ Christoph Haubrich <christoph1.haubrich@arcor.de>
for suggesting to implement a function to determine the length of a recording's
index file
for fixing setting the start time of an edited recording
+ for adding support for HbbTV to libsi
Pekka Mauno <pekka.mauno@iki.fi>
for fixing cSchedule::GetFollowingEvent() in case there is currently no present
@@ -2483,6 +2494,8 @@ Timo Eskola <timo@tolleri.net>
for implementing sending all frames to devices that can handle them in fast forward
trick speeds
for implementing the setup option "Recording/Pause key handling"
+ for fixing the SVDRP command CLRE for a single channel in case there are events
+ that have a timer
Elias Luttinen <el@iki.fi>
for improving the description of where logging goes in the INSTALL file
@@ -2544,6 +2557,10 @@ Sundararaj Reel <sundararaj.reel@googlemail.com>
for reporting a missing reset of maxNumber in cChannels::Renumber()
for reporting some missing 'const' in tChannelID
for suggesting to add optional case insensitive sorting to cStringList::Sort()
+ for reporting a bug in handling symbolic links in cRecordings::ScanVideoDir()
+ for reporting a memory leak in cRecordings::ScanVideoDir() in case there are too
+ many link levels
+ for reporting a bug in cListBase::Move() in case From and To are equal
Ales Jurik <ajurik@quick.cz>
for reporting broken SI data on Czech/Slovak channels after changing the default
@@ -2732,8 +2749,9 @@ Andreas Oberritter <obi@opendreambox.org>
Milan Cvijanovic <elcom_cvijo@hotmail.com>
for translating OSD texts to the Serbian language
-Frank Neumann <frank.neumann@hp.com>
+Frank Neumann <fnu@yavdr.org>
for suggesting to reduce the thread and I/O priority cCuttingThread::Action()
+ for reporting a problem with tuning timeouts when using SCR with multiple tuners
Gerald Dachs <vdr@dachsweb.de>
for reporting a problem with checking for minimum line length of 21 characters in
@@ -2792,3 +2810,9 @@ Chris Mayo <aklhfex@gmail.com>
Dominic Evans <oldmanuk@gmail.com>
for making the SVDRP command LSTC accepts channel IDs
for adding cap_net_raw to the capabilities that are not dropped
+
+Torsten Lang <info@torstenlang.de>
+ for reporting a problem with newline characters in stream component descriptions
+ of EPG data from BSkyB's "MTV MUSIC"
+ for suggesting to make BIDI support check at runtime whether the system runs with
+ UTF-8
diff --git a/HISTORY b/HISTORY
index c74c1a0..18fa707 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6780,3 +6780,58 @@ Video Disk Recorder Revision History
- Added file name and line number to LOG_ERROR_STR() (thanks to Rolf Ahrenberg).
- Replaced all calls to sleep() with cCondWait::SleepMs() (thanks to Rolf Ahrenberg).
- Fixed a crash with malformed SI data (patch from vdr-portal).
+
+2012-01-15: Version 1.7.23
+
+- Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one).
+- Fixed bonding more than two devices.
+- Fixed handling symbolic links in cRecordings::ScanVideoDir() (reported by
+ Sundararaj Reel).
+- Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many
+ link levels (reported by Sundararaj Reel).
+- Removed redundant memset() in the ctor of cSatCableNumbers (triggered by
+ Ville Skytt pointing out that the argument sequence in the call was wrong).
+- Removed a redundant NULL check in cDvbSpuDecoder::setTime() (thanks to Ville Skytt).
+- Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality()
+ (triggered by Ville Skytt pointing out that the variable HasSnr was unused).
+- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
+- Added support for HbbTV to libsi (thanks to Christoph Haubrich).
+- Added support for devices with more than one delivery system per frontend.
+ This requires a DVB driver with version 5.5 or higher that can handle the
+ DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery
+ system per frontend.
+- Updated the Hungarian language texts (thanks to Istvn Fley).
+- cDvbTuner::ExecuteDiseqc() now makes sure only one tuner sends SCR commands
+ at any given time (reported by Frank Neumann).
+- cEvent::FixEpgBugs() now replaces any newline characters in stream component
+ descriptions with blanks (thanks to Torsten Lang for reporting a problem with
+ EPG data from BSkyB's "MTV MUSIC", S28.2E-2-2010-7012).
+- Fixed cDvbSubtitleConverter::SetOsdData() (thanks to Rolf Ahrenberg).
+- Fixed cListBase::Move() in case From and To are equal (reported by Sundararaj
+ Reel).
+- Added support for DVB-T2 to libsi (thanks to Rolf Ahrenberg).
+- Added support for handling DVB-T2 transponders. This requires a DVB driver
+ with version 5.3 or higher that can handle the DTV_DVBT2_PLP_ID call (thanks
+ to Rolf Ahrenberg).
+- Fixed cConfig::Load() for g++ version 4.7.0 (thanks to Ville Skytt).
+- Fixed a possible memory corruption in cTsToPes::GetPes() in case of broken
+ TS packets, e.g. when switching channels.
+- Fixed the SVDRP command CLRE for a single channel in case there are events
+ that have a timer (thanks to Timo Eskola).
+- BIDI support now checks at runtime whether the system runs with UTF-8 (suggested
+ by Torsten Lang).
+- Added member functions Adapter() and Frontend() to cDvbDevice (suggested by
+ Rolf Ahrenberg).
+- The parameters that are only used by "second generation" delivery systems (DVB-S2
+ and DVB-T2) are no longer written into channels.conf for "first generation"
+ delivery systems (DVB-S and DVB-T).
+- Changed IndexToHMSF() so that it can handle negative Index values.
+- Added option -N to the msgmerge call in the Makefile, because fuzzy translation
+ mostly resulted in useless strings.
+- The new setup option "Replay/Show remaining time" can be used to switch between
+ showing the total length or the remaining time of the recording that is currently
+ replayed.
+- Fixed wrongfully displaying the length of a recording in the title of the replay
+ progress display.
+- Fixed frozen live view with device bonding in case the bonded master is used for
+ live viewing (reported by Uwe Scheffler).
diff --git a/MANUAL b/MANUAL
index 3e3adad..e743149 100644
--- a/MANUAL
+++ b/MANUAL
@@ -856,6 +856,10 @@ Version 1.6
Show replay mode = no Turns displaying the current replay mode on or off.
+ Show remaining time = no
+ Defines whether the replay progress display shows the
+ remaining time or the total length of the recording.
+
Resume ID = 0 Defines an additional ID that can be used in a multi user
environment, so that every user has his/her own resume
files for each recording. The valid range is 0...99, with
diff --git a/Makefile b/Makefile
index e6af30e..57ae2ae 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
-# $Id: Makefile 2.22 2011/12/04 14:41:00 kls Exp $
+# $Id: Makefile 2.23 2012/01/14 13:09:10 kls Exp $
.DELETE_ON_ERROR:
@@ -139,7 +139,7 @@ $(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
%.po: $(I18Npot)
- msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
+ msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr.mo: $(PODIR)/%.mo
diff --git a/PLUGINS/src/pictures/HISTORY b/PLUGINS/src/pictures/HISTORY
index b63a81b..4f880c6 100644
--- a/PLUGINS/src/pictures/HISTORY
+++ b/PLUGINS/src/pictures/HISTORY
@@ -59,3 +59,7 @@ VDR Plugin 'pictures' Revision History
2011-11-02:
- Fixed handling images that are rotated by 180 degrees in pic2mpg.
+
+2012-01-08:
+
+- Added option -o to pic2mpg.
diff --git a/PLUGINS/src/pictures/pic2mpg b/PLUGINS/src/pictures/pic2mpg
index 17a8791..2895ca8 100755
--- a/PLUGINS/src/pictures/pic2mpg
+++ b/PLUGINS/src/pictures/pic2mpg
@@ -7,7 +7,7 @@
#
# See the README file for copyright information and how to reach the author.
#
-# $Id: pic2mpg 2.3 2011/11/02 17:20:37 kls Exp $
+# $Id: pic2mpg 2.4 2012/01/08 13:27:17 kls Exp $
use File::Path;
use File::Spec;
@@ -20,15 +20,17 @@ Usage: $0 [options] picture-dir mpeg-dir
Options: -f Force conversion
-h print Help
+ -o percent overscan in percent
-s size Screen size (WIDTHxHEIGHT, default is 1920x1080)
-v num Verbose (0=none, 1=list files, 2=detailed)
};
-getopts("fhs:v:") || die $Usage;
+getopts("fho:s:v:") || die $Usage;
die $Usage if $opt_h;
$Force = $opt_f;
+$Overscan = $opt_o || 0;
$Size = $opt_s || "1920x1080";
$Verbose = $opt_v;
@@ -54,6 +56,15 @@ die "$0: missing parameter\n" unless $ARGV[0] && $ARGV[1];
die "$0: file or directory not found: $ARGV[0]\n" unless -e $ARGV[0];
die "$0: source and destination must be different\n" if $ARGV[0] eq $ARGV[1];
+$Extent = $Size;
+if ($Overscan > 0) {
+ my ($x, $y) = $Size =~ /(.*)x(.*)/;
+ my $r = (100 + $Overscan) / 100;
+ $x = int($x * $r + 0.5);
+ $y = int($y * $r + 0.5);
+ $Extent = "${x}x$y";
+ }
+
# Convert a single file:
if (-f $ARGV[0]) {
@@ -130,7 +141,7 @@ sub ConvertFile
$Pict = EscapeMeta($Pict);
$Mpeg = EscapeMeta($Mpeg);
print "$Pict -> $Mpeg $Rotate\n" if $ListFiles;
- my $Cmd = "convert $Pict -background '#000000' $Rotate -resize $Size -gravity center -extent $Size ppm:- | "
+ my $Cmd = "convert $Pict -background '#000000' $Rotate -resize $Size -gravity center -extent $Extent ppm:- | "
. "ffmpeg -f image2pipe -vcodec ppm -i pipe:0 -an -vcodec libx264 -vpre baseline -s $Size -qscale 2 -f mpegts -y $Mpeg "
. ($Detailed ? "" : "2>/dev/null");
!system($Cmd) || die "$Cmd: $!\n";
diff --git a/config.c b/config.c
index 94f6845..9015a53 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 2.16 2011/12/03 15:21:30 kls Exp $
+ * $Id: config.c 2.18 2012/01/14 13:04:59 kls Exp $
*/
#include "config.h"
@@ -69,7 +69,6 @@ cSatCableNumbers::cSatCableNumbers(int Size, const char *s)
{
size = Size;
array = MALLOC(int, size);
- memset(array, size * sizeof(int), 0);
FromString(s);
}
@@ -454,6 +453,7 @@ cSetup::cSetup(void)
NextWakeupTime = 0;
MultiSpeedMode = 0;
ShowReplayMode = 0;
+ ShowRemainingTime = 0;
ResumeID = 0;
CurrentChannel = -1;
CurrentVolume = MAXVOLUME;
@@ -648,6 +648,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "NextWakeupTime")) NextWakeupTime = atoi(Value);
else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = atoi(Value);
+ else if (!strcasecmp(Name, "ShowRemainingTime")) ShowRemainingTime = atoi(Value);
else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value);
else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
@@ -745,6 +746,7 @@ bool cSetup::Save(void)
Store("NextWakeupTime", NextWakeupTime);
Store("MultiSpeedMode", MultiSpeedMode);
Store("ShowReplayMode", ShowReplayMode);
+ Store("ShowRemainingTime", ShowRemainingTime);
Store("ResumeID", ResumeID);
Store("CurrentChannel", CurrentChannel);
Store("CurrentVolume", CurrentVolume);
diff --git a/config.h b/config.h
index 73db58f..d27afd9 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 2.36 2011/12/03 14:19:52 kls Exp $
+ * $Id: config.h 2.39 2012/01/14 13:03:53 kls Exp $
*/
#ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number:
-#define VDRVERSION "1.7.22"
-#define VDRVERSNUM 10722 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.7.23"
+#define VDRVERSNUM 10723 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
-#define APIVERSION "1.7.22"
-#define APIVERSNUM 10722 // Version * 10000 + Major * 100 + Minor
+#define APIVERSION "1.7.23"
+#define APIVERSNUM 10723 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
@@ -122,7 +122,7 @@ public:
if (!isempty(s)) {
T *l = new T;
if (l->Parse(s))
- Add(l);
+ this->Add(l);
else {
esyslog("ERROR: error in %s, line %d", fileName, line);
delete l;
@@ -302,6 +302,7 @@ public:
time_t NextWakeupTime;
int MultiSpeedMode;
int ShowReplayMode;
+ int ShowRemainingTime;
int ResumeID;
int CurrentChannel;
int CurrentVolume;
diff --git a/dvbdevice.c b/dvbdevice.c
index 163fce3..3915397 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 2.48 2011/12/03 15:24:27 kls Exp $
+ * $Id: dvbdevice.c 2.56 2012/01/15 14:31:47 kls Exp $
*/
#include "dvbdevice.h"
@@ -44,9 +44,12 @@ const tDvbParameterMap InversionValues[] = {
};
const tDvbParameterMap BandwidthValues[] = {
- { 6, 6000000, "6 MHz" },
- { 7, 7000000, "7 MHz" },
- { 8, 8000000, "8 MHz" },
+ { 5, 5000000, "5 MHz" },
+ { 6, 6000000, "6 MHz" },
+ { 7, 7000000, "7 MHz" },
+ { 8, 8000000, "8 MHz" },
+ { 10, 10000000, "10 MHz" },
+ { 1712, 1712000, "1.712 MHz" },
{ -1, 0, NULL }
};
@@ -75,31 +78,49 @@ const tDvbParameterMap ModulationValues[] = {
{ 2, QPSK, "QPSK" },
{ 5, PSK_8, "8PSK" },
{ 6, APSK_16, "16APSK" },
+ { 7, APSK_32, "32APSK" },
{ 10, VSB_8, "VSB8" },
{ 11, VSB_16, "VSB16" },
- { 998, QAM_AUTO, "QAMAUTO" },
+ { 12, DQPSK, "DQPSK" },
+ { 999, QAM_AUTO, trNOOP("auto") },
{ -1, 0, NULL }
};
-const tDvbParameterMap SystemValues[] = {
- { 0, SYS_DVBS, "DVB-S" },
- { 1, SYS_DVBS2, "DVB-S2" },
+#define DVB_SYSTEM_1 0 // see also nit.c
+#define DVB_SYSTEM_2 1
+
+const tDvbParameterMap SystemValuesSat[] = {
+ { 0, DVB_SYSTEM_1, "DVB-S" },
+ { 1, DVB_SYSTEM_2, "DVB-S2" },
+ { -1, 0, NULL }
+ };
+
+const tDvbParameterMap SystemValuesTerr[] = {
+ { 0, DVB_SYSTEM_1, "DVB-T" },
+ { 1, DVB_SYSTEM_2, "DVB-T2" },
{ -1, 0, NULL }
};
const tDvbParameterMap TransmissionValues[] = {
+ { 1, TRANSMISSION_MODE_1K, "1K" },
{ 2, TRANSMISSION_MODE_2K, "2K" },
+ { 4, TRANSMISSION_MODE_4K, "4K" },
{ 8, TRANSMISSION_MODE_8K, "8K" },
+ { 16, TRANSMISSION_MODE_16K, "16K" },
+ { 32, TRANSMISSION_MODE_32K, "32K" },
{ 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
{ -1, 0, NULL }
};
const tDvbParameterMap GuardValues[] = {
- { 4, GUARD_INTERVAL_1_4, "1/4" },
- { 8, GUARD_INTERVAL_1_8, "1/8" },
- { 16, GUARD_INTERVAL_1_16, "1/16" },
- { 32, GUARD_INTERVAL_1_32, "1/32" },
- { 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
+ { 4, GUARD_INTERVAL_1_4, "1/4" },
+ { 8, GUARD_INTERVAL_1_8, "1/8" },
+ { 16, GUARD_INTERVAL_1_16, "1/16" },
+ { 32, GUARD_INTERVAL_1_32, "1/32" },
+ { 128, GUARD_INTERVAL_1_128, "1/128" },
+ { 19128, GUARD_INTERVAL_19_128, "19/128" },
+ { 19256, GUARD_INTERVAL_19_256, "19/256" },
+ { 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
{ -1, 0, NULL }
};
@@ -179,11 +200,12 @@ cDvbTransponderParameters::cDvbTransponderParameters(const char *Parameters)
coderateH = FEC_AUTO;
coderateL = FEC_AUTO;
modulation = QPSK;
- system = SYS_DVBS;
+ system = DVB_SYSTEM_1;
transmission = TRANSMISSION_MODE_AUTO;
guard = GUARD_INTERVAL_AUTO;
hierarchy = HIERARCHY_AUTO;
rollOff = ROLLOFF_AUTO;
+ plpId = 0;
Parse(Parameters);
}
@@ -194,21 +216,22 @@ int cDvbTransponderParameters::PrintParameter(char *p, char Name, int Value) con
cString cDvbTransponderParameters::ToString(char Type) const
{
-#define ST(s) if (strchr(s, Type))
+#define ST(s) if (strchr(s, Type) && (strchr(s, '0' + system + 1) || strchr(s, '*')))
char buffer[64];
char *q = buffer;
*q = 0;
- ST(" S ") q += sprintf(q, "%c", polarization);
- ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
- ST(" CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
- ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
- ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
- ST("ACST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
- ST("ACST") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
- ST(" S ") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
- ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues));
- ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
- ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+ ST(" S *") q += sprintf(q, "%c", polarization);
+ ST(" T*") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
+ ST(" CST*") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
+ ST(" T*") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
+ ST(" T*") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
+ ST("ACST*") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
+ ST("ACST*") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
+ ST(" S 2") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
+ ST(" T2") q += PrintParameter(q, 'P', plpId);
+ ST(" ST*") q += PrintParameter(q, 'S', MapToUser(system, SystemValuesSat)); // we only need the numerical value, so Sat or Terr doesn't matter
+ ST(" T*") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
+ ST(" T*") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
return buffer;
}
@@ -219,7 +242,7 @@ const char *cDvbTransponderParameters::ParseParameter(const char *s, int &Value,
errno = 0;
int n = strtol(s, &p, 10);
if (!errno && p != s) {
- Value = MapToDriver(n, Map);
+ Value = Map ? MapToDriver(n, Map) : n;
if (Value >= 0)
return p;
}
@@ -241,8 +264,9 @@ bool cDvbTransponderParameters::Parse(const char *s)
case 'L': polarization = *s++; break;
case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
+ case 'P': s = ParseParameter(s, plpId); break;
case 'R': polarization = *s++; break;
- case 'S': s = ParseParameter(s, system, SystemValues); break;
+ case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter
case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
case 'V': polarization = *s++; break;
case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
@@ -268,10 +292,10 @@ private:
int tuneTimeout;
int lockTimeout;
time_t lastTimeoutReport;
- fe_delivery_system frontendType;
cChannel channel;
const cDiseqc *lastDiseqc;
const cScr *scr;
+ bool lnbPowerTurnedOn;
eTunerStatus tunerStatus;
cMutex mutex;
cCondVar locked;
@@ -279,6 +303,7 @@ private:
cDvbTuner *bondedTuner;
bool bondedMaster;
bool bondedMasterFailed;
+ bool SetFrontendType(const cChannel *Channel);
cString GetBondingParams(const cChannel *Channel = NULL) const;
void ClearEventQueue(void) const;
bool GetFrontendStatus(fe_status_t &Status) const;
@@ -287,7 +312,7 @@ private:
bool SetFrontend(void);
virtual void Action(void);
public:
- cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType);
+ cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend);
virtual ~cDvbTuner();
bool Bond(cDvbTuner *Tuner);
void UnBond(void);
@@ -304,25 +329,23 @@ public:
cMutex cDvbTuner::bondMutex;
-cDvbTuner::cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType)
+cDvbTuner::cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend)
{
device = Device;
fd_frontend = Fd_Frontend;
adapter = Adapter;
frontend = Frontend;
- frontendType = FrontendType;
subsystemId = cDvbDeviceProbe::GetSubsystemId(adapter, frontend);
tuneTimeout = 0;
lockTimeout = 0;
lastTimeoutReport = 0;
lastDiseqc = NULL;
scr = NULL;
+ lnbPowerTurnedOn = false;
tunerStatus = tsIdle;
bondedTuner = NULL;
bondedMaster = false;
bondedMasterFailed = false;
- if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2)
- ResetToneAndVoltage(); // must explicitly turn on LNB power
SetDescription("tuner on frontend %d/%d", adapter, frontend);
Start();
}
@@ -346,16 +369,12 @@ bool cDvbTuner::Bond(cDvbTuner *Tuner)
{
cMutexLock MutexLock(&bondMutex);
if (!bondedTuner) {
- if ((frontendType == SYS_DVBS || frontendType == SYS_DVBS2) && (Tuner->frontendType == SYS_DVBS || Tuner->frontendType == SYS_DVBS2)) {
- ResetToneAndVoltage();
- bondedMaster = false; // makes sure we don't disturb an existing master
- bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner;
- Tuner->bondedTuner = this;
- dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend);
- return true;
- }
- else
- esyslog("ERROR: can't bond tuner %d/%d with tuner %d/%d (only DVB-S(2) tuners can be bonded)", adapter, frontend, Tuner->adapter, Tuner->frontend);
+ ResetToneAndVoltage();
+ bondedMaster = false; // makes sure we don't disturb an existing master
+ bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner;
+ Tuner->bondedTuner = this;
+ dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend);
+ return true;
}
else
esyslog("ERROR: tuner %d/%d already bonded with tuner %d/%d, can't bond with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend, Tuner->adapter, Tuner->frontend);
@@ -468,7 +487,7 @@ void cDvbTuner::SetChannel(const cChannel *Channel)
t->SetChannel(NULL);
}
}
- else if (!BondedMaster->device->Receiving())
+ else if (strcmp(GetBondingParams(Channel), BondedMaster->GetBondingParams()) != 0)
BondedMaster->SetChannel(Channel);
}
cMutexLock MutexLock(&mutex);
@@ -618,7 +637,7 @@ int cDvbTuner::GetSignalQuality(void) const
if (q > 100)
q = 100;
#ifdef DEBUG_SIGNALQUALITY
- fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q);
+ fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %d %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasSnr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q);
#endif
return q;
}
@@ -634,6 +653,13 @@ static unsigned int FrequencyToHz(unsigned int f)
void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
{
+ if (!lnbPowerTurnedOn) {
+ CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); // must explicitly turn on LNB power
+ lnbPowerTurnedOn = true;
+ }
+ static cMutex Mutex;
+ if (Diseqc->IsScr())
+ Mutex.Lock();
struct dvb_diseqc_master_cmd cmd;
const char *CurrentAction = NULL;
for (;;) {
@@ -654,6 +680,8 @@ void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
}
if (scr)
ResetToneAndVoltage(); // makes sure we don't block the bus!
+ if (Diseqc->IsScr())
+ Mutex.Unlock();
}
void cDvbTuner::ResetToneAndVoltage(void)
@@ -662,6 +690,22 @@ void cDvbTuner::ResetToneAndVoltage(void)
CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF));
}
+static int GetRequiredDeliverySystem(const cChannel *Channel, const cDvbTransponderParameters *Dtp)
+{
+ int ds = SYS_UNDEFINED;
+ if (Channel->IsAtsc())
+ ds = SYS_ATSC;
+ else if (Channel->IsCable())
+ ds = SYS_DVBC_ANNEX_AC;
+ else if (Channel->IsSat())
+ ds = Dtp->System() == DVB_SYSTEM_1 ? SYS_DVBS : SYS_DVBS2;
+ else if (Channel->IsTerr())
+ ds = Dtp->System() == DVB_SYSTEM_1 ? SYS_DVBT : SYS_DVBT2;
+ else
+ esyslog("ERROR: can't determine frontend type for channel %d", Channel->Number());
+ return ds;
+}
+
bool cDvbTuner::SetFrontend(void)
{
#define MAXFRONTENDCMDS 16
@@ -686,6 +730,12 @@ bool cDvbTuner::SetFrontend(void)
cDvbTransponderParameters dtp(channel.Parameters());
+ // Determine the required frontend type:
+ int frontendType = GetRequiredDeliverySystem(&channel, &dtp);
+ if (frontendType == SYS_UNDEFINED)
+ return false;
+
+ SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) {
unsigned int frequency = channel.Frequency();
if (Setup.DiSEqC) {
@@ -728,22 +778,15 @@ bool cDvbTuner::SetFrontend(void)
frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF
// DVB-S/DVB-S2 (common parts)
- SETCMD(DTV_DELIVERY_SYSTEM, dtp.System());
SETCMD(DTV_FREQUENCY, frequency * 1000UL);
SETCMD(DTV_MODULATION, dtp.Modulation());
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
SETCMD(DTV_INNER_FEC, dtp.CoderateH());
SETCMD(DTV_INVERSION, dtp.Inversion());
- if (dtp.System() == SYS_DVBS2) {
- if (frontendType == SYS_DVBS2) {
- // DVB-S2
- SETCMD(DTV_PILOT, PILOT_AUTO);
- SETCMD(DTV_ROLLOFF, dtp.RollOff());
- }
- else {
- esyslog("ERROR: frontend %d/%d doesn't provide DVB-S2", adapter, frontend);
- return false;
- }
+ if (frontendType == SYS_DVBS2) {
+ // DVB-S2
+ SETCMD(DTV_PILOT, PILOT_AUTO);
+ SETCMD(DTV_ROLLOFF, dtp.RollOff());
}
else {
// DVB-S
@@ -755,7 +798,6 @@ bool cDvbTuner::SetFrontend(void)
}
else if (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B) {
// DVB-C
- SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
@@ -765,9 +807,8 @@ bool cDvbTuner::SetFrontend(void)
tuneTimeout = DVBC_TUNE_TIMEOUT;
lockTimeout = DVBC_LOCK_TIMEOUT;
}
- else if (frontendType == SYS_DVBT) {
- // DVB-T
- SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
+ else if (frontendType == SYS_DVBT || frontendType == SYS_DVBT2) {
+ // DVB-T/DVB-T2 (common parts)
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_BANDWIDTH_HZ, dtp.Bandwidth());
@@ -777,13 +818,16 @@ bool cDvbTuner::SetFrontend(void)
SETCMD(DTV_TRANSMISSION_MODE, dtp.Transmission());
SETCMD(DTV_GUARD_INTERVAL, dtp.Guard());
SETCMD(DTV_HIERARCHY, dtp.Hierarchy());
+ if (frontendType == SYS_DVBT2) {
+ // DVB-T2
+ SETCMD(DTV_DVBT2_PLP_ID, dtp.PlpId());
+ }
tuneTimeout = DVBT_TUNE_TIMEOUT;
lockTimeout = DVBT_LOCK_TIMEOUT;
}
else if (frontendType == SYS_ATSC) {
// ATSC
- SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_MODULATION, dtp.Modulation());
@@ -903,11 +947,12 @@ void cDvbSourceParam::GetData(cChannel *Channel)
cOsdItem *cDvbSourceParam::GetOsdItem(void)
{
char type = Source();
+ const tDvbParameterMap *SystemValues = type == 'S' ? SystemValuesSat : SystemValuesTerr;
#undef ST
#define ST(s) if (strchr(s, type))
switch (param++) {
case 0: ST(" S ") return new cMenuEditChrItem( tr("Polarization"), &dtp.polarization, "HVLR"); else return GetOsdItem();
- case 1: ST(" S ") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem();
+ case 1: ST(" ST") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem();
case 2: ST(" CS ") return new cMenuEditIntItem( tr("Srate"), &srate); else return GetOsdItem();
case 3: ST("ACST") return new cMenuEditMapItem( tr("Inversion"), &dtp.inversion, InversionValues); else return GetOsdItem();
case 4: ST(" CST") return new cMenuEditMapItem( tr("CoderateH"), &dtp.coderateH, CoderateValues); else return GetOsdItem();
@@ -918,6 +963,7 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void)
case 9: ST(" T") return new cMenuEditMapItem( tr("Guard"), &dtp.guard, GuardValues); else return GetOsdItem();
case 10: ST(" T") return new cMenuEditMapItem( tr("Hierarchy"), &dtp.hierarchy, HierarchyValues); else return GetOsdItem();
case 11: ST(" S ") return new cMenuEditMapItem( tr("Rolloff"), &dtp.rollOff, RollOffValues); else return GetOsdItem();
+ case 12: ST(" T") return new cMenuEditIntItem( tr("PlpId"), &dtp.plpId, 0, 255); else return GetOsdItem();
default: return NULL;
}
return NULL;
@@ -928,7 +974,7 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void)
int cDvbDevice::setTransferModeForDolbyDigital = 1;
cMutex cDvbDevice::bondMutex;
-const char *DeliverySystems[] = {
+const char *DeliverySystemNames[] = {
"UNDEFINED",
"DVB-C",
"DVB-C",
@@ -945,6 +991,8 @@ const char *DeliverySystems[] = {
"DMBTH",
"CMMB",
"DAB",
+ "DVB-T2",
+ "TURBO",
NULL
};
@@ -954,8 +1002,8 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend)
frontend = Frontend;
ciAdapter = NULL;
dvbTuner = NULL;
- frontendType = SYS_UNDEFINED;
- numProvidedSystems = 0;
+ numDeliverySystems = 0;
+ numModulations = 0;
bondedDevice = NULL;
needsDetachBondedReceivers = false;
@@ -976,39 +1024,8 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend)
// We only check the devices that must be present - the others will be checked before accessing them://XXX
if (fd_frontend >= 0) {
- if (ioctl(fd_frontend, FE_GET_INFO, &frontendInfo) >= 0) {
- switch (frontendInfo.type) {
- case FE_QPSK: frontendType = (frontendInfo.caps & FE_CAN_2G_MODULATION) ? SYS_DVBS2 : SYS_DVBS; break;
- case FE_OFDM: frontendType = SYS_DVBT; break;
- case FE_QAM: frontendType = SYS_DVBC_ANNEX_AC; break;
- case FE_ATSC: frontendType = SYS_ATSC; break;
- default: esyslog("ERROR: unknown frontend type %d on frontend %d/%d", frontendInfo.type, adapter, frontend);
- }
- }
- else
- LOG_ERROR;
- if (frontendType != SYS_UNDEFINED) {
- numProvidedSystems++;
- if (frontendType == SYS_DVBS2)
- numProvidedSystems++;
- char Modulations[64];
- char *p = Modulations;
- if (frontendInfo.caps & FE_CAN_QPSK) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QPSK, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_QAM_16) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_16, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_QAM_32) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_32, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_QAM_64) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_64, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_QAM_128) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_128, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_QAM_256) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_256, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_8VSB) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(VSB_8, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_16VSB) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(VSB_16, ModulationValues)); }
- if (frontendInfo.caps & FE_CAN_TURBO_FEC){numProvidedSystems++; p += sprintf(p, ",%s", "TURBO_FEC"); }
- if (p != Modulations)
- p = Modulations + 1; // skips first ','
- else
- p = (char *)"unknown modulations";
- isyslog("frontend %d/%d provides %s with %s (\"%s\")", adapter, frontend, DeliverySystems[frontendType], p, frontendInfo.name);
- dvbTuner = new cDvbTuner(this, fd_frontend, adapter, frontend, frontendType);
- }
+ if (QueryDeliverySystems(fd_frontend))
+ dvbTuner = new cDvbTuner(this, fd_frontend, adapter, frontend);
}
else
esyslog("ERROR: can't open DVB device %d/%d", adapter, frontend);
@@ -1106,6 +1123,74 @@ LastAdapter:
return Found > 0;
}
+bool cDvbDevice::QueryDeliverySystems(int fd_frontend)
+{
+ numDeliverySystems = 0;
+ if (ioctl(fd_frontend, FE_GET_INFO, &frontendInfo) < 0) {
+ LOG_ERROR;
+ return false;
+ }
+#if DVB_API_VERSION > 5 || DVB_API_VERSION_MINOR >= 5
+ dtv_property Frontend[1];
+ memset(&Frontend, 0, sizeof(Frontend));
+ dtv_properties CmdSeq;
+ memset(&CmdSeq, 0, sizeof(CmdSeq));
+ CmdSeq.props = Frontend;
+ SETCMD(DTV_ENUM_DELSYS, 0);
+ int Result = ioctl(fd_frontend, FE_GET_PROPERTY, &CmdSeq);
+ if (Result == 0) {
+ for (uint i = 0; i < Frontend[0].u.buffer.len; i++) {
+ if (numDeliverySystems >= MAXDELIVERYSYSTEMS) {
+ esyslog("ERROR: too many delivery systems on frontend %d/%d", adapter, frontend);
+ break;
+ }
+ deliverySystems[numDeliverySystems++] = Frontend[0].u.buffer.data[i];
+ }
+ }
+ else {
+ esyslog("ERROR: can't query delivery systems on frontend %d/%d - falling back to legacy mode", adapter, frontend);
+#else
+ {
+#endif
+ // Legacy mode (DVB-API < 5.5):
+ switch (frontendInfo.type) {
+ case FE_QPSK: deliverySystems[numDeliverySystems++] = SYS_DVBS;
+ if (frontendInfo.caps & FE_CAN_2G_MODULATION)
+ deliverySystems[numDeliverySystems++] = SYS_DVBS2;
+ break;
+ case FE_OFDM: deliverySystems[numDeliverySystems++] = SYS_DVBT;
+ if (frontendInfo.caps & FE_CAN_2G_MODULATION)
+ deliverySystems[numDeliverySystems++] = SYS_DVBT2;
+ break;
+ case FE_QAM: deliverySystems[numDeliverySystems++] = SYS_DVBC_ANNEX_AC; break;
+ case FE_ATSC: deliverySystems[numDeliverySystems++] = SYS_ATSC; break;
+ default: esyslog("ERROR: unknown frontend type %d on frontend %d/%d", frontendInfo.type, adapter, frontend);
+ }
+ }
+ if (numDeliverySystems > 0) {
+ cString ds("");
+ for (int i = 0; i < numDeliverySystems; i++)
+ ds = cString::sprintf("%s%s%s", *ds, i ? "," : "", DeliverySystemNames[deliverySystems[i]]);
+ cString ms("");
+ if (frontendInfo.caps & FE_CAN_QPSK) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QPSK, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_QAM_16) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_16, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_QAM_32) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_32, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_QAM_64) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_64, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_QAM_128) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_128, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_QAM_256) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_256, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_8VSB) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(VSB_8, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_16VSB) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(VSB_16, ModulationValues)); }
+ if (frontendInfo.caps & FE_CAN_TURBO_FEC) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", "TURBO_FEC"); }
+ if (!**ms)
+ ms = "unknown modulations";
+ isyslog("frontend %d/%d provides %s with %s (\"%s\")", adapter, frontend, *ds, *ms, frontendInfo.name);
+ return true;
+ }
+ else
+ esyslog("ERROR: frontend %d/%d doesn't provide any delivery systems", adapter, frontend);
+ return false;
+}
+
bool cDvbDevice::Ready(void)
{
if (ciAdapter)
@@ -1126,7 +1211,7 @@ bool cDvbDevice::BondDevices(const char *Bondings)
if (cDevice *Device2 = cDevice::GetDevice(d)) {
if (cDvbDevice *DvbDevice1 = dynamic_cast<cDvbDevice *>(Device1)) {
if (cDvbDevice *DvbDevice2 = dynamic_cast<cDvbDevice *>(Device2)) {
- if (!DvbDevice2->Bond(DvbDevice1))
+ if (!DvbDevice1->Bond(DvbDevice2))
return false; // Bond() has already logged the error
}
else
@@ -1167,7 +1252,7 @@ bool cDvbDevice::Bond(cDvbDevice *Device)
cMutexLock MutexLock(&bondMutex);
if (!bondedDevice) {
if (Device != this) {
- if ((frontendType == SYS_DVBS || frontendType == SYS_DVBS2) && (Device->frontendType == SYS_DVBS || Device->frontendType == SYS_DVBS2)) {
+ if ((ProvidesDeliverySystem(SYS_DVBS) || ProvidesDeliverySystem(SYS_DVBS2)) && (Device->ProvidesDeliverySystem(SYS_DVBS) || Device->ProvidesDeliverySystem(SYS_DVBS2))) {
if (dvbTuner && Device->dvbTuner && dvbTuner->Bond(Device->dvbTuner)) {
bondedDevice = Device->bondedDevice ? Device->bondedDevice : Device;
Device->bondedDevice = this;
@@ -1285,14 +1370,23 @@ void cDvbDevice::CloseFilter(int Handle)
close(Handle);
}
+bool cDvbDevice::ProvidesDeliverySystem(int DeliverySystem) const
+{
+ for (int i = 0; i < numDeliverySystems; i++) {
+ if (deliverySystems[i] == DeliverySystem)
+ return true;
+ }
+ return false;
+}
+
bool cDvbDevice::ProvidesSource(int Source) const
{
int type = Source & cSource::st_Mask;
return type == cSource::stNone
- || type == cSource::stAtsc && (frontendType == SYS_ATSC)
- || type == cSource::stCable && (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B)
- || type == cSource::stSat && (frontendType == SYS_DVBS || frontendType == SYS_DVBS2)
- || type == cSource::stTerr && (frontendType == SYS_DVBT);
+ || type == cSource::stAtsc && ProvidesDeliverySystem(SYS_ATSC)
+ || type == cSource::stCable && (ProvidesDeliverySystem(SYS_DVBC_ANNEX_AC) || ProvidesDeliverySystem(SYS_DVBC_ANNEX_B))
+ || type == cSource::stSat && (ProvidesDeliverySystem(SYS_DVBS) || ProvidesDeliverySystem(SYS_DVBS2))
+ || type == cSource::stTerr && (ProvidesDeliverySystem(SYS_DVBT) || ProvidesDeliverySystem(SYS_DVBT2));
}
bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
@@ -1300,7 +1394,7 @@ bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
if (!ProvidesSource(Channel->Source()))
return false; // doesn't provide source
cDvbTransponderParameters dtp(Channel->Parameters());
- if (dtp.System() == SYS_DVBS2 && frontendType == SYS_DVBS ||
+ if (!ProvidesDeliverySystem(GetRequiredDeliverySystem(Channel, &dtp)) ||
dtp.Modulation() == QPSK && !(frontendInfo.caps & FE_CAN_QPSK) ||
dtp.Modulation() == QAM_16 && !(frontendInfo.caps & FE_CAN_QAM_16) ||
dtp.Modulation() == QAM_32 && !(frontendInfo.caps & FE_CAN_QAM_32) ||
@@ -1375,7 +1469,7 @@ bool cDvbDevice::ProvidesEIT(void) const
int cDvbDevice::NumProvidedSystems(void) const
{
- return numProvidedSystems;
+ return numDeliverySystems + numModulations;
}
int cDvbDevice::SignalStrength(void) const
diff --git a/dvbdevice.h b/dvbdevice.h
index 2072ab2..96dfa42 100644
--- a/dvbdevice.h
+++ b/dvbdevice.h
@@ -4,22 +4,22 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.h 2.18 2011/12/04 13:38:17 kls Exp $
+ * $Id: dvbdevice.h 2.21 2012/01/13 11:32:45 kls Exp $
*/
#ifndef __DVBDEVICE_H
#define __DVBDEVICE_H
-#include <sys/mman.h> // FIXME: workaround for broken linux-dvb header files
#include <linux/dvb/frontend.h>
#include <linux/dvb/version.h>
#include "device.h"
-#if DVB_API_VERSION < 5
-#error VDR requires Linux DVB driver API version 5.0 or higher!
+#if DVB_API_VERSION < 5 || (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 3)
+#error VDR requires Linux DVB driver API version 5.3 or higher!
#endif
#define MAXDVBDEVICES 8
+#define MAXDELIVERYSYSTEMS 8
#define DEV_VIDEO "/dev/video"
#define DEV_DVB_ADAPTER "/dev/dvb/adapter"
@@ -47,7 +47,8 @@ extern const tDvbParameterMap InversionValues[];
extern const tDvbParameterMap BandwidthValues[];
extern const tDvbParameterMap CoderateValues[];
extern const tDvbParameterMap ModulationValues[];
-extern const tDvbParameterMap SystemValues[];
+extern const tDvbParameterMap SystemValuesSat[];
+extern const tDvbParameterMap SystemValuesTerr[];
extern const tDvbParameterMap TransmissionValues[];
extern const tDvbParameterMap GuardValues[];
extern const tDvbParameterMap HierarchyValues[];
@@ -67,8 +68,9 @@ private:
int guard;
int hierarchy;
int rollOff;
+ int plpId;
int PrintParameter(char *p, char Name, int Value) const;
- const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map);
+ const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
public:
cDvbTransponderParameters(const char *Parameters = NULL);
char Polarization(void) const { return polarization; }
@@ -82,6 +84,7 @@ public:
int Guard(void) const { return guard; }
int Hierarchy(void) const { return hierarchy; }
int RollOff(void) const { return rollOff; }
+ int PlpId(void) const { return plpId; }
void SetPolarization(char Polarization) { polarization = Polarization; }
void SetInversion(int Inversion) { inversion = Inversion; }
void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; }
@@ -93,6 +96,7 @@ public:
void SetGuard(int Guard) { guard = Guard; }
void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; }
void SetRollOff(int RollOff) { rollOff = RollOff; }
+ void SetPlpId(int PlpId) { plpId = PlpId; }
cString ToString(char Type) const;
bool Parse(const char *s);
};
@@ -119,15 +123,19 @@ protected:
int adapter, frontend;
private:
dvb_frontend_info frontendInfo;
- int numProvidedSystems;
- fe_delivery_system frontendType;
+ int deliverySystems[MAXDELIVERYSYSTEMS];
+ int numDeliverySystems;
+ int numModulations;
int fd_dvr, fd_ca;
static cMutex bondMutex;
cDvbDevice *bondedDevice;
mutable bool needsDetachBondedReceivers;
+ bool QueryDeliverySystems(int fd_frontend);
public:
cDvbDevice(int Adapter, int Frontend);
virtual ~cDvbDevice();
+ int Adapter(void) const { return adapter; }
+ int Frontend(void) const { return frontend; }
virtual bool Ready(void);
static bool BondDevices(const char *Bondings);
///< Bonds the devices as defined in the given Bondings string.
@@ -167,6 +175,7 @@ private:
private:
cDvbTuner *dvbTuner;
public:
+ virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
virtual bool ProvidesSource(int Source) const;
virtual bool ProvidesTransponder(const cChannel *Channel) const;
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
diff --git a/dvbspu.c b/dvbspu.c
index 951e2f8..25af228 100644
--- a/dvbspu.c
+++ b/dvbspu.c
@@ -8,7 +8,7 @@
*
* parts of this file are derived from the OMS program.
*
- * $Id: dvbspu.c 2.8 2010/01/17 13:43:27 kls Exp $
+ * $Id: dvbspu.c 2.9 2011/12/10 14:39:19 kls Exp $
*/
#include "dvbspu.h"
@@ -496,7 +496,7 @@ int cDvbSpuDecoder::setTime(uint32_t pts)
if (!spu)
return 0;
- if (spu && !clean)
+ if (!clean)
Draw();
while (DCSQ_offset != prev_DCSQ_offset) { /* Display Control Sequences */
diff --git a/dvbsubtitle.c b/dvbsubtitle.c
index 272950f..c29277d 100644
--- a/dvbsubtitle.c
+++ b/dvbsubtitle.c
@@ -7,7 +7,7 @@
* Original author: Marco Schller <marco@lordzodiac.de>
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
*
- * $Id: dvbsubtitle.c 2.20 2011/09/18 11:23:15 kls Exp $
+ * $Id: dvbsubtitle.c 2.21 2012/01/11 10:34:07 kls Exp $
*/
@@ -995,7 +995,7 @@ void cDvbSubtitleConverter::SetOsdData(void)
double VideoAspect;
cDevice::PrimaryDevice()->GetOsdSize(OsdWidth, OsdHeight, OsdAspect);
cDevice::PrimaryDevice()->GetVideoSize(VideoWidth, VideoHeight, VideoAspect);
- if (OsdWidth == displayWidth && OsdHeight == displayHeight || VideoWidth == 0) {
+ if (OsdWidth == displayWidth && OsdHeight == displayHeight || DoubleEqual(VideoAspect, 1.0)) {
osdFactorX = osdFactorY = 1.0;
osdDeltaX = osdDeltaY = 0;
}
diff --git a/epg.c b/epg.c
index c2d1783..dccef32 100644
--- a/epg.c
+++ b/epg.c
@@ -7,7 +7,7 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
- * $Id: epg.c 2.7 2011/02/25 15:16:05 kls Exp $
+ * $Id: epg.c 2.9 2012/01/12 14:31:46 kls Exp $
*/
#include "epg.h"
@@ -828,10 +828,17 @@ void cEvent::FixEpgBugs(void)
Final:
- // VDR can't usefully handle newline characters in the title and shortText of EPG
+ // VDR can't usefully handle newline characters in the title, shortText or component description of EPG
// data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel):
strreplace(title, '\n', ' ');
strreplace(shortText, '\n', ' ');
+ if (components) {
+ for (int i = 0; i < components->NumComponents(); i++) {
+ tComponent *p = components->Component(i);
+ if (p->description)
+ strreplace(p->description, '\n', ' ');
+ }
+ }
/* TODO adapt to UTF-8
// Same for control characters:
strreplace(title, '\x86', ' ');
@@ -1022,10 +1029,15 @@ void cSchedule::Cleanup(void)
void cSchedule::Cleanup(time_t Time)
{
- cEvent *Event;
- while ((Event = events.First()) != NULL) {
- if (!Event->HasTimer() && Event->EndTime() + Setup.EPGLinger * 60 + 3600 < Time) // adding one hour for safety
- DelEvent(Event);
+ cEvent *Event = events.First();
+ while (Event) {
+ if (Event->HasTimer())
+ Event = (cEvent *)Event->Next();
+ else if (Event->EndTime() + Setup.EPGLinger * 60 + 3600 < Time) { // adding one hour for safety
+ cEvent *e = Event;
+ Event = (cEvent *)Event->Next();
+ DelEvent(e);
+ }
else
break;
}
diff --git a/font.c b/font.c
index 16d1013..b391345 100644
--- a/font.c
+++ b/font.c
@@ -6,7 +6,7 @@
*
* BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya.
*
- * $Id: font.c 2.8 2011/03/28 16:29:51 kls Exp $
+ * $Id: font.c 2.9 2012/01/13 09:43:22 kls Exp $
*/
#include "font.h"
@@ -508,25 +508,27 @@ cString cFont::GetFontFileName(const char *FontName)
#ifdef BIDI
cString cFont::Bidi(const char *Ltr)
{
- fribidi_set_mirroring(true);
- fribidi_set_reorder_nsm(false);
- FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8;
- int LtrLen = strlen(Ltr);
- FriBidiCharType Base = FRIBIDI_TYPE_L;
- FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ;
- int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical);
- FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ;
- char *Rtl = NULL;
- bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL);
- if (ok) {
- fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL);
- Rtl = MALLOC(char, RtlLen * 4 + 1);
- fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl);
+ if (cCharSetConv::SystemCharacterTable()) { // bidi requires UTF-8
+ fribidi_set_mirroring(true);
+ fribidi_set_reorder_nsm(false);
+ FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8;
+ int LtrLen = strlen(Ltr);
+ FriBidiCharType Base = FRIBIDI_TYPE_L;
+ FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ;
+ int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical);
+ FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ;
+ char *Rtl = NULL;
+ bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL);
+ if (ok) {
+ fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL);
+ Rtl = MALLOC(char, RtlLen * 4 + 1);
+ fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl);
+ }
+ free(Logical);
+ free(Visual);
+ if (ok)
+ return cString(Rtl, true);
}
- free(Logical);
- free(Visual);
- if (ok)
- return cString(Rtl, true);
return cString(Ltr);
}
#endif
diff --git a/libsi/descriptor.c b/libsi/descriptor.c
index 06a58c0..07429b5 100644
--- a/libsi/descriptor.c
+++ b/libsi/descriptor.c
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: descriptor.c 2.2 2011/06/15 21:26:00 kls Exp $
+ * $Id: descriptor.c 2.4 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@@ -876,6 +876,52 @@ int ExtensionDescriptor::getExtensionDescriptorTag() const {
return s->descriptor_tag_extension;
}
+void T2DeliverySystemDescriptor::Parse() {
+ int offset=0;
+ data.setPointerAndOffset<const descr_t2_delivery_system>(s, offset);
+ extended_data_flag = s->descriptor_length > 0x04;
+}
+
+int T2DeliverySystemDescriptor::getExtendedDataFlag() const {
+ return extended_data_flag;
+}
+
+int T2DeliverySystemDescriptor::getExtensionDescriptorTag() const {
+ return s->descriptor_tag_extension;
+}
+
+int T2DeliverySystemDescriptor::getPlpId() const {
+ return s->plp_id;
+}
+
+int T2DeliverySystemDescriptor::getT2SystemId() const {
+ return HILO(s->t2_system_id);
+}
+
+int T2DeliverySystemDescriptor::getSisoMiso() const {
+ return extended_data_flag ? s->siso_miso : -1;
+}
+
+int T2DeliverySystemDescriptor::getBandwidth() const {
+ return extended_data_flag ? s->bandwidth : -1;
+}
+
+int T2DeliverySystemDescriptor::getGuardInterval() const {
+ return extended_data_flag ? s->guard_interval : -1;
+}
+
+int T2DeliverySystemDescriptor::getTransmissionMode() const {
+ return extended_data_flag ? s->transmission_mode : -1;
+}
+
+int T2DeliverySystemDescriptor::getOtherFrequencyFlag() const {
+ return extended_data_flag ? s->other_frequency_flag : -1;
+}
+
+int T2DeliverySystemDescriptor::getTfsFlag() const {
+ return extended_data_flag ? s->tfs_flag : -1;
+}
+
int PremiereContentTransmissionDescriptor::getOriginalNetworkId() const {
return HILO(s->original_network_id);
}
@@ -1005,8 +1051,14 @@ int MHP_TransportProtocolDescriptor::getComponentTag() const {
return componentTag;
}
+char *MHP_TransportProtocolDescriptor::getUrlBase(char *buffer, int size) {
+ return UrlBase.getText(buffer, size);
+}
+
void MHP_TransportProtocolDescriptor::Parse() {
int offset=0;
+ remote=false;
+ componentTag=-1;
data.setPointerAndOffset<const descr_transport_protocol>(s, offset);
if (getProtocolId() == ObjectCarousel) {
const transport_via_oc *oc;
@@ -1021,12 +1073,24 @@ void MHP_TransportProtocolDescriptor::Parse() {
data.setPointerAndOffset<const transport_via_oc_end>(rem, offset);
componentTag=rem->component_tag;
}
- } else { //unimplemented
- remote=false;
- componentTag=-1;
+ } else if (getProtocolId() == HTTPoverInteractionChannel) {
+ const transport_via_http *http;
+ data.setPointerAndOffset<const transport_via_http>(http, offset);
+ UrlBase.setDataAndOffset(data+offset, http->url_base_length, offset);
+
+ // fill URL Extension,
+ UrlExtensionLoop.setData(data+offset, getLength()-offset);
+ } else {
+ //unimplemented
}
}
+void MHP_TransportProtocolDescriptor::UrlExtensionEntry::Parse() {
+ const descr_url_extension_entry *s;
+ s=data.getData<const descr_url_extension_entry>();
+ UrlExtension.setData(data, s->url_extension_length);
+}
+
void MHP_DVBJApplicationDescriptor::Parse() {
applicationLoop.setData(data+sizeof(descr_dvbj_application), getLength()-sizeof(descr_dvbj_application));
}
@@ -1059,6 +1123,17 @@ void MHP_ApplicationIconsDescriptor::Parse() {
data.setPointerAndOffset<const descr_application_icons_descriptor_end>(s, offset);
}
+char *MHP_SimpleApplicationLocationDescriptor::getLocation(char *buffer, int size) {
+ return location.getText(buffer, size);
+}
+
+void MHP_SimpleApplicationLocationDescriptor::Parse() {
+ int offset=0;
+ const descr_simple_application_location_descriptor *loc;
+ data.setPointerAndOffset<const descr_simple_application_location_descriptor>(loc, offset);
+ location.setDataAndOffset(data+offset, loc->descriptor_length, offset);
+}
+
int RegistrationDescriptor::getFormatIdentifier() const {
return HILOHILO(s->format_identifier);
}
diff --git a/libsi/descriptor.h b/libsi/descriptor.h
index f105f7a..3025876 100644
--- a/libsi/descriptor.h
+++ b/libsi/descriptor.h
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: descriptor.h 2.2 2011/06/15 21:26:00 kls Exp $
+ * $Id: descriptor.h 2.4 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@@ -538,6 +538,25 @@ private:
const descr_extension *s;
};
+class T2DeliverySystemDescriptor : public Descriptor {
+public:
+ int getExtendedDataFlag() const;
+ int getExtensionDescriptorTag() const;
+ int getPlpId() const;
+ int getT2SystemId() const;
+ int getSisoMiso() const;
+ int getBandwidth() const;
+ int getGuardInterval() const;
+ int getTransmissionMode() const;
+ int getOtherFrequencyFlag() const;
+ int getTfsFlag() const;
+protected:
+ virtual void Parse();
+private:
+ const descr_t2_delivery_system *s;
+ int extended_data_flag;
+};
+
// Private DVB Descriptor Premiere.de
// 0xF2 Content Transmission Descriptor
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html
@@ -639,17 +658,29 @@ protected:
class MHP_TransportProtocolDescriptor : public Descriptor {
public:
+ class UrlExtensionEntry : public LoopElement {
+ public:
+ virtual int getLength() { return sizeof(descr_url_extension_entry)+UrlExtension.getLength(); }
+ String UrlExtension;
+ protected:
+ virtual void Parse();
+ };
+
enum Protocol { ObjectCarousel = 0x01, IPviaDVB = 0x02, HTTPoverInteractionChannel = 0x03 };
int getProtocolId() const;
int getProtocolLabel() const;
bool isRemote() const;
int getComponentTag() const;
+ char *getUrlBase(char *buffer, int size);
+ StructureLoop<UrlExtensionEntry> UrlExtensionLoop;
+
protected:
virtual void Parse();
private:
const descr_transport_protocol *s;
bool remote;
int componentTag;
+ String UrlBase;
};
class MHP_DVBJApplicationDescriptor : public Descriptor {
@@ -685,6 +716,15 @@ private:
const descr_application_icons_descriptor_end *s;
};
+class MHP_SimpleApplicationLocationDescriptor : public Descriptor {
+public:
+ char *getLocation(char *buffer, int size);
+protected:
+ virtual void Parse();
+private:
+ String location;
+};
+
class RegistrationDescriptor : public Descriptor {
public:
int getFormatIdentifier() const;
diff --git a/libsi/headers.h b/libsi/headers.h
index 6867d2c..daea50e 100644
--- a/libsi/headers.h
+++ b/libsi/headers.h
@@ -10,7 +10,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: headers.h 2.2 2011/06/15 21:26:00 kls Exp $
+ * $Id: headers.h 2.4 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@@ -1839,6 +1839,37 @@ struct descr_extension {
u_char descriptor_tag_extension :8;
};
+/* extension 0x04 t2_delivery_system_descriptor */
+
+struct descr_t2_delivery_system {
+ u_char descriptor_tag :8;
+ u_char descriptor_length :8;
+ u_char descriptor_tag_extension :8;
+ u_char plp_id :8;
+ u_char t2_system_id_hi :8;
+ u_char t2_system_id_lo :8;
+#if BYTE_ORDER == BIG_ENDIAN
+ u_char siso_miso :2;
+ u_char bandwidth :4;
+ u_char reserved :2;
+ u_char guard_interval :3;
+ u_char transmission_mode :3;
+ u_char other_frequency_flag :1;
+ u_char tfs_flag :1;
+#else
+ u_char reserved :2;
+ u_char bandwidth :4;
+ u_char siso_miso :2;
+ u_char tfs_flag :1;
+ u_char other_frequency_flag :1;
+ u_char transmission_mode :3;
+ u_char guard_interval :3;
+#endif
+/* now follow cell_id, frequency_loop_length, centre_frequency,
+ subcell_info_loop_length, cell_id_extension, transposer_frequency
+ fields looping to the end */
+};
+
/* MHP 0x00 application_descriptor */
#define DESCR_APPLICATION_LEN 3
@@ -1907,6 +1938,11 @@ struct descr_transport_protocol {
/* protocol_id-specific selector bytes follow */
};
+struct descr_url_extension_entry {
+ u_char url_extension_length :8;
+ /* URL extension string */
+};
+
#define TRANSPORT_VIA_OC_LEN 1
struct transport_via_oc {
@@ -1940,6 +1976,12 @@ struct transport_via_oc_end {
u_char component_tag :8;
};
+#define TRANSPORT_VIA_HTTP_LEN 1
+
+struct transport_via_http {
+ u_char url_base_length :8;
+};
+
/* 0x03 dvb_j_application_descriptor() */
#define DESCR_DVBJ_APPLICATION_LEN 2
@@ -1991,6 +2033,16 @@ struct descr_application_icons_descriptor_end {
u_char icon_flags_lo :8;
};
+/* 0x15 simple application location descrptor */
+
+#define DESCR_SIMPLE_APPLICATION_LOCATION_LEN 3
+
+struct descr_simple_application_location_descriptor {
+ u_char descriptor_tag :8;
+ u_char descriptor_length :8;
+ /* inital_path_bytes */
+};
+
// Private DVB Descriptor Premiere.de
// 0xF2 Content Transmission Descriptor
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html
diff --git a/libsi/si.c b/libsi/si.c
index 82123e1..4db917b 100644
--- a/libsi/si.c
+++ b/libsi/si.c
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: si.c 2.5 2011/12/04 15:06:18 kls Exp $
+ * $Id: si.c 2.6 2011/12/10 15:47:15 kls Exp $
* *
***************************************************************************/
@@ -690,6 +690,9 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
case MHP_DVBJApplicationLocationDescriptorTag:
d=new MHP_DVBJApplicationLocationDescriptor();
break;
+ case MHP_SimpleApplicationLocationDescriptorTag:
+ d=new MHP_SimpleApplicationLocationDescriptor();
+ break;
// 0x05 - 0x0A is unimplemented this library
case MHP_ExternalApplicationAuthorisationDescriptorTag:
case MHP_IPv4RoutingDescriptorTag:
diff --git a/libsi/si.h b/libsi/si.h
index d6a1dc1..4dccdd8 100644
--- a/libsi/si.h
+++ b/libsi/si.h
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: si.h 2.3 2010/02/13 10:31:34 kls Exp $
+ * $Id: si.h 2.5 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@@ -134,6 +134,19 @@ enum DescriptorTag {
DTSDescriptorTag = 0x7B,
AACDescriptorTag = 0x7C,
ExtensionDescriptorTag = 0x7F,
+ // Extension descriptors
+ ImageIconDescriptorTag = 0x00,
+ CpcmDeliverySignallingDescriptor = 0x01,
+ CPDescriptorTag = 0x02,
+ CPIdentifierDescriptorTag = 0x03,
+ T2DeliverySystemDescriptorTag = 0x04,
+ SHDeliverySystemDescriptorTag = 0x05,
+ SupplementaryAudioDescriptorTag = 0x06,
+ NetworkChangeNotifyDescriptorTag = 0x07,
+ MessageDescriptorTag = 0x08,
+ TargetRegionDescriptorTag = 0x09,
+ TargetRegionNameDescriptorTag = 0x0A,
+ ServiceRelocatedDescriptorTag = 0x0B,
// Defined by ETSI TS 102 812 (MHP)
// They once again start with 0x00 (see page 234, MHP specification)
@@ -153,6 +166,8 @@ enum DescriptorTag {
MHP_PrefetchDescriptorTag = 0x0C,
MHP_DelegatedApplicationDescriptorTag = 0x0E,
MHP_ApplicationStorageDescriptorTag = 0x10,
+ MHP_SimpleApplicationLocationDescriptorTag = 0x15,
+ MHP_SimpleApplicationBoundaryDescriptorTag = 0x17,
// Premiere private Descriptor Tags
PremiereContentTransmissionDescriptorTag = 0xF2,
diff --git a/menu.c b/menu.c
index 9167f47..eb07c81 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 2.34 2011/12/04 14:52:38 kls Exp $
+ * $Id: menu.c 2.35 2012/01/14 13:06:03 kls Exp $
*/
#include "menu.h"
@@ -3114,6 +3114,7 @@ cMenuSetupReplay::cMenuSetupReplay(void)
SetSection(tr("Replay"));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
+ Add(new cMenuEditBoolItem(tr("Setup.Replay$Show remaining time"), &data.ShowRemainingTime));
Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
}
@@ -4568,12 +4569,15 @@ bool cReplayControl::ShowProgress(bool Initial)
displayReplay->SetTitle(title);
lastCurrent = lastTotal = -1;
}
- if (Total != lastTotal) {
- displayReplay->SetTotal(IndexToHMSF(Total, false, FramesPerSecond()));
- if (!Initial)
- displayReplay->Flush();
- }
if (Current != lastCurrent || Total != lastTotal) {
+ if (Setup.ShowRemainingTime || Total != lastTotal) {
+ int Index = Total;
+ if (Setup.ShowRemainingTime)
+ Index = Current - Index;
+ displayReplay->SetTotal(IndexToHMSF(Index, false, FramesPerSecond()));
+ if (!Initial)
+ displayReplay->Flush();
+ }
displayReplay->SetProgress(Current, Total);
if (!Initial)
displayReplay->Flush();
diff --git a/nit.c b/nit.c
index 0603e24..c18aa82 100644
--- a/nit.c
+++ b/nit.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: nit.c 2.6 2011/08/12 14:27:31 kls Exp $
+ * $Id: nit.c 2.9 2012/01/12 08:43:52 kls Exp $
*/
#include "nit.h"
@@ -16,6 +16,9 @@
#include "libsi/descriptor.h"
#include "tools.h"
+#define DVB_SYSTEM_1 0 // see also dvbdevice.c
+#define DVB_SYSTEM_2 1
+
cNitFilter::cNitFilter(void)
{
numNits = 0;
@@ -134,7 +137,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
dtp.SetCoderateH(CodeRates[sd->getFecInner()]);
static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 };
dtp.SetModulation(Modulations[sd->getModulationType()]);
- dtp.SetSystem(sd->getModulationSystem() ? SYS_DVBS2 : SYS_DVBS);
+ dtp.SetSystem(sd->getModulationSystem() ? DVB_SYSTEM_2 : DVB_SYSTEM_1);
static int RollOffs[] = { ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_AUTO };
dtp.SetRollOff(sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO);
int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
@@ -242,10 +245,11 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
cDvbTransponderParameters dtp;
int Source = cSource::FromData(cSource::stTerr);
int Frequency = Frequencies[0] = sd->getFrequency() * 10;
- static int Bandwidths[] = { 8000000, 7000000, 6000000, 0, 0, 0, 0, 0 };
+ static int Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 0, 0, 0, 0 };
dtp.SetBandwidth(Bandwidths[sd->getBandwidth()]);
static int Constellations[] = { QPSK, QAM_16, QAM_64, QAM_AUTO };
dtp.SetModulation(Constellations[sd->getConstellation()]);
+ dtp.SetSystem(DVB_SYSTEM_1);
static int Hierarchies[] = { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, HIERARCHY_4, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO };
dtp.SetHierarchy(Hierarchies[sd->getHierarchy()]);
static int CodeRates[] = { FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO };
@@ -253,7 +257,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
dtp.SetCoderateL(CodeRates[sd->getCodeRateLP()]);
static int GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4 };
dtp.SetGuard(GuardIntervals[sd->getGuardInterval()]);
- static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO };
+ static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_4K, TRANSMISSION_MODE_AUTO };
dtp.SetTransmission(TransmissionModes[sd->getTransmissionMode()]);
if (ThisNIT >= 0) {
for (int n = 0; n < NumFrequencies; n++) {
@@ -299,6 +303,40 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
}
}
break;
+ case SI::ExtensionDescriptorTag: {
+ SI::ExtensionDescriptor *sd = (SI::ExtensionDescriptor *)d;
+ switch (sd->getExtensionDescriptorTag()) {
+ case SI::T2DeliverySystemDescriptorTag: {
+ if (Setup.UpdateChannels >= 5) {
+ for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
+ int Source = cSource::FromData(cSource::stTerr);
+ if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
+ SI::T2DeliverySystemDescriptor *td = (SI::T2DeliverySystemDescriptor *)d;
+ int Frequency = Channel->Frequency();
+ int SymbolRate = Channel->Srate();
+ //int SystemId = td->getSystemId();
+ cDvbTransponderParameters dtp(Channel->Parameters());
+ dtp.SetSystem(DVB_SYSTEM_2);
+ dtp.SetPlpId(td->getPlpId());
+ if (td->getExtendedDataFlag()) {
+ static int T2Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 10000000, 1712000, 0, 0 };
+ dtp.SetBandwidth(T2Bandwidths[td->getBandwidth()]);
+ static int T2GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4, GUARD_INTERVAL_1_128, GUARD_INTERVAL_19_128, GUARD_INTERVAL_19_256, 0 };
+ dtp.SetGuard(T2GuardIntervals[td->getGuardInterval()]);
+ static int T2TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_4K, TRANSMISSION_MODE_1K, TRANSMISSION_MODE_16K, TRANSMISSION_MODE_32K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO };
+ dtp.SetTransmission(T2TransmissionModes[td->getTransmissionMode()]);
+ //TODO add parsing of frequencies
+ }
+ Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('T'));
+ }
+ }
+ }
+ }
+ break;
+ default: ;
+ }
+ }
+ break;
default: ;
}
delete d;
diff --git a/po/ar.po b/po/ar.po
index c936078..c656ab8 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-10-16 11:16-0400\n"
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
"Language-Team: Arabic <ar@li.org>\n"
@@ -79,6 +79,9 @@ msgstr "الهرمية"
msgid "Rolloff"
msgstr "ايقاف"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "EPG ا لبدء بالبحث على دليل القنوات الالكترونى "
@@ -1103,6 +1106,9 @@ msgstr "موءقت النوم"
msgid "Setup.Replay$Show replay mode"
msgstr "اضهر طور الاعادة"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "رقم المواصلة"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index d609cda..c31d519 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n"
@@ -76,6 +76,9 @@ msgstr "Jerarquia"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Iniciant exploraci EPG"
@@ -1080,6 +1083,9 @@ msgstr "Mode de multivelocitat"
msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar mode de reproducci"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de Continuar"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index eef8257..f55f061 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2010-05-06 11:00+0200\n"
"Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
"Language-Team: Czech <vdr@linuxtv.org>\n"
@@ -75,6 +75,9 @@ msgstr "Hierarchický mód"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Začíná prohledávání EPG"
@@ -1079,6 +1082,9 @@ msgstr "Vícerychlostní mód"
msgid "Setup.Replay$Show replay mode"
msgstr "Zobrazit režim přehrávání"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID obnovení"
diff --git a/po/da_DK.po b/po/da_DK.po
index db6b398..f94bab2 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Hierarki"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Starter EPG skanning"
@@ -1077,6 +1080,9 @@ msgstr "Multi hastighedsmodus"
msgid "Setup.Replay$Show replay mode"
msgstr "Vis afspilningsmodus"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Genoptagelses ID"
diff --git a/po/de_DE.po b/po/de_DE.po
index 4a475d7..0436cc7 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2010-01-16 16:46+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Hierarchie"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr "PlpId"
+
msgid "Starting EPG scan"
msgstr "Aktualisiere EPG-Daten"
@@ -1077,6 +1080,9 @@ msgstr "Mehrstufiger Vor-/Rcklauf"
msgid "Setup.Replay$Show replay mode"
msgstr "Wiedergabestatus anzeigen"
+msgid "Setup.Replay$Show remaining time"
+msgstr "Verbleibende Zeit anzeigen"
+
msgid "Setup.Replay$Resume ID"
msgstr "Wiedergabe-ID"
diff --git a/po/el_GR.po b/po/el_GR.po
index 64300f0..36923f0 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr ""
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr " EPG"
@@ -1077,6 +1080,9 @@ msgstr " "
msgid "Setup.Replay$Show replay mode"
msgstr " "
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID "
diff --git a/po/es_ES.po b/po/es_ES.po
index 288ad69..ef94398 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n"
@@ -74,6 +74,9 @@ msgstr "Jerarqua"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Iniciando la exploracin de EPG"
@@ -1078,6 +1081,9 @@ msgstr "Modo multi-velocidad"
msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar modo de reproduccin"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de continuacin"
diff --git a/po/et_EE.po b/po/et_EE.po
index c12f31f..70129fe 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Hierarhia"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "EPG skaneerimine kivitatud"
@@ -1077,6 +1080,9 @@ msgstr "Mitmekiiruse moodus"
msgid "Setup.Replay$Show replay mode"
msgstr "Korduse moodus"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Jtkamise ID"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index d0d1225..e433602 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
@@ -76,6 +76,9 @@ msgstr "Hierarkia"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr "PLP-tunniste"
+
msgid "Starting EPG scan"
msgstr "Ohjelmaoppaan päivitys aloitettu"
@@ -967,10 +970,10 @@ msgstr "LNB-ylätaajuus (MHz)"
#, c-format
msgid "Setup.LNB$Device %d connected to sat cable"
-msgstr ""
+msgstr "DVB-sovitin %d kytketty SAT-kaapeliin"
msgid "Setup.LNB$own"
-msgstr ""
+msgstr "oma"
msgid "CAM reset"
msgstr "CAM nollaus"
@@ -1080,6 +1083,9 @@ msgstr "Käytä toiston moninopeustilaa"
msgid "Setup.Replay$Show replay mode"
msgstr "Näytä toiston tila"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Tallenteen paluutunniste"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 5f8b411..477dffe 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
@@ -79,6 +79,9 @@ msgstr "Hirarchie"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Mise jour du guide des programmes"
@@ -1083,6 +1086,9 @@ msgstr "Mode multi-vitesses"
msgid "Setup.Replay$Show replay mode"
msgstr "Affichage mode de lecture"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de reprise"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 681cb79..0bf055e 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n"
@@ -75,6 +75,9 @@ msgstr "Hijerarhija"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Poinjem EPG pretragu"
@@ -1079,6 +1082,9 @@ msgstr "Viestruke brzine prikaza"
msgid "Setup.Replay$Show replay mode"
msgstr "Prikai nain prikazivanja"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index bebf6ef..0c56f85 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -4,14 +4,14 @@
# Istvan Koenigsberger <istvnko@hotmail.com>, 2002, 2003, 2006
# Guido Josten <guido.josten@t-online.de>, 2002, 2003, 2006
# Thomas Gnther <tom@toms-cafe.de>, 2007
-# Istvn Fley <ifuley@tigercomp.ro>, 2007
+# Istvn Fley <ifuley@tigercomp.ro>, 2007, 2012
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
-"PO-Revision-Date: 2007-12-01 21:42+0200\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
+"PO-Revision-Date: 2012-01-02 11:54+0200\n"
"Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
"Language: hu\n"
@@ -32,19 +32,19 @@ msgid "off"
msgstr "ki"
msgid "on"
-msgstr ""
+msgstr "be"
msgid "auto"
msgstr "auto"
msgid "none"
-msgstr "semmi"
+msgstr "egyik sem"
msgid "Polarization"
msgstr "Polarizci"
msgid "System"
-msgstr ""
+msgstr "Rendszer"
msgid "Srate"
msgstr "Srate"
@@ -74,6 +74,9 @@ msgid "Hierarchy"
msgstr "Hierarhia"
msgid "Rolloff"
+msgstr "Rolloff"
+
+msgid "PlpId"
msgstr ""
msgid "Starting EPG scan"
@@ -318,10 +321,10 @@ msgstr ""
#, c-format
msgid "ParentalRating$from %d"
-msgstr ""
+msgstr "%d ven fellieknek"
msgid "No title"
-msgstr "nv nlkl"
+msgstr "cm nlkl"
#. TRANSLATORS: The name of the language, as written natively
msgid "LanguageName$English"
@@ -420,7 +423,7 @@ msgid "Key$Stop"
msgstr "Stop"
msgid "Key$Record"
-msgstr "Felvenni"
+msgstr "Felvtel"
msgid "Key$FastFwd"
msgstr "Elre prgetni"
@@ -471,7 +474,7 @@ msgid "Key$Timers"
msgstr "Idzt"
msgid "Key$Recordings"
-msgstr "Felvett adsok"
+msgstr "Felvtelek"
msgid "Key$Setup"
msgstr "Belltsok"
@@ -591,29 +594,29 @@ msgid "Delete channel?"
msgstr "Csatorna trlse?"
msgid "Edit folder"
-msgstr ""
+msgstr "Knyvtr szerkesztse"
msgid "New folder"
-msgstr ""
+msgstr "j knyvtr"
msgid "Sub folder"
-msgstr ""
+msgstr "Alknyvtr"
msgid "Folder name already exists!"
-msgstr ""
+msgstr "Ez a knyvtrnv mr ltezik!"
#, c-format
msgid "Folder name must not contain '%c'!"
-msgstr ""
+msgstr "A knyvtr neve nem tartalmazhatja: '%c'!"
msgid "Button$Select"
-msgstr ""
+msgstr "Kivlaszts"
msgid "Delete folder and all sub folders?"
-msgstr ""
+msgstr "Valban trljem a knyvtrat s az alknyvtrait?"
msgid "Delete folder?"
-msgstr ""
+msgstr "Trljem a knyvtrat?"
msgid "Edit timer"
msgstr "Idzt megvltoztatsa"
@@ -631,7 +634,7 @@ msgid "Start"
msgstr "Kezdet"
msgid "Stop"
-msgstr "Vge"
+msgstr "Vg"
msgid "VPS"
msgstr "VPS"
@@ -646,13 +649,13 @@ msgid "File"
msgstr "File"
msgid "Button$Folder"
-msgstr ""
+msgstr "Knyvtr"
msgid "First day"
msgstr "Els nap"
msgid "Select folder"
-msgstr ""
+msgstr "Knyvtr kivlasztsa"
msgid "Timers"
msgstr "Idzt"
@@ -667,22 +670,22 @@ msgid "Delete timer?"
msgstr "Idzt trlse?"
msgid "Timer still recording - really delete?"
-msgstr "Felvtel folyamatban van - mgis trlni?"
+msgstr "Felvtel folyamatban van - biztos trljem?"
msgid "Event"
-msgstr "Ads"
+msgstr "Esemny"
msgid "Button$Timer"
msgstr "Idzt"
msgid "Button$Record"
-msgstr "Felvenni"
+msgstr "Felvtel"
msgid "Button$Switch"
msgstr "tkapcsolni"
msgid "What's on now?"
-msgstr "Mi megy most?"
+msgstr "Most adsban"
msgid "What's on next?"
msgstr "Mi kvetkezik?"
@@ -694,24 +697,24 @@ msgid "Button$Now"
msgstr "Most"
msgid "Button$Schedule"
-msgstr "Program"
+msgstr "Msorjsg"
msgid "Can't switch channel!"
msgstr "Az adt nem lehet elkapcsolni"
#, c-format
msgid "Schedule - %s"
-msgstr "Program - %s"
+msgstr "Msorjsg - %s"
#, c-format
msgid "This event - %s"
msgstr "Ez az ads - %s"
msgid "This event - all channels"
-msgstr "Ez az ads - sszes ad"
+msgstr "Ez az ads - sszes adn"
msgid "All events - all channels"
-msgstr "Az sszes ads - az sszes ad"
+msgstr "Az sszes ads - az sszes adn"
#, c-format
msgid "Please enter %d digits!"
@@ -721,7 +724,7 @@ msgid "CAM not responding!"
msgstr "A CAM nem vlaszol!"
msgid "Recording info"
-msgstr "Felvtel"
+msgstr "Felvtel inf"
msgid "Button$Play"
msgstr "Lejtszani"
@@ -730,7 +733,7 @@ msgid "Button$Rewind"
msgstr "Vissza az elejre"
msgid "Recordings"
-msgstr "Felvett adsok"
+msgstr "Felvtelek"
msgid "Button$Open"
msgstr "Kinyitni"
@@ -829,7 +832,7 @@ msgid "Setup.OSD$Timeout requested channel info"
msgstr "A lekrdezett adsinformci bezrsa"
msgid "Setup.OSD$Scroll pages"
-msgstr "Oldalanknt lptetmi"
+msgstr "Oldalanknt lptetni"
msgid "Setup.OSD$Scroll wraps"
msgstr "Korltlan lptets"
@@ -841,28 +844,28 @@ msgid "Setup.OSD$Recording directories"
msgstr "Felvtelek listja"
msgid "Setup.OSD$Folders in timer menu"
-msgstr ""
+msgstr "Knyvtrvlaszts az idzt menben"
msgid "Setup.OSD$Number keys for characters"
-msgstr ""
+msgstr "Szmgombok a betkn"
msgid "EPG"
msgstr "EPG"
msgid "Button$Scan"
-msgstr "Adskeress"
+msgstr "EPG keress"
msgid "Setup.EPG$EPG scan timeout (h)"
-msgstr "Fennmaradt id az EPG-jtsig (h)"
+msgstr "Fennmaradt id az EPG-frisstsig ()"
msgid "Setup.EPG$EPG bugfix level"
-msgstr "EPG hibaelhrts"
+msgstr "Hibaelhrts szintje"
msgid "Setup.EPG$EPG linger time (min)"
-msgstr "Rgi EPG adatok megmutatsa (perc)"
+msgstr "Eltelt EPG adatok kijelzse (perc)"
msgid "Setup.EPG$Set system time"
-msgstr "Az id belltsa"
+msgstr "ra lltsa TP idhz"
msgid "Setup.EPG$Use time from transponder"
msgstr "Idhz tartoz Transponder"
@@ -882,7 +885,7 @@ msgid "letterbox"
msgstr "letterbox"
msgid "center cut out"
-msgstr "center cut out"
+msgstr "kpkzp kivgs"
msgid "no"
msgstr "nem"
@@ -900,7 +903,7 @@ msgid "add new channels"
msgstr "j adk hozzadsa"
msgid "add new transponders"
-msgstr "j transponder hozzadsa"
+msgstr "j transponderek hozzadsa"
msgid "DVB"
msgstr "DVB"
@@ -927,10 +930,10 @@ msgid "Setup.DVB$Update channels"
msgstr "Adk aktualizlsa"
msgid "Setup.DVB$Audio languages"
-msgstr "Audio nyelvek"
+msgstr "Hangsv nyelvek"
msgid "Setup.DVB$Audio language"
-msgstr "Audio nyelv"
+msgstr "Hangsv nyelv"
msgid "Setup.DVB$Display subtitles"
msgstr "Felirat lthat"
@@ -960,17 +963,18 @@ msgid "Setup.LNB$SLOF (MHz)"
msgstr "SLOF (MHz)"
msgid "Setup.LNB$Low LNB frequency (MHz)"
-msgstr "Als LNB-frekvencia (MHZ)"
+msgstr "Als LNB-frekvencia (MHz)"
msgid "Setup.LNB$High LNB frequency (MHz)"
-msgstr "Fels LNB-frekvencia (MHZ)"
+msgstr "Fels LNB-frekvencia (MHz)"
#, c-format
msgid "Setup.LNB$Device %d connected to sat cable"
msgstr ""
+#, fuzzy
msgid "Setup.LNB$own"
-msgstr ""
+msgstr "DiSEqC hasznlata"
msgid "CAM reset"
msgstr "CAM jraindts"
@@ -991,7 +995,7 @@ msgid "Button$Reset"
msgstr "Reset"
msgid "Opening CAM menu..."
-msgstr "A CAM men nyits alatt..."
+msgstr "A CAM men nyitsa..."
msgid "Can't open CAM menu!"
msgstr "A CAM men nem nyithat"
@@ -1003,16 +1007,16 @@ msgid "Can't reset CAM!"
msgstr "A CAM jraindts nem sikerlt"
msgid "do not pause live video"
-msgstr ""
+msgstr "lkp lelltsa tiltva"
msgid "confirm pause live video"
-msgstr ""
+msgstr "lkp lelltsa megerstssel"
msgid "pause live video"
-msgstr ""
+msgstr "lkp lelltsa"
msgid "confirm"
-msgstr ""
+msgstr "megersts"
msgid "yes"
msgstr "igen"
@@ -1021,13 +1025,13 @@ msgid "Recording"
msgstr "Felvtel"
msgid "Setup.Recording$Margin at start (min)"
-msgstr "Ideltolds a kezdsnl (perc)"
+msgstr "Ideltols a kezdsnl (perc)"
msgid "Setup.Recording$Margin at stop (min)"
-msgstr "Ideltolds a befejezsnl (perc)"
+msgstr "Ideltols a befejezsnl (perc)"
msgid "Setup.Recording$Primary limit"
-msgstr "Primr-hatr"
+msgstr "Als priorits hatr"
msgid "Setup.Recording$Default priority"
msgstr "Alaprtelmezett priorits"
@@ -1036,22 +1040,22 @@ msgid "Setup.Recording$Default lifetime (d)"
msgstr "Alaprtelmezett lettartam"
msgid "Setup.Recording$Pause key handling"
-msgstr ""
+msgstr "A sznet gomb mkdse"
msgid "Setup.Recording$Pause priority"
-msgstr "Sznet priorits"
+msgstr "Ideltols prioritsa"
msgid "Setup.Recording$Pause lifetime (d)"
-msgstr "Sznet lettartama"
+msgstr "Ideltols lettartama"
msgid "Setup.Recording$Use episode name"
-msgstr "Epizdnv felhasznlsa"
+msgstr "Epizdnv"
msgid "Setup.Recording$Use VPS"
-msgstr "VPS-t hasznlni"
+msgstr "VPS"
msgid "Setup.Recording$VPS margin (s)"
-msgstr "Ideltolds VPS-nl (s)"
+msgstr "Ideltols VPS-nl (mp)"
msgid "Setup.Recording$Mark instant recording"
msgstr "Direktfelvtel megjellse"
@@ -1060,26 +1064,29 @@ msgid "Setup.Recording$Name instant recording"
msgstr "Direktfelvtel megnevezse"
msgid "Setup.Recording$Instant rec. time (min)"
-msgstr "Felvtel idtartama (perc)"
+msgstr "Direktfelvtel idtartama (perc)"
msgid "Setup.Recording$Max. video file size (MB)"
-msgstr "Max. video File-terjedelem (MB)"
+msgstr "Max. video file mret (MB)"
msgid "Setup.Recording$Split edited files"
-msgstr "Feldolgozott File-k felosztsa"
+msgstr "Feldolgozott file-ok felosztsa"
msgid "Setup.Recording$Delete timeshift recording"
-msgstr ""
+msgstr "Ideltolsos felvtel trlse"
msgid "Replay"
msgstr "Lejtszs"
msgid "Setup.Replay$Multi speed mode"
-msgstr "MultiSpeed funkci"
+msgstr "Tbsebessges funkci"
msgid "Setup.Replay$Show replay mode"
msgstr "Lejtszs feltntetse"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Lejtszs ID"
@@ -1087,7 +1094,7 @@ msgid "Miscellaneous"
msgstr "Egyb"
msgid "Setup.Miscellaneous$Min. event timeout (min)"
-msgstr "Idzitsek kztti idtartam (perc)"
+msgstr "VDR lell ha nem kvetkezik felvtel (p)"
msgid "Setup.Miscellaneous$Min. user inactivity (min)"
msgstr "VDR lell hasznlat nlkl (perc)"
@@ -1102,25 +1109,25 @@ msgid "Setup.Miscellaneous$Channel entry timeout (ms)"
msgstr "Csatornavlts timeout (ms)"
msgid "Setup.Miscellaneous$Initial channel"
-msgstr "Ads a bekapcsolsnl"
+msgstr "Csatorna indulskor"
msgid "Setup.Miscellaneous$as before"
msgstr "ahogy az elbb"
msgid "Setup.Miscellaneous$Initial volume"
-msgstr "Hanger a bekapcsolsnl"
+msgstr "Hanger indulsnl"
msgid "Setup.Miscellaneous$Channels wrap"
-msgstr ""
+msgstr "Csatornalista grgetse"
msgid "Setup.Miscellaneous$Emergency exit"
-msgstr ""
+msgstr "Vszlellts"
msgid "Plugins"
msgstr "Plugins"
msgid "This plugin has no setup parameters!"
-msgstr "Ennek a plugin-nak nincs setup-parametere!"
+msgstr "Ennek a plugin-nak nincs setup-paramtere!"
msgid "Setup"
msgstr "Belltsok"
@@ -1136,7 +1143,7 @@ msgid " Stop recording "
msgstr " Felvtelt befejezni "
msgid "Schedule"
-msgstr "Program"
+msgstr "Msorjsg"
msgid "VDR"
msgstr "VDR"
@@ -1183,14 +1190,14 @@ msgid "Pausing live video..."
msgstr "Az l ads meglltva..."
msgid "Delete timeshift recording?"
-msgstr ""
+msgstr "Trljem az ideltolsos felvtelt?"
#. TRANSLATORS: note the trailing blank!
msgid "Jump: "
-msgstr "Ugrs: "
+msgstr "Ugrs ide: "
msgid "No editing marks defined!"
-msgstr "A vgpont nincs kijellve"
+msgstr "Nincs vgpont kijellve"
msgid "Can't start editing process!"
msgstr "A vgs nem indthat!"
@@ -1226,13 +1233,13 @@ msgid "Channel locked (recording)!"
msgstr "Az ad blokkolva (felvtel)!"
msgid "Low disk space!"
-msgstr "A merev lemez majdnem tele!"
+msgstr "A merevlemez majdnem tele!"
msgid "Regenerating index file"
-msgstr ""
+msgstr "Az index file jragenerlsa"
msgid "Index file regeneration complete"
-msgstr ""
+msgstr "Index file jragenerlsa ksz."
msgid "Can't shutdown - option '-s' not given!"
msgstr "A lellts nem lehetsges - Opci '-s' hinyzik!"
@@ -1303,10 +1310,10 @@ msgid "Sunday"
msgstr "Vasrnap"
msgid "Upcoming recording!"
-msgstr "Felvtel rgtn kezddik!"
+msgstr "Felvtel rgtn indul!"
msgid "Pause live video?"
-msgstr ""
+msgstr "Meglltsam az l kpet?"
msgid "Recording started"
msgstr "A felvtel elindtva"
@@ -1318,7 +1325,7 @@ msgid "Press any key to cancel shutdown"
msgstr "Nyomj egy gombot a lells megszaktshoz"
msgid "Switching primary DVB..."
-msgstr "Primr Interface tkapcsolva..."
+msgstr "Elsdleges DVB krtya vltsa folyamatban..."
msgid "Editing process failed!"
msgstr "Vgs sikertelen!"
diff --git a/po/it_IT.po b/po/it_IT.po
index 6015881..3f2f5f9 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2010-06-13 00:30+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
@@ -80,6 +80,9 @@ msgstr "Gerarchia"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Inizio scansione EPG"
@@ -1084,6 +1087,9 @@ msgstr "Modalità multispeed"
msgid "Setup.Replay$Show replay mode"
msgstr "Mostra modalità riproduzione"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID di ripristino"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index 53d2422..eaa98d9 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2010-10-30 11:55+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Hierarchija"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Pradedamas EPG skanavimas"
@@ -1077,6 +1080,9 @@ msgstr "Prasukimo ręžimas"
msgid "Setup.Replay$Show replay mode"
msgstr "Rodyti pakartojimo ręžimą"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Kūrinio ID"
diff --git a/po/mk_MK.po b/po/mk_MK.po
index 5fa3634..eef92c2 100644
--- a/po/mk_MK.po
+++ b/po/mk_MK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR-1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2010-03-11 00:54+0100\n"
"Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
"Language-Team: Macedonian <en@li.org>\n"
@@ -74,6 +74,9 @@ msgstr "Хиерархија"
msgid "Rolloff"
msgstr "Рол-оф"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Започнувам скенирање на EPG"
@@ -1078,6 +1081,9 @@ msgstr "Повеќебрзински режим"
msgid "Setup.Replay$Show replay mode"
msgstr "Прикажи начин на пуштање"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID на продолжеток"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 65aaba7..8b0da15 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n"
@@ -77,6 +77,9 @@ msgstr "Hierarchie"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Bezig met starten EPG scan"
@@ -1081,6 +1084,9 @@ msgstr "Multi-speed mode"
msgid "Setup.Replay$Show replay mode"
msgstr "Weergave mode aangeven"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Hervattings ID"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index a8ea942..fdb7981 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
@@ -74,6 +74,9 @@ msgstr "Hierarchy"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr ""
@@ -1078,6 +1081,9 @@ msgstr "Multispeed modus"
msgid "Setup.Replay$Show replay mode"
msgstr "Vis avspillingsmodus"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Resume ID"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 94ba692..5f02ee8 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
@@ -74,6 +74,9 @@ msgstr "Hierarchia"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Rozpoczynam skanowanie EPG"
@@ -1078,6 +1081,9 @@ msgstr "Tryb wieloprdkociowy"
msgid "Setup.Replay$Show replay mode"
msgstr "Pokazuj tryb odtwarzania"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID wznowienia"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 272ab75..e568459 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.15\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2010-03-28 22:49+0100\n"
"Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
@@ -74,6 +74,9 @@ msgstr "Hierarquia"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "A iniciar a busca do EPG"
@@ -1078,6 +1081,9 @@ msgstr "Modo multi velocidade"
msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar modo de reproduo"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID de resumo"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 414ade1..285622f 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2011-03-10 23:52+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n"
@@ -76,6 +76,9 @@ msgstr "Ierarhie"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Pornesc achiziia EPG"
@@ -1080,6 +1083,9 @@ msgstr "Mod multi-vitez"
msgid "Setup.Replay$Show replay mode"
msgstr "Afieaz redarea"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Identificator continuare"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index a4eaca5..c14d7f0 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
@@ -74,6 +74,9 @@ msgstr ""
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr " EPG-"
@@ -1078,6 +1081,9 @@ msgstr " "
msgid "Setup.Replay$Show replay mode"
msgstr " "
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID "
diff --git a/po/sk_SK.po b/po/sk_SK.po
index 176673f..3f0ea60 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2011-02-15 16:29+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Hierarchia"
msgid "Rolloff"
msgstr "Rolloff"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Zana prehadva EPG"
@@ -1077,6 +1080,9 @@ msgstr "Viac rchlostn reim"
msgid "Setup.Replay$Show replay mode"
msgstr "Zobrazi spsob prehrvania"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID obnovenie"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 696e953..75d32c7 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
@@ -74,6 +74,9 @@ msgstr "Hierarhija"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Prienjam EPG-scan"
@@ -1078,6 +1081,9 @@ msgstr "Reim z ve hitrostmi"
msgid "Setup.Replay$Show replay mode"
msgstr "Prikai reim predvajanja"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID za predvajanje"
diff --git a/po/sr_SR.po b/po/sr_SR.po
index 62c07d3..743b1c6 100644
--- a/po/sr_SR.po
+++ b/po/sr_SR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.1\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2011-01-09 15:57+0100\n"
"Last-Translator: Milan Cvijanovi <elcom_cvijo@hotmail.com>\n"
"Language-Team: Serbian <vdr@linuxtv.org>\n"
@@ -74,6 +74,9 @@ msgstr "Hijerarhija"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Poinjem EPG pretragu"
@@ -1100,6 +1103,9 @@ msgstr "Viestruke brzine reprodukcije"
msgid "Setup.Replay$Show replay mode"
msgstr "Prikai reim reprodukcije"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index ae6d72f..57151a1 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n"
@@ -76,6 +76,9 @@ msgstr "Hierarchy"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Pbrjar EPG skanning"
@@ -1080,6 +1083,9 @@ msgstr "Multispeed mode"
msgid "Setup.Replay$Show replay mode"
msgstr "Visa uppspelningslge"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "teruppta ID"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 946ab42..78bde2c 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Hiyerari"
msgid "Rolloff"
msgstr ""
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "EPG tarama balyor"
@@ -1077,6 +1080,9 @@ msgstr "Katl hz sarma"
msgid "Setup.Replay$Show replay mode"
msgstr "Gsteri bilgisi"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "Gsteri ID'si"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index c383af8..73b1c4a 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2010-04-25 16:35+0200\n"
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
"Language-Team: Ukrainian <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Ієрархія"
msgid "Rolloff"
msgstr "Крен"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "Починаю EPG-сканування"
@@ -1077,6 +1080,9 @@ msgstr "Багатошвидкісний режим"
msgid "Setup.Replay$Show replay mode"
msgstr "Віображати режим перегляду"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "ID продовження"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 43a5ea5..81b381b 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-12-03 16:25+0100\n"
+"POT-Creation-Date: 2012-01-14 14:06+0100\n"
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
@@ -76,6 +76,9 @@ msgstr "层次"
msgid "Rolloff"
msgstr "越零率"
+msgid "PlpId"
+msgstr ""
+
msgid "Starting EPG scan"
msgstr "开始节目单扫描"
@@ -1080,6 +1083,9 @@ msgstr "媒体速度模式"
msgid "Setup.Replay$Show replay mode"
msgstr "显示回放模式"
+msgid "Setup.Replay$Show remaining time"
+msgstr ""
+
msgid "Setup.Replay$Resume ID"
msgstr "恢复 ID"
diff --git a/recording.c b/recording.c
index 6b11fbd..cf35bb7 100644
--- a/recording.c
+++ b/recording.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.c 2.39 2011/12/04 13:51:44 kls Exp $
+ * $Id: recording.c 2.43 2012/01/15 11:04:24 kls Exp $
*/
#include "recording.h"
@@ -873,16 +873,23 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
s++;
else
s = name;
- titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%c%d:%02d%c%c%s",
+ cString Length("");
+ if (NewIndicator) {
+ int Seconds = max(0, LengthInSeconds());
+ Length = cString::sprintf("%c%d:%02d",
+ Delimiter,
+ Seconds / 3600,
+ Seconds / 60 % 60
+ );
+ }
+ titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%s%c%c%s",
t->tm_mday,
t->tm_mon + 1,
t->tm_year % 100,
Delimiter,
t->tm_hour,
t->tm_min,
- Delimiter,
- (LengthInSeconds() >= 0) ? LengthInSeconds() / 3600 : 0,
- (LengthInSeconds() >= 0) ? LengthInSeconds() / 60 % 60 : 0,
+ *Length,
New,
Delimiter,
s));
@@ -1103,25 +1110,21 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
struct dirent *e;
while ((Foreground || Running()) && (e = d.Next()) != NULL) {
if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) {
- char *buffer = strdup(AddDirectory(DirName, e->d_name));
+ cString buffer = AddDirectory(DirName, e->d_name);
struct stat st;
- if (stat(buffer, &st) == 0) {
+ if (lstat(buffer, &st) == 0) {
int Link = 0;
if (S_ISLNK(st.st_mode)) {
if (LinkLevel > MAX_LINK_LEVEL) {
- isyslog("max link level exceeded - not scanning %s", buffer);
+ isyslog("max link level exceeded - not scanning %s", *buffer);
continue;
}
Link = 1;
- char *old = buffer;
- buffer = ReadLink(old);
- free(old);
- if (!buffer)
+ buffer = ReadLink(buffer);
+ if (!*buffer)
continue;
- if (stat(buffer, &st) != 0) {
- free(buffer);
+ if (stat(buffer, &st) != 0)
continue;
- }
}
if (S_ISDIR(st.st_mode)) {
if (endswith(buffer, deleted ? DELEXT : RECEXT)) {
@@ -1144,7 +1147,6 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
ScanVideoDir(buffer, Foreground, LinkLevel + Link);
}
}
- free(buffer);
}
}
}
@@ -2040,15 +2042,18 @@ cUnbufferedFile *cFileName::NextFile(void)
cString IndexToHMSF(int Index, bool WithFrame, double FramesPerSecond)
{
- char buffer[16];
+ const char *Sign = "";
+ if (Index < 0) {
+ Index = -Index;
+ Sign = "-";
+ }
double Seconds;
int f = int(modf((Index + 0.5) / FramesPerSecond, &Seconds) * FramesPerSecond + 1);
int s = int(Seconds);
int m = s / 60 % 60;
int h = s / 3600;
s %= 60;
- snprintf(buffer, sizeof(buffer), WithFrame ? "%d:%02d:%02d.%02d" : "%d:%02d:%02d", h, m, s, f);
- return buffer;
+ return cString::sprintf(WithFrame ? "%s%d:%02d:%02d.%02d" : "%s%d:%02d:%02d", Sign, h, m, s, f);
}
int HMSFToIndex(const char *HMSF, double FramesPerSecond)
diff --git a/remux.c b/remux.c
index 78ab294..ff4d49b 100644
--- a/remux.c
+++ b/remux.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.c 2.62 2011/09/04 13:09:06 kls Exp $
+ * $Id: remux.c 2.63 2012/01/12 12:07:58 kls Exp $
*/
#include "remux.h"
@@ -701,6 +701,10 @@ const uchar *cTsToPes::GetPes(int &Length)
uchar *p = data + offset - 6;
if (p != data) {
p -= 3;
+ if (p < data) {
+ Reset();
+ return NULL;
+ }
memmove(p, data, 4);
}
int l = min(length - offset, MAXPESLENGTH);
diff --git a/svdrp.c b/svdrp.c
index b333202..a659cd4 100644
--- a/svdrp.c
+++ b/svdrp.c
@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
- * $Id: svdrp.c 2.12 2011/12/04 13:58:33 kls Exp $
+ * $Id: svdrp.c 2.13 2012/01/12 15:02:46 kls Exp $
*/
#include "svdrp.h"
@@ -583,6 +583,10 @@ void cSVDRP::CmdCLRE(const char *Option)
}
}
if (Schedule) {
+ for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) {
+ if (ChannelID == Timer->Channel()->GetChannelID().ClrRid())
+ Timer->SetEvent(NULL);
+ }
Schedule->Cleanup(INT_MAX);
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME);
Reply(250, "EPG data of channel \"%s\" cleared", Option);
diff --git a/svdrpsend.pl b/svdrpsend
index caf3b41..caf3b41 100755
--- a/svdrpsend.pl
+++ b/svdrpsend
diff --git a/tools.c b/tools.c
index 1a1cf3f..778c463 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 2.19 2011/12/04 14:52:38 kls Exp $
+ * $Id: tools.c 2.20 2012/01/11 11:21:43 kls Exp $
*/
#include "tools.h"
@@ -1913,7 +1913,7 @@ void cListBase::Move(int From, int To)
void cListBase::Move(cListObject *From, cListObject *To)
{
- if (From && To) {
+ if (From && To && From != To) {
if (From->Index() < To->Index())
To = To->Next();
if (From == objects)
diff --git a/vdr.5 b/vdr.5
index 7f06967..198c953 100644
--- a/vdr.5
+++ b/vdr.5
@@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
-.\" $Id: vdr.5 2.26 2011/09/25 13:51:34 kls Exp $
+.\" $Id: vdr.5 2.27 2012/01/11 13:16:57 kls Exp $
.\"
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
.SH NAME
@@ -87,32 +87,33 @@ meaning (and allowed values) are
.TS
tab (@);
l l.
-\fBB\fR@Bandwidth (6, 7, 8)
+\fBB\fR@Bandwidth (1712, 5, 6, 7, 8, 10)
\fBC\fR@Code rate high priority (0, 12, 23, 34, 35, 45, 56, 67, 78, 89, 910)
\fBD\fR@coDe rate low priority (0, 12, 23, 34, 35, 45, 56, 67, 78, 89, 910)
-\fBG\fR@Guard interval (4, 8, 16, 32)
+\fBG\fR@Guard interval (4, 8, 16, 32, 128, 19128, 19256)
\fBH\fR@Horizontal polarization
\fBI\fR@Inversion (0, 1)
\fBL\fR@Left circular polarization
\fBM\fR@Modulation (2, 5, 6, 10, 11, 16, 32, 64, 128, 256, 998)
\fBO\fR@rollOff (0, 20, 25, 35)
+\fBP\fR@Plp id (0-255)
\fBR\fR@Right circular polarization
\fBS\fR@delivery System (0, 1)
-\fBT\fR@Transmission mode (2, 8)
+\fBT\fR@Transmission mode (1, 2, 4, 8, 16, 32)
\fBV\fR@Vertical polarization
\fBY\fR@hierarchY (0, 1, 2, 4)
.TE
-\fBBandwidth:\fR The bandwidth of the channel in MHz (DVB-T only).
+\fBBandwidth:\fR The bandwidth of the channel in MHz (1712 in kHz): (DVB-T/DVB-T2 only).
-\fBCode rate high priority:\fR Forward Error Correction (FEC) of the high priority stream (DVB-T).
+\fBCode rate high priority:\fR Forward Error Correction (FEC) of the high priority stream (DVB-T/DVB-T2).
For DVB-S/DVB-S2 this parameter specifies the inner FEC scheme.
12 = 1/2, 23 = 2/3, 34 = 3/4, ...
-\fBCode rate low priority:\fR Forward Error Correction (FEC) of the low priority stream (DVB-T only).
+\fBCode rate low priority:\fR Forward Error Correction (FEC) of the low priority stream (DVB-T/DVB-T2 only).
If no hierarchy is used, set to 0.
-\fBGuard interval:\fR The guard interval value (DVB-T only): 4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32.
+\fBGuard interval:\fR The guard interval value (DVB-T only): 4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32, 128 = 1/128, 19128 = 19/128, 19256 = 19/256.
\fBInversion:\fR Specifies whether the DVB frontend needs spectral inversion (DVB-T and DVB-C only). This is frontend specific, if in doubt, omit.
@@ -120,26 +121,30 @@ If no hierarchy is used, set to 0.
.TS
tab (@);
l l.
-\fB2\fR@QPSK (DVB-S, DVB-S2, DVB-T)
+\fB2\fR@QPSK (DVB-S, DVB-S2, DVB-T, DVB-T2, ISDB-T)
\fB5\fR@8PSK (DVB-S2)
\fB6\fR@16APSK (DVB-S2)
+\fB7\fR@32APSK (DVB-S2)
\fB10\fR@VSB8 (ATSC aerial)
\fB11\fR@VSB16 (ATSC aerial)
-\fB16\fR@QAM16 (DVB-T)
-\fB64\fR@QAM64 (DVB-C, DVB-T)
+\fB12\fR@DQPSK (ISDB-T)
+\fB16\fR@QAM16 (DVB-T, DVB-T2, ISDB-T)
+\fB64\fR@QAM64 (DVB-C, DVB-T, DVB-T2, ISDB-T)
\fB128\fR@QAM128 (DVB-C)
-\fB256\fR@QAM256 (DVB-C)
+\fB256\fR@QAM256 (DVB-C, DVB-T2)
.TE
\fBRolloff:\fR The Nyquist filter rolloff factor for DVB-S (\fB35\fR) and DVB-S2 (\fB35\fR, 25, 20),
35 = 0.35, 25 = 0.25, 20 = 0.20, DVB-S/DVB-S2 default value is 0.35
-\fBTransmission mode:\fR Number of DVB-T OFDM carriers, 8 = 8k, 2 = 2k. If in doubt, try 8k.
+\fBPLP id:\fR Physical Layer Pipe (PLP) id (\fB0\fR-255) for DVB-T2 multiplex (DVB-T2 only).
+
+\fBTransmission mode:\fR Number of DVB-T OFDM carriers, 32 = 32k, 16 = 16k, 8 = 8k, 4 = 4k, 2 = 2k, 1 = 1k. If in doubt, try 8k.
\fBHierarchy:\fR If set to 1, this transponder uses two streams, high priority and low priority.
-If in doubt, try 0 (off). (DVB-T only).
+If in doubt, try 0 (off). (DVB-T/DVB-T2 only).
-\fBDelivery System:\fR The satellite delivery system (0 = DVB-S, 1 = DVB-S2).
+\fBDelivery System:\fR The delivery system (0 = "first generation" (DVB-S/DVB-T), 1 = "second generation" (DVB-S2/DVB-T2).
\fBPolarization:\fR Satellite antenna polarization.
H = horizontal, V = vertical, R = circular right, L = circular left.
@@ -152,16 +157,19 @@ The special value \fB999\fR is used for "automatic", which means the driver
will automatically determine the proper value (if possible).
An example of a parameter field for a DVB-T channel might look like this:
-\fBB8C23D12G8M16T8Y0\fR
+\fBB8C23D12G8M16T8Y0S0\fR
+
+An example of a parameter field for a DVB-T2 channel might look like this:
+\fBB8C23D12G8M16T8Y0P0S1\fR
An example of a parameter field for a DVB-C channel might look like this:
\fBC0M64\fR
An example of a parameter field for a DVB-S channel might look like this:
-\fBhC56M2O35S0\fR
+\fBHC56M2O35S0\fR
An example of a parameter field for a DVB-S2 channel might look like this:
-\fBhC910M2O35S1\fR
+\fBHC910M2O35S1\fR
Plugins that implement devices that need their own set of parameters may
store those in the parameters string in arbitrary format (not necessarily