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 his help in keeping 'channels.conf.cable' and 'channels.conf.terr' up to date
for helping to test new DVB-T handling 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 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> Matjaz Thaler <matjaz.thaler@guest.arnes.si>
for improving AC3 decoding when replaying DVDs 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 fixing handling DVB subtitles and implementing decoding textual DVB subtitles
for adding file name and line number to LOG_ERROR_STR() for adding file name and line number to LOG_ERROR_STR()
for replacing all calls to sleep() with cCondWait::SleepMs() 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> Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark 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 a crash when deleting a recording while cutting it
for fixing several spelling errors for fixing several spelling errors
for adding generating a pkg-config file to the Makefile for adding generating a pkg-config file to the Makefile
for removing the '.pl' suffix from all scripts (thanks to Ville Skyttä). for removing the '.pl' suffix from all scripts
for changing the default location for the LIRC socket to /var/run/lirc/lircd for 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> Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next 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 for suggesting to implement a function to determine the length of a recording's
index file index file
for fixing setting the start time of an edited recording for fixing setting the start time of an edited recording
for adding support for HbbTV to libsi
Pekka Mauno <pekka.mauno@iki.fi> Pekka Mauno <pekka.mauno@iki.fi>
for fixing cSchedule::GetFollowingEvent() in case there is currently no present 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 for implementing sending all frames to devices that can handle them in fast forward
trick speeds trick speeds
for implementing the setup option "Recording/Pause key handling" 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> Elias Luttinen <el@iki.fi>
for improving the description of where logging goes in the INSTALL file 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 a missing reset of maxNumber in cChannels::Renumber()
for reporting some missing 'const' in tChannelID for reporting some missing 'const' in tChannelID
for suggesting to add optional case insensitive sorting to cStringList::Sort() 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> Ales Jurik <ajurik@quick.cz>
for reporting broken SI data on Czech/Slovak channels after changing the default 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> Milan Cvijanovic <elcom_cvijo@hotmail.com>
for translating OSD texts to the Serbian language 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 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> Gerald Dachs <vdr@dachsweb.de>
for reporting a problem with checking for minimum line length of 21 characters in 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> Dominic Evans <oldmanuk@gmail.com>
for making the SVDRP command LSTC accepts channel IDs for making the SVDRP command LSTC accepts channel IDs
for adding cap_net_raw to the capabilities that are not dropped 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). - 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). - Replaced all calls to sleep() with cCondWait::SleepMs() (thanks to Rolf Ahrenberg).
- Fixed a crash with malformed SI data (patch from vdr-portal). - Fixed a crash with malformed SI data (patch from vdr-portal).
2012-01-15: Version 1.7.23
- Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one).
- Fixed bonding more than two devices.
- Fixed handling symbolic links in cRecordings::ScanVideoDir() (reported by
Sundararaj Reel).
- Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many
link levels (reported by Sundararaj Reel).
- Removed redundant memset() in the ctor of cSatCableNumbers (triggered by
Ville Skyttä pointing out that the argument sequence in the call was wrong).
- Removed a redundant NULL check in cDvbSpuDecoder::setTime() (thanks to Ville Skyttä).
- Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality()
(triggered by Ville Skyttä pointing out that the variable HasSnr was unused).
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Added support for HbbTV to libsi (thanks to Christoph Haubrich).
- Added support for devices with more than one delivery system per frontend.
This requires a DVB driver with version 5.5 or higher that can handle the
DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery
system per frontend.
- Updated the Hungarian language texts (thanks to 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).

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 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 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 environment, so that every user has his/her own resume
files for each recording. The valid range is 0...99, with 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 # See the main source file 'vdr.c' for copyright information and
# how to reach the author. # 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: .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 $^` 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) %.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $< msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@ @touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr.mo: $(PODIR)/%.mo $(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr.mo: $(PODIR)/%.mo

View File

