Version 1.7.23

Original announce message:
VDR developer version 1.7.23 is now available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.23.tar.bz2

A 'diff' against the previous version is available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.22-1.7.23.diff

MD5 checksums:

de136f7be28c4b6f1fa0e2218b4acc11  vdr-1.7.23.tar.bz2
2977b75cd8dacad187d11c10b867d56a  vdr-1.7.22-1.7.23.diff

WARNING:
========

This is a developer version. Even though I use it in my productive
environment. I strongly recommend that you only use it under controlled
conditions and for testing and debugging.

From the HISTORY file:
- Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one).
- Fixed bonding more than two devices.
- Fixed handling symbolic links in cRecordings::ScanVideoDir() (reported by
  Sundararaj Reel).
- Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many
  link levels (reported by Sundararaj Reel).
- Removed redundant memset() in the ctor of cSatCableNumbers (triggered by
  Ville Skyttä pointing out that the argument sequence in the call was wrong).
- Removed a redundant NULL check in cDvbSpuDecoder::setTime() (thanks to Ville Skyttä).
- Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality()
  (triggered by Ville Skyttä pointing out that the variable HasSnr was unused).
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Added support for HbbTV to libsi (thanks to Christoph Haubrich).
- Added support for devices with more than one delivery system per frontend.
  This requires a DVB driver with version 5.5 or higher that can handle the
  DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery
  system per frontend.
- Updated the Hungarian language texts (thanks to István Füley).
- cDvbTuner::ExecuteDiseqc() now makes sure only one tuner sends SCR commands
  at any given time (reported by Frank Neumann).
- cEvent::FixEpgBugs() now replaces any newline characters in stream component
  descriptions with blanks (thanks to Torsten Lang for reporting a problem with
  EPG data from BSkyB's "MTV MUSIC", S28.2E-2-2010-7012).
- Fixed cDvbSubtitleConverter::SetOsdData() (thanks to Rolf Ahrenberg).
- Fixed cListBase::Move() in case From and To are equal (reported by Sundararaj
  Reel).
- Added support for DVB-T2 to libsi (thanks to Rolf Ahrenberg).
- Added support for handling DVB-T2 transponders.  This requires a DVB driver
  with version 5.3 or higher that can handle the DTV_DVBT2_PLP_ID call (thanks
  to Rolf Ahrenberg).
- Fixed cConfig::Load() for g++ version 4.7.0 (thanks to Ville Skyttä).
- Fixed a possible memory corruption in cTsToPes::GetPes() in case of broken
  TS packets, e.g. when switching channels.
- Fixed the SVDRP command CLRE for a single channel in case there are events
  that have a timer (thanks to Timo Eskola).
- BIDI support now checks at runtime whether the system runs with UTF-8 (suggested
  by Torsten Lang).
- Added member functions Adapter() and Frontend() to cDvbDevice (suggested by
  Rolf Ahrenberg).
- The parameters that are only used by "second generation" delivery systems (DVB-S2
  and DVB-T2) are no longer written into channels.conf for "first generation"
  delivery systems (DVB-S and DVB-T).
- Changed IndexToHMSF() so that it can handle negative Index values.
- Added option -N to the msgmerge call in the Makefile, because fuzzy translation
  mostly resulted in useless strings.
- The new setup option "Replay/Show remaining time" can be used to switch between
  showing the total length or the remaining time of the recording that is currently
  replayed.
- Fixed wrongfully displaying the length of a recording in the title of the replay
  progress display.
- Fixed frozen live view with device bonding in case the bonded master is used for
  live viewing (reported by Uwe Scheffler).
This commit is contained in:
Klaus Schmidinger 2012-01-15 16:10:00 +01:00 committed by Dieter Hametner
parent 5a28d99936
commit 59f0138a7d
55 changed files with 963 additions and 328 deletions

View File

@ -271,6 +271,7 @@ Uwe Scheffler <linux_dvb@uni.de>
for his help in keeping 'channels.conf.cable' and 'channels.conf.terr' up to date
for helping to test new DVB-T handling
for reporting a bug in switching the video format in the Setup/DVB menu
for reporting a problem with frozen live view in conjunction with device bonding
Matjaz Thaler <matjaz.thaler@guest.arnes.si>
for improving AC3 decoding when replaying DVDs
@ -1120,6 +1121,10 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for fixing handling DVB subtitles and implementing decoding textual DVB subtitles
for adding file name and line number to LOG_ERROR_STR()
for replacing all calls to sleep() with cCondWait::SleepMs()
for fixing cDvbSubtitleConverter::SetOsdData()
for adding support for DVB-T2 to libsi
for adding support for handling DVB-T2 transponders
for suggesting to add member functions Adapter() and Frontend() to cDvbDevice
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark
@ -1927,8 +1932,13 @@ Ville Skytt
for fixing a crash when deleting a recording while cutting it
for fixing several spelling errors
for adding generating a pkg-config file to the Makefile
for removing the '.pl' suffix from all scripts (thanks to Ville Skyttä).
for removing the '.pl' suffix from all scripts
for changing the default location for the LIRC socket to /var/run/lirc/lircd
for pointing out that the argument sequence in the memset() call in the ctor of
cSatCableNumbers was wrong
for removing a redundant NULL check in cDvbSpuDecoder::setTime()
for pointing out that the variable HasSnr was unused in cDvbTuner::GetSignalQuality()
for fixing cConfig::Load() for g++ version 4.7.0
Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next
@ -2256,6 +2266,7 @@ Christoph Haubrich <christoph1.haubrich@arcor.de>
for suggesting to implement a function to determine the length of a recording's
index file
for fixing setting the start time of an edited recording
for adding support for HbbTV to libsi
Pekka Mauno <pekka.mauno@iki.fi>
for fixing cSchedule::GetFollowingEvent() in case there is currently no present
@ -2483,6 +2494,8 @@ Timo Eskola <timo@tolleri.net>
for implementing sending all frames to devices that can handle them in fast forward
trick speeds
for implementing the setup option "Recording/Pause key handling"
for fixing the SVDRP command CLRE for a single channel in case there are events
that have a timer
Elias Luttinen <el@iki.fi>
for improving the description of where logging goes in the INSTALL file
@ -2544,6 +2557,10 @@ Sundararaj Reel <sundararaj.reel@googlemail.com>
for reporting a missing reset of maxNumber in cChannels::Renumber()
for reporting some missing 'const' in tChannelID
for suggesting to add optional case insensitive sorting to cStringList::Sort()
for reporting a bug in handling symbolic links in cRecordings::ScanVideoDir()
for reporting a memory leak in cRecordings::ScanVideoDir() in case there are too
many link levels
for reporting a bug in cListBase::Move() in case From and To are equal
Ales Jurik <ajurik@quick.cz>
for reporting broken SI data on Czech/Slovak channels after changing the default
@ -2732,8 +2749,9 @@ Andreas Oberritter <obi@opendreambox.org>
Milan Cvijanovic <elcom_cvijo@hotmail.com>
for translating OSD texts to the Serbian language
Frank Neumann <frank.neumann@hp.com>
Frank Neumann <fnu@yavdr.org>
for suggesting to reduce the thread and I/O priority cCuttingThread::Action()
for reporting a problem with tuning timeouts when using SCR with multiple tuners
Gerald Dachs <vdr@dachsweb.de>
for reporting a problem with checking for minimum line length of 21 characters in
@ -2792,3 +2810,9 @@ Chris Mayo <aklhfex@gmail.com>
Dominic Evans <oldmanuk@gmail.com>
for making the SVDRP command LSTC accepts channel IDs
for adding cap_net_raw to the capabilities that are not dropped
Torsten Lang <info@torstenlang.de>
for reporting a problem with newline characters in stream component descriptions
of EPG data from BSkyB's "MTV MUSIC"
for suggesting to make BIDI support check at runtime whether the system runs with
UTF-8

55
HISTORY
View File

@ -6780,3 +6780,58 @@ Video Disk Recorder Revision History
- Added file name and line number to LOG_ERROR_STR() (thanks to Rolf Ahrenberg).
- Replaced all calls to sleep() with cCondWait::SleepMs() (thanks to Rolf Ahrenberg).
- Fixed a crash with malformed SI data (patch from vdr-portal).
2012-01-15: Version 1.7.23
- Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one).
- Fixed bonding more than two devices.
- Fixed handling symbolic links in cRecordings::ScanVideoDir() (reported by
Sundararaj Reel).
- Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many
link levels (reported by Sundararaj Reel).
- Removed redundant memset() in the ctor of cSatCableNumbers (triggered by
Ville Skyttä 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 remaining time = no
Defines whether the replay progress display shows the
remaining time or the total length of the recording.
Resume ID = 0 Defines an additional ID that can be used in a multi user
environment, so that every user has his/her own resume
files for each recording. The valid range is 0...99, with

View File

@ -4,7 +4,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Makefile 2.22 2011/12/04 14:41:00 kls Exp $
# $Id: Makefile 2.23 2012/01/14 13:09:10 kls Exp $
.DELETE_ON_ERROR:
@ -139,7 +139,7 @@ $(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr.mo: $(PODIR)/%.mo

View File

@ -59,3 +59,7 @@ VDR Plugin 'pictures' Revision History
2011-11-02:
- Fixed handling images that are rotated by 180 degrees in pic2mpg.
2012-01-08:
- Added option -o to pic2mpg.

View File

@ -7,7 +7,7 @@
#
# See the README file for copyright information and how to reach the author.
#
# $Id: pic2mpg 2.3 2011/11/02 17:20:37 kls Exp $
# $Id: pic2mpg 2.4 2012/01/08 13:27:17 kls Exp $
use File::Path;
use File::Spec;
@ -20,15 +20,17 @@ Usage: $0 [options] picture-dir mpeg-dir
Options: -f Force conversion
-h print Help
-o percent overscan in percent
-s size Screen size (WIDTHxHEIGHT, default is 1920x1080)
-v num Verbose (0=none, 1=list files, 2=detailed)
};
getopts("fhs:v:") || die $Usage;
getopts("fho:s:v:") || die $Usage;
die $Usage if $opt_h;
$Force = $opt_f;
$Overscan = $opt_o || 0;
$Size = $opt_s || "1920x1080";
$Verbose = $opt_v;
@ -54,6 +56,15 @@ die "$0: missing parameter\n" unless $ARGV[0] && $ARGV[1];
die "$0: file or directory not found: $ARGV[0]\n" unless -e $ARGV[0];
die "$0: source and destination must be different\n" if $ARGV[0] eq $ARGV[1];
$Extent = $Size;
if ($Overscan > 0) {
my ($x, $y) = $Size =~ /(.*)x(.*)/;
my $r = (100 + $Overscan) / 100;
$x = int($x * $r + 0.5);
$y = int($y * $r + 0.5);
$Extent = "${x}x$y";
}
# Convert a single file:
if (-f $ARGV[0]) {
@ -130,7 +141,7 @@ sub ConvertFile
$Pict = EscapeMeta($Pict);
$Mpeg = EscapeMeta($Mpeg);
print "$Pict -> $Mpeg $Rotate\n" if $ListFiles;
my $Cmd = "convert $Pict -background '#000000' $Rotate -resize $Size -gravity center -extent $Size ppm:- | "
my $Cmd = "convert $Pict -background '#000000' $Rotate -resize $Size -gravity center -extent $Extent ppm:- | "
. "ffmpeg -f image2pipe -vcodec ppm -i pipe:0 -an -vcodec libx264 -vpre baseline -s $Size -qscale 2 -f mpegts -y $Mpeg "
. ($Detailed ? "" : "2>/dev/null");
!system($Cmd) || die "$Cmd: $!\n";

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 2.16 2011/12/03 15:21:30 kls Exp $
* $Id: config.c 2.18 2012/01/14 13:04:59 kls Exp $
*/
#include "config.h"
@ -69,7 +69,6 @@ cSatCableNumbers::cSatCableNumbers(int Size, const char *s)
{
size = Size;
array = MALLOC(int, size);
memset(array, size * sizeof(int), 0);
FromString(s);
}
@ -454,6 +453,7 @@ cSetup::cSetup(void)
NextWakeupTime = 0;
MultiSpeedMode = 0;
ShowReplayMode = 0;
ShowRemainingTime = 0;
ResumeID = 0;
CurrentChannel = -1;
CurrentVolume = MAXVOLUME;
@ -648,6 +648,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "NextWakeupTime")) NextWakeupTime = atoi(Value);
else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = atoi(Value);
else if (!strcasecmp(Name, "ShowRemainingTime")) ShowRemainingTime = atoi(Value);
else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value);
else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
@ -745,6 +746,7 @@ bool cSetup::Save(void)
Store("NextWakeupTime", NextWakeupTime);
Store("MultiSpeedMode", MultiSpeedMode);
Store("ShowReplayMode", ShowReplayMode);
Store("ShowRemainingTime", ShowRemainingTime);
Store("ResumeID", ResumeID);
Store("CurrentChannel", CurrentChannel);
Store("CurrentVolume", CurrentVolume);

