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).
This commit is contained in:
Klaus Schmidinger
2012-01-15 16:10:00 +01:00
committed by Dieter Hametner
parent 5a28d99936
commit 59f0138a7d
55 changed files with 963 additions and 328 deletions

View File

@@ -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
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<74>).
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

55
HISTORY
View File

@@ -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<74> pointing out that the argument sequence in the call was wrong).
- Removed a redundant NULL check in cDvbSpuDecoder::setTime() (thanks to Ville Skytt<74>).
- Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality()
(triggered by Ville Skytt<74> 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<74>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<74>).
- 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).

4
MANUAL
View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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";

View File

@@ -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);

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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 */

View File

@@ -7,7 +7,7 @@
* Original author: Marco Schl<68><6C>ler <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;
}

24
epg.c
View File

@@ -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;
}

40
font.c
View File

@@ -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

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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:

View File

@@ -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,

16
menu.c
View File

@@ -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();

46
nit.c
View File

@@ -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;

View File

@@ -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 "رقم المواصلة"

View File

@@ -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<63> EPG"
@@ -1080,6 +1083,9 @@ msgstr "Mode de multivelocitat"
msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar mode de reproducci<63>"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID de Continuar"

View File

@@ -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í"

View File

@@ -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"

View File

@@ -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-/R
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"

View File

@@ -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 "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EPG"
@@ -1077,6 +1080,9 @@ msgstr "
msgid "Setup.Replay$Show replay mode"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"

View File

@@ -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 "Jerarqu
msgid "Rolloff"
msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan"
msgstr "Iniciando la exploraci<63>n de EPG"
@@ -1078,6 +1081,9 @@ msgstr "Modo multi-velocidad"
msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar modo de reproducci<63>n"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID de continuaci<63>n"

View File

@@ -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 k<>ivitatud"
@@ -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 "J<>tkamise ID"

View File

@@ -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"

View File

@@ -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 "Hi
msgid "Rolloff"
msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan"
msgstr "Mise <20> 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"

View File

@@ -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 "Po<50>injem EPG pretragu"
@@ -1079,6 +1082,9 @@ msgstr "Vi
msgid "Setup.Replay$Show replay mode"
msgstr "Prika<6B>i na<6E>in prikazivanja"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka"

View File