@ -59,3 +59,7 @@ VDR Plugin 'pictures' Revision History
2011-11-02: 2011-11-02:
- Fixed handling images that are rotated by 180 degrees in pic2mpg. - 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. # 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::Path;
use File::Spec; use File::Spec;
@ -20,15 +20,17 @@ Usage: $0 [options] picture-dir mpeg-dir
Options: -f Force conversion Options: -f Force conversion
-h print Help -h print Help
-o percent overscan in percent
-s size Screen size (WIDTHxHEIGHT, default is 1920x1080) -s size Screen size (WIDTHxHEIGHT, default is 1920x1080)
-v num Verbose (0=none, 1=list files, 2=detailed) -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; die $Usage if $opt_h;
$Force = $opt_f; $Force = $opt_f;
$Overscan = $opt_o || 0;
$Size = $opt_s || "1920x1080"; $Size = $opt_s || "1920x1080";
$Verbose = $opt_v; $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: 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]; 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: # Convert a single file:
if (-f $ARGV[0]) { if (-f $ARGV[0]) {
@ -130,7 +141,7 @@ sub ConvertFile
$Pict = EscapeMeta($Pict); $Pict = EscapeMeta($Pict);
$Mpeg = EscapeMeta($Mpeg); $Mpeg = EscapeMeta($Mpeg);
print "$Pict -> $Mpeg $Rotate\n" if $ListFiles; 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 " . "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"); . ($Detailed ? "" : "2>/dev/null");
!system($Cmd) || die "$Cmd: $!\n"; !system($Cmd) || die "$Cmd: $!\n";

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: config.c 2.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" #include "config.h"
@ -69,7 +69,6 @@ cSatCableNumbers::cSatCableNumbers(int Size, const char *s)
{ {
size = Size; size = Size;
array = MALLOC(int, size); array = MALLOC(int, size);
memset(array, size * sizeof(int), 0);
FromString(s); FromString(s);
} }
@ -454,6 +453,7 @@ cSetup::cSetup(void)
NextWakeupTime = 0; NextWakeupTime = 0;
MultiSpeedMode = 0; MultiSpeedMode = 0;
ShowReplayMode = 0; ShowReplayMode = 0;
ShowRemainingTime = 0;
ResumeID = 0; ResumeID = 0;
CurrentChannel = -1; CurrentChannel = -1;
CurrentVolume = MAXVOLUME; 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, "NextWakeupTime")) NextWakeupTime = atoi(Value);
else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value); else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = 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, "ResumeID")) ResumeID = atoi(Value);
else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value); else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value); else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
@ -745,6 +746,7 @@ bool cSetup::Save(void)
Store("NextWakeupTime", NextWakeupTime); Store("NextWakeupTime", NextWakeupTime);
Store("MultiSpeedMode", MultiSpeedMode); Store("MultiSpeedMode", MultiSpeedMode);
Store("ShowReplayMode", ShowReplayMode); Store("ShowReplayMode", ShowReplayMode);
Store("ShowRemainingTime", ShowRemainingTime);
Store("ResumeID", ResumeID); Store("ResumeID", ResumeID);
Store("CurrentChannel", CurrentChannel); Store("CurrentChannel", CurrentChannel);
Store("CurrentVolume", CurrentVolume); Store("CurrentVolume", CurrentVolume);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: config.h 2.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 #ifndef __CONFIG_H
@ -22,13 +22,13 @@
// VDR's own version number: // VDR's own version number:
#define VDRVERSION "1.7.22" #define VDRVERSION "1.7.23"
#define VDRVERSNUM 10722 // Version * 10000 + Major * 100 + Minor #define VDRVERSNUM 10723 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number: // The plugin API's version number:
#define APIVERSION "1.7.22" #define APIVERSION "1.7.23"
#define APIVERSNUM 10722 // Version * 10000 + Major * 100 + Minor #define APIVERSNUM 10723 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which // When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to // may be smaller than VDRVERSION in case there have been no changes to
@ -122,7 +122,7 @@ public:
if (!isempty(s)) { if (!isempty(s)) {
T *l = new T; T *l = new T;
if (l->Parse(s)) if (l->Parse(s))
Add(l); this->Add(l);
else { else {
esyslog("ERROR: error in %s, line %d", fileName, line); esyslog("ERROR: error in %s, line %d", fileName, line);
delete l; delete l;
@ -302,6 +302,7 @@ public:
time_t NextWakeupTime; time_t NextWakeupTime;
int MultiSpeedMode; int MultiSpeedMode;
int ShowReplayMode; int ShowReplayMode;
int ShowRemainingTime;
int ResumeID; int ResumeID;
int CurrentChannel; int CurrentChannel;
int CurrentVolume; int CurrentVolume;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: dvbdevice.c 2.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" #include "dvbdevice.h"
@ -44,9 +44,12 @@ const tDvbParameterMap InversionValues[] = {
}; };
const tDvbParameterMap BandwidthValues[] = { const tDvbParameterMap BandwidthValues[] = {
{ 5, 5000000, "5 MHz" },
{ 6, 6000000, "6 MHz" }, { 6, 6000000, "6 MHz" },
{ 7, 7000000, "7 MHz" }, { 7, 7000000, "7 MHz" },
{ 8, 8000000, "8 MHz" }, { 8, 8000000, "8 MHz" },
{ 10, 10000000, "10 MHz" },
{ 1712, 1712000, "1.712 MHz" },
{ -1, 0, NULL } { -1, 0, NULL }
}; };
@ -75,21 +78,36 @@ const tDvbParameterMap ModulationValues[] = {
{ 2, QPSK, "QPSK" }, { 2, QPSK, "QPSK" },
{ 5, PSK_8, "8PSK" }, { 5, PSK_8, "8PSK" },
{ 6, APSK_16, "16APSK" }, { 6, APSK_16, "16APSK" },
{ 7, APSK_32, "32APSK" },
{ 10, VSB_8, "VSB8" }, { 10, VSB_8, "VSB8" },
{ 11, VSB_16, "VSB16" }, { 11, VSB_16, "VSB16" },
{ 998, QAM_AUTO, "QAMAUTO" }, { 12, DQPSK, "DQPSK" },
{ 999, QAM_AUTO, trNOOP("auto") },
{ -1, 0, NULL } { -1, 0, NULL }
}; };
const tDvbParameterMap SystemValues[] = { #define DVB_SYSTEM_1 0 // see also nit.c
{ 0, SYS_DVBS, "DVB-S" }, #define DVB_SYSTEM_2 1
{ 1, SYS_DVBS2, "DVB-S2" },
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 } { -1, 0, NULL }
}; };
const tDvbParameterMap TransmissionValues[] = { const tDvbParameterMap TransmissionValues[] = {
{ 1, TRANSMISSION_MODE_1K, "1K" },
{ 2, TRANSMISSION_MODE_2K, "2K" }, { 2, TRANSMISSION_MODE_2K, "2K" },
{ 4, TRANSMISSION_MODE_4K, "4K" },
{ 8, TRANSMISSION_MODE_8K, "8K" }, { 8, TRANSMISSION_MODE_8K, "8K" },
{ 16, TRANSMISSION_MODE_16K, "16K" },
{ 32, TRANSMISSION_MODE_32K, "32K" },
{ 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") }, { 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
{ -1, 0, NULL } { -1, 0, NULL }
}; };
@ -99,6 +117,9 @@ const tDvbParameterMap GuardValues[] = {
{ 8, GUARD_INTERVAL_1_8, "1/8" }, { 8, GUARD_INTERVAL_1_8, "1/8" },
{ 16, GUARD_INTERVAL_1_16, "1/16" }, { 16, GUARD_INTERVAL_1_16, "1/16" },
{ 32, GUARD_INTERVAL_1_32, "1/32" }, { 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") }, { 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
{ -1, 0, NULL } { -1, 0, NULL }
}; };
@ -179,11 +200,12 @@ cDvbTransponderParameters::cDvbTransponderParameters(const char *Parameters)
coderateH = FEC_AUTO; coderateH = FEC_AUTO;
coderateL = FEC_AUTO; coderateL = FEC_AUTO;
modulation = QPSK; modulation = QPSK;
system = SYS_DVBS; system = DVB_SYSTEM_1;
transmission = TRANSMISSION_MODE_AUTO; transmission = TRANSMISSION_MODE_AUTO;
guard = GUARD_INTERVAL_AUTO; guard = GUARD_INTERVAL_AUTO;
hierarchy = HIERARCHY_AUTO; hierarchy = HIERARCHY_AUTO;
rollOff = ROLLOFF_AUTO; rollOff = ROLLOFF_AUTO;
plpId = 0;
Parse(Parameters); Parse(Parameters);
} }
@ -194,21 +216,22 @@ int cDvbTransponderParameters::PrintParameter(char *p, char Name, int Value) con
cString cDvbTransponderParameters::ToString(char Type) const 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 buffer[64];
char *q = buffer; char *q = buffer;
*q = 0; *q = 0;
ST(" S ") q += sprintf(q, "%c", polarization); ST(" S *") q += sprintf(q, "%c", polarization);
ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues)); ST(" T*") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
ST(" CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues)); ST(" CST*") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues)); ST(" T*") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues)); ST(" T*") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
ST("ACST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues)); ST("ACST*") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
ST("ACST") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues)); ST("ACST*") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
ST(" S ") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues)); ST(" S 2") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues)); ST(" T2") q += PrintParameter(q, 'P', plpId);
ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues)); 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, 'Y', MapToUser(hierarchy, HierarchyValues)); ST(" T*") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
ST(" T*") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
return buffer; return buffer;
} }
@ -219,7 +242,7 @@ const char *cDvbTransponderParameters::ParseParameter(const char *s, int &Value,
errno = 0; errno = 0;
int n = strtol(s, &p, 10); int n = strtol(s, &p, 10);
if (!errno && p != s) { if (!errno && p != s) {
Value = MapToDriver(n, Map); Value = Map ? MapToDriver(n, Map) : n;
if (Value >= 0) if (Value >= 0)
return p; return p;
} }
@ -241,8 +264,9 @@ bool cDvbTransponderParameters::Parse(const char *s)
case 'L': polarization = *s++; break; case 'L': polarization = *s++; break;
case 'M': s = ParseParameter(s, modulation, ModulationValues); break; case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
case 'O': s = ParseParameter(s, rollOff, RollOffValues); break; case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
case 'P': s = ParseParameter(s, plpId); break;
case 'R': polarization = *s++; 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 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
case 'V': polarization = *s++; break; case 'V': polarization = *s++; break;
case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break; case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
@ -268,10 +292,10 @@ private:
int tuneTimeout; int tuneTimeout;
int lockTimeout; int lockTimeout;
time_t lastTimeoutReport; time_t lastTimeoutReport;
fe_delivery_system frontendType;
cChannel channel; cChannel channel;
const cDiseqc *lastDiseqc; const cDiseqc *lastDiseqc;
const cScr *scr; const cScr *scr;
bool lnbPowerTurnedOn;
eTunerStatus tunerStatus; eTunerStatus tunerStatus;
cMutex mutex; cMutex mutex;
cCondVar locked; cCondVar locked;
@ -279,6 +303,7 @@ private:
cDvbTuner *bondedTuner; cDvbTuner *bondedTuner;
bool bondedMaster; bool bondedMaster;
bool bondedMasterFailed; bool bondedMasterFailed;
bool SetFrontendType(const cChannel *Channel);
cString GetBondingParams(const cChannel *Channel = NULL) const; cString GetBondingParams(const cChannel *Channel = NULL) const;
void ClearEventQueue(void) const; void ClearEventQueue(void) const;
bool GetFrontendStatus(fe_status_t &Status) const; bool GetFrontendStatus(fe_status_t &Status) const;
@ -287,7 +312,7 @@ private:
bool SetFrontend(void); bool SetFrontend(void);
virtual void Action(void); virtual void Action(void);
public: 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(); virtual ~cDvbTuner();
bool Bond(cDvbTuner *Tuner); bool Bond(cDvbTuner *Tuner);
void UnBond(void); void UnBond(void);
@ -304,25 +329,23 @@ public:
cMutex cDvbTuner::bondMutex; 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; device = Device;
fd_frontend = Fd_Frontend; fd_frontend = Fd_Frontend;
adapter = Adapter; adapter = Adapter;
frontend = Frontend; frontend = Frontend;
frontendType = FrontendType;
subsystemId = cDvbDeviceProbe::GetSubsystemId(adapter, frontend); subsystemId = cDvbDeviceProbe::GetSubsystemId(adapter, frontend);
tuneTimeout = 0; tuneTimeout = 0;
lockTimeout = 0; lockTimeout = 0;
lastTimeoutReport = 0; lastTimeoutReport = 0;
lastDiseqc = NULL; lastDiseqc = NULL;
scr = NULL; scr = NULL;
lnbPowerTurnedOn = false;
tunerStatus = tsIdle; tunerStatus = tsIdle;
bondedTuner = NULL; bondedTuner = NULL;
bondedMaster = false; bondedMaster = false;
bondedMasterFailed = 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); SetDescription("tuner on frontend %d/%d", adapter, frontend);
Start(); Start();
} }
@ -346,7 +369,6 @@ bool cDvbTuner::Bond(cDvbTuner *Tuner)
{ {
cMutexLock MutexLock(&bondMutex); cMutexLock MutexLock(&bondMutex);
if (!bondedTuner) { if (!bondedTuner) {
if ((frontendType == SYS_DVBS || frontendType == SYS_DVBS2) && (Tuner->frontendType == SYS_DVBS || Tuner->frontendType == SYS_DVBS2)) {
ResetToneAndVoltage(); ResetToneAndVoltage();
bondedMaster = false; // makes sure we don't disturb an existing master bondedMaster = false; // makes sure we don't disturb an existing master
bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner; bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner;
@ -354,9 +376,6 @@ bool cDvbTuner::Bond(cDvbTuner *Tuner)
dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend); dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend);
return true; 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);
}
else 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); 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);
return false; return false;
@ -468,7 +487,7 @@ void cDvbTuner::SetChannel(const cChannel *Channel)
t->SetChannel(NULL); t->SetChannel(NULL);
} }
} }
else if (!BondedMaster->device->Receiving()) else if (strcmp(GetBondingParams(Channel), BondedMaster->GetBondingParams()) != 0)
BondedMaster->SetChannel(Channel); BondedMaster->SetChannel(Channel);
} }
cMutexLock MutexLock(&mutex); cMutexLock MutexLock(&mutex);
@ -618,7 +637,7 @@ int cDvbTuner::GetSignalQuality(void) const
if (q > 100) if (q > 100)
q = 100; q = 100;
#ifdef DEBUG_SIGNALQUALITY #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 #endif
return q; return q;
} }
@ -634,6 +653,13 @@ static unsigned int FrequencyToHz(unsigned int f)
void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency) 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; struct dvb_diseqc_master_cmd cmd;
const char *CurrentAction = NULL; const char *CurrentAction = NULL;
for (;;) { for (;;) {
@ -654,6 +680,8 @@ void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
} }
if (scr) if (scr)
ResetToneAndVoltage(); // makes sure we don't block the bus! ResetToneAndVoltage(); // makes sure we don't block the bus!
if (Diseqc->IsScr())
Mutex.Unlock();
} }
void cDvbTuner::ResetToneAndVoltage(void) void cDvbTuner::ResetToneAndVoltage(void)
@ -662,6 +690,22 @@ void cDvbTuner::ResetToneAndVoltage(void)
CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF)); 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) bool cDvbTuner::SetFrontend(void)
{ {
#define MAXFRONTENDCMDS 16 #define MAXFRONTENDCMDS 16
@ -686,6 +730,12 @@ bool cDvbTuner::SetFrontend(void)
cDvbTransponderParameters dtp(channel.Parameters()); 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) { if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) {
unsigned int frequency = channel.Frequency(); unsigned int frequency = channel.Frequency();
if (Setup.DiSEqC) { if (Setup.DiSEqC) {
@ -728,23 +778,16 @@ bool cDvbTuner::SetFrontend(void)
frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF
// DVB-S/DVB-S2 (common parts) // DVB-S/DVB-S2 (common parts)
SETCMD(DTV_DELIVERY_SYSTEM, dtp.System());
SETCMD(DTV_FREQUENCY, frequency * 1000UL); SETCMD(DTV_FREQUENCY, frequency * 1000UL);
SETCMD(DTV_MODULATION, dtp.Modulation()); SETCMD(DTV_MODULATION, dtp.Modulation());
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL); SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
SETCMD(DTV_INNER_FEC, dtp.CoderateH()); SETCMD(DTV_INNER_FEC, dtp.CoderateH());
SETCMD(DTV_INVERSION, dtp.Inversion()); SETCMD(DTV_INVERSION, dtp.Inversion());
if (dtp.System() == SYS_DVBS2) {
if (frontendType == SYS_DVBS2) { if (frontendType == SYS_DVBS2) {
// DVB-S2 // DVB-S2
SETCMD(DTV_PILOT, PILOT_AUTO); SETCMD(DTV_PILOT, PILOT_AUTO);
SETCMD(DTV_ROLLOFF, dtp.RollOff()); SETCMD(DTV_ROLLOFF, dtp.RollOff());
} }
else {
esyslog("ERROR: frontend %d/%d doesn't provide DVB-S2", adapter, frontend);
return false;
}
}
else { else {
// DVB-S // DVB-S
SETCMD(DTV_ROLLOFF, ROLLOFF_35); // DVB-S always has a ROLLOFF of 0.35 SETCMD(DTV_ROLLOFF, ROLLOFF_35); // DVB-S always has a ROLLOFF of 0.35
@ -755,7 +798,6 @@ bool cDvbTuner::SetFrontend(void)
} }
else if (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B) { else if (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B) {
// DVB-C // DVB-C
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency())); SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion()); SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL); SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
@ -765,9 +807,8 @@ bool cDvbTuner::SetFrontend(void)
tuneTimeout = DVBC_TUNE_TIMEOUT; tuneTimeout = DVBC_TUNE_TIMEOUT;
lockTimeout = DVBC_LOCK_TIMEOUT; lockTimeout = DVBC_LOCK_TIMEOUT;
} }
else if (frontendType == SYS_DVBT) { else if (frontendType == SYS_DVBT || frontendType == SYS_DVBT2) {
// DVB-T // DVB-T/DVB-T2 (common parts)
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency())); SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion()); SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_BANDWIDTH_HZ, dtp.Bandwidth()); SETCMD(DTV_BANDWIDTH_HZ, dtp.Bandwidth());
@ -777,13 +818,16 @@ bool cDvbTuner::SetFrontend(void)
SETCMD(DTV_TRANSMISSION_MODE, dtp.Transmission()); SETCMD(DTV_TRANSMISSION_MODE, dtp.Transmission());
SETCMD(DTV_GUARD_INTERVAL, dtp.Guard()); SETCMD(DTV_GUARD_INTERVAL, dtp.Guard());
SETCMD(DTV_HIERARCHY, dtp.Hierarchy()); SETCMD(DTV_HIERARCHY, dtp.Hierarchy());
if (frontendType == SYS_DVBT2) {
// DVB-T2
SETCMD(DTV_DVBT2_PLP_ID, dtp.PlpId());
}
tuneTimeout = DVBT_TUNE_TIMEOUT; tuneTimeout = DVBT_TUNE_TIMEOUT;
lockTimeout = DVBT_LOCK_TIMEOUT; lockTimeout = DVBT_LOCK_TIMEOUT;
} }
else if (frontendType == SYS_ATSC) { else if (frontendType == SYS_ATSC) {
// ATSC // ATSC
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency())); SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion()); SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_MODULATION, dtp.Modulation()); SETCMD(DTV_MODULATION, dtp.Modulation());
@ -903,11 +947,12 @@ void cDvbSourceParam::GetData(cChannel *Channel)
cOsdItem *cDvbSourceParam::GetOsdItem(void) cOsdItem *cDvbSourceParam::GetOsdItem(void)
{ {
char type = Source(); char type = Source();
const tDvbParameterMap *SystemValues = type == 'S' ? SystemValuesSat : SystemValuesTerr;
#undef ST #undef ST
#define ST(s) if (strchr(s, type)) #define ST(s) if (strchr(s, type))
switch (param++) { switch (param++) {
case 0: ST(" S ") return new cMenuEditChrItem( tr("Polarization"), &dtp.polarization, "HVLR"); else return GetOsdItem(); 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 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 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(); 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 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 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 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; default: return NULL;
} }
return NULL; return NULL;
@ -928,7 +974,7 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void)
int cDvbDevice::setTransferModeForDolbyDigital = 1; int cDvbDevice::setTransferModeForDolbyDigital = 1;
cMutex cDvbDevice::bondMutex; cMutex cDvbDevice::bondMutex;
const char *DeliverySystems[] = { const char *DeliverySystemNames[] = {
"UNDEFINED", "UNDEFINED",
"DVB-C", "DVB-C",
"DVB-C", "DVB-C",
@ -945,6 +991,8 @@ const char *DeliverySystems[] = {
"DMBTH", "DMBTH",
"CMMB", "CMMB",
"DAB", "DAB",
"DVB-T2",
"TURBO",
NULL NULL
}; };
@ -954,8 +1002,8 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend)
frontend = Frontend; frontend = Frontend;
ciAdapter = NULL; ciAdapter = NULL;
dvbTuner = NULL; dvbTuner = NULL;
frontendType = SYS_UNDEFINED; numDeliverySystems = 0;
numProvidedSystems = 0; numModulations = 0;
bondedDevice = NULL; bondedDevice = NULL;
needsDetachBondedReceivers = false; 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 // We only check the devices that must be present - the others will be checked before accessing them://XXX
if (fd_frontend >= 0) { if (fd_frontend >= 0) {
if (ioctl(fd_frontend, FE_GET_INFO, &frontendInfo) >= 0) { if (QueryDeliverySystems(fd_frontend))
switch (frontendInfo.type) { dvbTuner = new cDvbTuner(this, fd_frontend, adapter, frontend);
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);
}
} }
else else
esyslog("ERROR: can't open DVB device %d/%d", adapter, frontend); esyslog("ERROR: can't open DVB device %d/%d", adapter, frontend);
@ -1106,6 +1123,74 @@ LastAdapter:
return Found > 0; 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) bool cDvbDevice::Ready(void)
{ {
if (ciAdapter) if (ciAdapter)
@ -1126,7 +1211,7 @@ bool cDvbDevice::BondDevices(const char *Bondings)
if (cDevice *Device2 = cDevice::GetDevice(d)) { if (cDevice *Device2 = cDevice::GetDevice(d)) {
if (cDvbDevice *DvbDevice1 = dynamic_cast<cDvbDevice *>(Device1)) { if (cDvbDevice *DvbDevice1 = dynamic_cast<cDvbDevice *>(Device1)) {
if (cDvbDevice *DvbDevice2 = dynamic_cast<cDvbDevice *>(Device2)) { if (cDvbDevice *DvbDevice2 = dynamic_cast<cDvbDevice *>(Device2)) {
if (!DvbDevice2->Bond(DvbDevice1)) if (!DvbDevice1->Bond(DvbDevice2))
return false; // Bond() has already logged the error return false; // Bond() has already logged the error
} }
else else
@ -1167,7 +1252,7 @@ bool cDvbDevice::Bond(cDvbDevice *Device)
cMutexLock MutexLock(&bondMutex); cMutexLock MutexLock(&bondMutex);
if (!bondedDevice) { if (!bondedDevice) {
if (Device != this) { 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)) { if (dvbTuner && Device->dvbTuner && dvbTuner->Bond(Device->dvbTuner)) {
bondedDevice = Device->bondedDevice ? Device->bondedDevice : Device; bondedDevice = Device->bondedDevice ? Device->bondedDevice : Device;
Device->bondedDevice = this; Device->bondedDevice = this;
@ -1285,14 +1370,23 @@ void cDvbDevice::CloseFilter(int Handle)
close(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 bool cDvbDevice::ProvidesSource(int Source) const
{ {
int type = Source & cSource::st_Mask; int type = Source & cSource::st_Mask;
return type == cSource::stNone return type == cSource::stNone
|| type == cSource::stAtsc && (frontendType == SYS_ATSC) || type == cSource::stAtsc && ProvidesDeliverySystem(SYS_ATSC)
|| type == cSource::stCable && (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B) || type == cSource::stCable && (ProvidesDeliverySystem(SYS_DVBC_ANNEX_AC) || ProvidesDeliverySystem(SYS_DVBC_ANNEX_B))
|| type == cSource::stSat && (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) || type == cSource::stSat && (ProvidesDeliverySystem(SYS_DVBS) || ProvidesDeliverySystem(SYS_DVBS2))
|| type == cSource::stTerr && (frontendType == SYS_DVBT); || type == cSource::stTerr && (ProvidesDeliverySystem(SYS_DVBT) || ProvidesDeliverySystem(SYS_DVBT2));
} }
bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
@ -1300,7 +1394,7 @@ bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
if (!ProvidesSource(Channel->Source())) if (!ProvidesSource(Channel->Source()))
return false; // doesn't provide source return false; // doesn't provide source
cDvbTransponderParameters dtp(Channel->Parameters()); 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() == QPSK && !(frontendInfo.caps & FE_CAN_QPSK) ||
dtp.Modulation() == QAM_16 && !(frontendInfo.caps & FE_CAN_QAM_16) || dtp.Modulation() == QAM_16 && !(frontendInfo.caps & FE_CAN_QAM_16) ||
dtp.Modulation() == QAM_32 && !(frontendInfo.caps & FE_CAN_QAM_32) || dtp.Modulation() == QAM_32 && !(frontendInfo.caps & FE_CAN_QAM_32) ||
@ -1375,7 +1469,7 @@ bool cDvbDevice::ProvidesEIT(void) const
int cDvbDevice::NumProvidedSystems(void) const int cDvbDevice::NumProvidedSystems(void) const
{ {
return numProvidedSystems; return numDeliverySystems + numModulations;
} }
int cDvbDevice::SignalStrength(void) const int cDvbDevice::SignalStrength(void) const

View File

@ -4,22 +4,22 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: dvbdevice.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 #ifndef __DVBDEVICE_H
#define __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/frontend.h>
#include <linux/dvb/version.h> #include <linux/dvb/version.h>
#include "device.h" #include "device.h"
#if DVB_API_VERSION < 5 #if DVB_API_VERSION < 5 || (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 3)
#error VDR requires Linux DVB driver API version 5.0 or higher! #error VDR requires Linux DVB driver API version 5.3 or higher!
#endif #endif
#define MAXDVBDEVICES 8 #define MAXDVBDEVICES 8
#define MAXDELIVERYSYSTEMS 8
#define DEV_VIDEO "/dev/video" #define DEV_VIDEO "/dev/video"
#define DEV_DVB_ADAPTER "/dev/dvb/adapter" #define DEV_DVB_ADAPTER "/dev/dvb/adapter"
@ -47,7 +47,8 @@ extern const tDvbParameterMap InversionValues[];
extern const tDvbParameterMap BandwidthValues[]; extern const tDvbParameterMap BandwidthValues[];
extern const tDvbParameterMap CoderateValues[]; extern const tDvbParameterMap CoderateValues[];
extern const tDvbParameterMap ModulationValues[]; extern const tDvbParameterMap ModulationValues[];
extern const tDvbParameterMap SystemValues[]; extern const tDvbParameterMap SystemValuesSat[];
extern const tDvbParameterMap SystemValuesTerr[];
extern const tDvbParameterMap TransmissionValues[]; extern const tDvbParameterMap TransmissionValues[];
extern const tDvbParameterMap GuardValues[]; extern const tDvbParameterMap GuardValues[];
extern const tDvbParameterMap HierarchyValues[]; extern const tDvbParameterMap HierarchyValues[];
@ -67,8 +68,9 @@ private:
int guard; int guard;
int hierarchy; int hierarchy;
int rollOff; int rollOff;
int plpId;
int PrintParameter(char *p, char Name, int Value) const; 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: public:
cDvbTransponderParameters(const char *Parameters = NULL); cDvbTransponderParameters(const char *Parameters = NULL);
char Polarization(void) const { return polarization; } char Polarization(void) const { return polarization; }
@ -82,6 +84,7 @@ public:
int Guard(void) const { return guard; } int Guard(void) const { return guard; }
int Hierarchy(void) const { return hierarchy; } int Hierarchy(void) const { return hierarchy; }
int RollOff(void) const { return rollOff; } int RollOff(void) const { return rollOff; }
int PlpId(void) const { return plpId; }
void SetPolarization(char Polarization) { polarization = Polarization; } void SetPolarization(char Polarization) { polarization = Polarization; }
void SetInversion(int Inversion) { inversion = Inversion; } void SetInversion(int Inversion) { inversion = Inversion; }
void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; } void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; }
@ -93,6 +96,7 @@ public:
void SetGuard(int Guard) { guard = Guard; } void SetGuard(int Guard) { guard = Guard; }
void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; } void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; }
void SetRollOff(int RollOff) { rollOff = RollOff; } void SetRollOff(int RollOff) { rollOff = RollOff; }
void SetPlpId(int PlpId) { plpId = PlpId; }
cString ToString(char Type) const; cString ToString(char Type) const;
bool Parse(const char *s); bool Parse(const char *s);
}; };
@ -119,15 +123,19 @@ protected:
int adapter, frontend; int adapter, frontend;
private: private:
dvb_frontend_info frontendInfo; dvb_frontend_info frontendInfo;
int numProvidedSystems; int deliverySystems[MAXDELIVERYSYSTEMS];
fe_delivery_system frontendType; int numDeliverySystems;
int numModulations;
int fd_dvr, fd_ca; int fd_dvr, fd_ca;
static cMutex bondMutex; static cMutex bondMutex;
cDvbDevice *bondedDevice; cDvbDevice *bondedDevice;
mutable bool needsDetachBondedReceivers; mutable bool needsDetachBondedReceivers;
bool QueryDeliverySystems(int fd_frontend);
public: public:
cDvbDevice(int Adapter, int Frontend); cDvbDevice(int Adapter, int Frontend);
virtual ~cDvbDevice(); virtual ~cDvbDevice();
int Adapter(void) const { return adapter; }
int Frontend(void) const { return frontend; }
virtual bool Ready(void); virtual bool Ready(void);
static bool BondDevices(const char *Bondings); static bool BondDevices(const char *Bondings);
///< Bonds the devices as defined in the given Bondings string. ///< Bonds the devices as defined in the given Bondings string.
@ -167,6 +175,7 @@ private:
private: private:
cDvbTuner *dvbTuner; cDvbTuner *dvbTuner;
public: public:
virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
virtual bool ProvidesSource(int Source) const; virtual bool ProvidesSource(int Source) const;
virtual bool ProvidesTransponder(const cChannel *Channel) const; virtual bool ProvidesTransponder(const cChannel *Channel) const;
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) 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. * 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" #include "dvbspu.h"
@ -496,7 +496,7 @@ int cDvbSpuDecoder::setTime(uint32_t pts)
if (!spu) if (!spu)
return 0; return 0;
if (spu && !clean) if (!clean)
Draw(); Draw();
while (DCSQ_offset != prev_DCSQ_offset) { /* Display Control Sequences */ while (DCSQ_offset != prev_DCSQ_offset) { /* Display Control Sequences */

View File

@ -7,7 +7,7 @@
* Original author: Marco Schlüßler <marco@lordzodiac.de> * Original author: Marco Schlüßler <marco@lordzodiac.de>
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi> * 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; double VideoAspect;
cDevice::PrimaryDevice()->GetOsdSize(OsdWidth, OsdHeight, OsdAspect); cDevice::PrimaryDevice()->GetOsdSize(OsdWidth, OsdHeight, OsdAspect);
cDevice::PrimaryDevice()->GetVideoSize(VideoWidth, VideoHeight, VideoAspect); 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; osdFactorX = osdFactorY = 1.0;
osdDeltaX = osdDeltaY = 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 * Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
* *
* $Id: epg.c 2.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" #include "epg.h"
@ -828,10 +828,17 @@ void cEvent::FixEpgBugs(void)
Final: 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): // data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel):
strreplace(title, '\n', ' '); strreplace(title, '\n', ' ');
strreplace(shortText, '\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 /* TODO adapt to UTF-8
// Same for control characters: // Same for control characters:
strreplace(title, '\x86', ' '); strreplace(title, '\x86', ' ');
@ -1022,10 +1029,15 @@ void cSchedule::Cleanup(void)
void cSchedule::Cleanup(time_t Time) void cSchedule::Cleanup(time_t Time)
{ {
cEvent *Event; cEvent *Event = events.First();
while ((Event = events.First()) != NULL) { while (Event) {
if (!Event->HasTimer() && Event->EndTime() + Setup.EPGLinger * 60 + 3600 < Time) // adding one hour for safety if (Event->HasTimer())
DelEvent(Event); 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 else
break; break;
} }

4
font.c
View File

@ -6,7 +6,7 @@
* *
* BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya. * 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" #include "font.h"
@ -508,6 +508,7 @@ cString cFont::GetFontFileName(const char *FontName)
#ifdef BIDI #ifdef BIDI
cString cFont::Bidi(const char *Ltr) cString cFont::Bidi(const char *Ltr)
{ {
if (cCharSetConv::SystemCharacterTable()) { // bidi requires UTF-8
fribidi_set_mirroring(true); fribidi_set_mirroring(true);
fribidi_set_reorder_nsm(false); fribidi_set_reorder_nsm(false);
FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8; FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8;
@ -527,6 +528,7 @@ cString cFont::Bidi(const char *Ltr)
free(Visual); free(Visual);
if (ok) if (ok)
return cString(Rtl, true); return cString(Rtl, true);
}
return cString(Ltr); return cString(Ltr);
} }
#endif #endif

View File

@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or * * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. * * (at your option) any later version. *
* * * *
* $Id: 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; 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 { int PremiereContentTransmissionDescriptor::getOriginalNetworkId() const {
return HILO(s->original_network_id); return HILO(s->original_network_id);
} }
@ -1005,8 +1051,14 @@ int MHP_TransportProtocolDescriptor::getComponentTag() const {
return componentTag; return componentTag;
} }
char *MHP_TransportProtocolDescriptor::getUrlBase(char *buffer, int size) {
return UrlBase.getText(buffer, size);
}
void MHP_TransportProtocolDescriptor::Parse() { void MHP_TransportProtocolDescriptor::Parse() {
int offset=0; int offset=0;
remote=false;
componentTag=-1;
data.setPointerAndOffset<const descr_transport_protocol>(s, offset); data.setPointerAndOffset<const descr_transport_protocol>(s, offset);
if (getProtocolId() == ObjectCarousel) { if (getProtocolId() == ObjectCarousel) {
const transport_via_oc *oc; const transport_via_oc *oc;
@ -1021,12 +1073,24 @@ void MHP_TransportProtocolDescriptor::Parse() {
data.setPointerAndOffset<const transport_via_oc_end>(rem, offset); data.setPointerAndOffset<const transport_via_oc_end>(rem, offset);
componentTag=rem->component_tag; componentTag=rem->component_tag;
} }
} else { //unimplemented } else if (getProtocolId() == HTTPoverInteractionChannel) {
remote=false; const transport_via_http *http;
componentTag=-1; 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() { void MHP_DVBJApplicationDescriptor::Parse() {
applicationLoop.setData(data+sizeof(descr_dvbj_application), getLength()-sizeof(descr_dvbj_application)); 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); 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 { int RegistrationDescriptor::getFormatIdentifier() const {
return HILOHILO(s->format_identifier); return HILOHILO(s->format_identifier);
} }

View File

@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or * * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. * * (at your option) any later version. *
* * * *
* $Id: 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; 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 // Private DVB Descriptor Premiere.de
// 0xF2 Content Transmission Descriptor // 0xF2 Content Transmission Descriptor
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html // http://dvbsnoop.sourceforge.net/examples/example-private-section.html
@ -639,17 +658,29 @@ protected:
class MHP_TransportProtocolDescriptor : public Descriptor { class MHP_TransportProtocolDescriptor : public Descriptor {
public: 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 }; enum Protocol { ObjectCarousel = 0x01, IPviaDVB = 0x02, HTTPoverInteractionChannel = 0x03 };
int getProtocolId() const; int getProtocolId() const;
int getProtocolLabel() const; int getProtocolLabel() const;
bool isRemote() const; bool isRemote() const;
int getComponentTag() const; int getComponentTag() const;
char *getUrlBase(char *buffer, int size);
StructureLoop<UrlExtensionEntry> UrlExtensionLoop;
protected: protected:
virtual void Parse(); virtual void Parse();
private: private:
const descr_transport_protocol *s; const descr_transport_protocol *s;
bool remote; bool remote;
int componentTag; int componentTag;
String UrlBase;
}; };
class MHP_DVBJApplicationDescriptor : public Descriptor { class MHP_DVBJApplicationDescriptor : public Descriptor {
@ -685,6 +716,15 @@ private:
const descr_application_icons_descriptor_end *s; 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 { class RegistrationDescriptor : public Descriptor {
public: public:
int getFormatIdentifier() const; int getFormatIdentifier() const;

View File

@ -10,7 +10,7 @@
* the Free Software Foundation; either version 2 of the License, or * * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. * * (at your option) any later version. *
* * * *
* $Id: 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; 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 */ /* MHP 0x00 application_descriptor */
#define DESCR_APPLICATION_LEN 3 #define DESCR_APPLICATION_LEN 3
@ -1907,6 +1938,11 @@ struct descr_transport_protocol {
/* protocol_id-specific selector bytes follow */ /* 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 #define TRANSPORT_VIA_OC_LEN 1
struct transport_via_oc { struct transport_via_oc {
@ -1940,6 +1976,12 @@ struct transport_via_oc_end {
u_char component_tag :8; 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() */ /* 0x03 dvb_j_application_descriptor() */
#define DESCR_DVBJ_APPLICATION_LEN 2 #define DESCR_DVBJ_APPLICATION_LEN 2
@ -1991,6 +2033,16 @@ struct descr_application_icons_descriptor_end {
u_char icon_flags_lo :8; 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 // Private DVB Descriptor Premiere.de
// 0xF2 Content Transmission Descriptor // 0xF2 Content Transmission Descriptor
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html // 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 * * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. * * (at your option) any later version. *
* * * *
* $Id: si.c 2.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: case MHP_DVBJApplicationLocationDescriptorTag:
d=new MHP_DVBJApplicationLocationDescriptor(); d=new MHP_DVBJApplicationLocationDescriptor();
break; break;
case MHP_SimpleApplicationLocationDescriptorTag:
d=new MHP_SimpleApplicationLocationDescriptor();
break;
// 0x05 - 0x0A is unimplemented this library // 0x05 - 0x0A is unimplemented this library
case MHP_ExternalApplicationAuthorisationDescriptorTag: case MHP_ExternalApplicationAuthorisationDescriptorTag:
case MHP_IPv4RoutingDescriptorTag: case MHP_IPv4RoutingDescriptorTag:

View File

@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or * * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. * * (at your option) any later version. *
* * * *
* $Id: si.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, DTSDescriptorTag = 0x7B,
AACDescriptorTag = 0x7C, AACDescriptorTag = 0x7C,
ExtensionDescriptorTag = 0x7F, 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) // Defined by ETSI TS 102 812 (MHP)
// They once again start with 0x00 (see page 234, MHP specification) // They once again start with 0x00 (see page 234, MHP specification)
@ -153,6 +166,8 @@ enum DescriptorTag {
MHP_PrefetchDescriptorTag = 0x0C, MHP_PrefetchDescriptorTag = 0x0C,
MHP_DelegatedApplicationDescriptorTag = 0x0E, MHP_DelegatedApplicationDescriptorTag = 0x0E,
MHP_ApplicationStorageDescriptorTag = 0x10, MHP_ApplicationStorageDescriptorTag = 0x10,
MHP_SimpleApplicationLocationDescriptorTag = 0x15,
MHP_SimpleApplicationBoundaryDescriptorTag = 0x17,
// Premiere private Descriptor Tags // Premiere private Descriptor Tags
PremiereContentTransmissionDescriptorTag = 0xF2, PremiereContentTransmissionDescriptorTag = 0xF2,

12
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menu.c 2.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" #include "menu.h"
@ -3114,6 +3114,7 @@ cMenuSetupReplay::cMenuSetupReplay(void)
SetSection(tr("Replay")); SetSection(tr("Replay"));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode)); 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 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)); Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
} }
@ -4568,12 +4569,15 @@ bool cReplayControl::ShowProgress(bool Initial)
displayReplay->SetTitle(title); displayReplay->SetTitle(title);
lastCurrent = lastTotal = -1; lastCurrent = lastTotal = -1;
} }
if (Total != lastTotal) { if (Current != lastCurrent || Total != lastTotal) {
displayReplay->SetTotal(IndexToHMSF(Total, false, FramesPerSecond())); if (Setup.ShowRemainingTime || Total != lastTotal) {
int Index = Total;
if (Setup.ShowRemainingTime)
Index = Current - Index;
displayReplay->SetTotal(IndexToHMSF(Index, false, FramesPerSecond()));
if (!Initial) if (!Initial)
displayReplay->Flush(); displayReplay->Flush();
} }
if (Current != lastCurrent || Total != lastTotal) {
displayReplay->SetProgress(Current, Total); displayReplay->SetProgress(Current, Total);
if (!Initial) if (!Initial)
displayReplay->Flush(); displayReplay->Flush();

46
nit.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: 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" #include "nit.h"
@ -16,6 +16,9 @@
#include "libsi/descriptor.h" #include "libsi/descriptor.h"
#include "tools.h" #include "tools.h"
#define DVB_SYSTEM_1 0 // see also dvbdevice.c
#define DVB_SYSTEM_2 1
cNitFilter::cNitFilter(void) cNitFilter::cNitFilter(void)
{ {
numNits = 0; 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()]); dtp.SetCoderateH(CodeRates[sd->getFecInner()]);
static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 }; static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 };
dtp.SetModulation(Modulations[sd->getModulationType()]); 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 }; static int RollOffs[] = { ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_AUTO };
dtp.SetRollOff(sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO); dtp.SetRollOff(sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO);
int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10; 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; cDvbTransponderParameters dtp;
int Source = cSource::FromData(cSource::stTerr); int Source = cSource::FromData(cSource::stTerr);
int Frequency = Frequencies[0] = sd->getFrequency() * 10; 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()]); dtp.SetBandwidth(Bandwidths[sd->getBandwidth()]);
static int Constellations[] = { QPSK, QAM_16, QAM_64, QAM_AUTO }; static int Constellations[] = { QPSK, QAM_16, QAM_64, QAM_AUTO };
dtp.SetModulation(Constellations[sd->getConstellation()]); 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 }; static int Hierarchies[] = { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, HIERARCHY_4, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO };
dtp.SetHierarchy(Hierarchies[sd->getHierarchy()]); 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 }; 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()]); dtp.SetCoderateL(CodeRates[sd->getCodeRateLP()]);
static int GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4 }; static int GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4 };
dtp.SetGuard(GuardIntervals[sd->getGuardInterval()]); 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()]); dtp.SetTransmission(TransmissionModes[sd->getTransmissionMode()]);
if (ThisNIT >= 0) { if (ThisNIT >= 0) {
for (int n = 0; n < NumFrequencies; n++) { 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; 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: ; default: ;
} }
delete d; delete d;

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.0\n" "Project-Id-Version: VDR 1.7.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-10-16 11:16-0400\n"
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n" "Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
"Language-Team: Arabic <ar@li.org>\n" "Language-Team: Arabic <ar@li.org>\n"
@ -79,6 +79,9 @@ msgstr "الهرمية"
msgid "Rolloff" msgid "Rolloff"
msgstr "ايقاف" msgstr "ايقاف"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "EPG ا لبدء بالبحث على دليل القنوات الالكترونى " msgstr "EPG ا لبدء بالبحث على دليل القنوات الالكترونى "
@ -1103,6 +1106,9 @@ msgstr "موءقت النوم"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "اضهر طور الاعادة" msgstr "اضهر طور الاعادة"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "رقم المواصلة" msgstr "رقم المواصلة"

View File

@ -10,7 +10,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n" "Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n" "Language-Team: Catalan <vdr@linuxtv.org>\n"
@ -76,6 +76,9 @@ msgstr "Jerarquia"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Iniciant exploració EPG" msgstr "Iniciant exploració EPG"
@ -1080,6 +1083,9 @@ msgstr "Mode de multivelocitat"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar mode de reproducció" msgstr "Mostrar mode de reproducció"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID de Continuar" msgstr "ID de Continuar"

View File

@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.14\n" "Project-Id-Version: VDR 1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2010-05-06 11:00+0200\n"
"Last-Translator: Radek Šťastný <dedkus@gmail.com>\n" "Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
"Language-Team: Czech <vdr@linuxtv.org>\n" "Language-Team: Czech <vdr@linuxtv.org>\n"
@ -75,6 +75,9 @@ msgstr "Hierarchický mód"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Začíná prohledávání EPG" msgstr "Začíná prohledávání EPG"
@ -1079,6 +1082,9 @@ msgstr "Vícerychlostní mód"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Zobrazit režim přehrávání" msgstr "Zobrazit režim přehrávání"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID obnovení" msgstr "ID obnovení"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n" "Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish <vdr@linuxtv.org>\n" "Language-Team: Danish <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "Hierarki"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Starter EPG skanning" msgstr "Starter EPG skanning"
@ -1077,6 +1080,9 @@ msgstr "Multi hastighedsmodus"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Vis afspilningsmodus" msgstr "Vis afspilningsmodus"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Genoptagelses ID" msgstr "Genoptagelses ID"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2010-01-16 16:46+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n" "Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n" "Language-Team: German <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "Hierarchie"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr "PlpId"
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Aktualisiere EPG-Daten" msgstr "Aktualisiere EPG-Daten"
@ -1077,6 +1080,9 @@ msgstr "Mehrstufiger Vor-/R
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Wiedergabestatus anzeigen" msgstr "Wiedergabestatus anzeigen"
msgid "Setup.Replay$Show remaining time"
msgstr "Verbleibende Zeit anzeigen"
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Wiedergabe-ID" msgstr "Wiedergabe-ID"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n" "Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek <vdr@linuxtv.org>\n" "Language-Team: Greek <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Áñ÷Þ óÜñùóç EPG" msgstr "Áñ÷Þ óÜñùóç EPG"
@ -1077,6 +1080,9 @@ msgstr "
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "¸íäåéîç êáôÜóôáóçò áíáìåôÜäïóçò" msgstr "¸íäåéîç êáôÜóôáóçò áíáìåôÜäïóçò"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID áíáìåôÜäïóçò" msgstr "ID áíáìåôÜäïóçò"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n" "Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n" "Language-Team: Spanish <vdr@linuxtv.org>\n"
@ -74,6 +74,9 @@ msgstr "Jerarqu
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Iniciando la exploración de EPG" msgstr "Iniciando la exploración de EPG"
@ -1078,6 +1081,9 @@ msgstr "Modo multi-velocidad"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar modo de reproducción" msgstr "Mostrar modo de reproducción"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID de continuación" msgstr "ID de continuación"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n" "Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n" "Language-Team: Estonian <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "Hierarhia"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "EPG skaneerimine käivitatud" msgstr "EPG skaneerimine käivitatud"
@ -1077,6 +1080,9 @@ msgstr "Mitmekiiruse moodus"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Korduse moodus" msgstr "Korduse moodus"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Jätkamise ID" msgstr "Jätkamise ID"

View File

@ -10,7 +10,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2007-08-15 15:52+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n" "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n" "Language-Team: Finnish <vdr@linuxtv.org>\n"
@ -76,6 +76,9 @@ msgstr "Hierarkia"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr "PLP-tunniste"
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Ohjelmaoppaan päivitys aloitettu" msgstr "Ohjelmaoppaan päivitys aloitettu"
@ -967,10 +970,10 @@ msgstr "LNB-ylätaajuus (MHz)"
#, c-format #, c-format
msgid "Setup.LNB$Device %d connected to sat cable" msgid "Setup.LNB$Device %d connected to sat cable"
msgstr "" msgstr "DVB-sovitin %d kytketty SAT-kaapeliin"
msgid "Setup.LNB$own" msgid "Setup.LNB$own"
msgstr "" msgstr "oma"
msgid "CAM reset" msgid "CAM reset"
msgstr "CAM nollaus" msgstr "CAM nollaus"
@ -1080,6 +1083,9 @@ msgstr "Käytä toiston moninopeustilaa"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Näytä toiston tila" msgstr "Näytä toiston tila"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Tallenteen paluutunniste" msgstr "Tallenteen paluutunniste"

View File

@ -13,7 +13,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-02-27 18:14+0100\n"
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n" "Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
"Language-Team: French <vdr@linuxtv.org>\n" "Language-Team: French <vdr@linuxtv.org>\n"
@ -79,6 +79,9 @@ msgstr "Hi
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Mise à jour du guide des programmes" msgstr "Mise à jour du guide des programmes"
@ -1083,6 +1086,9 @@ msgstr "Mode multi-vitesses"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Affichage mode de lecture" msgstr "Affichage mode de lecture"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID de reprise" msgstr "ID de reprise"

View File

@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-03-17 19:00+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n" "Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n" "Language-Team: Croatian <vdr@linuxtv.org>\n"
@ -75,6 +75,9 @@ msgstr "Hijerarhija"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Poèinjem EPG pretragu" msgstr "Poèinjem EPG pretragu"
@ -1079,6 +1082,9 @@ msgstr "Vi
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Prika¾i naèin prikazivanja" msgstr "Prika¾i naèin prikazivanja"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka" msgstr "ID nastavka"

View File

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

View File

@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2010-06-13 00:30+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n" "Language-Team: Italian <vdr@linuxtv.org>\n"
@ -80,6 +80,9 @@ msgstr "Gerarchia"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Inizio scansione EPG" msgstr "Inizio scansione EPG"
@ -1084,6 +1087,9 @@ msgstr "Modalità multispeed"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Mostra modalità riproduzione" msgstr "Mostra modalità riproduzione"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID di ripristino" msgstr "ID di ripristino"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.16\n" "Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2010-10-30 11:55+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n" "Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n" "Language-Team: Lithuanian <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "Hierarchija"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Pradedamas EPG skanavimas" msgstr "Pradedamas EPG skanavimas"
@ -1077,6 +1080,9 @@ msgstr "Prasukimo ręžimas"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Rodyti pakartojimo ręžimą" msgstr "Rodyti pakartojimo ręžimą"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Kūrinio ID" msgstr "Kūrinio ID"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR-1.7.14\n" "Project-Id-Version: VDR-1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2010-03-11 00:54+0100\n"
"Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n" "Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
"Language-Team: Macedonian <en@li.org>\n" "Language-Team: Macedonian <en@li.org>\n"
@ -74,6 +74,9 @@ msgstr "Хиерархија"
msgid "Rolloff" msgid "Rolloff"
msgstr "Рол-оф" msgstr "Рол-оф"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Започнувам скенирање на EPG" msgstr "Започнувам скенирање на EPG"
@ -1078,6 +1081,9 @@ msgstr "Повеќебрзински режим"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Прикажи начин на пуштање" msgstr "Прикажи начин на пуштање"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID на продолжеток" msgstr "ID на продолжеток"

View File

@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-02-26 17:20+0100\n"
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n" "Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n" "Language-Team: Dutch <vdr@linuxtv.org>\n"
@ -77,6 +77,9 @@ msgstr "Hierarchie"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Bezig met starten EPG scan" msgstr "Bezig met starten EPG scan"
@ -1081,6 +1084,9 @@ msgstr "Multi-speed mode"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Weergave mode aangeven" msgstr "Weergave mode aangeven"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Hervattings ID" msgstr "Hervattings ID"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n" "Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n" "Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
@ -74,6 +74,9 @@ msgstr "Hierarchy"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "" msgstr ""
@ -1078,6 +1081,9 @@ msgstr "Multispeed modus"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Vis avspillingsmodus" msgstr "Vis avspillingsmodus"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Resume ID" msgstr "Resume ID"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-03-09 12:59+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n" "Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n" "Language-Team: Polish <vdr@linuxtv.org>\n"
@ -74,6 +74,9 @@ msgstr "Hierarchia"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Rozpoczynam skanowanie EPG" msgstr "Rozpoczynam skanowanie EPG"
@ -1078,6 +1081,9 @@ msgstr "Tryb wielopr
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Pokazuj tryb odtwarzania" msgstr "Pokazuj tryb odtwarzania"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID wznowienia" msgstr "ID wznowienia"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.15\n" "Project-Id-Version: VDR 1.7.15\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2010-03-28 22:49+0100\n"
"Last-Translator: Cris Silva <hudokkow@gmail.com>\n" "Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n" "Language-Team: Portuguese <vdr@linuxtv.org>\n"
@ -74,6 +74,9 @@ msgstr "Hierarquia"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "A iniciar a busca do EPG" msgstr "A iniciar a busca do EPG"
@ -1078,6 +1081,9 @@ msgstr "Modo multi velocidade"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Mostrar modo de reprodução" msgstr "Mostrar modo de reprodução"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID de resumo" msgstr "ID de resumo"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.12\n" "Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2011-03-10 23:52+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n" "Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n" "Language-Team: Romanian <vdr@linuxtv.org>\n"
@ -76,6 +76,9 @@ msgstr "Ierarhie"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Pornesc achiziþia EPG" msgstr "Pornesc achiziþia EPG"
@ -1080,6 +1083,9 @@ msgstr "Mod multi-vitez
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Afiºeazã redarea" msgstr "Afiºeazã redarea"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Identificator continuare" msgstr "Identificator continuare"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-12-15 14:37+0100\n"
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n" "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n" "Language-Team: Russian <vdr@linuxtv.org>\n"
@ -74,6 +74,9 @@ msgstr "
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "½ÐçØÝÐî EPG-áÚÐÝØàÞÒÐÝØÕ" msgstr "½ÐçØÝÐî EPG-áÚÐÝØàÞÒÐÝØÕ"
@ -1078,6 +1081,9 @@ msgstr "
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "¾âÞÑàÐÖÐâì àÕÖØÜ ÒÞáßàÞØ×ÒÕÔÕÝØï" msgstr "¾âÞÑàÐÖÐâì àÕÖØÜ ÒÞáßàÞØ×ÒÕÔÕÝØï"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID ÒÞáßàÞØ×ÒÕÔÕÝØï" msgstr "ID ÒÞáßàÞØ×ÒÕÔÕÝØï"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.16\n" "Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2011-02-15 16:29+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n" "Language-Team: Slovak <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "Hierarchia"
msgid "Rolloff" msgid "Rolloff"
msgstr "Rolloff" msgstr "Rolloff"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Zaèína prehµadáva» EPG" msgstr "Zaèína prehµadáva» EPG"
@ -1077,6 +1080,9 @@ msgstr "Viac r
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Zobrazi» spôsob prehrávania" msgstr "Zobrazi» spôsob prehrávania"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID obnovenie" msgstr "ID obnovenie"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-02-28 19:44+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n" "Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n" "Language-Team: Slovenian <vdr@linuxtv.org>\n"
@ -74,6 +74,9 @@ msgstr "Hierarhija"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Prièenjam EPG-scan" msgstr "Prièenjam EPG-scan"
@ -1078,6 +1081,9 @@ msgstr "Re
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Prika¾i re¾im predvajanja" msgstr "Prika¾i re¾im predvajanja"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID za predvajanje" msgstr "ID za predvajanje"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.1\n" "Project-Id-Version: VDR 1.7.1\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2011-01-09 15:57+0100\n"
"Last-Translator: Milan Cvijanoviæ <elcom_cvijo@hotmail.com>\n" "Last-Translator: Milan Cvijanoviæ <elcom_cvijo@hotmail.com>\n"
"Language-Team: Serbian <vdr@linuxtv.org>\n" "Language-Team: Serbian <vdr@linuxtv.org>\n"
@ -74,6 +74,9 @@ msgstr "Hijerarhija"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Poèinjem EPG pretragu" msgstr "Poèinjem EPG pretragu"
@ -1100,6 +1103,9 @@ msgstr "Vi
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Prika¾i re¾im reprodukcije" msgstr "Prika¾i re¾im reprodukcije"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID nastavka" msgstr "ID nastavka"

View File

@ -10,7 +10,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-03-12 18:25+0100\n"
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n" "Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n" "Language-Team: Swedish <vdr@linuxtv.org>\n"
@ -76,6 +76,9 @@ msgstr "Hierarchy"
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Påbörjar EPG skanning" msgstr "Påbörjar EPG skanning"
@ -1080,6 +1083,9 @@ msgstr "Multispeed mode"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Visa uppspelningsläge" msgstr "Visa uppspelningsläge"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Återuppta ID" msgstr "Återuppta ID"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n" "Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n" "Language-Team: Turkish <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "Hiyerar
msgid "Rolloff" msgid "Rolloff"
msgstr "" msgstr ""
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "EPG tarama baþlýyor" msgstr "EPG tarama baþlýyor"
@ -1077,6 +1080,9 @@ msgstr "Katl
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Gösteriþ bilgisi" msgstr "Gösteriþ bilgisi"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "Gösteriþ ID'si" msgstr "Gösteriþ ID'si"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.7.7\n" "Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2010-04-25 16:35+0200\n"
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n" "Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
"Language-Team: Ukrainian <vdr@linuxtv.org>\n" "Language-Team: Ukrainian <vdr@linuxtv.org>\n"
@ -73,6 +73,9 @@ msgstr "Ієрархія"
msgid "Rolloff" msgid "Rolloff"
msgstr "Крен" msgstr "Крен"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "Починаю EPG-сканування" msgstr "Починаю EPG-сканування"
@ -1077,6 +1080,9 @@ msgstr "Багатошвидкісний режим"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "Віображати режим перегляду" msgstr "Віображати режим перегляду"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "ID продовження" msgstr "ID продовження"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.6.0\n" "Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2009-09-23 23:50+0800\n"
"Last-Translator: Nan Feng <nfgx@21cn.com>\n" "Last-Translator: Nan Feng <nfgx@21cn.com>\n"
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n" "Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
@ -76,6 +76,9 @@ msgstr "层次"
msgid "Rolloff" msgid "Rolloff"
msgstr "越零率" msgstr "越零率"
msgid "PlpId"
msgstr ""
msgid "Starting EPG scan" msgid "Starting EPG scan"
msgstr "开始节目单扫描" msgstr "开始节目单扫描"
@ -1080,6 +1083,9 @@ msgstr "媒体速度模式"
msgid "Setup.Replay$Show replay mode" msgid "Setup.Replay$Show replay mode"
msgstr "显示回放模式" msgstr "显示回放模式"
msgid "Setup.Replay$Show remaining time"
msgstr ""
msgid "Setup.Replay$Resume ID" msgid "Setup.Replay$Resume ID"
msgstr "恢复 ID" msgstr "恢复 ID"

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: recording.c 2.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" #include "recording.h"
@ -873,16 +873,23 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
s++; s++;
else else
s = name; 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_mday,
t->tm_mon + 1, t->tm_mon + 1,
t->tm_year % 100, t->tm_year % 100,
Delimiter, Delimiter,
t->tm_hour, t->tm_hour,
t->tm_min, t->tm_min,
Delimiter, *Length,
(LengthInSeconds() >= 0) ? LengthInSeconds() / 3600 : 0,
(LengthInSeconds() >= 0) ? LengthInSeconds() / 60 % 60 : 0,
New, New,
Delimiter, Delimiter,
s)); s));
@ -1103,26 +1110,22 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
struct dirent *e; struct dirent *e;
while ((Foreground || Running()) && (e = d.Next()) != NULL) { while ((Foreground || Running()) && (e = d.Next()) != NULL) {
if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) { 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; struct stat st;
if (stat(buffer, &st) == 0) { if (lstat(buffer, &st) == 0) {
int Link = 0; int Link = 0;
if (S_ISLNK(st.st_mode)) { if (S_ISLNK(st.st_mode)) {
if (LinkLevel > MAX_LINK_LEVEL) { if (LinkLevel > MAX_LINK_LEVEL) {
isyslog("max link level exceeded - not scanning %s", buffer); isyslog("max link level exceeded - not scanning %s", *buffer);
continue; continue;
} }
Link = 1; Link = 1;
char *old = buffer; buffer = ReadLink(buffer);
buffer = ReadLink(old); if (!*buffer)
free(old);
if (!buffer)
continue; continue;
if (stat(buffer, &st) != 0) { if (stat(buffer, &st) != 0)
free(buffer);
continue; continue;
} }
}
if (S_ISDIR(st.st_mode)) { if (S_ISDIR(st.st_mode)) {
if (endswith(buffer, deleted ? DELEXT : RECEXT)) { if (endswith(buffer, deleted ? DELEXT : RECEXT)) {
cRecording *r = new cRecording(buffer); cRecording *r = new cRecording(buffer);
@ -1144,7 +1147,6 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
ScanVideoDir(buffer, Foreground, LinkLevel + Link); ScanVideoDir(buffer, Foreground, LinkLevel + Link);
} }
} }
free(buffer);
} }
} }
} }
@ -2040,15 +2042,18 @@ cUnbufferedFile *cFileName::NextFile(void)
cString IndexToHMSF(int Index, bool WithFrame, double FramesPerSecond) cString IndexToHMSF(int Index, bool WithFrame, double FramesPerSecond)
{ {
char buffer[16]; const char *Sign = "";
if (Index < 0) {
Index = -Index;
Sign = "-";
}
double Seconds; double Seconds;
int f = int(modf((Index + 0.5) / FramesPerSecond, &Seconds) * FramesPerSecond + 1); int f = int(modf((Index + 0.5) / FramesPerSecond, &Seconds) * FramesPerSecond + 1);
int s = int(Seconds); int s = int(Seconds);
int m = s / 60 % 60; int m = s / 60 % 60;
int h = s / 3600; int h = s / 3600;
s %= 60; s %= 60;
snprintf(buffer, sizeof(buffer), WithFrame ? "%d:%02d:%02d.%02d" : "%d:%02d:%02d", h, m, s, f); return cString::sprintf(WithFrame ? "%s%d:%02d:%02d.%02d" : "%s%d:%02d:%02d", Sign, h, m, s, f);
return buffer;
} }
int HMSFToIndex(const char *HMSF, double FramesPerSecond) int HMSFToIndex(const char *HMSF, double FramesPerSecond)

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: remux.c 2.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" #include "remux.h"
@ -701,6 +701,10 @@ const uchar *cTsToPes::GetPes(int &Length)
uchar *p = data + offset - 6; uchar *p = data + offset - 6;
if (p != data) { if (p != data) {
p -= 3; p -= 3;
if (p < data) {
Reset();
return NULL;
}
memmove(p, data, 4); memmove(p, data, 4);
} }
int l = min(length - offset, MAXPESLENGTH); int l = min(length - offset, MAXPESLENGTH);