View File

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

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbdevice.c 2.48 2011/12/03 15:24:27 kls Exp $
* $Id: dvbdevice.c 2.56 2012/01/15 14:31:47 kls Exp $
*/
#include "dvbdevice.h"
@ -44,9 +44,12 @@ const tDvbParameterMap InversionValues[] = {
};
const tDvbParameterMap BandwidthValues[] = {
{ 6, 6000000, "6 MHz" },
{ 7, 7000000, "7 MHz" },
{ 8, 8000000, "8 MHz" },
{ 5, 5000000, "5 MHz" },
{ 6, 6000000, "6 MHz" },
{ 7, 7000000, "7 MHz" },
{ 8, 8000000, "8 MHz" },
{ 10, 10000000, "10 MHz" },
{ 1712, 1712000, "1.712 MHz" },
{ -1, 0, NULL }
};
@ -75,31 +78,49 @@ const tDvbParameterMap ModulationValues[] = {
{ 2, QPSK, "QPSK" },
{ 5, PSK_8, "8PSK" },
{ 6, APSK_16, "16APSK" },
{ 7, APSK_32, "32APSK" },
{ 10, VSB_8, "VSB8" },
{ 11, VSB_16, "VSB16" },
{ 998, QAM_AUTO, "QAMAUTO" },
{ 12, DQPSK, "DQPSK" },
{ 999, QAM_AUTO, trNOOP("auto") },
{ -1, 0, NULL }
};
const tDvbParameterMap SystemValues[] = {
{ 0, SYS_DVBS, "DVB-S" },
{ 1, SYS_DVBS2, "DVB-S2" },
#define DVB_SYSTEM_1 0 // see also nit.c
#define DVB_SYSTEM_2 1
const tDvbParameterMap SystemValuesSat[] = {
{ 0, DVB_SYSTEM_1, "DVB-S" },
{ 1, DVB_SYSTEM_2, "DVB-S2" },
{ -1, 0, NULL }
};
const tDvbParameterMap SystemValuesTerr[] = {
{ 0, DVB_SYSTEM_1, "DVB-T" },
{ 1, DVB_SYSTEM_2, "DVB-T2" },
{ -1, 0, NULL }
};
const tDvbParameterMap TransmissionValues[] = {
{ 1, TRANSMISSION_MODE_1K, "1K" },
{ 2, TRANSMISSION_MODE_2K, "2K" },
{ 4, TRANSMISSION_MODE_4K, "4K" },
{ 8, TRANSMISSION_MODE_8K, "8K" },
{ 16, TRANSMISSION_MODE_16K, "16K" },
{ 32, TRANSMISSION_MODE_32K, "32K" },
{ 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
{ -1, 0, NULL }
};
const tDvbParameterMap GuardValues[] = {
{ 4, GUARD_INTERVAL_1_4, "1/4" },
{ 8, GUARD_INTERVAL_1_8, "1/8" },
{ 16, GUARD_INTERVAL_1_16, "1/16" },
{ 32, GUARD_INTERVAL_1_32, "1/32" },
{ 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
{ 4, GUARD_INTERVAL_1_4, "1/4" },
{ 8, GUARD_INTERVAL_1_8, "1/8" },
{ 16, GUARD_INTERVAL_1_16, "1/16" },
{ 32, GUARD_INTERVAL_1_32, "1/32" },
{ 128, GUARD_INTERVAL_1_128, "1/128" },
{ 19128, GUARD_INTERVAL_19_128, "19/128" },
{ 19256, GUARD_INTERVAL_19_256, "19/256" },
{ 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
{ -1, 0, NULL }
};
@ -179,11 +200,12 @@ cDvbTransponderParameters::cDvbTransponderParameters(const char *Parameters)
coderateH = FEC_AUTO;
coderateL = FEC_AUTO;
modulation = QPSK;
system = SYS_DVBS;
system = DVB_SYSTEM_1;
transmission = TRANSMISSION_MODE_AUTO;
guard = GUARD_INTERVAL_AUTO;
hierarchy = HIERARCHY_AUTO;
rollOff = ROLLOFF_AUTO;
plpId = 0;
Parse(Parameters);
}
@ -194,21 +216,22 @@ int cDvbTransponderParameters::PrintParameter(char *p, char Name, int Value) con
cString cDvbTransponderParameters::ToString(char Type) const
{
#define ST(s) if (strchr(s, Type))
#define ST(s) if (strchr(s, Type) && (strchr(s, '0' + system + 1) || strchr(s, '*')))
char buffer[64];
char *q = buffer;
*q = 0;
ST(" S ") q += sprintf(q, "%c", polarization);
ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
ST(" CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
ST("ACST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
ST("ACST") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
ST(" S ") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues));
ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
ST(" S *") q += sprintf(q, "%c", polarization);
ST(" T*") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
ST(" CST*") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
ST(" T*") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
ST(" T*") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
ST("ACST*") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
ST("ACST*") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
ST(" S 2") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
ST(" T2") q += PrintParameter(q, 'P', plpId);
ST(" ST*") q += PrintParameter(q, 'S', MapToUser(system, SystemValuesSat)); // we only need the numerical value, so Sat or Terr doesn't matter
ST(" T*") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
ST(" T*") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
return buffer;
}
@ -219,7 +242,7 @@ const char *cDvbTransponderParameters::ParseParameter(const char *s, int &Value,
errno = 0;
int n = strtol(s, &p, 10);
if (!errno && p != s) {
Value = MapToDriver(n, Map);
Value = Map ? MapToDriver(n, Map) : n;
if (Value >= 0)
return p;
}
@ -241,8 +264,9 @@ bool cDvbTransponderParameters::Parse(const char *s)
case 'L': polarization = *s++; break;
case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
case 'P': s = ParseParameter(s, plpId); break;
case 'R': polarization = *s++; break;
case 'S': s = ParseParameter(s, system, SystemValues); break;
case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter
case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
case 'V': polarization = *s++; break;
case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
@ -268,10 +292,10 @@ private:
int tuneTimeout;
int lockTimeout;
time_t lastTimeoutReport;
fe_delivery_system frontendType;
cChannel channel;
const cDiseqc *lastDiseqc;
const cScr *scr;
bool lnbPowerTurnedOn;
eTunerStatus tunerStatus;
cMutex mutex;
cCondVar locked;
@ -279,6 +303,7 @@ private:
cDvbTuner *bondedTuner;
bool bondedMaster;
bool bondedMasterFailed;
bool SetFrontendType(const cChannel *Channel);
cString GetBondingParams(const cChannel *Channel = NULL) const;
void ClearEventQueue(void) const;
bool GetFrontendStatus(fe_status_t &Status) const;
@ -287,7 +312,7 @@ private:
bool SetFrontend(void);
virtual void Action(void);
public:
cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType);
cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend);
virtual ~cDvbTuner();
bool Bond(cDvbTuner *Tuner);
void UnBond(void);
@ -304,25 +329,23 @@ public:
cMutex cDvbTuner::bondMutex;
cDvbTuner::cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType)
cDvbTuner::cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend)
{
device = Device;
fd_frontend = Fd_Frontend;
adapter = Adapter;
frontend = Frontend;
frontendType = FrontendType;
subsystemId = cDvbDeviceProbe::GetSubsystemId(adapter, frontend);
tuneTimeout = 0;
lockTimeout = 0;
lastTimeoutReport = 0;
lastDiseqc = NULL;
scr = NULL;
lnbPowerTurnedOn = false;
tunerStatus = tsIdle;
bondedTuner = NULL;
bondedMaster = false;
bondedMasterFailed = false;
if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2)
ResetToneAndVoltage(); // must explicitly turn on LNB power
SetDescription("tuner on frontend %d/%d", adapter, frontend);
Start();
}
@ -346,16 +369,12 @@ bool cDvbTuner::Bond(cDvbTuner *Tuner)
{
cMutexLock MutexLock(&bondMutex);
if (!bondedTuner) {
if ((frontendType == SYS_DVBS || frontendType == SYS_DVBS2) && (Tuner->frontendType == SYS_DVBS || Tuner->frontendType == SYS_DVBS2)) {
ResetToneAndVoltage();
bondedMaster = false; // makes sure we don't disturb an existing master
bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner;
Tuner->bondedTuner = this;
dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend);
return true;
}
else
esyslog("ERROR: can't bond tuner %d/%d with tuner %d/%d (only DVB-S(2) tuners can be bonded)", adapter, frontend, Tuner->adapter, Tuner->frontend);
ResetToneAndVoltage();
bondedMaster = false; // makes sure we don't disturb an existing master
bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner;
Tuner->bondedTuner = this;
dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend);
return true;
}
else
esyslog("ERROR: tuner %d/%d already bonded with tuner %d/%d, can't bond with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend, Tuner->adapter, Tuner->frontend);
@ -468,7 +487,7 @@ void cDvbTuner::SetChannel(const cChannel *Channel)
t->SetChannel(NULL);
}
}
else if (!BondedMaster->device->Receiving())
else if (strcmp(GetBondingParams(Channel), BondedMaster->GetBondingParams()) != 0)
BondedMaster->SetChannel(Channel);
}
cMutexLock MutexLock(&mutex);
@ -618,7 +637,7 @@ int cDvbTuner::GetSignalQuality(void) const
if (q > 100)
q = 100;
#ifdef DEBUG_SIGNALQUALITY
fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q);
fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %d %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasSnr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q);
#endif
return q;
}
@ -634,6 +653,13 @@ static unsigned int FrequencyToHz(unsigned int f)
void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
{
if (!lnbPowerTurnedOn) {
CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); // must explicitly turn on LNB power
lnbPowerTurnedOn = true;
}
static cMutex Mutex;
if (Diseqc->IsScr())
Mutex.Lock();
struct dvb_diseqc_master_cmd cmd;
const char *CurrentAction = NULL;
for (;;) {
@ -654,6 +680,8 @@ void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
}
if (scr)
ResetToneAndVoltage(); // makes sure we don't block the bus!
if (Diseqc->IsScr())
Mutex.Unlock();
}
void cDvbTuner::ResetToneAndVoltage(void)
@ -662,6 +690,22 @@ void cDvbTuner::ResetToneAndVoltage(void)
CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF));
}
static int GetRequiredDeliverySystem(const cChannel *Channel, const cDvbTransponderParameters *Dtp)
{
int ds = SYS_UNDEFINED;
if (Channel->IsAtsc())
ds = SYS_ATSC;
else if (Channel->IsCable())
ds = SYS_DVBC_ANNEX_AC;
else if (Channel->IsSat())
ds = Dtp->System() == DVB_SYSTEM_1 ? SYS_DVBS : SYS_DVBS2;
else if (Channel->IsTerr())
ds = Dtp->System() == DVB_SYSTEM_1 ? SYS_DVBT : SYS_DVBT2;
else
esyslog("ERROR: can't determine frontend type for channel %d", Channel->Number());
return ds;
}
bool cDvbTuner::SetFrontend(void)
{
#define MAXFRONTENDCMDS 16
@ -686,6 +730,12 @@ bool cDvbTuner::SetFrontend(void)
cDvbTransponderParameters dtp(channel.Parameters());
// Determine the required frontend type:
int frontendType = GetRequiredDeliverySystem(&channel, &dtp);
if (frontendType == SYS_UNDEFINED)
return false;
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) {
unsigned int frequency = channel.Frequency();
if (Setup.DiSEqC) {
@ -728,22 +778,15 @@ bool cDvbTuner::SetFrontend(void)
frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF
// DVB-S/DVB-S2 (common parts)
SETCMD(DTV_DELIVERY_SYSTEM, dtp.System());
SETCMD(DTV_FREQUENCY, frequency * 1000UL);
SETCMD(DTV_MODULATION, dtp.Modulation());
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
SETCMD(DTV_INNER_FEC, dtp.CoderateH());
SETCMD(DTV_INVERSION, dtp.Inversion());
if (dtp.System() == SYS_DVBS2) {
if (frontendType == SYS_DVBS2) {
// DVB-S2
SETCMD(DTV_PILOT, PILOT_AUTO);
SETCMD(DTV_ROLLOFF, dtp.RollOff());
}
else {
esyslog("ERROR: frontend %d/%d doesn't provide DVB-S2", adapter, frontend);
return false;
}
if (frontendType == SYS_DVBS2) {
// DVB-S2
SETCMD(DTV_PILOT, PILOT_AUTO);
SETCMD(DTV_ROLLOFF, dtp.RollOff());
}
else {
// DVB-S
@ -755,7 +798,6 @@ bool cDvbTuner::SetFrontend(void)
}
else if (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B) {
// DVB-C
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
@ -765,9 +807,8 @@ bool cDvbTuner::SetFrontend(void)
tuneTimeout = DVBC_TUNE_TIMEOUT;
lockTimeout = DVBC_LOCK_TIMEOUT;
}
else if (frontendType == SYS_DVBT) {
// DVB-T
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
else if (frontendType == SYS_DVBT || frontendType == SYS_DVBT2) {
// DVB-T/DVB-T2 (common parts)
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_BANDWIDTH_HZ, dtp.Bandwidth());
@ -777,13 +818,16 @@ bool cDvbTuner::SetFrontend(void)
SETCMD(DTV_TRANSMISSION_MODE, dtp.Transmission());
SETCMD(DTV_GUARD_INTERVAL, dtp.Guard());
SETCMD(DTV_HIERARCHY, dtp.Hierarchy());
if (frontendType == SYS_DVBT2) {
// DVB-T2
SETCMD(DTV_DVBT2_PLP_ID, dtp.PlpId());
}
tuneTimeout = DVBT_TUNE_TIMEOUT;
lockTimeout = DVBT_LOCK_TIMEOUT;
}
else if (frontendType == SYS_ATSC) {
// ATSC
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_MODULATION, dtp.Modulation());
@ -903,11 +947,12 @@ void cDvbSourceParam::GetData(cChannel *Channel)
cOsdItem *cDvbSourceParam::GetOsdItem(void)
{
char type = Source();
const tDvbParameterMap *SystemValues = type == 'S' ? SystemValuesSat : SystemValuesTerr;
#undef ST
#define ST(s) if (strchr(s, type))
switch (param++) {
case 0: ST(" S ") return new cMenuEditChrItem( tr("Polarization"), &dtp.polarization, "HVLR"); else return GetOsdItem();
case 1: ST(" S ") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem();
case 1: ST(" ST") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem();
case 2: ST(" CS ") return new cMenuEditIntItem( tr("Srate"), &srate); else return GetOsdItem();
case 3: ST("ACST") return new cMenuEditMapItem( tr("Inversion"), &dtp.inversion, InversionValues); else return GetOsdItem();
case 4: ST(" CST") return new cMenuEditMapItem( tr("CoderateH"), &dtp.coderateH, CoderateValues); else return GetOsdItem();
@ -918,6 +963,7 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void)
case 9: ST(" T") return new cMenuEditMapItem( tr("Guard"), &dtp.guard, GuardValues); else return GetOsdItem();
case 10: ST(" T") return new cMenuEditMapItem( tr("Hierarchy"), &dtp.hierarchy, HierarchyValues); else return GetOsdItem();
case 11: ST(" S ") return new cMenuEditMapItem( tr("Rolloff"), &dtp.rollOff, RollOffValues); else return GetOsdItem();
case 12: ST(" T") return new cMenuEditIntItem( tr("PlpId"), &dtp.plpId, 0, 255); else return GetOsdItem();
default: return NULL;
}
return NULL;
@ -928,7 +974,7 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void)
int cDvbDevice::setTransferModeForDolbyDigital = 1;
cMutex cDvbDevice::bondMutex;
const char *DeliverySystems[] = {
const char *DeliverySystemNames[] = {
"UNDEFINED",
"DVB-C",
"DVB-C",
@ -945,6 +991,8 @@ const char *DeliverySystems[] = {
"DMBTH",
"CMMB",
"DAB",
"DVB-T2",
"TURBO",
NULL
};
@ -954,8 +1002,8 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend)
frontend = Frontend;
ciAdapter = NULL;
dvbTuner = NULL;
frontendType = SYS_UNDEFINED;
numProvidedSystems = 0;
numDeliverySystems = 0;
numModulations = 0;
bondedDevice = NULL;
needsDetachBondedReceivers = false;
@ -976,39 +1024,8 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend)
// We only check the devices that must be present - the others will be checked before accessing them://XXX
if (fd_frontend >= 0) {
if (ioctl(fd_frontend, FE_GET_INFO, &frontendInfo) >= 0) {
switch (frontendInfo.type) {
case FE_QPSK: frontendType = (frontendInfo.caps & FE_CAN_2G_MODULATION) ? SYS_DVBS2 : SYS_DVBS; break;
case FE_OFDM: frontendType = SYS_DVBT; break;
case FE_QAM: frontendType = SYS_DVBC_ANNEX_AC; break;
case FE_ATSC: frontendType = SYS_ATSC; break;
default: esyslog("ERROR: unknown frontend type %d on frontend %d/%d", frontendInfo.type, adapter, frontend);
}
}
else
LOG_ERROR;
if (frontendType != SYS_UNDEFINED) {
numProvidedSystems++;
if (frontendType == SYS_DVBS2)
numProvidedSystems++;
char Modulations[64];
char *p = Modulations;
if (frontendInfo.caps & FE_CAN_QPSK) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QPSK, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_16) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_16, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_32) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_32, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_64) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_64, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_128) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_128, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_256) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_256, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_8VSB) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(VSB_8, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_16VSB) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(VSB_16, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_TURBO_FEC){numProvidedSystems++; p += sprintf(p, ",%s", "TURBO_FEC"); }
if (p != Modulations)
p = Modulations + 1; // skips first ','
else
p = (char *)"unknown modulations";
isyslog("frontend %d/%d provides %s with %s (\"%s\")", adapter, frontend, DeliverySystems[frontendType], p, frontendInfo.name);
dvbTuner = new cDvbTuner(this, fd_frontend, adapter, frontend, frontendType);
}
if (QueryDeliverySystems(fd_frontend))
dvbTuner = new cDvbTuner(this, fd_frontend, adapter, frontend);
}
else
esyslog("ERROR: can't open DVB device %d/%d", adapter, frontend);
@ -1106,6 +1123,74 @@ LastAdapter:
return Found > 0;
}
bool cDvbDevice::QueryDeliverySystems(int fd_frontend)
{
numDeliverySystems = 0;
if (ioctl(fd_frontend, FE_GET_INFO, &frontendInfo) < 0) {
LOG_ERROR;
return false;
}
#if DVB_API_VERSION > 5 || DVB_API_VERSION_MINOR >= 5
dtv_property Frontend[1];
memset(&Frontend, 0, sizeof(Frontend));
dtv_properties CmdSeq;
memset(&CmdSeq, 0, sizeof(CmdSeq));
CmdSeq.props = Frontend;
SETCMD(DTV_ENUM_DELSYS, 0);
int Result = ioctl(fd_frontend, FE_GET_PROPERTY, &CmdSeq);
if (Result == 0) {
for (uint i = 0; i < Frontend[0].u.buffer.len; i++) {
if (numDeliverySystems >= MAXDELIVERYSYSTEMS) {
esyslog("ERROR: too many delivery systems on frontend %d/%d", adapter, frontend);
break;
}
deliverySystems[numDeliverySystems++] = Frontend[0].u.buffer.data[i];
}
}
else {
esyslog("ERROR: can't query delivery systems on frontend %d/%d - falling back to legacy mode", adapter, frontend);
#else
{
#endif
// Legacy mode (DVB-API < 5.5):
switch (frontendInfo.type) {
case FE_QPSK: deliverySystems[numDeliverySystems++] = SYS_DVBS;
if (frontendInfo.caps & FE_CAN_2G_MODULATION)
deliverySystems[numDeliverySystems++] = SYS_DVBS2;
break;
case FE_OFDM: deliverySystems[numDeliverySystems++] = SYS_DVBT;
if (frontendInfo.caps & FE_CAN_2G_MODULATION)
deliverySystems[numDeliverySystems++] = SYS_DVBT2;
break;
case FE_QAM: deliverySystems[numDeliverySystems++] = SYS_DVBC_ANNEX_AC; break;
case FE_ATSC: deliverySystems[numDeliverySystems++] = SYS_ATSC; break;
default: esyslog("ERROR: unknown frontend type %d on frontend %d/%d", frontendInfo.type, adapter, frontend);
}
}
if (numDeliverySystems > 0) {
cString ds("");
for (int i = 0; i < numDeliverySystems; i++)
ds = cString::sprintf("%s%s%s", *ds, i ? "," : "", DeliverySystemNames[deliverySystems[i]]);
cString ms("");
if (frontendInfo.caps & FE_CAN_QPSK) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QPSK, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_16) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_16, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_32) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_32, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_64) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_64, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_128) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_128, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_QAM_256) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_256, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_8VSB) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(VSB_8, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_16VSB) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(VSB_16, ModulationValues)); }
if (frontendInfo.caps & FE_CAN_TURBO_FEC) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", "TURBO_FEC"); }
if (!**ms)
ms = "unknown modulations";
isyslog("frontend %d/%d provides %s with %s (\"%s\")", adapter, frontend, *ds, *ms, frontendInfo.name);
return true;
}
else
esyslog("ERROR: frontend %d/%d doesn't provide any delivery systems", adapter, frontend);
return false;
}
bool cDvbDevice::Ready(void)
{
if (ciAdapter)
@ -1126,7 +1211,7 @@ bool cDvbDevice::BondDevices(const char *Bondings)
if (cDevice *Device2 = cDevice::GetDevice(d)) {
if (cDvbDevice *DvbDevice1 = dynamic_cast<cDvbDevice *>(Device1)) {
if (cDvbDevice *DvbDevice2 = dynamic_cast<cDvbDevice *>(Device2)) {
if (!DvbDevice2->Bond(DvbDevice1))
if (!DvbDevice1->Bond(DvbDevice2))
return false; // Bond() has already logged the error
}
else
@ -1167,7 +1252,7 @@ bool cDvbDevice::Bond(cDvbDevice *Device)
cMutexLock MutexLock(&bondMutex);
if (!bondedDevice) {
if (Device != this) {
if ((frontendType == SYS_DVBS || frontendType == SYS_DVBS2) && (Device->frontendType == SYS_DVBS || Device->frontendType == SYS_DVBS2)) {
if ((ProvidesDeliverySystem(SYS_DVBS) || ProvidesDeliverySystem(SYS_DVBS2)) && (Device->ProvidesDeliverySystem(SYS_DVBS) || Device->ProvidesDeliverySystem(SYS_DVBS2))) {
if (dvbTuner && Device->dvbTuner && dvbTuner->Bond(Device->dvbTuner)) {
bondedDevice = Device->bondedDevice ? Device->bondedDevice : Device;
Device->bondedDevice = this;
@ -1285,14 +1370,23 @@ void cDvbDevice::CloseFilter(int Handle)
close(Handle);
}
bool cDvbDevice::ProvidesDeliverySystem(int DeliverySystem) const
{
for (int i = 0; i < numDeliverySystems; i++) {
if (deliverySystems[i] == DeliverySystem)
return true;
}
return false;
}
bool cDvbDevice::ProvidesSource(int Source) const
{
int type = Source & cSource::st_Mask;
return type == cSource::stNone
|| type == cSource::stAtsc && (frontendType == SYS_ATSC)
|| type == cSource::stCable && (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B)
|| type == cSource::stSat && (frontendType == SYS_DVBS || frontendType == SYS_DVBS2)
|| type == cSource::stTerr && (frontendType == SYS_DVBT);
|| type == cSource::stAtsc && ProvidesDeliverySystem(SYS_ATSC)
|| type == cSource::stCable && (ProvidesDeliverySystem(SYS_DVBC_ANNEX_AC) || ProvidesDeliverySystem(SYS_DVBC_ANNEX_B))
|| type == cSource::stSat && (ProvidesDeliverySystem(SYS_DVBS) || ProvidesDeliverySystem(SYS_DVBS2))
|| type == cSource::stTerr && (ProvidesDeliverySystem(SYS_DVBT) || ProvidesDeliverySystem(SYS_DVBT2));
}
bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
@ -1300,7 +1394,7 @@ bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
if (!ProvidesSource(Channel->Source()))
return false; // doesn't provide source
cDvbTransponderParameters dtp(Channel->Parameters());
if (dtp.System() == SYS_DVBS2 && frontendType == SYS_DVBS ||
if (!ProvidesDeliverySystem(GetRequiredDeliverySystem(Channel, &dtp)) ||
dtp.Modulation() == QPSK && !(frontendInfo.caps & FE_CAN_QPSK) ||
dtp.Modulation() == QAM_16 && !(frontendInfo.caps & FE_CAN_QAM_16) ||
dtp.Modulation() == QAM_32 && !(frontendInfo.caps & FE_CAN_QAM_32) ||
@ -1375,7 +1469,7 @@ bool cDvbDevice::ProvidesEIT(void) const
int cDvbDevice::NumProvidedSystems(void) const
{
return numProvidedSystems;
return numDeliverySystems + numModulations;
}
int cDvbDevice::SignalStrength(void) const

View File

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

View File

@ -8,7 +8,7 @@
*
* parts of this file are derived from the OMS program.
*
* $Id: dvbspu.c 2.8 2010/01/17 13:43:27 kls Exp $
* $Id: dvbspu.c 2.9 2011/12/10 14:39:19 kls Exp $
*/
#include "dvbspu.h"
@ -496,7 +496,7 @@ int cDvbSpuDecoder::setTime(uint32_t pts)
if (!spu)
return 0;
if (spu && !clean)
if (!clean)
Draw();
while (DCSQ_offset != prev_DCSQ_offset) { /* Display Control Sequences */

View File

@ -7,7 +7,7 @@
* Original author: Marco Schlüßler <marco@lordzodiac.de>
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
*
* $Id: dvbsubtitle.c 2.20 2011/09/18 11:23:15 kls Exp $
* $Id: dvbsubtitle.c 2.21 2012/01/11 10:34:07 kls Exp $
*/
@ -995,7 +995,7 @@ void cDvbSubtitleConverter::SetOsdData(void)
double VideoAspect;
cDevice::PrimaryDevice()->GetOsdSize(OsdWidth, OsdHeight, OsdAspect);
cDevice::PrimaryDevice()->GetVideoSize(VideoWidth, VideoHeight, VideoAspect);
if (OsdWidth == displayWidth && OsdHeight == displayHeight || VideoWidth == 0) {
if (OsdWidth == displayWidth && OsdHeight == displayHeight || DoubleEqual(VideoAspect, 1.0)) {
osdFactorX = osdFactorY = 1.0;
osdDeltaX = osdDeltaY = 0;
}

24
epg.c
View File

@ -7,7 +7,7 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
* $Id: epg.c 2.7 2011/02/25 15:16:05 kls Exp $
* $Id: epg.c 2.9 2012/01/12 14:31:46 kls Exp $
*/
#include "epg.h"
@ -828,10 +828,17 @@ void cEvent::FixEpgBugs(void)
Final:
// VDR can't usefully handle newline characters in the title and shortText of EPG
// VDR can't usefully handle newline characters in the title, shortText or component description of EPG
// data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel):
strreplace(title, '\n', ' ');
strreplace(shortText, '\n', ' ');
if (components) {
for (int i = 0; i < components->NumComponents(); i++) {
tComponent *p = components->Component(i);
if (p->description)
strreplace(p->description, '\n', ' ');
}
}
/* TODO adapt to UTF-8
// Same for control characters:
strreplace(title, '\x86', ' ');
@ -1022,10 +1029,15 @@ void cSchedule::Cleanup(void)
void cSchedule::Cleanup(time_t Time)
{
cEvent *Event;
while ((Event = events.First()) != NULL) {
if (!Event->HasTimer() && Event->EndTime() + Setup.EPGLinger * 60 + 3600 < Time) // adding one hour for safety
DelEvent(Event);
cEvent *Event = events.First();
while (Event) {
if (Event->HasTimer())
Event = (cEvent *)Event->Next();
else if (Event->EndTime() + Setup.EPGLinger * 60 + 3600 < Time) { // adding one hour for safety
cEvent *e = Event;
Event = (cEvent *)Event->Next();
DelEvent(e);
}
else
break;
}

40
font.c
View File

@ -6,7 +6,7 @@
*
* BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya.
*
* $Id: font.c 2.8 2011/03/28 16:29:51 kls Exp $
* $Id: font.c 2.9 2012/01/13 09:43:22 kls Exp $
*/
#include "font.h"
@ -508,25 +508,27 @@ cString cFont::GetFontFileName(const char *FontName)
#ifdef BIDI
cString cFont::Bidi(const char *Ltr)
{
fribidi_set_mirroring(true);
fribidi_set_reorder_nsm(false);
FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8;
int LtrLen = strlen(Ltr);
FriBidiCharType Base = FRIBIDI_TYPE_L;
FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ;
int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical);
FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ;
char *Rtl = NULL;
bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL);
if (ok) {
fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL);
Rtl = MALLOC(char, RtlLen * 4 + 1);
fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl);
if (cCharSetConv::SystemCharacterTable()) { // bidi requires UTF-8
fribidi_set_mirroring(true);
fribidi_set_reorder_nsm(false);
FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8;
int LtrLen = strlen(Ltr);
FriBidiCharType Base = FRIBIDI_TYPE_L;
FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ;
int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical);
FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ;
char *Rtl = NULL;
bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL);
if (ok) {
fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL);
Rtl = MALLOC(char, RtlLen * 4 + 1);
fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl);
}
free(Logical);
free(Visual);
if (ok)
return cString(Rtl, true);
}
free(Logical);
free(Visual);
if (ok)
return cString(Rtl, true);
return cString(Ltr);
}
#endif

View File

@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: descriptor.c 2.2 2011/06/15 21:26:00 kls Exp $
* $Id: descriptor.c 2.4 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@ -876,6 +876,52 @@ int ExtensionDescriptor::getExtensionDescriptorTag() const {
return s->descriptor_tag_extension;
}
void T2DeliverySystemDescriptor::Parse() {
int offset=0;
data.setPointerAndOffset<const descr_t2_delivery_system>(s, offset);
extended_data_flag = s->descriptor_length > 0x04;
}
int T2DeliverySystemDescriptor::getExtendedDataFlag() const {
return extended_data_flag;
}
int T2DeliverySystemDescriptor::getExtensionDescriptorTag() const {
return s->descriptor_tag_extension;
}
int T2DeliverySystemDescriptor::getPlpId() const {
return s->plp_id;
}
int T2DeliverySystemDescriptor::getT2SystemId() const {
return HILO(s->t2_system_id);
}
int T2DeliverySystemDescriptor::getSisoMiso() const {
return extended_data_flag ? s->siso_miso : -1;
}
int T2DeliverySystemDescriptor::getBandwidth() const {
return extended_data_flag ? s->bandwidth : -1;
}
int T2DeliverySystemDescriptor::getGuardInterval() const {
return extended_data_flag ? s->guard_interval : -1;
}
int T2DeliverySystemDescriptor::getTransmissionMode() const {
return extended_data_flag ? s->transmission_mode : -1;
}
int T2DeliverySystemDescriptor::getOtherFrequencyFlag() const {
return extended_data_flag ? s->other_frequency_flag : -1;
}
int T2DeliverySystemDescriptor::getTfsFlag() const {
return extended_data_flag ? s->tfs_flag : -1;
}
int PremiereContentTransmissionDescriptor::getOriginalNetworkId() const {
return HILO(s->original_network_id);
}
@ -1005,8 +1051,14 @@ int MHP_TransportProtocolDescriptor::getComponentTag() const {
return componentTag;
}
char *MHP_TransportProtocolDescriptor::getUrlBase(char *buffer, int size) {
return UrlBase.getText(buffer, size);
}
void MHP_TransportProtocolDescriptor::Parse() {
int offset=0;
remote=false;
componentTag=-1;
data.setPointerAndOffset<const descr_transport_protocol>(s, offset);
if (getProtocolId() == ObjectCarousel) {
const transport_via_oc *oc;
@ -1021,12 +1073,24 @@ void MHP_TransportProtocolDescriptor::Parse() {
data.setPointerAndOffset<const transport_via_oc_end>(rem, offset);
componentTag=rem->component_tag;
}
} else { //unimplemented
remote=false;
componentTag=-1;
} else if (getProtocolId() == HTTPoverInteractionChannel) {
const transport_via_http *http;
data.setPointerAndOffset<const transport_via_http>(http, offset);
UrlBase.setDataAndOffset(data+offset, http->url_base_length, offset);
// fill URL Extension,
UrlExtensionLoop.setData(data+offset, getLength()-offset);
} else {
//unimplemented
}
}
void MHP_TransportProtocolDescriptor::UrlExtensionEntry::Parse() {
const descr_url_extension_entry *s;
s=data.getData<const descr_url_extension_entry>();
UrlExtension.setData(data, s->url_extension_length);
}
void MHP_DVBJApplicationDescriptor::Parse() {
applicationLoop.setData(data+sizeof(descr_dvbj_application), getLength()-sizeof(descr_dvbj_application));
}
@ -1059,6 +1123,17 @@ void MHP_ApplicationIconsDescriptor::Parse() {
data.setPointerAndOffset<const descr_application_icons_descriptor_end>(s, offset);
}
char *MHP_SimpleApplicationLocationDescriptor::getLocation(char *buffer, int size) {
return location.getText(buffer, size);
}
void MHP_SimpleApplicationLocationDescriptor::Parse() {
int offset=0;
const descr_simple_application_location_descriptor *loc;
data.setPointerAndOffset<const descr_simple_application_location_descriptor>(loc, offset);
location.setDataAndOffset(data+offset, loc->descriptor_length, offset);
}
int RegistrationDescriptor::getFormatIdentifier() const {
return HILOHILO(s->format_identifier);
}

View File

@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: descriptor.h 2.2 2011/06/15 21:26:00 kls Exp $
* $Id: descriptor.h 2.4 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@ -538,6 +538,25 @@ private:
const descr_extension *s;
};
class T2DeliverySystemDescriptor : public Descriptor {
public:
int getExtendedDataFlag() const;
int getExtensionDescriptorTag() const;
int getPlpId() const;
int getT2SystemId() const;
int getSisoMiso() const;
int getBandwidth() const;
int getGuardInterval() const;
int getTransmissionMode() const;
int getOtherFrequencyFlag() const;
int getTfsFlag() const;
protected:
virtual void Parse();
private:
const descr_t2_delivery_system *s;
int extended_data_flag;
};
// Private DVB Descriptor Premiere.de
// 0xF2 Content Transmission Descriptor
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html
@ -639,17 +658,29 @@ protected:
class MHP_TransportProtocolDescriptor : public Descriptor {
public:
class UrlExtensionEntry : public LoopElement {
public:
virtual int getLength() { return sizeof(descr_url_extension_entry)+UrlExtension.getLength(); }
String UrlExtension;
protected:
virtual void Parse();
};
enum Protocol { ObjectCarousel = 0x01, IPviaDVB = 0x02, HTTPoverInteractionChannel = 0x03 };
int getProtocolId() const;
int getProtocolLabel() const;
bool isRemote() const;
int getComponentTag() const;
char *getUrlBase(char *buffer, int size);
StructureLoop<UrlExtensionEntry> UrlExtensionLoop;
protected:
virtual void Parse();
private:
const descr_transport_protocol *s;
bool remote;
int componentTag;
String UrlBase;
};
class MHP_DVBJApplicationDescriptor : public Descriptor {
@ -685,6 +716,15 @@ private:
const descr_application_icons_descriptor_end *s;
};
class MHP_SimpleApplicationLocationDescriptor : public Descriptor {
public:
char *getLocation(char *buffer, int size);
protected:
virtual void Parse();
private:
String location;
};
class RegistrationDescriptor : public Descriptor {
public:
int getFormatIdentifier() const;

View File

@ -10,7 +10,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: headers.h 2.2 2011/06/15 21:26:00 kls Exp $
* $Id: headers.h 2.4 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@ -1839,6 +1839,37 @@ struct descr_extension {
u_char descriptor_tag_extension :8;
};
/* extension 0x04 t2_delivery_system_descriptor */
struct descr_t2_delivery_system {
u_char descriptor_tag :8;
u_char descriptor_length :8;
u_char descriptor_tag_extension :8;
u_char plp_id :8;
u_char t2_system_id_hi :8;
u_char t2_system_id_lo :8;
#if BYTE_ORDER == BIG_ENDIAN
u_char siso_miso :2;
u_char bandwidth :4;
u_char reserved :2;
u_char guard_interval :3;
u_char transmission_mode :3;
u_char other_frequency_flag :1;
u_char tfs_flag :1;
#else
u_char reserved :2;
u_char bandwidth :4;
u_char siso_miso :2;
u_char tfs_flag :1;
u_char other_frequency_flag :1;
u_char transmission_mode :3;
u_char guard_interval :3;
#endif
/* now follow cell_id, frequency_loop_length, centre_frequency,
subcell_info_loop_length, cell_id_extension, transposer_frequency
fields looping to the end */
};
/* MHP 0x00 application_descriptor */
#define DESCR_APPLICATION_LEN 3
@ -1907,6 +1938,11 @@ struct descr_transport_protocol {
/* protocol_id-specific selector bytes follow */
};
struct descr_url_extension_entry {
u_char url_extension_length :8;
/* URL extension string */
};
#define TRANSPORT_VIA_OC_LEN 1
struct transport_via_oc {
@ -1940,6 +1976,12 @@ struct transport_via_oc_end {
u_char component_tag :8;
};
#define TRANSPORT_VIA_HTTP_LEN 1
struct transport_via_http {
u_char url_base_length :8;
};
/* 0x03 dvb_j_application_descriptor() */
#define DESCR_DVBJ_APPLICATION_LEN 2
@ -1991,6 +2033,16 @@ struct descr_application_icons_descriptor_end {
u_char icon_flags_lo :8;
};
/* 0x15 simple application location descrptor */
#define DESCR_SIMPLE_APPLICATION_LOCATION_LEN 3
struct descr_simple_application_location_descriptor {
u_char descriptor_tag :8;
u_char descriptor_length :8;
/* inital_path_bytes */
};
// Private DVB Descriptor Premiere.de
// 0xF2 Content Transmission Descriptor
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html

View File

@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: si.c 2.5 2011/12/04 15:06:18 kls Exp $
* $Id: si.c 2.6 2011/12/10 15:47:15 kls Exp $
* *
***************************************************************************/
@ -690,6 +690,9 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
case MHP_DVBJApplicationLocationDescriptorTag:
d=new MHP_DVBJApplicationLocationDescriptor();
break;
case MHP_SimpleApplicationLocationDescriptorTag:
d=new MHP_SimpleApplicationLocationDescriptor();
break;
// 0x05 - 0x0A is unimplemented this library
case MHP_ExternalApplicationAuthorisationDescriptorTag:
case MHP_IPv4RoutingDescriptorTag:

View File

@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: si.h 2.3 2010/02/13 10:31:34 kls Exp $
* $Id: si.h 2.5 2012/01/11 11:35:17 kls Exp $
* *
***************************************************************************/
@ -134,6 +134,19 @@ enum DescriptorTag {
DTSDescriptorTag = 0x7B,
AACDescriptorTag = 0x7C,
ExtensionDescriptorTag = 0x7F,
// Extension descriptors
ImageIconDescriptorTag = 0x00,
CpcmDeliverySignallingDescriptor = 0x01,
CPDescriptorTag = 0x02,
CPIdentifierDescriptorTag = 0x03,
T2DeliverySystemDescriptorTag = 0x04,
SHDeliverySystemDescriptorTag = 0x05,
SupplementaryAudioDescriptorTag = 0x06,
NetworkChangeNotifyDescriptorTag = 0x07,
MessageDescriptorTag = 0x08,
TargetRegionDescriptorTag = 0x09,
TargetRegionNameDescriptorTag = 0x0A,
ServiceRelocatedDescriptorTag = 0x0B,
// Defined by ETSI TS 102 812 (MHP)
// They once again start with 0x00 (see page 234, MHP specification)
@ -153,6 +166,8 @@ enum DescriptorTag {
MHP_PrefetchDescriptorTag = 0x0C,
MHP_DelegatedApplicationDescriptorTag = 0x0E,
MHP_ApplicationStorageDescriptorTag = 0x10,
MHP_SimpleApplicationLocationDescriptorTag = 0x15,
MHP_SimpleApplicationBoundaryDescriptorTag = 0x17,
// Premiere private Descriptor Tags
PremiereContentTransmissionDescriptorTag = 0xF2,

16
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 2.34 2011/12/04 14:52:38 kls Exp $
* $Id: menu.c 2.35 2012/01/14 13:06:03 kls Exp $
*/
#include "menu.h"
@ -3114,6 +3114,7 @@ cMenuSetupReplay::cMenuSetupReplay(void)
SetSection(tr("Replay"));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
Add(new cMenuEditBoolItem(tr("Setup.Replay$Show remaining time"), &data.ShowRemainingTime));
Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
}
@ -4568,12 +4569,15 @@ bool cReplayControl::ShowProgress(bool Initial)
displayReplay->SetTitle(title);
lastCurrent = lastTotal = -1;
}
if (Total != lastTotal) {
displayReplay->SetTotal(IndexToHMSF(Total, false, FramesPerSecond()));
if (!Initial)
displayReplay->Flush();
}
if (Current != lastCurrent || Total != lastTotal) {
if (Setup.ShowRemainingTime || Total != lastTotal) {
int Index = Total;
if (Setup.ShowRemainingTime)
Index = Current - Index;
displayReplay->SetTotal(IndexToHMSF(Index, false, FramesPerSecond()));
if (!Initial)
displayReplay->Flush();
}
displayReplay->SetProgress(Current, Total);
if (!Initial)
displayReplay->Flush();

46
nit.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: nit.c 2.6 2011/08/12 14:27:31 kls Exp $
* $Id: nit.c 2.9 2012/01/12 08:43:52 kls Exp $
*/
#include "nit.h"
@ -16,6 +16,9 @@
#include "libsi/descriptor.h"
#include "tools.h"
#define DVB_SYSTEM_1 0 // see also dvbdevice.c
#define DVB_SYSTEM_2 1
cNitFilter::cNitFilter(void)
{
numNits = 0;
@ -134,7 +137,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
dtp.SetCoderateH(CodeRates[sd->getFecInner()]);
static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 };
dtp.SetModulation(Modulations[sd->getModulationType()]);
dtp.SetSystem(sd->getModulationSystem() ? SYS_DVBS2 : SYS_DVBS);
dtp.SetSystem(sd->getModulationSystem() ? DVB_SYSTEM_2 : DVB_SYSTEM_1);
static int RollOffs[] = { ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_AUTO };
dtp.SetRollOff(sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO);
int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
@ -242,10 +245,11 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
cDvbTransponderParameters dtp;
int Source = cSource::FromData(cSource::stTerr);
int Frequency = Frequencies[0] = sd->getFrequency() * 10;
static int Bandwidths[] = { 8000000, 7000000, 6000000, 0, 0, 0, 0, 0 };
static int Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 0, 0, 0, 0 };
dtp.SetBandwidth(Bandwidths[sd->getBandwidth()]);
static int Constellations[] = { QPSK, QAM_16, QAM_64, QAM_AUTO };
dtp.SetModulation(Constellations[sd->getConstellation()]);
dtp.SetSystem(DVB_SYSTEM_1);
static int Hierarchies[] = { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, HIERARCHY_4, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO };
dtp.SetHierarchy(Hierarchies[sd->getHierarchy()]);
static int CodeRates[] = { FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO };
@ -253,7 +257,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
dtp.SetCoderateL(CodeRates[sd->getCodeRateLP()]);
static int GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4 };
dtp.SetGuard(GuardIntervals[sd->getGuardInterval()]);
static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO };
static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_4K, TRANSMISSION_MODE_AUTO };
dtp.SetTransmission(TransmissionModes[sd->getTransmissionMode()]);
if (ThisNIT >= 0) {
for (int n = 0; n < NumFrequencies; n++) {
@ -299,6 +303,40 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
}
}
break;
case SI::ExtensionDescriptorTag: {
SI::ExtensionDescriptor *sd = (SI::ExtensionDescriptor *)d;
switch (sd->getExtensionDescriptorTag()) {
case SI::T2DeliverySystemDescriptorTag: {
if (Setup.UpdateChannels >= 5) {
for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
int Source = cSource::FromData(cSource::stTerr);
if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
SI::T2DeliverySystemDescriptor *td = (SI::T2DeliverySystemDescriptor *)d;
int Frequency = Channel->Frequency();
int SymbolRate = Channel->Srate();
//int SystemId = td->getSystemId();
cDvbTransponderParameters dtp(Channel->Parameters());
dtp.SetSystem(DVB_SYSTEM_2);
dtp.SetPlpId(td->getPlpId());
if (td->getExtendedDataFlag()) {
static int T2Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 10000000, 1712000, 0, 0 };
dtp.SetBandwidth(T2Bandwidths[td->getBandwidth()]);
static int T2GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4, GUARD_INTERVAL_1_128, GUARD_INTERVAL_19_128, GUARD_INTERVAL_19_256, 0 };
dtp.SetGuard(T2GuardIntervals[td->getGuardInterval()]);
static int T2TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_4K, TRANSMISSION_MODE_1K, TRANSMISSION_MODE_16K, TRANSMISSION_MODE_32K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO };
dtp.SetTransmission(T2TransmissionModes[td->getTransmissionMode()]);
//TODO add parsing of frequencies
}
Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('T'));
}
}
}
}
break;
default: ;
}
}
break;
default: ;
}
delete d;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: remux.c 2.62 2011/09/04 13:09:06 kls Exp $
* $Id: remux.c 2.63 2012/01/12 12:07:58 kls Exp $
*/
#include "remux.h"
@ -701,6 +701,10 @@ const uchar *cTsToPes::GetPes(int &Length)
uchar *p = data + offset - 6;
if (p != data) {
p -= 3;
if (p < data) {
Reset();
return NULL;
}
memmove(p, data, 4);
}
int l = min(length - offset, MAXPESLENGTH);

