mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
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:
parent
5a28d99936
commit
59f0138a7d
28
CONTRIBUTORS
28
CONTRIBUTORS
@ -271,6 +271,7 @@ Uwe Scheffler <linux_dvb@uni.de>
|
||||
for his help in keeping 'channels.conf.cable' and 'channels.conf.terr' up to date
|
||||
for helping to test new DVB-T handling
|
||||
for reporting a bug in switching the video format in the Setup/DVB menu
|
||||
for reporting a problem with frozen live view in conjunction with device bonding
|
||||
|
||||
Matjaz Thaler <matjaz.thaler@guest.arnes.si>
|
||||
for improving AC3 decoding when replaying DVDs
|
||||
@ -1120,6 +1121,10 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
|
||||
for fixing handling DVB subtitles and implementing decoding textual DVB subtitles
|
||||
for adding file name and line number to LOG_ERROR_STR()
|
||||
for replacing all calls to sleep() with cCondWait::SleepMs()
|
||||
for fixing cDvbSubtitleConverter::SetOsdData()
|
||||
for adding support for DVB-T2 to libsi
|
||||
for adding support for handling DVB-T2 transponders
|
||||
for suggesting to add member functions Adapter() and Frontend() to cDvbDevice
|
||||
|
||||
Ralf Klueber <ralf.klueber@vodafone.com>
|
||||
for reporting a bug in cutting a recording if there is only a single editing mark
|
||||
@ -1927,8 +1932,13 @@ Ville Skytt
|
||||
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
55
HISTORY
@ -6780,3 +6780,58 @@ Video Disk Recorder Revision History
|
||||
- Added file name and line number to LOG_ERROR_STR() (thanks to Rolf Ahrenberg).
|
||||
- Replaced all calls to sleep() with cCondWait::SleepMs() (thanks to Rolf Ahrenberg).
|
||||
- Fixed a crash with malformed SI data (patch from vdr-portal).
|
||||
|
||||
2012-01-15: Version 1.7.23
|
||||
|
||||
- Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one).
|
||||
- Fixed bonding more than two devices.
|
||||
- Fixed handling symbolic links in cRecordings::ScanVideoDir() (reported by
|
||||
Sundararaj Reel).
|
||||
- Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many
|
||||
link levels (reported by Sundararaj Reel).
|
||||
- Removed redundant memset() in the ctor of cSatCableNumbers (triggered by
|
||||
Ville Skyttä pointing out that the argument sequence in the call was wrong).
|
||||
- Removed a redundant NULL check in cDvbSpuDecoder::setTime() (thanks to Ville Skyttä).
|
||||
- Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality()
|
||||
(triggered by Ville Skyttä pointing out that the variable HasSnr was unused).
|
||||
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
||||
- Added support for HbbTV to libsi (thanks to Christoph Haubrich).
|
||||
- Added support for devices with more than one delivery system per frontend.
|
||||
This requires a DVB driver with version 5.5 or higher that can handle the
|
||||
DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery
|
||||
system per frontend.
|
||||
- Updated the Hungarian language texts (thanks to 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
4
MANUAL
@ -856,6 +856,10 @@ Version 1.6
|
||||
|
||||
Show replay mode = no Turns displaying the current replay mode on or off.
|
||||
|
||||
Show remaining time = no
|
||||
Defines whether the replay progress display shows the
|
||||
remaining time or the total length of the recording.
|
||||
|
||||
Resume ID = 0 Defines an additional ID that can be used in a multi user
|
||||
environment, so that every user has his/her own resume
|
||||
files for each recording. The valid range is 0...99, with
|
||||
|
4
Makefile
4
Makefile
@ -4,7 +4,7 @@
|
||||
# See the main source file 'vdr.c' for copyright information and
|
||||
# how to reach the author.
|
||||
#
|
||||
# $Id: Makefile 2.22 2011/12/04 14:41:00 kls Exp $
|
||||
# $Id: Makefile 2.23 2012/01/14 13:09:10 kls Exp $
|
||||
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
@ -139,7 +139,7 @@ $(I18Npot): $(wildcard *.c)
|
||||
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
|
||||
|
||||
%.po: $(I18Npot)
|
||||
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
|
||||
msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
|
||||
@touch $@
|
||||
|
||||
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr.mo: $(PODIR)/%.mo
|
||||
|
@ -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.
|
||||
|
@ -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";
|
||||
|
6
config.c
6
config.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: config.c 2.16 2011/12/03 15:21:30 kls Exp $
|
||||
* $Id: config.c 2.18 2012/01/14 13:04:59 kls Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
@ -69,7 +69,6 @@ cSatCableNumbers::cSatCableNumbers(int Size, const char *s)
|
||||
{
|
||||
size = Size;
|
||||
array = MALLOC(int, size);
|
||||
memset(array, size * sizeof(int), 0);
|
||||
FromString(s);
|
||||
}
|
||||
|
||||
@ -454,6 +453,7 @@ cSetup::cSetup(void)
|
||||
NextWakeupTime = 0;
|
||||
MultiSpeedMode = 0;
|
||||
ShowReplayMode = 0;
|
||||
ShowRemainingTime = 0;
|
||||
ResumeID = 0;
|
||||
CurrentChannel = -1;
|
||||
CurrentVolume = MAXVOLUME;
|
||||
@ -648,6 +648,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
|
||||
else if (!strcasecmp(Name, "NextWakeupTime")) NextWakeupTime = atoi(Value);
|
||||
else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
|
||||
else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = atoi(Value);
|
||||
else if (!strcasecmp(Name, "ShowRemainingTime")) ShowRemainingTime = atoi(Value);
|
||||
else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value);
|
||||
else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
|
||||
else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
|
||||
@ -745,6 +746,7 @@ bool cSetup::Save(void)
|
||||
Store("NextWakeupTime", NextWakeupTime);
|
||||
Store("MultiSpeedMode", MultiSpeedMode);
|
||||
Store("ShowReplayMode", ShowReplayMode);
|
||||
Store("ShowRemainingTime", ShowRemainingTime);
|
||||
Store("ResumeID", ResumeID);
|
||||
Store("CurrentChannel", CurrentChannel);
|
||||
Store("CurrentVolume", CurrentVolume);
|
||||
|
13
config.h
13
config.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: config.h 2.36 2011/12/03 14:19:52 kls Exp $
|
||||
* $Id: config.h 2.39 2012/01/14 13:03:53 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
@ -22,13 +22,13 @@
|
||||
|
||||
// VDR's own version number:
|
||||
|
||||
#define VDRVERSION "1.7.22"
|
||||
#define VDRVERSNUM 10722 // Version * 10000 + Major * 100 + Minor
|
||||
#define VDRVERSION "1.7.23"
|
||||
#define VDRVERSNUM 10723 // Version * 10000 + Major * 100 + Minor
|
||||
|
||||
// The plugin API's version number:
|
||||
|
||||
#define APIVERSION "1.7.22"
|
||||
#define APIVERSNUM 10722 // Version * 10000 + Major * 100 + Minor
|
||||
#define APIVERSION "1.7.23"
|
||||
#define APIVERSNUM 10723 // Version * 10000 + Major * 100 + Minor
|
||||
|
||||
// When loading plugins, VDR searches them by their APIVERSION, which
|
||||
// may be smaller than VDRVERSION in case there have been no changes to
|
||||
@ -122,7 +122,7 @@ public:
|
||||
if (!isempty(s)) {
|
||||
T *l = new T;
|
||||
if (l->Parse(s))
|
||||
Add(l);
|
||||
this->Add(l);
|
||||
else {
|
||||
esyslog("ERROR: error in %s, line %d", fileName, line);
|
||||
delete l;
|
||||
@ -302,6 +302,7 @@ public:
|
||||
time_t NextWakeupTime;
|
||||
int MultiSpeedMode;
|
||||
int ShowReplayMode;
|
||||
int ShowRemainingTime;
|
||||
int ResumeID;
|
||||
int CurrentChannel;
|
||||
int CurrentVolume;
|
||||
|
308
dvbdevice.c
308
dvbdevice.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: dvbdevice.c 2.48 2011/12/03 15:24:27 kls Exp $
|
||||
* $Id: dvbdevice.c 2.56 2012/01/15 14:31:47 kls Exp $
|
||||
*/
|
||||
|
||||
#include "dvbdevice.h"
|
||||
@ -44,9 +44,12 @@ const tDvbParameterMap InversionValues[] = {
|
||||
};
|
||||
|
||||
const tDvbParameterMap BandwidthValues[] = {
|
||||
{ 6, 6000000, "6 MHz" },
|
||||
{ 7, 7000000, "7 MHz" },
|
||||
{ 8, 8000000, "8 MHz" },
|
||||
{ 5, 5000000, "5 MHz" },
|
||||
{ 6, 6000000, "6 MHz" },
|
||||
{ 7, 7000000, "7 MHz" },
|
||||
{ 8, 8000000, "8 MHz" },
|
||||
{ 10, 10000000, "10 MHz" },
|
||||
{ 1712, 1712000, "1.712 MHz" },
|
||||
{ -1, 0, NULL }
|
||||
};
|
||||
|
||||
@ -75,31 +78,49 @@ const tDvbParameterMap ModulationValues[] = {
|
||||
{ 2, QPSK, "QPSK" },
|
||||
{ 5, PSK_8, "8PSK" },
|
||||
{ 6, APSK_16, "16APSK" },
|
||||
{ 7, APSK_32, "32APSK" },
|
||||
{ 10, VSB_8, "VSB8" },
|
||||
{ 11, VSB_16, "VSB16" },
|
||||
{ 998, QAM_AUTO, "QAMAUTO" },
|
||||
{ 12, DQPSK, "DQPSK" },
|
||||
{ 999, QAM_AUTO, trNOOP("auto") },
|
||||
{ -1, 0, NULL }
|
||||
};
|
||||
|
||||
const tDvbParameterMap SystemValues[] = {
|
||||
{ 0, SYS_DVBS, "DVB-S" },
|
||||
{ 1, SYS_DVBS2, "DVB-S2" },
|
||||
#define DVB_SYSTEM_1 0 // see also nit.c
|
||||
#define DVB_SYSTEM_2 1
|
||||
|
||||
const tDvbParameterMap SystemValuesSat[] = {
|
||||
{ 0, DVB_SYSTEM_1, "DVB-S" },
|
||||
{ 1, DVB_SYSTEM_2, "DVB-S2" },
|
||||
{ -1, 0, NULL }
|
||||
};
|
||||
|
||||
const tDvbParameterMap SystemValuesTerr[] = {
|
||||
{ 0, DVB_SYSTEM_1, "DVB-T" },
|
||||
{ 1, DVB_SYSTEM_2, "DVB-T2" },
|
||||
{ -1, 0, NULL }
|
||||
};
|
||||
|
||||
const tDvbParameterMap TransmissionValues[] = {
|
||||
{ 1, TRANSMISSION_MODE_1K, "1K" },
|
||||
{ 2, TRANSMISSION_MODE_2K, "2K" },
|
||||
{ 4, TRANSMISSION_MODE_4K, "4K" },
|
||||
{ 8, TRANSMISSION_MODE_8K, "8K" },
|
||||
{ 16, TRANSMISSION_MODE_16K, "16K" },
|
||||
{ 32, TRANSMISSION_MODE_32K, "32K" },
|
||||
{ 999, TRANSMISSION_MODE_AUTO, trNOOP("auto") },
|
||||
{ -1, 0, NULL }
|
||||
};
|
||||
|
||||
const tDvbParameterMap GuardValues[] = {
|
||||
{ 4, GUARD_INTERVAL_1_4, "1/4" },
|
||||
{ 8, GUARD_INTERVAL_1_8, "1/8" },
|
||||
{ 16, GUARD_INTERVAL_1_16, "1/16" },
|
||||
{ 32, GUARD_INTERVAL_1_32, "1/32" },
|
||||
{ 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
|
||||
{ 4, GUARD_INTERVAL_1_4, "1/4" },
|
||||
{ 8, GUARD_INTERVAL_1_8, "1/8" },
|
||||
{ 16, GUARD_INTERVAL_1_16, "1/16" },
|
||||
{ 32, GUARD_INTERVAL_1_32, "1/32" },
|
||||
{ 128, GUARD_INTERVAL_1_128, "1/128" },
|
||||
{ 19128, GUARD_INTERVAL_19_128, "19/128" },
|
||||
{ 19256, GUARD_INTERVAL_19_256, "19/256" },
|
||||
{ 999, GUARD_INTERVAL_AUTO, trNOOP("auto") },
|
||||
{ -1, 0, NULL }
|
||||
};
|
||||
|
||||
@ -179,11 +200,12 @@ cDvbTransponderParameters::cDvbTransponderParameters(const char *Parameters)
|
||||
coderateH = FEC_AUTO;
|
||||
coderateL = FEC_AUTO;
|
||||
modulation = QPSK;
|
||||
system = SYS_DVBS;
|
||||
system = DVB_SYSTEM_1;
|
||||
transmission = TRANSMISSION_MODE_AUTO;
|
||||
guard = GUARD_INTERVAL_AUTO;
|
||||
hierarchy = HIERARCHY_AUTO;
|
||||
rollOff = ROLLOFF_AUTO;
|
||||
plpId = 0;
|
||||
Parse(Parameters);
|
||||
}
|
||||
|
||||
@ -194,21 +216,22 @@ int cDvbTransponderParameters::PrintParameter(char *p, char Name, int Value) con
|
||||
|
||||
cString cDvbTransponderParameters::ToString(char Type) const
|
||||
{
|
||||
#define ST(s) if (strchr(s, Type))
|
||||
#define ST(s) if (strchr(s, Type) && (strchr(s, '0' + system + 1) || strchr(s, '*')))
|
||||
char buffer[64];
|
||||
char *q = buffer;
|
||||
*q = 0;
|
||||
ST(" S ") q += sprintf(q, "%c", polarization);
|
||||
ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
|
||||
ST(" CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
|
||||
ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
|
||||
ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
|
||||
ST("ACST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
|
||||
ST("ACST") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
|
||||
ST(" S ") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
|
||||
ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues));
|
||||
ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
|
||||
ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
|
||||
ST(" S *") q += sprintf(q, "%c", polarization);
|
||||
ST(" T*") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
|
||||
ST(" CST*") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
|
||||
ST(" T*") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
|
||||
ST(" T*") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
|
||||
ST("ACST*") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
|
||||
ST("ACST*") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
|
||||
ST(" S 2") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues));
|
||||
ST(" T2") q += PrintParameter(q, 'P', plpId);
|
||||
ST(" ST*") q += PrintParameter(q, 'S', MapToUser(system, SystemValuesSat)); // we only need the numerical value, so Sat or Terr doesn't matter
|
||||
ST(" T*") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
|
||||
ST(" T*") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@ -219,7 +242,7 @@ const char *cDvbTransponderParameters::ParseParameter(const char *s, int &Value,
|
||||
errno = 0;
|
||||
int n = strtol(s, &p, 10);
|
||||
if (!errno && p != s) {
|
||||
Value = MapToDriver(n, Map);
|
||||
Value = Map ? MapToDriver(n, Map) : n;
|
||||
if (Value >= 0)
|
||||
return p;
|
||||
}
|
||||
@ -241,8 +264,9 @@ bool cDvbTransponderParameters::Parse(const char *s)
|
||||
case 'L': polarization = *s++; break;
|
||||
case 'M': s = ParseParameter(s, modulation, ModulationValues); break;
|
||||
case 'O': s = ParseParameter(s, rollOff, RollOffValues); break;
|
||||
case 'P': s = ParseParameter(s, plpId); break;
|
||||
case 'R': polarization = *s++; break;
|
||||
case 'S': s = ParseParameter(s, system, SystemValues); break;
|
||||
case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter
|
||||
case 'T': s = ParseParameter(s, transmission, TransmissionValues); break;
|
||||
case 'V': polarization = *s++; break;
|
||||
case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break;
|
||||
@ -268,10 +292,10 @@ private:
|
||||
int tuneTimeout;
|
||||
int lockTimeout;
|
||||
time_t lastTimeoutReport;
|
||||
fe_delivery_system frontendType;
|
||||
cChannel channel;
|
||||
const cDiseqc *lastDiseqc;
|
||||
const cScr *scr;
|
||||
bool lnbPowerTurnedOn;
|
||||
eTunerStatus tunerStatus;
|
||||
cMutex mutex;
|
||||
cCondVar locked;
|
||||
@ -279,6 +303,7 @@ private:
|
||||
cDvbTuner *bondedTuner;
|
||||
bool bondedMaster;
|
||||
bool bondedMasterFailed;
|
||||
bool SetFrontendType(const cChannel *Channel);
|
||||
cString GetBondingParams(const cChannel *Channel = NULL) const;
|
||||
void ClearEventQueue(void) const;
|
||||
bool GetFrontendStatus(fe_status_t &Status) const;
|
||||
@ -287,7 +312,7 @@ private:
|
||||
bool SetFrontend(void);
|
||||
virtual void Action(void);
|
||||
public:
|
||||
cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType);
|
||||
cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend);
|
||||
virtual ~cDvbTuner();
|
||||
bool Bond(cDvbTuner *Tuner);
|
||||
void UnBond(void);
|
||||
@ -304,25 +329,23 @@ public:
|
||||
|
||||
cMutex cDvbTuner::bondMutex;
|
||||
|
||||
cDvbTuner::cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType)
|
||||
cDvbTuner::cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend)
|
||||
{
|
||||
device = Device;
|
||||
fd_frontend = Fd_Frontend;
|
||||
adapter = Adapter;
|
||||
frontend = Frontend;
|
||||
frontendType = FrontendType;
|
||||
subsystemId = cDvbDeviceProbe::GetSubsystemId(adapter, frontend);
|
||||
tuneTimeout = 0;
|
||||
lockTimeout = 0;
|
||||
lastTimeoutReport = 0;
|
||||
lastDiseqc = NULL;
|
||||
scr = NULL;
|
||||
lnbPowerTurnedOn = false;
|
||||
tunerStatus = tsIdle;
|
||||
bondedTuner = NULL;
|
||||
bondedMaster = false;
|
||||
bondedMasterFailed = false;
|
||||
if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2)
|
||||
ResetToneAndVoltage(); // must explicitly turn on LNB power
|
||||
SetDescription("tuner on frontend %d/%d", adapter, frontend);
|
||||
Start();
|
||||
}
|
||||
@ -346,16 +369,12 @@ bool cDvbTuner::Bond(cDvbTuner *Tuner)
|
||||
{
|
||||
cMutexLock MutexLock(&bondMutex);
|
||||
if (!bondedTuner) {
|
||||
if ((frontendType == SYS_DVBS || frontendType == SYS_DVBS2) && (Tuner->frontendType == SYS_DVBS || Tuner->frontendType == SYS_DVBS2)) {
|
||||
ResetToneAndVoltage();
|
||||
bondedMaster = false; // makes sure we don't disturb an existing master
|
||||
bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner;
|
||||
Tuner->bondedTuner = this;
|
||||
dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
esyslog("ERROR: can't bond tuner %d/%d with tuner %d/%d (only DVB-S(2) tuners can be bonded)", adapter, frontend, Tuner->adapter, Tuner->frontend);
|
||||
ResetToneAndVoltage();
|
||||
bondedMaster = false; // makes sure we don't disturb an existing master
|
||||
bondedTuner = Tuner->bondedTuner ? Tuner->bondedTuner : Tuner;
|
||||
Tuner->bondedTuner = this;
|
||||
dsyslog("tuner %d/%d bonded with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
esyslog("ERROR: tuner %d/%d already bonded with tuner %d/%d, can't bond with tuner %d/%d", adapter, frontend, bondedTuner->adapter, bondedTuner->frontend, Tuner->adapter, Tuner->frontend);
|
||||
@ -468,7 +487,7 @@ void cDvbTuner::SetChannel(const cChannel *Channel)
|
||||
t->SetChannel(NULL);
|
||||
}
|
||||
}
|
||||
else if (!BondedMaster->device->Receiving())
|
||||
else if (strcmp(GetBondingParams(Channel), BondedMaster->GetBondingParams()) != 0)
|
||||
BondedMaster->SetChannel(Channel);
|
||||
}
|
||||
cMutexLock MutexLock(&mutex);
|
||||
@ -618,7 +637,7 @@ int cDvbTuner::GetSignalQuality(void) const
|
||||
if (q > 100)
|
||||
q = 100;
|
||||
#ifdef DEBUG_SIGNALQUALITY
|
||||
fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q);
|
||||
fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %d %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasSnr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q);
|
||||
#endif
|
||||
return q;
|
||||
}
|
||||
@ -634,6 +653,13 @@ static unsigned int FrequencyToHz(unsigned int f)
|
||||
|
||||
void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
|
||||
{
|
||||
if (!lnbPowerTurnedOn) {
|
||||
CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); // must explicitly turn on LNB power
|
||||
lnbPowerTurnedOn = true;
|
||||
}
|
||||
static cMutex Mutex;
|
||||
if (Diseqc->IsScr())
|
||||
Mutex.Lock();
|
||||
struct dvb_diseqc_master_cmd cmd;
|
||||
const char *CurrentAction = NULL;
|
||||
for (;;) {
|
||||
@ -654,6 +680,8 @@ void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
|
||||
}
|
||||
if (scr)
|
||||
ResetToneAndVoltage(); // makes sure we don't block the bus!
|
||||
if (Diseqc->IsScr())
|
||||
Mutex.Unlock();
|
||||
}
|
||||
|
||||
void cDvbTuner::ResetToneAndVoltage(void)
|
||||
@ -662,6 +690,22 @@ void cDvbTuner::ResetToneAndVoltage(void)
|
||||
CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF));
|
||||
}
|
||||
|
||||
static int GetRequiredDeliverySystem(const cChannel *Channel, const cDvbTransponderParameters *Dtp)
|
||||
{
|
||||
int ds = SYS_UNDEFINED;
|
||||
if (Channel->IsAtsc())
|
||||
ds = SYS_ATSC;
|
||||
else if (Channel->IsCable())
|
||||
ds = SYS_DVBC_ANNEX_AC;
|
||||
else if (Channel->IsSat())
|
||||
ds = Dtp->System() == DVB_SYSTEM_1 ? SYS_DVBS : SYS_DVBS2;
|
||||
else if (Channel->IsTerr())
|
||||
ds = Dtp->System() == DVB_SYSTEM_1 ? SYS_DVBT : SYS_DVBT2;
|
||||
else
|
||||
esyslog("ERROR: can't determine frontend type for channel %d", Channel->Number());
|
||||
return ds;
|
||||
}
|
||||
|
||||
bool cDvbTuner::SetFrontend(void)
|
||||
{
|
||||
#define MAXFRONTENDCMDS 16
|
||||
@ -686,6 +730,12 @@ bool cDvbTuner::SetFrontend(void)
|
||||
|
||||
cDvbTransponderParameters dtp(channel.Parameters());
|
||||
|
||||
// Determine the required frontend type:
|
||||
int frontendType = GetRequiredDeliverySystem(&channel, &dtp);
|
||||
if (frontendType == SYS_UNDEFINED)
|
||||
return false;
|
||||
|
||||
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
|
||||
if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) {
|
||||
unsigned int frequency = channel.Frequency();
|
||||
if (Setup.DiSEqC) {
|
||||
@ -728,22 +778,15 @@ bool cDvbTuner::SetFrontend(void)
|
||||
frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF
|
||||
|
||||
// DVB-S/DVB-S2 (common parts)
|
||||
SETCMD(DTV_DELIVERY_SYSTEM, dtp.System());
|
||||
SETCMD(DTV_FREQUENCY, frequency * 1000UL);
|
||||
SETCMD(DTV_MODULATION, dtp.Modulation());
|
||||
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
|
||||
SETCMD(DTV_INNER_FEC, dtp.CoderateH());
|
||||
SETCMD(DTV_INVERSION, dtp.Inversion());
|
||||
if (dtp.System() == SYS_DVBS2) {
|
||||
if (frontendType == SYS_DVBS2) {
|
||||
// DVB-S2
|
||||
SETCMD(DTV_PILOT, PILOT_AUTO);
|
||||
SETCMD(DTV_ROLLOFF, dtp.RollOff());
|
||||
}
|
||||
else {
|
||||
esyslog("ERROR: frontend %d/%d doesn't provide DVB-S2", adapter, frontend);
|
||||
return false;
|
||||
}
|
||||
if (frontendType == SYS_DVBS2) {
|
||||
// DVB-S2
|
||||
SETCMD(DTV_PILOT, PILOT_AUTO);
|
||||
SETCMD(DTV_ROLLOFF, dtp.RollOff());
|
||||
}
|
||||
else {
|
||||
// DVB-S
|
||||
@ -755,7 +798,6 @@ bool cDvbTuner::SetFrontend(void)
|
||||
}
|
||||
else if (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B) {
|
||||
// DVB-C
|
||||
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
|
||||
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
|
||||
SETCMD(DTV_INVERSION, dtp.Inversion());
|
||||
SETCMD(DTV_SYMBOL_RATE, channel.Srate() * 1000UL);
|
||||
@ -765,9 +807,8 @@ bool cDvbTuner::SetFrontend(void)
|
||||
tuneTimeout = DVBC_TUNE_TIMEOUT;
|
||||
lockTimeout = DVBC_LOCK_TIMEOUT;
|
||||
}
|
||||
else if (frontendType == SYS_DVBT) {
|
||||
// DVB-T
|
||||
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
|
||||
else if (frontendType == SYS_DVBT || frontendType == SYS_DVBT2) {
|
||||
// DVB-T/DVB-T2 (common parts)
|
||||
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
|
||||
SETCMD(DTV_INVERSION, dtp.Inversion());
|
||||
SETCMD(DTV_BANDWIDTH_HZ, dtp.Bandwidth());
|
||||
@ -777,13 +818,16 @@ bool cDvbTuner::SetFrontend(void)
|
||||
SETCMD(DTV_TRANSMISSION_MODE, dtp.Transmission());
|
||||
SETCMD(DTV_GUARD_INTERVAL, dtp.Guard());
|
||||
SETCMD(DTV_HIERARCHY, dtp.Hierarchy());
|
||||
if (frontendType == SYS_DVBT2) {
|
||||
// DVB-T2
|
||||
SETCMD(DTV_DVBT2_PLP_ID, dtp.PlpId());
|
||||
}
|
||||
|
||||
tuneTimeout = DVBT_TUNE_TIMEOUT;
|
||||
lockTimeout = DVBT_LOCK_TIMEOUT;
|
||||
}
|
||||
else if (frontendType == SYS_ATSC) {
|
||||
// ATSC
|
||||
SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
|
||||
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
|
||||
SETCMD(DTV_INVERSION, dtp.Inversion());
|
||||
SETCMD(DTV_MODULATION, dtp.Modulation());
|
||||
@ -903,11 +947,12 @@ void cDvbSourceParam::GetData(cChannel *Channel)
|
||||
cOsdItem *cDvbSourceParam::GetOsdItem(void)
|
||||
{
|
||||
char type = Source();
|
||||
const tDvbParameterMap *SystemValues = type == 'S' ? SystemValuesSat : SystemValuesTerr;
|
||||
#undef ST
|
||||
#define ST(s) if (strchr(s, type))
|
||||
switch (param++) {
|
||||
case 0: ST(" S ") return new cMenuEditChrItem( tr("Polarization"), &dtp.polarization, "HVLR"); else return GetOsdItem();
|
||||
case 1: ST(" S ") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem();
|
||||
case 1: ST(" ST") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem();
|
||||
case 2: ST(" CS ") return new cMenuEditIntItem( tr("Srate"), &srate); else return GetOsdItem();
|
||||
case 3: ST("ACST") return new cMenuEditMapItem( tr("Inversion"), &dtp.inversion, InversionValues); else return GetOsdItem();
|
||||
case 4: ST(" CST") return new cMenuEditMapItem( tr("CoderateH"), &dtp.coderateH, CoderateValues); else return GetOsdItem();
|
||||
@ -918,6 +963,7 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void)
|
||||
case 9: ST(" T") return new cMenuEditMapItem( tr("Guard"), &dtp.guard, GuardValues); else return GetOsdItem();
|
||||
case 10: ST(" T") return new cMenuEditMapItem( tr("Hierarchy"), &dtp.hierarchy, HierarchyValues); else return GetOsdItem();
|
||||
case 11: ST(" S ") return new cMenuEditMapItem( tr("Rolloff"), &dtp.rollOff, RollOffValues); else return GetOsdItem();
|
||||
case 12: ST(" T") return new cMenuEditIntItem( tr("PlpId"), &dtp.plpId, 0, 255); else return GetOsdItem();
|
||||
default: return NULL;
|
||||
}
|
||||
return NULL;
|
||||
@ -928,7 +974,7 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void)
|
||||
int cDvbDevice::setTransferModeForDolbyDigital = 1;
|
||||
cMutex cDvbDevice::bondMutex;
|
||||
|
||||
const char *DeliverySystems[] = {
|
||||
const char *DeliverySystemNames[] = {
|
||||
"UNDEFINED",
|
||||
"DVB-C",
|
||||
"DVB-C",
|
||||
@ -945,6 +991,8 @@ const char *DeliverySystems[] = {
|
||||
"DMBTH",
|
||||
"CMMB",
|
||||
"DAB",
|
||||
"DVB-T2",
|
||||
"TURBO",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -954,8 +1002,8 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend)
|
||||
frontend = Frontend;
|
||||
ciAdapter = NULL;
|
||||
dvbTuner = NULL;
|
||||
frontendType = SYS_UNDEFINED;
|
||||
numProvidedSystems = 0;
|
||||
numDeliverySystems = 0;
|
||||
numModulations = 0;
|
||||
bondedDevice = NULL;
|
||||
needsDetachBondedReceivers = false;
|
||||
|
||||
@ -976,39 +1024,8 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend)
|
||||
// We only check the devices that must be present - the others will be checked before accessing them://XXX
|
||||
|
||||
if (fd_frontend >= 0) {
|
||||
if (ioctl(fd_frontend, FE_GET_INFO, &frontendInfo) >= 0) {
|
||||
switch (frontendInfo.type) {
|
||||
case FE_QPSK: frontendType = (frontendInfo.caps & FE_CAN_2G_MODULATION) ? SYS_DVBS2 : SYS_DVBS; break;
|
||||
case FE_OFDM: frontendType = SYS_DVBT; break;
|
||||
case FE_QAM: frontendType = SYS_DVBC_ANNEX_AC; break;
|
||||
case FE_ATSC: frontendType = SYS_ATSC; break;
|
||||
default: esyslog("ERROR: unknown frontend type %d on frontend %d/%d", frontendInfo.type, adapter, frontend);
|
||||
}
|
||||
}
|
||||
else
|
||||
LOG_ERROR;
|
||||
if (frontendType != SYS_UNDEFINED) {
|
||||
numProvidedSystems++;
|
||||
if (frontendType == SYS_DVBS2)
|
||||
numProvidedSystems++;
|
||||
char Modulations[64];
|
||||
char *p = Modulations;
|
||||
if (frontendInfo.caps & FE_CAN_QPSK) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QPSK, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_16) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_16, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_32) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_32, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_64) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_64, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_128) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_128, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_256) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(QAM_256, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_8VSB) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(VSB_8, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_16VSB) { numProvidedSystems++; p += sprintf(p, ",%s", MapToUserString(VSB_16, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_TURBO_FEC){numProvidedSystems++; p += sprintf(p, ",%s", "TURBO_FEC"); }
|
||||
if (p != Modulations)
|
||||
p = Modulations + 1; // skips first ','
|
||||
else
|
||||
p = (char *)"unknown modulations";
|
||||
isyslog("frontend %d/%d provides %s with %s (\"%s\")", adapter, frontend, DeliverySystems[frontendType], p, frontendInfo.name);
|
||||
dvbTuner = new cDvbTuner(this, fd_frontend, adapter, frontend, frontendType);
|
||||
}
|
||||
if (QueryDeliverySystems(fd_frontend))
|
||||
dvbTuner = new cDvbTuner(this, fd_frontend, adapter, frontend);
|
||||
}
|
||||
else
|
||||
esyslog("ERROR: can't open DVB device %d/%d", adapter, frontend);
|
||||
@ -1106,6 +1123,74 @@ LastAdapter:
|
||||
return Found > 0;
|
||||
}
|
||||
|
||||
bool cDvbDevice::QueryDeliverySystems(int fd_frontend)
|
||||
{
|
||||
numDeliverySystems = 0;
|
||||
if (ioctl(fd_frontend, FE_GET_INFO, &frontendInfo) < 0) {
|
||||
LOG_ERROR;
|
||||
return false;
|
||||
}
|
||||
#if DVB_API_VERSION > 5 || DVB_API_VERSION_MINOR >= 5
|
||||
dtv_property Frontend[1];
|
||||
memset(&Frontend, 0, sizeof(Frontend));
|
||||
dtv_properties CmdSeq;
|
||||
memset(&CmdSeq, 0, sizeof(CmdSeq));
|
||||
CmdSeq.props = Frontend;
|
||||
SETCMD(DTV_ENUM_DELSYS, 0);
|
||||
int Result = ioctl(fd_frontend, FE_GET_PROPERTY, &CmdSeq);
|
||||
if (Result == 0) {
|
||||
for (uint i = 0; i < Frontend[0].u.buffer.len; i++) {
|
||||
if (numDeliverySystems >= MAXDELIVERYSYSTEMS) {
|
||||
esyslog("ERROR: too many delivery systems on frontend %d/%d", adapter, frontend);
|
||||
break;
|
||||
}
|
||||
deliverySystems[numDeliverySystems++] = Frontend[0].u.buffer.data[i];
|
||||
}
|
||||
}
|
||||
else {
|
||||
esyslog("ERROR: can't query delivery systems on frontend %d/%d - falling back to legacy mode", adapter, frontend);
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
// Legacy mode (DVB-API < 5.5):
|
||||
switch (frontendInfo.type) {
|
||||
case FE_QPSK: deliverySystems[numDeliverySystems++] = SYS_DVBS;
|
||||
if (frontendInfo.caps & FE_CAN_2G_MODULATION)
|
||||
deliverySystems[numDeliverySystems++] = SYS_DVBS2;
|
||||
break;
|
||||
case FE_OFDM: deliverySystems[numDeliverySystems++] = SYS_DVBT;
|
||||
if (frontendInfo.caps & FE_CAN_2G_MODULATION)
|
||||
deliverySystems[numDeliverySystems++] = SYS_DVBT2;
|
||||
break;
|
||||
case FE_QAM: deliverySystems[numDeliverySystems++] = SYS_DVBC_ANNEX_AC; break;
|
||||
case FE_ATSC: deliverySystems[numDeliverySystems++] = SYS_ATSC; break;
|
||||
default: esyslog("ERROR: unknown frontend type %d on frontend %d/%d", frontendInfo.type, adapter, frontend);
|
||||
}
|
||||
}
|
||||
if (numDeliverySystems > 0) {
|
||||
cString ds("");
|
||||
for (int i = 0; i < numDeliverySystems; i++)
|
||||
ds = cString::sprintf("%s%s%s", *ds, i ? "," : "", DeliverySystemNames[deliverySystems[i]]);
|
||||
cString ms("");
|
||||
if (frontendInfo.caps & FE_CAN_QPSK) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QPSK, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_16) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_16, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_32) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_32, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_64) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_64, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_128) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_128, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_QAM_256) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(QAM_256, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_8VSB) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(VSB_8, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_16VSB) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", MapToUserString(VSB_16, ModulationValues)); }
|
||||
if (frontendInfo.caps & FE_CAN_TURBO_FEC) { numModulations++; ms = cString::sprintf("%s%s%s", *ms, **ms ? "," : "", "TURBO_FEC"); }
|
||||
if (!**ms)
|
||||
ms = "unknown modulations";
|
||||
isyslog("frontend %d/%d provides %s with %s (\"%s\")", adapter, frontend, *ds, *ms, frontendInfo.name);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
esyslog("ERROR: frontend %d/%d doesn't provide any delivery systems", adapter, frontend);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool cDvbDevice::Ready(void)
|
||||
{
|
||||
if (ciAdapter)
|
||||
@ -1126,7 +1211,7 @@ bool cDvbDevice::BondDevices(const char *Bondings)
|
||||
if (cDevice *Device2 = cDevice::GetDevice(d)) {
|
||||
if (cDvbDevice *DvbDevice1 = dynamic_cast<cDvbDevice *>(Device1)) {
|
||||
if (cDvbDevice *DvbDevice2 = dynamic_cast<cDvbDevice *>(Device2)) {
|
||||
if (!DvbDevice2->Bond(DvbDevice1))
|
||||
if (!DvbDevice1->Bond(DvbDevice2))
|
||||
return false; // Bond() has already logged the error
|
||||
}
|
||||
else
|
||||
@ -1167,7 +1252,7 @@ bool cDvbDevice::Bond(cDvbDevice *Device)
|
||||
cMutexLock MutexLock(&bondMutex);
|
||||
if (!bondedDevice) {
|
||||
if (Device != this) {
|
||||
if ((frontendType == SYS_DVBS || frontendType == SYS_DVBS2) && (Device->frontendType == SYS_DVBS || Device->frontendType == SYS_DVBS2)) {
|
||||
if ((ProvidesDeliverySystem(SYS_DVBS) || ProvidesDeliverySystem(SYS_DVBS2)) && (Device->ProvidesDeliverySystem(SYS_DVBS) || Device->ProvidesDeliverySystem(SYS_DVBS2))) {
|
||||
if (dvbTuner && Device->dvbTuner && dvbTuner->Bond(Device->dvbTuner)) {
|
||||
bondedDevice = Device->bondedDevice ? Device->bondedDevice : Device;
|
||||
Device->bondedDevice = this;
|
||||
@ -1285,14 +1370,23 @@ void cDvbDevice::CloseFilter(int Handle)
|
||||
close(Handle);
|
||||
}
|
||||
|
||||
bool cDvbDevice::ProvidesDeliverySystem(int DeliverySystem) const
|
||||
{
|
||||
for (int i = 0; i < numDeliverySystems; i++) {
|
||||
if (deliverySystems[i] == DeliverySystem)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool cDvbDevice::ProvidesSource(int Source) const
|
||||
{
|
||||
int type = Source & cSource::st_Mask;
|
||||
return type == cSource::stNone
|
||||
|| type == cSource::stAtsc && (frontendType == SYS_ATSC)
|
||||
|| type == cSource::stCable && (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B)
|
||||
|| type == cSource::stSat && (frontendType == SYS_DVBS || frontendType == SYS_DVBS2)
|
||||
|| type == cSource::stTerr && (frontendType == SYS_DVBT);
|
||||
|| type == cSource::stAtsc && ProvidesDeliverySystem(SYS_ATSC)
|
||||
|| type == cSource::stCable && (ProvidesDeliverySystem(SYS_DVBC_ANNEX_AC) || ProvidesDeliverySystem(SYS_DVBC_ANNEX_B))
|
||||
|| type == cSource::stSat && (ProvidesDeliverySystem(SYS_DVBS) || ProvidesDeliverySystem(SYS_DVBS2))
|
||||
|| type == cSource::stTerr && (ProvidesDeliverySystem(SYS_DVBT) || ProvidesDeliverySystem(SYS_DVBT2));
|
||||
}
|
||||
|
||||
bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
|
||||
@ -1300,7 +1394,7 @@ bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
|
||||
if (!ProvidesSource(Channel->Source()))
|
||||
return false; // doesn't provide source
|
||||
cDvbTransponderParameters dtp(Channel->Parameters());
|
||||
if (dtp.System() == SYS_DVBS2 && frontendType == SYS_DVBS ||
|
||||
if (!ProvidesDeliverySystem(GetRequiredDeliverySystem(Channel, &dtp)) ||
|
||||
dtp.Modulation() == QPSK && !(frontendInfo.caps & FE_CAN_QPSK) ||
|
||||
dtp.Modulation() == QAM_16 && !(frontendInfo.caps & FE_CAN_QAM_16) ||
|
||||
dtp.Modulation() == QAM_32 && !(frontendInfo.caps & FE_CAN_QAM_32) ||
|
||||
@ -1375,7 +1469,7 @@ bool cDvbDevice::ProvidesEIT(void) const
|
||||
|
||||
int cDvbDevice::NumProvidedSystems(void) const
|
||||
{
|
||||
return numProvidedSystems;
|
||||
return numDeliverySystems + numModulations;
|
||||
}
|
||||
|
||||
int cDvbDevice::SignalStrength(void) const
|
||||
|
25
dvbdevice.h
25
dvbdevice.h
@ -4,22 +4,22 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: dvbdevice.h 2.18 2011/12/04 13:38:17 kls Exp $
|
||||
* $Id: dvbdevice.h 2.21 2012/01/13 11:32:45 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __DVBDEVICE_H
|
||||
#define __DVBDEVICE_H
|
||||
|
||||
#include <sys/mman.h> // FIXME: workaround for broken linux-dvb header files
|
||||
#include <linux/dvb/frontend.h>
|
||||
#include <linux/dvb/version.h>
|
||||
#include "device.h"
|
||||
|
||||
#if DVB_API_VERSION < 5
|
||||
#error VDR requires Linux DVB driver API version 5.0 or higher!
|
||||
#if DVB_API_VERSION < 5 || (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 3)
|
||||
#error VDR requires Linux DVB driver API version 5.3 or higher!
|
||||
#endif
|
||||
|
||||
#define MAXDVBDEVICES 8
|
||||
#define MAXDELIVERYSYSTEMS 8
|
||||
|
||||
#define DEV_VIDEO "/dev/video"
|
||||
#define DEV_DVB_ADAPTER "/dev/dvb/adapter"
|
||||
@ -47,7 +47,8 @@ extern const tDvbParameterMap InversionValues[];
|
||||
extern const tDvbParameterMap BandwidthValues[];
|
||||
extern const tDvbParameterMap CoderateValues[];
|
||||
extern const tDvbParameterMap ModulationValues[];
|
||||
extern const tDvbParameterMap SystemValues[];
|
||||
extern const tDvbParameterMap SystemValuesSat[];
|
||||
extern const tDvbParameterMap SystemValuesTerr[];
|
||||
extern const tDvbParameterMap TransmissionValues[];
|
||||
extern const tDvbParameterMap GuardValues[];
|
||||
extern const tDvbParameterMap HierarchyValues[];
|
||||
@ -67,8 +68,9 @@ private:
|
||||
int guard;
|
||||
int hierarchy;
|
||||
int rollOff;
|
||||
int plpId;
|
||||
int PrintParameter(char *p, char Name, int Value) const;
|
||||
const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map);
|
||||
const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
|
||||
public:
|
||||
cDvbTransponderParameters(const char *Parameters = NULL);
|
||||
char Polarization(void) const { return polarization; }
|
||||
@ -82,6 +84,7 @@ public:
|
||||
int Guard(void) const { return guard; }
|
||||
int Hierarchy(void) const { return hierarchy; }
|
||||
int RollOff(void) const { return rollOff; }
|
||||
int PlpId(void) const { return plpId; }
|
||||
void SetPolarization(char Polarization) { polarization = Polarization; }
|
||||
void SetInversion(int Inversion) { inversion = Inversion; }
|
||||
void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; }
|
||||
@ -93,6 +96,7 @@ public:
|
||||
void SetGuard(int Guard) { guard = Guard; }
|
||||
void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; }
|
||||
void SetRollOff(int RollOff) { rollOff = RollOff; }
|
||||
void SetPlpId(int PlpId) { plpId = PlpId; }
|
||||
cString ToString(char Type) const;
|
||||
bool Parse(const char *s);
|
||||
};
|
||||
@ -119,15 +123,19 @@ protected:
|
||||
int adapter, frontend;
|
||||
private:
|
||||
dvb_frontend_info frontendInfo;
|
||||
int numProvidedSystems;
|
||||
fe_delivery_system frontendType;
|
||||
int deliverySystems[MAXDELIVERYSYSTEMS];
|
||||
int numDeliverySystems;
|
||||
int numModulations;
|
||||
int fd_dvr, fd_ca;
|
||||
static cMutex bondMutex;
|
||||
cDvbDevice *bondedDevice;
|
||||
mutable bool needsDetachBondedReceivers;
|
||||
bool QueryDeliverySystems(int fd_frontend);
|
||||
public:
|
||||
cDvbDevice(int Adapter, int Frontend);
|
||||
virtual ~cDvbDevice();
|
||||
int Adapter(void) const { return adapter; }
|
||||
int Frontend(void) const { return frontend; }
|
||||
virtual bool Ready(void);
|
||||
static bool BondDevices(const char *Bondings);
|
||||
///< Bonds the devices as defined in the given Bondings string.
|
||||
@ -167,6 +175,7 @@ private:
|
||||
private:
|
||||
cDvbTuner *dvbTuner;
|
||||
public:
|
||||
virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
|
||||
virtual bool ProvidesSource(int Source) const;
|
||||
virtual bool ProvidesTransponder(const cChannel *Channel) const;
|
||||
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
|
||||
|
4
dvbspu.c
4
dvbspu.c
@ -8,7 +8,7 @@
|
||||
*
|
||||
* parts of this file are derived from the OMS program.
|
||||
*
|
||||
* $Id: dvbspu.c 2.8 2010/01/17 13:43:27 kls Exp $
|
||||
* $Id: dvbspu.c 2.9 2011/12/10 14:39:19 kls Exp $
|
||||
*/
|
||||
|
||||
#include "dvbspu.h"
|
||||
@ -496,7 +496,7 @@ int cDvbSpuDecoder::setTime(uint32_t pts)
|
||||
if (!spu)
|
||||
return 0;
|
||||
|
||||
if (spu && !clean)
|
||||
if (!clean)
|
||||
Draw();
|
||||
|
||||
while (DCSQ_offset != prev_DCSQ_offset) { /* Display Control Sequences */
|
||||
|
@ -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
24
epg.c
@ -7,7 +7,7 @@
|
||||
* Original version (as used in VDR before 1.3.0) written by
|
||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||
*
|
||||
* $Id: epg.c 2.7 2011/02/25 15:16:05 kls Exp $
|
||||
* $Id: epg.c 2.9 2012/01/12 14:31:46 kls Exp $
|
||||
*/
|
||||
|
||||
#include "epg.h"
|
||||
@ -828,10 +828,17 @@ void cEvent::FixEpgBugs(void)
|
||||
|
||||
Final:
|
||||
|
||||
// VDR can't usefully handle newline characters in the title and shortText of EPG
|
||||
// VDR can't usefully handle newline characters in the title, shortText or component description of EPG
|
||||
// data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel):
|
||||
strreplace(title, '\n', ' ');
|
||||
strreplace(shortText, '\n', ' ');
|
||||
if (components) {
|
||||
for (int i = 0; i < components->NumComponents(); i++) {
|
||||
tComponent *p = components->Component(i);
|
||||
if (p->description)
|
||||
strreplace(p->description, '\n', ' ');
|
||||
}
|
||||
}
|
||||
/* TODO adapt to UTF-8
|
||||
// Same for control characters:
|
||||
strreplace(title, '\x86', ' ');
|
||||
@ -1022,10 +1029,15 @@ void cSchedule::Cleanup(void)
|
||||
|
||||
void cSchedule::Cleanup(time_t Time)
|
||||
{
|
||||
cEvent *Event;
|
||||
while ((Event = events.First()) != NULL) {
|
||||
if (!Event->HasTimer() && Event->EndTime() + Setup.EPGLinger * 60 + 3600 < Time) // adding one hour for safety
|
||||
DelEvent(Event);
|
||||
cEvent *Event = events.First();
|
||||
while (Event) {
|
||||
if (Event->HasTimer())
|
||||
Event = (cEvent *)Event->Next();
|
||||
else if (Event->EndTime() + Setup.EPGLinger * 60 + 3600 < Time) { // adding one hour for safety
|
||||
cEvent *e = Event;
|
||||
Event = (cEvent *)Event->Next();
|
||||
DelEvent(e);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
40
font.c
40
font.c
@ -6,7 +6,7 @@
|
||||
*
|
||||
* BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya.
|
||||
*
|
||||
* $Id: font.c 2.8 2011/03/28 16:29:51 kls Exp $
|
||||
* $Id: font.c 2.9 2012/01/13 09:43:22 kls Exp $
|
||||
*/
|
||||
|
||||
#include "font.h"
|
||||
@ -508,25 +508,27 @@ cString cFont::GetFontFileName(const char *FontName)
|
||||
#ifdef BIDI
|
||||
cString cFont::Bidi(const char *Ltr)
|
||||
{
|
||||
fribidi_set_mirroring(true);
|
||||
fribidi_set_reorder_nsm(false);
|
||||
FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8;
|
||||
int LtrLen = strlen(Ltr);
|
||||
FriBidiCharType Base = FRIBIDI_TYPE_L;
|
||||
FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ;
|
||||
int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical);
|
||||
FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ;
|
||||
char *Rtl = NULL;
|
||||
bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL);
|
||||
if (ok) {
|
||||
fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL);
|
||||
Rtl = MALLOC(char, RtlLen * 4 + 1);
|
||||
fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl);
|
||||
if (cCharSetConv::SystemCharacterTable()) { // bidi requires UTF-8
|
||||
fribidi_set_mirroring(true);
|
||||
fribidi_set_reorder_nsm(false);
|
||||
FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8;
|
||||
int LtrLen = strlen(Ltr);
|
||||
FriBidiCharType Base = FRIBIDI_TYPE_L;
|
||||
FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ;
|
||||
int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical);
|
||||
FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ;
|
||||
char *Rtl = NULL;
|
||||
bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL);
|
||||
if (ok) {
|
||||
fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL);
|
||||
Rtl = MALLOC(char, RtlLen * 4 + 1);
|
||||
fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl);
|
||||
}
|
||||
free(Logical);
|
||||
free(Visual);
|
||||
if (ok)
|
||||
return cString(Rtl, true);
|
||||
}
|
||||
free(Logical);
|
||||
free(Visual);
|
||||
if (ok)
|
||||
return cString(Rtl, true);
|
||||
return cString(Ltr);
|
||||
}
|
||||
#endif
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -10,7 +10,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: headers.h 2.2 2011/06/15 21:26:00 kls Exp $
|
||||
* $Id: headers.h 2.4 2012/01/11 11:35:17 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@ -1839,6 +1839,37 @@ struct descr_extension {
|
||||
u_char descriptor_tag_extension :8;
|
||||
};
|
||||
|
||||
/* extension 0x04 t2_delivery_system_descriptor */
|
||||
|
||||
struct descr_t2_delivery_system {
|
||||
u_char descriptor_tag :8;
|
||||
u_char descriptor_length :8;
|
||||
u_char descriptor_tag_extension :8;
|
||||
u_char plp_id :8;
|
||||
u_char t2_system_id_hi :8;
|
||||
u_char t2_system_id_lo :8;
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_char siso_miso :2;
|
||||
u_char bandwidth :4;
|
||||
u_char reserved :2;
|
||||
u_char guard_interval :3;
|
||||
u_char transmission_mode :3;
|
||||
u_char other_frequency_flag :1;
|
||||
u_char tfs_flag :1;
|
||||
#else
|
||||
u_char reserved :2;
|
||||
u_char bandwidth :4;
|
||||
u_char siso_miso :2;
|
||||
u_char tfs_flag :1;
|
||||
u_char other_frequency_flag :1;
|
||||
u_char transmission_mode :3;
|
||||
u_char guard_interval :3;
|
||||
#endif
|
||||
/* now follow cell_id, frequency_loop_length, centre_frequency,
|
||||
subcell_info_loop_length, cell_id_extension, transposer_frequency
|
||||
fields looping to the end */
|
||||
};
|
||||
|
||||
/* MHP 0x00 application_descriptor */
|
||||
|
||||
#define DESCR_APPLICATION_LEN 3
|
||||
@ -1907,6 +1938,11 @@ struct descr_transport_protocol {
|
||||
/* protocol_id-specific selector bytes follow */
|
||||
};
|
||||
|
||||
struct descr_url_extension_entry {
|
||||
u_char url_extension_length :8;
|
||||
/* URL extension string */
|
||||
};
|
||||
|
||||
#define TRANSPORT_VIA_OC_LEN 1
|
||||
|
||||
struct transport_via_oc {
|
||||
@ -1940,6 +1976,12 @@ struct transport_via_oc_end {
|
||||
u_char component_tag :8;
|
||||
};
|
||||
|
||||
#define TRANSPORT_VIA_HTTP_LEN 1
|
||||
|
||||
struct transport_via_http {
|
||||
u_char url_base_length :8;
|
||||
};
|
||||
|
||||
/* 0x03 dvb_j_application_descriptor() */
|
||||
|
||||
#define DESCR_DVBJ_APPLICATION_LEN 2
|
||||
@ -1991,6 +2033,16 @@ struct descr_application_icons_descriptor_end {
|
||||
u_char icon_flags_lo :8;
|
||||
};
|
||||
|
||||
/* 0x15 simple application location descrptor */
|
||||
|
||||
#define DESCR_SIMPLE_APPLICATION_LOCATION_LEN 3
|
||||
|
||||
struct descr_simple_application_location_descriptor {
|
||||
u_char descriptor_tag :8;
|
||||
u_char descriptor_length :8;
|
||||
/* inital_path_bytes */
|
||||
};
|
||||
|
||||
// Private DVB Descriptor Premiere.de
|
||||
// 0xF2 Content Transmission Descriptor
|
||||
// http://dvbsnoop.sourceforge.net/examples/example-private-section.html
|
||||
|
@ -6,7 +6,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: si.c 2.5 2011/12/04 15:06:18 kls Exp $
|
||||
* $Id: si.c 2.6 2011/12/10 15:47:15 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@ -690,6 +690,9 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
|
||||
case MHP_DVBJApplicationLocationDescriptorTag:
|
||||
d=new MHP_DVBJApplicationLocationDescriptor();
|
||||
break;
|
||||
case MHP_SimpleApplicationLocationDescriptorTag:
|
||||
d=new MHP_SimpleApplicationLocationDescriptor();
|
||||
break;
|
||||
// 0x05 - 0x0A is unimplemented this library
|
||||
case MHP_ExternalApplicationAuthorisationDescriptorTag:
|
||||
case MHP_IPv4RoutingDescriptorTag:
|
||||
|
17
libsi/si.h
17
libsi/si.h
@ -6,7 +6,7 @@
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* $Id: si.h 2.3 2010/02/13 10:31:34 kls Exp $
|
||||
* $Id: si.h 2.5 2012/01/11 11:35:17 kls Exp $
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
@ -134,6 +134,19 @@ enum DescriptorTag {
|
||||
DTSDescriptorTag = 0x7B,
|
||||
AACDescriptorTag = 0x7C,
|
||||
ExtensionDescriptorTag = 0x7F,
|
||||
// Extension descriptors
|
||||
ImageIconDescriptorTag = 0x00,
|
||||
CpcmDeliverySignallingDescriptor = 0x01,
|
||||
CPDescriptorTag = 0x02,
|
||||
CPIdentifierDescriptorTag = 0x03,
|
||||
T2DeliverySystemDescriptorTag = 0x04,
|
||||
SHDeliverySystemDescriptorTag = 0x05,
|
||||
SupplementaryAudioDescriptorTag = 0x06,
|
||||
NetworkChangeNotifyDescriptorTag = 0x07,
|
||||
MessageDescriptorTag = 0x08,
|
||||
TargetRegionDescriptorTag = 0x09,
|
||||
TargetRegionNameDescriptorTag = 0x0A,
|
||||
ServiceRelocatedDescriptorTag = 0x0B,
|
||||
|
||||
// Defined by ETSI TS 102 812 (MHP)
|
||||
// They once again start with 0x00 (see page 234, MHP specification)
|
||||
@ -153,6 +166,8 @@ enum DescriptorTag {
|
||||
MHP_PrefetchDescriptorTag = 0x0C,
|
||||
MHP_DelegatedApplicationDescriptorTag = 0x0E,
|
||||
MHP_ApplicationStorageDescriptorTag = 0x10,
|
||||
MHP_SimpleApplicationLocationDescriptorTag = 0x15,
|
||||
MHP_SimpleApplicationBoundaryDescriptorTag = 0x17,
|
||||
// Premiere private Descriptor Tags
|
||||
PremiereContentTransmissionDescriptorTag = 0xF2,
|
||||
|
||||
|
16
menu.c
16
menu.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.c 2.34 2011/12/04 14:52:38 kls Exp $
|
||||
* $Id: menu.c 2.35 2012/01/14 13:06:03 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@ -3114,6 +3114,7 @@ cMenuSetupReplay::cMenuSetupReplay(void)
|
||||
SetSection(tr("Replay"));
|
||||
Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
|
||||
Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
|
||||
Add(new cMenuEditBoolItem(tr("Setup.Replay$Show remaining time"), &data.ShowRemainingTime));
|
||||
Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
|
||||
}
|
||||
|
||||
@ -4568,12 +4569,15 @@ bool cReplayControl::ShowProgress(bool Initial)
|
||||
displayReplay->SetTitle(title);
|
||||
lastCurrent = lastTotal = -1;
|
||||
}
|
||||
if (Total != lastTotal) {
|
||||
displayReplay->SetTotal(IndexToHMSF(Total, false, FramesPerSecond()));
|
||||
if (!Initial)
|
||||
displayReplay->Flush();
|
||||
}
|
||||
if (Current != lastCurrent || Total != lastTotal) {
|
||||
if (Setup.ShowRemainingTime || Total != lastTotal) {
|
||||
int Index = Total;
|
||||
if (Setup.ShowRemainingTime)
|
||||
Index = Current - Index;
|
||||
displayReplay->SetTotal(IndexToHMSF(Index, false, FramesPerSecond()));
|
||||
if (!Initial)
|
||||
displayReplay->Flush();
|
||||
}
|
||||
displayReplay->SetProgress(Current, Total);
|
||||
if (!Initial)
|
||||
displayReplay->Flush();
|
||||
|
46
nit.c
46
nit.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: nit.c 2.6 2011/08/12 14:27:31 kls Exp $
|
||||
* $Id: nit.c 2.9 2012/01/12 08:43:52 kls Exp $
|
||||
*/
|
||||
|
||||
#include "nit.h"
|
||||
@ -16,6 +16,9 @@
|
||||
#include "libsi/descriptor.h"
|
||||
#include "tools.h"
|
||||
|
||||
#define DVB_SYSTEM_1 0 // see also dvbdevice.c
|
||||
#define DVB_SYSTEM_2 1
|
||||
|
||||
cNitFilter::cNitFilter(void)
|
||||
{
|
||||
numNits = 0;
|
||||
@ -134,7 +137,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
||||
dtp.SetCoderateH(CodeRates[sd->getFecInner()]);
|
||||
static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 };
|
||||
dtp.SetModulation(Modulations[sd->getModulationType()]);
|
||||
dtp.SetSystem(sd->getModulationSystem() ? SYS_DVBS2 : SYS_DVBS);
|
||||
dtp.SetSystem(sd->getModulationSystem() ? DVB_SYSTEM_2 : DVB_SYSTEM_1);
|
||||
static int RollOffs[] = { ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_AUTO };
|
||||
dtp.SetRollOff(sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO);
|
||||
int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
|
||||
@ -242,10 +245,11 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
||||
cDvbTransponderParameters dtp;
|
||||
int Source = cSource::FromData(cSource::stTerr);
|
||||
int Frequency = Frequencies[0] = sd->getFrequency() * 10;
|
||||
static int Bandwidths[] = { 8000000, 7000000, 6000000, 0, 0, 0, 0, 0 };
|
||||
static int Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 0, 0, 0, 0 };
|
||||
dtp.SetBandwidth(Bandwidths[sd->getBandwidth()]);
|
||||
static int Constellations[] = { QPSK, QAM_16, QAM_64, QAM_AUTO };
|
||||
dtp.SetModulation(Constellations[sd->getConstellation()]);
|
||||
dtp.SetSystem(DVB_SYSTEM_1);
|
||||
static int Hierarchies[] = { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, HIERARCHY_4, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO };
|
||||
dtp.SetHierarchy(Hierarchies[sd->getHierarchy()]);
|
||||
static int CodeRates[] = { FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO };
|
||||
@ -253,7 +257,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
||||
dtp.SetCoderateL(CodeRates[sd->getCodeRateLP()]);
|
||||
static int GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4 };
|
||||
dtp.SetGuard(GuardIntervals[sd->getGuardInterval()]);
|
||||
static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO };
|
||||
static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_4K, TRANSMISSION_MODE_AUTO };
|
||||
dtp.SetTransmission(TransmissionModes[sd->getTransmissionMode()]);
|
||||
if (ThisNIT >= 0) {
|
||||
for (int n = 0; n < NumFrequencies; n++) {
|
||||
@ -299,6 +303,40 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SI::ExtensionDescriptorTag: {
|
||||
SI::ExtensionDescriptor *sd = (SI::ExtensionDescriptor *)d;
|
||||
switch (sd->getExtensionDescriptorTag()) {
|
||||
case SI::T2DeliverySystemDescriptorTag: {
|
||||
if (Setup.UpdateChannels >= 5) {
|
||||
for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
|
||||
int Source = cSource::FromData(cSource::stTerr);
|
||||
if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
|
||||
SI::T2DeliverySystemDescriptor *td = (SI::T2DeliverySystemDescriptor *)d;
|
||||
int Frequency = Channel->Frequency();
|
||||
int SymbolRate = Channel->Srate();
|
||||
//int SystemId = td->getSystemId();
|
||||
cDvbTransponderParameters dtp(Channel->Parameters());
|
||||
dtp.SetSystem(DVB_SYSTEM_2);
|
||||
dtp.SetPlpId(td->getPlpId());
|
||||
if (td->getExtendedDataFlag()) {
|
||||
static int T2Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 10000000, 1712000, 0, 0 };
|
||||
dtp.SetBandwidth(T2Bandwidths[td->getBandwidth()]);
|
||||
static int T2GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4, GUARD_INTERVAL_1_128, GUARD_INTERVAL_19_128, GUARD_INTERVAL_19_256, 0 };
|
||||
dtp.SetGuard(T2GuardIntervals[td->getGuardInterval()]);
|
||||
static int T2TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_4K, TRANSMISSION_MODE_1K, TRANSMISSION_MODE_16K, TRANSMISSION_MODE_32K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO };
|
||||
dtp.SetTransmission(T2TransmissionModes[td->getTransmissionMode()]);
|
||||
//TODO add parsing of frequencies
|
||||
}
|
||||
Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('T'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
delete d;
|
||||
|
8
po/ar.po
8
po/ar.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: VDR 1.7.0\n"
|
||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||
"POT-Creation-Date: 2011-12-03 16:25+0100\n"
|
||||
"POT-Creation-Date: 2012-01-14 14:06+0100\n"
|
||||
"PO-Revision-Date: 2008-10-16 11:16-0400\n"
|
||||
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
|
||||
"Language-Team: Arabic <ar@li.org>\n"
|
||||
@ -79,6 +79,9 @@ msgstr "الهرمية"
|
||||
msgid "Rolloff"
|
||||
msgstr "ايقاف"
|
||||
|
||||
msgid "PlpId"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting EPG scan"
|
||||
msgstr "EPG ا لبدء بالبحث على دليل القنوات الالكترونى "
|
||||
|
||||
@ -1103,6 +1106,9 @@ msgstr "موءقت النوم"
|
||||
msgid "Setup.Replay$Show replay mode"
|
||||
msgstr "اضهر طور الاعادة"
|
||||
|
||||
msgid "Setup.Replay$Show remaining time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Setup.Replay$Resume ID"
|
||||
msgstr "رقم المواصلة"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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í"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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 áíáìåôÜäïóçò"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
12
po/fi_FI.po
12
po/fi_FI.po
@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: VDR 1.6.0\n"
|
||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||
"POT-Creation-Date: 2011-12-03 16:25+0100\n"
|
||||
"POT-Creation-Date: 2012-01-14 14:06+0100\n"
|
||||
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
|
||||
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
||||
"Language-Team: Finnish <vdr@linuxtv.org>\n"
|
||||
@ -76,6 +76,9 @@ msgstr "Hierarkia"
|
||||
msgid "Rolloff"
|
||||
msgstr "Rolloff"
|
||||
|
||||
msgid "PlpId"
|
||||
msgstr "PLP-tunniste"
|
||||
|
||||
msgid "Starting EPG scan"
|
||||
msgstr "Ohjelmaoppaan päivitys aloitettu"
|
||||
|
||||
@ -967,10 +970,10 @@ msgstr "LNB-ylätaajuus (MHz)"
|
||||
|
||||
#, c-format
|
||||
msgid "Setup.LNB$Device %d connected to sat cable"
|
||||
msgstr ""
|
||||
msgstr "DVB-sovitin %d kytketty SAT-kaapeliin"
|
||||
|
||||
msgid "Setup.LNB$own"
|
||||
msgstr ""
|
||||
msgstr "oma"
|
||||
|
||||
msgid "CAM reset"
|
||||
msgstr "CAM nollaus"
|
||||
@ -1080,6 +1083,9 @@ msgstr "Käytä toiston moninopeustilaa"
|
||||
msgid "Setup.Replay$Show replay mode"
|
||||
msgstr "Näytä toiston tila"
|
||||
|
||||
msgid "Setup.Replay$Show remaining time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Setup.Replay$Resume ID"
|
||||
msgstr "Tallenteen paluutunniste"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
169
po/hu_HU.po
169
po/hu_HU.po
@ -4,14 +4,14 @@
|
||||
# Istvan Koenigsberger <istvnko@hotmail.com>, 2002, 2003, 2006
|
||||
# Guido Josten <guido.josten@t-online.de>, 2002, 2003, 2006
|
||||
# Thomas 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!"
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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 на продолжеток"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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 ÒÞáßàÞØ×ÒÕÔÕÝØï"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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 продовження"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
43
recording.c
43
recording.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: recording.c 2.39 2011/12/04 13:51:44 kls Exp $
|
||||
* $Id: recording.c 2.43 2012/01/15 11:04:24 kls Exp $
|
||||
*/
|
||||
|
||||
#include "recording.h"
|
||||
@ -873,16 +873,23 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
|
||||
s++;
|
||||
else
|
||||
s = name;
|
||||
titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%c%d:%02d%c%c%s",
|
||||
cString Length("");
|
||||
if (NewIndicator) {
|
||||
int Seconds = max(0, LengthInSeconds());
|
||||
Length = cString::sprintf("%c%d:%02d",
|
||||
Delimiter,
|
||||
Seconds / 3600,
|
||||
Seconds / 60 % 60
|
||||
);
|
||||
}
|
||||
titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%s%c%c%s",
|
||||
t->tm_mday,
|
||||
t->tm_mon + 1,
|
||||
t->tm_year % 100,
|
||||
Delimiter,
|
||||
t->tm_hour,
|
||||
t->tm_min,
|
||||
Delimiter,
|
||||
(LengthInSeconds() >= 0) ? LengthInSeconds() / 3600 : 0,
|
||||
(LengthInSeconds() >= 0) ? LengthInSeconds() / 60 % 60 : 0,
|
||||
*Length,
|
||||
New,
|
||||
Delimiter,
|
||||
s));
|
||||
@ -1103,25 +1110,21 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
|
||||
struct dirent *e;
|
||||
while ((Foreground || Running()) && (e = d.Next()) != NULL) {
|
||||
if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) {
|
||||
char *buffer = strdup(AddDirectory(DirName, e->d_name));
|
||||
cString buffer = AddDirectory(DirName, e->d_name);
|
||||
struct stat st;
|
||||
if (stat(buffer, &st) == 0) {
|
||||
if (lstat(buffer, &st) == 0) {
|
||||
int Link = 0;
|
||||
if (S_ISLNK(st.st_mode)) {
|
||||
if (LinkLevel > MAX_LINK_LEVEL) {
|
||||
isyslog("max link level exceeded - not scanning %s", buffer);
|
||||
isyslog("max link level exceeded - not scanning %s", *buffer);
|
||||
continue;
|
||||
}
|
||||
Link = 1;
|
||||
char *old = buffer;
|
||||
buffer = ReadLink(old);
|
||||
free(old);
|
||||
if (!buffer)
|
||||
buffer = ReadLink(buffer);
|
||||
if (!*buffer)
|
||||
continue;
|
||||
if (stat(buffer, &st) != 0) {
|
||||
free(buffer);
|
||||
if (stat(buffer, &st) != 0)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (S_ISDIR(st.st_mode)) {
|
||||
if (endswith(buffer, deleted ? DELEXT : RECEXT)) {
|
||||
@ -1144,7 +1147,6 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
|
||||
ScanVideoDir(buffer, Foreground, LinkLevel + Link);
|
||||
}
|
||||
}
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2040,15 +2042,18 @@ cUnbufferedFile *cFileName::NextFile(void)
|
||||
|
||||
cString IndexToHMSF(int Index, bool WithFrame, double FramesPerSecond)
|
||||
{
|
||||
char buffer[16];
|
||||
const char *Sign = "";
|
||||
if (Index < 0) {
|
||||
Index = -Index;
|
||||
Sign = "-";
|
||||
}
|
||||
double Seconds;
|
||||
int f = int(modf((Index + 0.5) / FramesPerSecond, &Seconds) * FramesPerSecond + 1);
|
||||
int s = int(Seconds);
|
||||
int m = s / 60 % 60;
|
||||
int h = s / 3600;
|
||||
s %= 60;
|
||||
snprintf(buffer, sizeof(buffer), WithFrame ? "%d:%02d:%02d.%02d" : "%d:%02d:%02d", h, m, s, f);
|
||||
return buffer;
|
||||
return cString::sprintf(WithFrame ? "%s%d:%02d:%02d.%02d" : "%s%d:%02d:%02d", Sign, h, m, s, f);
|
||||
}
|
||||
|
||||
int HMSFToIndex(const char *HMSF, double FramesPerSecond)
|
||||
|
6
remux.c
6
remux.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: remux.c 2.62 2011/09/04 13:09:06 kls Exp $
|
||||
* $Id: remux.c 2.63 2012/01/12 12:07:58 kls Exp $
|
||||
*/
|
||||
|
||||
#include "remux.h"
|
||||
@ -701,6 +701,10 @@ const uchar *cTsToPes::GetPes(int &Length)
|
||||
uchar *p = data + offset - 6;
|
||||
if (p != data) {
|
||||
p -= 3;
|
||||
if (p < data) {
|
||||
Reset();
|
||||
return NULL;
|
||||
}
|
||||
memmove(p, data, 4);
|
||||
}
|
||||
int l = min(length - offset, MAXPESLENGTH);
|
||||
|
6
svdrp.c
6
svdrp.c
@ -10,7 +10,7 @@
|
||||
* and interact with the Video Disk Recorder - or write a full featured
|
||||
* graphical interface that sits on top of an SVDRP connection.
|
||||
*
|
||||
* $Id: svdrp.c 2.12 2011/12/04 13:58:33 kls Exp $
|
||||
* $Id: svdrp.c 2.13 2012/01/12 15:02:46 kls Exp $
|
||||
*/
|
||||
|
||||
#include "svdrp.h"
|
||||
@ -583,6 +583,10 @@ void cSVDRP::CmdCLRE(const char *Option)
|
||||
}
|
||||
}
|
||||
if (Schedule) {
|
||||
for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) {
|
||||
if (ChannelID == Timer->Channel()->GetChannelID().ClrRid())
|
||||
Timer->SetEvent(NULL);
|
||||
}
|
||||
Schedule->Cleanup(INT_MAX);
|
||||
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME);
|
||||
Reply(250, "EPG data of channel \"%s\" cleared", Option);
|
||||
|
4
tools.c
4
tools.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: tools.c 2.19 2011/12/04 14:52:38 kls Exp $
|
||||
* $Id: tools.c 2.20 2012/01/11 11:21:43 kls Exp $
|
||||
*/
|
||||
|
||||
#include "tools.h"
|
||||
@ -1913,7 +1913,7 @@ void cListBase::Move(int From, int To)
|
||||
|
||||
void cListBase::Move(cListObject *From, cListObject *To)
|
||||
{
|
||||
if (From && To) {
|
||||
if (From && To && From != To) {
|
||||
if (From->Index() < To->Index())
|
||||
To = To->Next();
|
||||
if (From == objects)
|
||||
|
44
vdr.5
44
vdr.5
@ -8,7 +8,7 @@
|
||||
.\" License as specified in the file COPYING that comes with the
|
||||
.\" vdr distribution.
|
||||
.\"
|
||||
.\" $Id: vdr.5 2.26 2011/09/25 13:51:34 kls Exp $
|
||||
.\" $Id: vdr.5 2.27 2012/01/11 13:16:57 kls Exp $
|
||||
.\"
|
||||
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
|
||||
.SH NAME
|
||||
@ -87,32 +87,33 @@ meaning (and allowed values) are
|
||||
.TS
|
||||
tab (@);
|
||||
l l.
|
||||
\fBB\fR@Bandwidth (6, 7, 8)
|
||||
\fBB\fR@Bandwidth (1712, 5, 6, 7, 8, 10)
|
||||
\fBC\fR@Code rate high priority (0, 12, 23, 34, 35, 45, 56, 67, 78, 89, 910)
|
||||
\fBD\fR@coDe rate low priority (0, 12, 23, 34, 35, 45, 56, 67, 78, 89, 910)
|
||||
\fBG\fR@Guard interval (4, 8, 16, 32)
|
||||
\fBG\fR@Guard interval (4, 8, 16, 32, 128, 19128, 19256)
|
||||
\fBH\fR@Horizontal polarization
|
||||
\fBI\fR@Inversion (0, 1)
|
||||
\fBL\fR@Left circular polarization
|
||||
\fBM\fR@Modulation (2, 5, 6, 10, 11, 16, 32, 64, 128, 256, 998)
|
||||
\fBO\fR@rollOff (0, 20, 25, 35)
|
||||
\fBP\fR@Plp id (0-255)
|
||||
\fBR\fR@Right circular polarization
|
||||
\fBS\fR@delivery System (0, 1)
|
||||
\fBT\fR@Transmission mode (2, 8)
|
||||
\fBT\fR@Transmission mode (1, 2, 4, 8, 16, 32)
|
||||
\fBV\fR@Vertical polarization
|
||||
\fBY\fR@hierarchY (0, 1, 2, 4)
|
||||
.TE
|
||||
|
||||
\fBBandwidth:\fR The bandwidth of the channel in MHz (DVB-T only).
|
||||
\fBBandwidth:\fR The bandwidth of the channel in MHz (1712 in kHz): (DVB-T/DVB-T2 only).
|
||||
|
||||
\fBCode rate high priority:\fR Forward Error Correction (FEC) of the high priority stream (DVB-T).
|
||||
\fBCode rate high priority:\fR Forward Error Correction (FEC) of the high priority stream (DVB-T/DVB-T2).
|
||||
For DVB-S/DVB-S2 this parameter specifies the inner FEC scheme.
|
||||
12 = 1/2, 23 = 2/3, 34 = 3/4, ...
|
||||
|
||||
\fBCode rate low priority:\fR Forward Error Correction (FEC) of the low priority stream (DVB-T only).
|
||||
\fBCode rate low priority:\fR Forward Error Correction (FEC) of the low priority stream (DVB-T/DVB-T2 only).
|
||||
If no hierarchy is used, set to 0.
|
||||
|
||||
\fBGuard interval:\fR The guard interval value (DVB-T only): 4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32.
|
||||
\fBGuard interval:\fR The guard interval value (DVB-T only): 4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32, 128 = 1/128, 19128 = 19/128, 19256 = 19/256.
|
||||
|
||||
\fBInversion:\fR Specifies whether the DVB frontend needs spectral inversion (DVB-T and DVB-C only). This is frontend specific, if in doubt, omit.
|
||||
|
||||
@ -120,26 +121,30 @@ If no hierarchy is used, set to 0.
|
||||
.TS
|
||||
tab (@);
|
||||
l l.
|
||||
\fB2\fR@QPSK (DVB-S, DVB-S2, DVB-T)
|
||||
\fB2\fR@QPSK (DVB-S, DVB-S2, DVB-T, DVB-T2, ISDB-T)
|
||||
\fB5\fR@8PSK (DVB-S2)
|
||||
\fB6\fR@16APSK (DVB-S2)
|
||||
\fB7\fR@32APSK (DVB-S2)
|
||||
\fB10\fR@VSB8 (ATSC aerial)
|
||||
\fB11\fR@VSB16 (ATSC aerial)
|
||||
\fB16\fR@QAM16 (DVB-T)
|
||||
\fB64\fR@QAM64 (DVB-C, DVB-T)
|
||||
\fB12\fR@DQPSK (ISDB-T)
|
||||
\fB16\fR@QAM16 (DVB-T, DVB-T2, ISDB-T)
|
||||
\fB64\fR@QAM64 (DVB-C, DVB-T, DVB-T2, ISDB-T)
|
||||
\fB128\fR@QAM128 (DVB-C)
|
||||
\fB256\fR@QAM256 (DVB-C)
|
||||
\fB256\fR@QAM256 (DVB-C, DVB-T2)
|
||||
.TE
|
||||
|
||||
\fBRolloff:\fR The Nyquist filter rolloff factor for DVB-S (\fB35\fR) and DVB-S2 (\fB35\fR, 25, 20),
|
||||
35 = 0.35, 25 = 0.25, 20 = 0.20, DVB-S/DVB-S2 default value is 0.35
|
||||
|
||||
\fBTransmission mode:\fR Number of DVB-T OFDM carriers, 8 = 8k, 2 = 2k. If in doubt, try 8k.
|
||||
\fBPLP id:\fR Physical Layer Pipe (PLP) id (\fB0\fR-255) for DVB-T2 multiplex (DVB-T2 only).
|
||||
|
||||
\fBTransmission mode:\fR Number of DVB-T OFDM carriers, 32 = 32k, 16 = 16k, 8 = 8k, 4 = 4k, 2 = 2k, 1 = 1k. If in doubt, try 8k.
|
||||
|
||||
\fBHierarchy:\fR If set to 1, this transponder uses two streams, high priority and low priority.
|
||||
If in doubt, try 0 (off). (DVB-T only).
|
||||
If in doubt, try 0 (off). (DVB-T/DVB-T2 only).
|
||||
|
||||
\fBDelivery System:\fR The satellite delivery system (0 = DVB-S, 1 = DVB-S2).
|
||||
\fBDelivery System:\fR The delivery system (0 = "first generation" (DVB-S/DVB-T), 1 = "second generation" (DVB-S2/DVB-T2).
|
||||
|
||||
\fBPolarization:\fR Satellite antenna polarization.
|
||||
H = horizontal, V = vertical, R = circular right, L = circular left.
|
||||
@ -152,16 +157,19 @@ The special value \fB999\fR is used for "automatic", which means the driver
|
||||
will automatically determine the proper value (if possible).
|
||||
|
||||
An example of a parameter field for a DVB-T channel might look like this:
|
||||
\fBB8C23D12G8M16T8Y0\fR
|
||||
\fBB8C23D12G8M16T8Y0S0\fR
|
||||
|
||||
An example of a parameter field for a DVB-T2 channel might look like this:
|
||||
\fBB8C23D12G8M16T8Y0P0S1\fR
|
||||
|
||||
An example of a parameter field for a DVB-C channel might look like this:
|
||||
\fBC0M64\fR
|
||||
|
||||
An example of a parameter field for a DVB-S channel might look like this:
|
||||
\fBhC56M2O35S0\fR
|
||||
\fBHC56M2O35S0\fR
|
||||
|
||||
An example of a parameter field for a DVB-S2 channel might look like this:
|
||||
\fBhC910M2O35S1\fR
|
||||
\fBHC910M2O35S1\fR
|
||||
|
||||
Plugins that implement devices that need their own set of parameters may
|
||||
store those in the parameters string in arbitrary format (not necessarily
|
||||
|
Loading…
x
Reference in New Issue
Block a user