View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured * and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection. * 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" #include "svdrp.h"
@ -583,6 +583,10 @@ void cSVDRP::CmdCLRE(const char *Option)
} }
} }
if (Schedule) { 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); Schedule->Cleanup(INT_MAX);
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME); cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME);
Reply(250, "EPG data of channel \"%s\" cleared", Option); 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 * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: tools.c 2.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" #include "tools.h"
@ -1913,7 +1913,7 @@ void cListBase::Move(int From, int To)
void cListBase::Move(cListObject *From, cListObject *To) void cListBase::Move(cListObject *From, cListObject *To)
{ {
if (From && To) { if (From && To && From != To) {
if (From->Index() < To->Index()) if (From->Index() < To->Index())
To = To->Next(); To = To->Next();
if (From == objects) if (From == objects)

44
vdr.5
View File

@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the .\" License as specified in the file COPYING that comes with the
.\" vdr distribution. .\" 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" .TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
.SH NAME .SH NAME
@ -87,32 +87,33 @@ meaning (and allowed values) are
.TS .TS
tab (@); tab (@);
l l. 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) \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) \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 \fBH\fR@Horizontal polarization
\fBI\fR@Inversion (0, 1) \fBI\fR@Inversion (0, 1)
\fBL\fR@Left circular polarization \fBL\fR@Left circular polarization
\fBM\fR@Modulation (2, 5, 6, 10, 11, 16, 32, 64, 128, 256, 998) \fBM\fR@Modulation (2, 5, 6, 10, 11, 16, 32, 64, 128, 256, 998)
\fBO\fR@rollOff (0, 20, 25, 35) \fBO\fR@rollOff (0, 20, 25, 35)
\fBP\fR@Plp id (0-255)
\fBR\fR@Right circular polarization \fBR\fR@Right circular polarization
\fBS\fR@delivery System (0, 1) \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 \fBV\fR@Vertical polarization
\fBY\fR@hierarchY (0, 1, 2, 4) \fBY\fR@hierarchY (0, 1, 2, 4)
.TE .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. For DVB-S/DVB-S2 this parameter specifies the inner FEC scheme.
12 = 1/2, 23 = 2/3, 34 = 3/4, ... 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. 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. \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 .TS
tab (@); tab (@);
l l. 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) \fB5\fR@8PSK (DVB-S2)
\fB6\fR@16APSK (DVB-S2) \fB6\fR@16APSK (DVB-S2)
\fB7\fR@32APSK (DVB-S2)
\fB10\fR@VSB8 (ATSC aerial) \fB10\fR@VSB8 (ATSC aerial)
\fB11\fR@VSB16 (ATSC aerial) \fB11\fR@VSB16 (ATSC aerial)
\fB16\fR@QAM16 (DVB-T) \fB12\fR@DQPSK (ISDB-T)
\fB64\fR@QAM64 (DVB-C, DVB-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) \fB128\fR@QAM128 (DVB-C)
\fB256\fR@QAM256 (DVB-C) \fB256\fR@QAM256 (DVB-C, DVB-T2)
.TE .TE
\fBRolloff:\fR The Nyquist filter rolloff factor for DVB-S (\fB35\fR) and DVB-S2 (\fB35\fR, 25, 20), \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 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. \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. \fBPolarization:\fR Satellite antenna polarization.
H = horizontal, V = vertical, R = circular right, L = circular left. 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). will automatically determine the proper value (if possible).
An example of a parameter field for a DVB-T channel might look like this: 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: An example of a parameter field for a DVB-C channel might look like this:
\fBC0M64\fR \fBC0M64\fR
An example of a parameter field for a DVB-S channel might look like this: 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: 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 Plugins that implement devices that need their own set of parameters may
store those in the parameters string in arbitrary format (not necessarily store those in the parameters string in arbitrary format (not necessarily