@@ -4,14 +4,14 @@
# Istvan Koenigsberger <istvnko@hotmail.com>, 2002, 2003, 2006
# Guido Josten <guido.josten@t-online.de>, 2002, 2003, 2006
# Thomas G<>nther <tom@toms-cafe.de>, 2007
# Istv<74>n F<>ley <ifuley@tigercomp.ro>, 2007
# Istv<74>n F<>ley <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: Istv<74>n F<>ley <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 "Polariz<69>ci<63>"
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 <20>ven fel<65>lieknek"
msgid "No title"
msgstr "n<EFBFBD>v n<>lk<6C>l"
msgstr "c<EFBFBD>m n<>lk<6C>l"
#. 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 "Felv<EFBFBD>tel"
msgid "Key$FastFwd"
msgstr "El<45>re p<>rgetni"
@@ -471,7 +474,7 @@ msgid "Key$Timers"
msgstr "Id<49>z<EFBFBD>t<EFBFBD>"
msgid "Key$Recordings"
msgstr "Felvett ad<61>sok"
msgstr "Felv<EFBFBD>telek"
msgid "Key$Setup"
msgstr "Be<42>ll<6C>t<EFBFBD>sok"
@@ -591,29 +594,29 @@ msgid "Delete channel?"
msgstr "Csatorna t<>rl<72>se?"
msgid "Edit folder"
msgstr ""
msgstr "K<EFBFBD>nyvt<EFBFBD>r szerkeszt<7A>se"
msgid "New folder"
msgstr ""
msgstr "<EFBFBD>j k<>nyvt<76>r"
msgid "Sub folder"
msgstr ""
msgstr "Alk<EFBFBD>nyvt<EFBFBD>r"
msgid "Folder name already exists!"
msgstr ""
msgstr "Ez a k<>nyvt<76>rn<72>v m<>r l<>tezik!"
#, c-format
msgid "Folder name must not contain '%c'!"
msgstr ""
msgstr "A k<>nyvt<76>r neve nem tartalmazhatja: '%c'!"
msgid "Button$Select"
msgstr ""
msgstr "Kiv<EFBFBD>laszt<EFBFBD>s"
msgid "Delete folder and all sub folders?"
msgstr ""
msgstr "Val<EFBFBD>ban t<>r<EFBFBD>ljem a k<>nyvt<76>rat <20>s az alk<6C>nyvt<76>rait?"
msgid "Delete folder?"
msgstr ""
msgstr "T<EFBFBD>r<EFBFBD>ljem a k<>nyvt<76>rat?"
msgid "Edit timer"
msgstr "Id<49>z<EFBFBD>t<EFBFBD> megv<67>ltoztat<61>sa"
@@ -631,7 +634,7 @@ msgid "Start"
msgstr "Kezdet"
msgid "Stop"
msgstr "V<>ge"
msgstr "V<>g"
msgid "VPS"
msgstr "VPS"
@@ -646,13 +649,13 @@ msgid "File"
msgstr "File"
msgid "Button$Folder"
msgstr ""
msgstr "K<EFBFBD>nyvt<EFBFBD>r"
msgid "First day"
msgstr "Els<6C> nap"
msgid "Select folder"
msgstr ""
msgstr "K<EFBFBD>nyvt<EFBFBD>r kiv<69>laszt<7A>sa"
msgid "Timers"
msgstr "Id<49>z<EFBFBD>t<EFBFBD>"
@@ -667,22 +670,22 @@ msgid "Delete timer?"
msgstr "Id<49>z<EFBFBD>t<EFBFBD> t<>rl<72>se?"
msgid "Timer still recording - really delete?"
msgstr "Felv<6C>tel folyamatban van - m<EFBFBD>gis t<>r<EFBFBD>lni?"
msgstr "Felv<6C>tel folyamatban van - biztos t<>r<EFBFBD>ljem?"
msgid "Event"
msgstr "Ad<EFBFBD>s"
msgstr "Esem<EFBFBD>ny"
msgid "Button$Timer"
msgstr "Id<49>z<EFBFBD>t<EFBFBD>"
msgid "Button$Record"
msgstr "Felvenni"
msgstr "Felv<EFBFBD>tel"
msgid "Button$Switch"
msgstr "<22>tkapcsolni"
msgid "What's on now?"
msgstr "Mi megy most?"
msgstr "Most ad<61>sban"
msgid "What's on next?"
msgstr "Mi k<>vetkezik?"
@@ -694,24 +697,24 @@ msgid "Button$Now"
msgstr "Most"
msgid "Button$Schedule"
msgstr "Program"
msgstr "M<EFBFBD>sor<EFBFBD>js<EFBFBD>g"
msgid "Can't switch channel!"
msgstr "Az ad<61>t nem lehet elkapcsolni"
#, c-format
msgid "Schedule - %s"
msgstr "Program - %s"
msgstr "M<EFBFBD>sor<EFBFBD>js<EFBFBD>g - %s"
#, c-format
msgid "This event - %s"
msgstr "Ez az ad<61>s - %s"
msgid "This event - all channels"
msgstr "Ez az ad<61>s - <20>sszes ad<61>"
msgstr "Ez az ad<61>s - <20>sszes ad<61>n"
msgid "All events - all channels"
msgstr "Az <20>sszes ad<61>s - az <20>sszes ad<61>"
msgstr "Az <20>sszes ad<61>s - az <20>sszes ad<61>n"
#, c-format
msgid "Please enter %d digits!"
@@ -721,7 +724,7 @@ msgid "CAM not responding!"
msgstr "A CAM nem v<>laszol!"
msgid "Recording info"
msgstr "Felv<6C>tel"
msgstr "Felv<6C>tel inf<6E>"
msgid "Button$Play"
msgstr "Lej<65>tszani"
@@ -730,7 +733,7 @@ msgid "Button$Rewind"
msgstr "Vissza az elej<65>re"
msgid "Recordings"
msgstr "Felvett ad<61>sok"
msgstr "Felv<EFBFBD>telek"
msgid "Button$Open"
msgstr "Kinyitni"
@@ -829,7 +832,7 @@ msgid "Setup.OSD$Timeout requested channel info"
msgstr "A lek<65>rdezett ad<61>sinform<72>ci<63> bez<65>r<EFBFBD>sa"
msgid "Setup.OSD$Scroll pages"
msgstr "Oldalank<6E>nt l<>ptetmi"
msgstr "Oldalank<6E>nt l<>ptetni"
msgid "Setup.OSD$Scroll wraps"
msgstr "Korl<72>tlan l<>ptet<65>s"
@@ -841,28 +844,28 @@ msgid "Setup.OSD$Recording directories"
msgstr "Felv<6C>telek list<73>ja"
msgid "Setup.OSD$Folders in timer menu"
msgstr ""
msgstr "K<EFBFBD>nyvt<EFBFBD>rv<EFBFBD>laszt<EFBFBD>s az id<69>z<EFBFBD>t<EFBFBD> men<65>ben"
msgid "Setup.OSD$Number keys for characters"
msgstr ""
msgstr "Sz<EFBFBD>mgombok a bet<65>k<EFBFBD>n"
msgid "EPG"
msgstr "EPG"
msgid "Button$Scan"
msgstr "Ad<EFBFBD>skeres<EFBFBD>s"
msgstr "EPG keres<EFBFBD>s"
msgid "Setup.EPG$EPG scan timeout (h)"
msgstr "Fennmaradt id<69> az EPG-<EFBFBD>j<EFBFBD>t<EFBFBD>sig (h)"
msgstr "Fennmaradt id<69> az EPG-friss<EFBFBD>t<EFBFBD>sig (<EFBFBD>)"
msgid "Setup.EPG$EPG bugfix level"
msgstr "EPG hibaelh<EFBFBD>r<EFBFBD>t<EFBFBD>s"
msgstr "Hibaelh<EFBFBD>r<EFBFBD>t<EFBFBD>s szintje"
msgid "Setup.EPG$EPG linger time (min)"
msgstr "R<EFBFBD>gi EPG adatok megmutat<EFBFBD>sa (perc)"
msgstr "Eltelt EPG adatok kijelz<EFBFBD>se (perc)"
msgid "Setup.EPG$Set system time"
msgstr "Az id<69> be<62>ll<6C>t<EFBFBD>sa"
msgstr "<EFBFBD>ra <20>ll<6C>t<EFBFBD>sa TP id<69>h<EFBFBD>z"
msgid "Setup.EPG$Use time from transponder"
msgstr "Id<49>h<EFBFBD>z tartoz<6F> Transponder"
@@ -882,7 +885,7 @@ msgid "letterbox"
msgstr "letterbox"
msgid "center cut out"
msgstr "center cut out"
msgstr "k<EFBFBD>pk<EFBFBD>z<EFBFBD>p kiv<69>g<EFBFBD>s"
msgid "no"
msgstr "nem"
@@ -900,7 +903,7 @@ msgid "add new channels"
msgstr "<22>j ad<61>k hozz<7A>ad<61>sa"
msgid "add new transponders"
msgstr "<22>j transponder hozz<7A>ad<61>sa"
msgstr "<22>j transponderek hozz<7A>ad<61>sa"
msgid "DVB"
msgstr "DVB"
@@ -927,10 +930,10 @@ msgid "Setup.DVB$Update channels"
msgstr "Ad<41>k aktualiz<69>l<EFBFBD>sa"
msgid "Setup.DVB$Audio languages"
msgstr "Audio nyelvek"
msgstr "Hangs<EFBFBD>v nyelvek"
msgid "Setup.DVB$Audio language"
msgstr "Audio nyelv"
msgstr "Hangs<EFBFBD>v nyelv"
msgid "Setup.DVB$Display subtitles"
msgstr "Felirat l<>that<61>"
@@ -960,17 +963,18 @@ msgid "Setup.LNB$SLOF (MHz)"
msgstr "SLOF (MHz)"
msgid "Setup.LNB$Low LNB frequency (MHz)"
msgstr "Als<6C> LNB-frekvencia (MHZ)"
msgstr "Als<6C> LNB-frekvencia (MHz)"
msgid "Setup.LNB$High LNB frequency (MHz)"
msgstr "Fels<6C> LNB-frekvencia (MHZ)"
msgstr "Fels<6C> LNB-frekvencia (MHz)"
#, c-format
msgid "Setup.LNB$Device %d connected to sat cable"
msgstr ""
#, fuzzy
msgid "Setup.LNB$own"
msgstr ""
msgstr "DiSEqC haszn<7A>lata"
msgid "CAM reset"
msgstr "CAM <20>jraind<6E>t<EFBFBD>s"
@@ -991,7 +995,7 @@ msgid "Button$Reset"
msgstr "Reset"
msgid "Opening CAM menu..."
msgstr "A CAM men<65> nyit<69>s alatt..."
msgstr "A CAM men<65> nyit<69>sa..."
msgid "Can't open CAM menu!"
msgstr "A CAM men<65> nem nyithat<61>"
@@ -1003,16 +1007,16 @@ msgid "Can't reset CAM!"
msgstr "A CAM <20>jraind<6E>t<EFBFBD>s nem siker<65>lt"
msgid "do not pause live video"
msgstr ""
msgstr "<EFBFBD>l<EFBFBD>k<EFBFBD>p le<6C>ll<6C>t<EFBFBD>sa tiltva"
msgid "confirm pause live video"
msgstr ""
msgstr "<EFBFBD>l<EFBFBD>k<EFBFBD>p le<6C>ll<6C>t<EFBFBD>sa meger<65>s<EFBFBD>t<EFBFBD>ssel"
msgid "pause live video"
msgstr ""
msgstr "<EFBFBD>l<EFBFBD>k<EFBFBD>p le<6C>ll<6C>t<EFBFBD>sa"
msgid "confirm"
msgstr ""
msgstr "meger<EFBFBD>s<EFBFBD>t<EFBFBD>s"
msgid "yes"
msgstr "igen"
@@ -1021,13 +1025,13 @@ msgid "Recording"
msgstr "Felv<6C>tel"
msgid "Setup.Recording$Margin at start (min)"
msgstr "Id<49>eltol<6F>d<EFBFBD>s a kezd<7A>sn<73>l (perc)"
msgstr "Id<49>eltol<6F>s a kezd<7A>sn<73>l (perc)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Id<49>eltol<6F>d<EFBFBD>s a befejez<65>sn<73>l (perc)"
msgstr "Id<49>eltol<6F>s a befejez<65>sn<73>l (perc)"
msgid "Setup.Recording$Primary limit"
msgstr "Prim<EFBFBD>r-hat<EFBFBD>r"
msgstr "Als<EFBFBD> priorit<69>s hat<EFBFBD>r"
msgid "Setup.Recording$Default priority"
msgstr "Alap<61>rtelmezett priorit<69>s"
@@ -1036,22 +1040,22 @@ msgid "Setup.Recording$Default lifetime (d)"
msgstr "Alap<61>rtelmezett <20>lettartam"
msgid "Setup.Recording$Pause key handling"
msgstr ""
msgstr "A sz<73>net gomb m<>k<EFBFBD>d<EFBFBD>se"
msgid "Setup.Recording$Pause priority"
msgstr "Sz<EFBFBD>net priorit<69>s"
msgstr "Id<EFBFBD>eltol<EFBFBD>s priorit<69>sa"
msgid "Setup.Recording$Pause lifetime (d)"
msgstr "Sz<EFBFBD>net <20>lettartama"
msgstr "Id<EFBFBD>eltol<EFBFBD>s <20>lettartama"
msgid "Setup.Recording$Use episode name"
msgstr "Epiz<69>dn<64>v felhaszn<7A>l<EFBFBD>sa"
msgstr "Epiz<69>dn<64>v"
msgid "Setup.Recording$Use VPS"
msgstr "VPS-t haszn<7A>lni"
msgstr "VPS"
msgid "Setup.Recording$VPS margin (s)"
msgstr "Id<49>eltol<6F>d<EFBFBD>s VPS-n<>l (s)"
msgstr "Id<49>eltol<6F>s VPS-n<>l (mp)"
msgid "Setup.Recording$Mark instant recording"
msgstr "Direktfelv<6C>tel megjel<65>l<EFBFBD>se"
@@ -1060,26 +1064,29 @@ msgid "Setup.Recording$Name instant recording"
msgstr "Direktfelv<6C>tel megnevez<65>se"
msgid "Setup.Recording$Instant rec. time (min)"
msgstr "Felv<EFBFBD>tel id<69>tartama (perc)"
msgstr "Direktfelv<EFBFBD>tel id<69>tartama (perc)"
msgid "Setup.Recording$Max. video file size (MB)"
msgstr "Max. video File-terjedelem (MB)"
msgstr "Max. video file m<>ret (MB)"
msgid "Setup.Recording$Split edited files"
msgstr "Feldolgozott File-k feloszt<7A>sa"
msgstr "Feldolgozott file-ok feloszt<7A>sa"
msgid "Setup.Recording$Delete timeshift recording"
msgstr ""
msgstr "Id<EFBFBD>eltol<EFBFBD>sos felv<6C>tel t<>rl<72>se"
msgid "Replay"
msgstr "Lej<65>tsz<73>s"
msgid "Setup.Replay$Multi speed mode"
msgstr "MultiSpeed funkci<63>"
msgstr "T<EFBFBD>bsebess<EFBFBD>ges funkci<63>"
msgid "Setup.Replay$Show replay mode"
msgstr "Lej<65>tsz<73>s felt<6C>ntet<65>se"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "Lej<65>tsz<73>s ID"
@@ -1087,7 +1094,7 @@ msgid "Miscellaneous"
msgstr "Egy<67>b"
msgid "Setup.Miscellaneous$Min. event timeout (min)"
msgstr "Id<EFBFBD>zit<EFBFBD>sek k<>z<EFBFBD>tti id<69>tartam (perc)"
msgstr "VDR le<6C>ll ha nem k<>vetkezik felv<6C>tel (p)"
msgid "Setup.Miscellaneous$Min. user inactivity (min)"
msgstr "VDR le<6C>ll haszn<7A>lat n<>lk<6C>l (perc)"
@@ -1102,25 +1109,25 @@ msgid "Setup.Miscellaneous$Channel entry timeout (ms)"
msgstr "Csatornav<61>lt<6C>s timeout (ms)"
msgid "Setup.Miscellaneous$Initial channel"
msgstr "Ad<EFBFBD>s a bekapcsol<6F>sn<73>l"
msgstr "Csatorna indul<75>skor"
msgid "Setup.Miscellaneous$as before"
msgstr "ahogy az el<65>bb"
msgid "Setup.Miscellaneous$Initial volume"
msgstr "Hanger<65> a bekapcsol<EFBFBD>sn<EFBFBD>l"
msgstr "Hanger<65> indul<EFBFBD>sn<EFBFBD>l"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
msgstr "Csatornalista g<>rget<65>se"
msgid "Setup.Miscellaneous$Emergency exit"
msgstr ""
msgstr "V<EFBFBD>szle<EFBFBD>ll<EFBFBD>t<EFBFBD>s"
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-param<EFBFBD>tere!"
msgid "Setup"
msgstr "Be<42>ll<6C>t<EFBFBD>sok"
@@ -1136,7 +1143,7 @@ msgid " Stop recording "
msgstr " Felv<6C>telt befejezni "
msgid "Schedule"
msgstr "Program"
msgstr "M<EFBFBD>sor<EFBFBD>js<EFBFBD>g"
msgid "VDR"
msgstr "VDR"
@@ -1183,14 +1190,14 @@ msgid "Pausing live video..."
msgstr "Az <20>l<EFBFBD> ad<61>s meg<65>ll<6C>tva..."
msgid "Delete timeshift recording?"
msgstr ""
msgstr "T<EFBFBD>r<EFBFBD>ljem az id<69>eltol<6F>sos felv<6C>telt?"
#. TRANSLATORS: note the trailing blank!
msgid "Jump: "
msgstr "Ugr<67>s: "
msgstr "Ugr<67>s ide: "
msgid "No editing marks defined!"
msgstr "A v<>g<EFBFBD>pont nincs kijel<EFBFBD>lve"
msgstr "Nincs v<>g<EFBFBD>pont kijel<65>lve"
msgid "Can't start editing process!"
msgstr "A v<>g<EFBFBD>s nem ind<6E>that<61>!"
@@ -1226,13 +1233,13 @@ msgid "Channel locked (recording)!"
msgstr "Az ad<61> blokkolva (felv<6C>tel)!"
msgid "Low disk space!"
msgstr "A merev lemez majdnem tele!"
msgstr "A merevlemez majdnem tele!"
msgid "Regenerating index file"
msgstr ""
msgstr "Az index file <20>jragener<65>l<EFBFBD>sa"
msgid "Index file regeneration complete"
msgstr ""
msgstr "Index file <20>jragener<65>l<EFBFBD>sa k<>sz."
msgid "Can't shutdown - option '-s' not given!"
msgstr "A le<6C>ll<6C>t<EFBFBD>s nem lehets<74>ges - Opci<63> '-s' hi<68>nyzik!"
@@ -1303,10 +1310,10 @@ msgid "Sunday"
msgstr "Vas<61>rnap"
msgid "Upcoming recording!"
msgstr "Felv<6C>tel r<>gt<67>n kezd<EFBFBD>dik!"
msgstr "Felv<6C>tel r<>gt<67>n indul!"
msgid "Pause live video?"
msgstr ""
msgstr "Meg<EFBFBD>ll<EFBFBD>tsam az <20>l<EFBFBD> k<>pet?"
msgid "Recording started"
msgstr "A felv<6C>tel elind<6E>tva"
@@ -1318,7 +1325,7 @@ msgid "Press any key to cancel shutdown"
msgstr "Nyomj egy gombot a le<6C>ll<6C>s megszak<61>t<EFBFBD>s<EFBFBD>hoz"
msgid "Switching primary DVB..."
msgstr "Prim<EFBFBD>r Interface <20>tkapcsolva..."
msgstr "Els<EFBFBD>dleges DVB k<>rtya v<>lt<6C>sa folyamatban..."
msgid "Editing process failed!"
msgstr "V<>g<EFBFBD>s sikertelen!"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 на продолжеток"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 wielopr
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"

