diff options
author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2012-01-15 16:10:00 +0100 |
---|---|---|
committer | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2012-01-15 16:38:48 +0100 |
commit | 59f0138a7d03fed4fc33e1083928bf5b28e0e4ff (patch) | |
tree | 5d238aabf1b703dff01c9f381a7e552ed6bdf092 | |
parent | 5a28d999363f8ace192489d4f6b13dfeb6cfc20b (diff) | |
download | vdr-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-- | CONTRIBUTORS | 28 | ||||
-rw-r--r-- | HISTORY | 55 | ||||
-rw-r--r-- | MANUAL | 4 | ||||
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | PLUGINS/src/pictures/HISTORY | 4 | ||||
-rwxr-xr-x | PLUGINS/src/pictures/pic2mpg | 17 | ||||
-rw-r--r-- | config.c | 6 | ||||
-rw-r--r-- | config.h | 13 | ||||
-rw-r--r-- | dvbdevice.c | 308 | ||||
-rw-r--r-- | dvbdevice.h | 25 | ||||
-rw-r--r-- | dvbspu.c | 4 | ||||
-rw-r--r-- | dvbsubtitle.c | 4 | ||||
-rw-r--r-- | epg.c | 24 | ||||
-rw-r--r-- | font.c | 40 | ||||
-rw-r--r-- | libsi/descriptor.c | 83 | ||||
-rw-r--r-- | libsi/descriptor.h | 42 | ||||
-rw-r--r-- | libsi/headers.h | 54 | ||||
-rw-r--r-- | libsi/si.c | 5 | ||||
-rw-r--r-- | libsi/si.h | 17 | ||||
-rw-r--r-- | menu.c | 16 | ||||
-rw-r--r-- | nit.c | 46 | ||||
-rw-r--r-- | po/ar.po | 8 | ||||
-rw-r--r-- | po/ca_ES.po | 8 | ||||
-rw-r--r-- | po/cs_CZ.po | 8 | ||||
-rw-r--r-- | po/da_DK.po | 8 | ||||
-rw-r--r-- | po/de_DE.po | 8 | ||||
-rw-r--r-- | po/el_GR.po | 8 | ||||
-rw-r--r-- | po/es_ES.po | 8 | ||||
-rw-r--r-- | po/et_EE.po | 8 | ||||
-rw-r--r-- | po/fi_FI.po | 12 | ||||
-rw-r--r-- | po/fr_FR.po | 8 | ||||
-rw-r--r-- | po/hr_HR.po | 8 | ||||
-rw-r--r-- | po/hu_HU.po | 169 | ||||
-rw-r--r-- | po/it_IT.po | 8 | ||||
-rw-r--r-- | po/lt_LT.po | 8 | ||||
-rw-r--r-- | po/mk_MK.po | 8 | ||||
-rw-r--r-- | po/nl_NL.po | 8 | ||||
-rw-r--r-- | po/nn_NO.po | 8 | ||||
-rw-r--r-- | po/pl_PL.po | 8 | ||||
-rw-r--r-- | po/pt_PT.po | 8 | ||||
-rw-r--r-- | po/ro_RO.po | 8 | ||||
-rw-r--r-- | po/ru_RU.po | 8 | ||||
-rw-r--r-- | po/sk_SK.po | 8 | ||||
-rw-r--r-- | po/sl_SI.po | 8 | ||||
-rw-r--r-- | po/sr_SR.po | 8 | ||||
-rw-r--r-- | po/sv_SE.po | 8 | ||||
-rw-r--r-- | po/tr_TR.po | 8 | ||||
-rw-r--r-- | po/uk_UA.po | 8 | ||||
-rw-r--r-- | po/zh_CN.po | 8 | ||||
-rw-r--r-- | recording.c | 43 | ||||
-rw-r--r-- | remux.c | 6 | ||||
-rw-r--r-- | svdrp.c | 6 | ||||
-rwxr-xr-x | svdrpsend (renamed from svdrpsend.pl) | 0 | ||||
-rw-r--r-- | tools.c | 4 | ||||
-rw-r--r-- | vdr.5 | 44 |
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 @@ -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). @@ -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 @@ -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"; @@ -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); @@ -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; @@ -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; } @@ -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; } @@ -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 @@ -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: @@ -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, @@ -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(); @@ -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; @@ -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) @@ -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); @@ -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); @@ -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) @@ -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 |