View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
* $Id: svdrp.c 2.12 2011/12/04 13:58:33 kls Exp $
* $Id: svdrp.c 2.13 2012/01/12 15:02:46 kls Exp $
*/
#include "svdrp.h"
@ -583,6 +583,10 @@ void cSVDRP::CmdCLRE(const char *Option)
}
}
if (Schedule) {
for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) {
if (ChannelID == Timer->Channel()->GetChannelID().ClrRid())
Timer->SetEvent(NULL);
}
Schedule->Cleanup(INT_MAX);
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME);
Reply(250, "EPG data of channel \"%s\" cleared", Option);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: tools.c 2.19 2011/12/04 14:52:38 kls Exp $
* $Id: tools.c 2.20 2012/01/11 11:21:43 kls Exp $
*/
#include "tools.h"
@ -1913,7 +1913,7 @@ void cListBase::Move(int From, int To)
void cListBase::Move(cListObject *From, cListObject *To)
{
if (From && To) {
if (From && To && From != To) {
if (From->Index() < To->Index())
To = To->Next();
if (From == objects)

44
vdr.5
View File

@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
.\" $Id: vdr.5 2.26 2011/09/25 13:51:34 kls Exp $
.\" $Id: vdr.5 2.27 2012/01/11 13:16:57 kls Exp $
.\"
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
.SH NAME
@ -87,32 +87,33 @@ meaning (and allowed values) are
.TS
tab (@);
l l.
\fBB\fR@Bandwidth (6, 7, 8)
\fBB\fR@Bandwidth (1712, 5, 6, 7, 8, 10)
\fBC\fR@Code rate high priority (0, 12, 23, 34, 35, 45, 56, 67, 78, 89, 910)
\fBD\fR@coDe rate low priority (0, 12, 23, 34, 35, 45, 56, 67, 78, 89, 910)
\fBG\fR@Guard interval (4, 8, 16, 32)
\fBG\fR@Guard interval (4, 8, 16, 32, 128, 19128, 19256)
\fBH\fR@Horizontal polarization
\fBI\fR@Inversion (0, 1)
\fBL\fR@Left circular polarization
\fBM\fR@Modulation (2, 5, 6, 10, 11, 16, 32, 64, 128, 256, 998)
\fBO\fR@rollOff (0, 20, 25, 35)
\fBP\fR@Plp id (0-255)
\fBR\fR@Right circular polarization
\fBS\fR@delivery System (0, 1)
\fBT\fR@Transmission mode (2, 8)
\fBT\fR@Transmission mode (1, 2, 4, 8, 16, 32)
\fBV\fR@Vertical polarization
\fBY\fR@hierarchY (0, 1, 2, 4)
.TE
\fBBandwidth:\fR The bandwidth of the channel in MHz (DVB-T only).
\fBBandwidth:\fR The bandwidth of the channel in MHz (1712 in kHz): (DVB-T/DVB-T2 only).
\fBCode rate high priority:\fR Forward Error Correction (FEC) of the high priority stream (DVB-T).
\fBCode rate high priority:\fR Forward Error Correction (FEC) of the high priority stream (DVB-T/DVB-T2).
For DVB-S/DVB-S2 this parameter specifies the inner FEC scheme.
12 = 1/2, 23 = 2/3, 34 = 3/4, ...
\fBCode rate low priority:\fR Forward Error Correction (FEC) of the low priority stream (DVB-T only).
\fBCode rate low priority:\fR Forward Error Correction (FEC) of the low priority stream (DVB-T/DVB-T2 only).
If no hierarchy is used, set to 0.
\fBGuard interval:\fR The guard interval value (DVB-T only): 4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32.
\fBGuard interval:\fR The guard interval value (DVB-T only): 4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32, 128 = 1/128, 19128 = 19/128, 19256 = 19/256.
\fBInversion:\fR Specifies whether the DVB frontend needs spectral inversion (DVB-T and DVB-C only). This is frontend specific, if in doubt, omit.
@ -120,26 +121,30 @@ If no hierarchy is used, set to 0.
.TS
tab (@);
l l.
\fB2\fR@QPSK (DVB-S, DVB-S2, DVB-T)
\fB2\fR@QPSK (DVB-S, DVB-S2, DVB-T, DVB-T2, ISDB-T)
\fB5\fR@8PSK (DVB-S2)
\fB6\fR@16APSK (DVB-S2)
\fB7\fR@32APSK (DVB-S2)
\fB10\fR@VSB8 (ATSC aerial)
\fB11\fR@VSB16 (ATSC aerial)
\fB16\fR@QAM16 (DVB-T)
\fB64\fR@QAM64 (DVB-C, DVB-T)
\fB12\fR@DQPSK (ISDB-T)
\fB16\fR@QAM16 (DVB-T, DVB-T2, ISDB-T)
\fB64\fR@QAM64 (DVB-C, DVB-T, DVB-T2, ISDB-T)
\fB128\fR@QAM128 (DVB-C)
\fB256\fR@QAM256 (DVB-C)
\fB256\fR@QAM256 (DVB-C, DVB-T2)
.TE
\fBRolloff:\fR The Nyquist filter rolloff factor for DVB-S (\fB35\fR) and DVB-S2 (\fB35\fR, 25, 20),
35 = 0.35, 25 = 0.25, 20 = 0.20, DVB-S/DVB-S2 default value is 0.35
\fBTransmission mode:\fR Number of DVB-T OFDM carriers, 8 = 8k, 2 = 2k. If in doubt, try 8k.
\fBPLP id:\fR Physical Layer Pipe (PLP) id (\fB0\fR-255) for DVB-T2 multiplex (DVB-T2 only).
\fBTransmission mode:\fR Number of DVB-T OFDM carriers, 32 = 32k, 16 = 16k, 8 = 8k, 4 = 4k, 2 = 2k, 1 = 1k. If in doubt, try 8k.
\fBHierarchy:\fR If set to 1, this transponder uses two streams, high priority and low priority.
If in doubt, try 0 (off). (DVB-T only).
If in doubt, try 0 (off). (DVB-T/DVB-T2 only).
\fBDelivery System:\fR The satellite delivery system (0 = DVB-S, 1 = DVB-S2).
\fBDelivery System:\fR The delivery system (0 = "first generation" (DVB-S/DVB-T), 1 = "second generation" (DVB-S2/DVB-T2).
\fBPolarization:\fR Satellite antenna polarization.
H = horizontal, V = vertical, R = circular right, L = circular left.
@ -152,16 +157,19 @@ The special value \fB999\fR is used for "automatic", which means the driver
will automatically determine the proper value (if possible).
An example of a parameter field for a DVB-T channel might look like this:
\fBB8C23D12G8M16T8Y0\fR
\fBB8C23D12G8M16T8Y0S0\fR
An example of a parameter field for a DVB-T2 channel might look like this:
\fBB8C23D12G8M16T8Y0P0S1\fR
An example of a parameter field for a DVB-C channel might look like this:
\fBC0M64\fR
An example of a parameter field for a DVB-S channel might look like this:
\fBhC56M2O35S0\fR
\fBHC56M2O35S0\fR
An example of a parameter field for a DVB-S2 channel might look like this:
\fBhC910M2O35S1\fR
\fBHC910M2O35S1\fR
Plugins that implement devices that need their own set of parameters may
store those in the parameters string in arbitrary format (not necessarily