View File

@@ -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 reprodu<64><75>o"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID de resumo"

View File

@@ -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 achizi<7A>ia EPG"
@@ -1080,6 +1083,9 @@ msgstr "Mod multi-vitez
msgid "Setup.Replay$Show replay mode"
msgstr "Afi<66>eaz<61> redarea"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "Identificator continuare"

View File

@@ -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 "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EPG-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
@@ -1078,6 +1081,9 @@ msgstr "
msgid "Setup.Replay$Show replay mode"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"

View File

@@ -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 "Za<5A><61>na preh<65>ad<61>va<76> EPG"
@@ -1077,6 +1080,9 @@ msgstr "Viac r
msgid "Setup.Replay$Show replay mode"
msgstr "Zobrazi<7A> sp<73>sob prehr<68>vania"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID obnovenie"

View File

@@ -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 "Pri<72>enjam EPG-scan"
@@ -1078,6 +1081,9 @@ msgstr "Re
msgid "Setup.Replay$Show replay mode"
msgstr "Prika<6B>i re<72>im predvajanja"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID za predvajanje"

View File

@@ -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<76> <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 "Po<50>injem EPG pretragu"
@@ -1100,6 +1103,9 @@ msgstr "Vi
msgid "Setup.Replay$Show replay mode"
msgstr "Prika<6B>i re<72>im reprodukcije"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka"

View File

@@ -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 "P<>b<EFBFBD>rjar EPG skanning"
@@ -1080,6 +1083,9 @@ msgstr "Multispeed mode"
msgid "Setup.Replay$Show replay mode"
msgstr "Visa uppspelningsl<73>ge"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "<22>teruppta ID"

View File

@@ -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 Yolge<67>en <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
@@ -73,6 +73,9 @@ msgstr "Hiyerar
msgid "Rolloff"
msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan"
msgstr "EPG tarama ba<62>l<EFBFBD>yor"
@@ -1077,6 +1080,9 @@ msgstr "Katl
msgid "Setup.Replay$Show replay mode"
msgstr "G<>steri<72> bilgisi"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID"
msgstr "G<>steri<72> ID'si"

View File

@@ -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 продовження"

View File

@@ -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"

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

44
vdr.5
View File

@@ -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