summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <Klaus (dot) Schmidinger (at) tvdr (dot) de>2012-03-03 13:16:00 +0100
committerDieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>2012-03-10 23:52:09 +0100
commit3df1b6d1397379a7ccdde4b559d46baf3f515837 (patch)
tree687ffe934420abacb19693a1809e1336c923f61d
parentc2d9577b3dd7557b7a9c702d5c1fd3b1bbe0e5e7 (diff)
downloadvdr-patches-3df1b6d1397379a7ccdde4b559d46baf3f515837.tar.gz
vdr-patches-3df1b6d1397379a7ccdde4b559d46baf3f515837.tar.bz2
Version 1.7.25
Original announce message: VDR developer version 1.7.25 is now available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.25.tar.bz2 A 'diff' against the previous version is available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.24-1.7.25.diff MD5 checksums: a3fd482a3dd8027706d4f32a88c6bd13 vdr-1.7.25.tar.bz2 f34adcdc0cdab378431d8946872d6b59 vdr-1.7.24-1.7.25.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: - The fps value for channels where it differs from the default is now set correctly when pausing live video. - Increased the average character estimate for calculating tab positions in skins, to better suit wide fonts (reported by Rudi Hofer). - Fixed getting the subsystem ids of DVB devices in case they have been rearranged via udev rules. - Added several cTimer::Set...() functions (suggested by Alexander Rieger). - Changed the return value of cTimer::SetFile() to 'void'. - Revoked "Fixed a possible deadlock in time shift mode" because it caused trouble with output on vdr-xine and dxr3, and also short glitches when replaying on any output device. - Updated the Estonian OSD texts (thanks to Arthur Konovalov). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Fixed handling subtitle color palettes on channels where subtitles appear "word by word" (thanks to Rolf Ahrenberg). - Fixed upscaling cBitmaps with anti-aliasing (thanks to Rolf Ahrenberg for reporting a problem with color palettes in subtitles). - Fixed getting the video aspect ratio for scaling subtitles. - Removed the "PrimaryLimit". Old "full featured" DVB cards can be run with the --outputonly option to avoid problems with recording high bandwidth channels. Besides, with HDTV becoming ever more popular those cards are pretty much obsolete by now (the TT S2-6400 has no problems recording and replaying high bandwidth channels simultaneously). And, last but not least, people using software players won't notice this change, anyway. - Since cReceivers can have priorities between -99 and 99, the priority for an unused device has been changed from -1 to -100. - If the first event in a schedule has a table id of 0x00, any incoming EIT data for that schedule from the DVB stream will be completely ignored. This way an external EPG source can fill the schedules with EPG data that will not be messed up with that from the DVB data stream. Note, though, that this means VDR can not do VPS controlled recordings with such events! - Added some typecasts to silence gcc compiler warnings (thanks to Rolf Ahrenberg). - Fixed handling overlapping timers in case a VPS timer with higher priority needs to interrupt a timer with lower priority. - The code for the RCU remote control unit has been moved into a separate plugin named "rcu". The REMOTE=RCU option in the 'make' call for VDR is now obsolete. The command line option --rcu is now obsolete. Use -Prcu instead. If you have used --rcu with a device path, use -P"rcu -d<device>". - Added support for automatically selecting subtitles when playing old PES recordings made with the subtitles plugin (thanks to Anssi Hannula). - Revised priority handling to allow receivers with a priority that is lower than that of live viewing (with suggestions from Frank Schmirler): + An idle device (one that is not used for live viewing and has no receiver attached to it) now has priority IDLEPRIORITY (-100). + An unused CAM slot now has priority IDLEPRIORITY. + The default priority of a cReceiver is now MINPRIORITY (-99). + A device that is used only for live viewing (no matter whether it's in Transfer Mode or real live mode) now has priority TRANSFERPRIORITY (-1). + The function cDevice::Receiving() now returns true if there is any receiver attached to the device. Its boolean parameter has no meaning any more. + The default value for the Priority parameter of the function cDevice::ProvidesChannel() has been changed to IDLEPRIORITY. - Added a Query parameter to cDevice::GetDevice(), so that devices can be queried without side effects when zapping. - Replaced min(max()) calls with the new function constrain(). - Fixed handling OSD color button texts in case a menu item has texts of its own (reported by Rolf Ahrenberg). If a plugin creates derived cMenuEditItems that set color button texts, these should not set the texts directly by calling cSkinDisplay::Current()->SetButtons(), but rather call the new member function cMenuEditItem::SetHelp(). - Moved the call to cStatus::MsgChannelSwitch(this, 0) to the beginning of cDevice::SetChannel(), so that any receivers that have been attached to the device by plugins may be detached before the final call to GetDevice(). This actually reverts "Only calling cStatus::MsgChannelSwitch() if a channel is actually going to be switched or has actually been switched successfully" which was made in version 1.1.10, so please report if this has any unwanted side effects.
-rw-r--r--CONTRIBUTORS12
-rw-r--r--HISTORY71
-rw-r--r--INSTALL9
-rw-r--r--MANUAL9
-rw-r--r--Make.config.template3
-rw-r--r--Makefile7
-rw-r--r--PLUGINS.html7
-rw-r--r--PLUGINS/src/dvbhddevice/dvbhdffdevice.c21
-rw-r--r--PLUGINS/src/dvbhddevice/hdffcmd.c10
-rw-r--r--PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c52
-rw-r--r--PLUGINS/src/pictures/HISTORY4
-rw-r--r--PLUGINS/src/pictures/pictures.c6
-rw-r--r--PLUGINS/src/rcu/COPYING340
-rw-r--r--PLUGINS/src/rcu/HISTORY6
-rw-r--r--PLUGINS/src/rcu/Makefile114
-rw-r--r--PLUGINS/src/rcu/README19
-rw-r--r--PLUGINS/src/rcu/rcu.c420
-rw-r--r--ci.c4
-rw-r--r--ci.h4
-rw-r--r--config.c7
-rw-r--r--config.h19
-rw-r--r--device.c38
-rw-r--r--device.h26
-rw-r--r--dvbdevice.c68
-rw-r--r--dvbdevice.h4
-rw-r--r--dvbplayer.c41
-rw-r--r--dvbsubtitle.c38
-rw-r--r--eit.c10
-rw-r--r--epg.h4
-rw-r--r--font.c4
-rw-r--r--libsi/section.h16
-rw-r--r--libsi/util.h14
-rw-r--r--menu.c7
-rw-r--r--menuitems.c28
-rw-r--r--menuitems.h7
-rw-r--r--osd.c11
-rw-r--r--osdbase.c25
-rw-r--r--osdbase.h4
-rw-r--r--pat.c4
-rw-r--r--po/ar.po62
-rw-r--r--po/ca_ES.po5
-rw-r--r--po/cs_CZ.po5
-rw-r--r--po/da_DK.po5
-rw-r--r--po/de_DE.po5
-rw-r--r--po/el_GR.po5
-rw-r--r--po/es_ES.po5
-rw-r--r--po/et_EE.po277
-rw-r--r--po/fi_FI.po9
-rw-r--r--po/fr_FR.po5
-rw-r--r--po/hr_HR.po5
-rw-r--r--po/hu_HU.po5
-rw-r--r--po/it_IT.po5
-rw-r--r--po/lt_LT.po5
-rw-r--r--po/mk_MK.po5
-rw-r--r--po/nl_NL.po5
-rw-r--r--po/nn_NO.po5
-rw-r--r--po/pl_PL.po5
-rw-r--r--po/pt_PT.po5
-rw-r--r--po/ro_RO.po5
-rw-r--r--po/ru_RU.po5
-rw-r--r--po/sk_SK.po5
-rw-r--r--po/sl_SI.po5
-rw-r--r--po/sr_SR.po5
-rw-r--r--po/sv_SE.po5
-rw-r--r--po/tr_TR.po5
-rw-r--r--po/uk_UA.po5
-rw-r--r--po/zh_CN.po5
-rw-r--r--receiver.c6
-rw-r--r--receiver.h12
-rw-r--r--recording.c4
-rw-r--r--remux.c4
-rw-r--r--skins.c4
-rw-r--r--timers.c46
-rw-r--r--timers.h10
-rw-r--r--tools.h4
-rw-r--r--transfer.c4
-rw-r--r--vdr.19
-rw-r--r--vdr.54
-rw-r--r--vdr.c15
79 files changed, 1525 insertions, 563 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 72f4a44..d2ef1f3 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -531,6 +531,7 @@ Onno Kreuzinger <ok@solutas.net>
Rudi Hofer (Rudi.Hofer@gmx.de)
for his help in keeping 'channels.conf' up to date
+ for reporting a problem with overlapping tab positions in skins when using wide fonts
Gregoire Favre <greg@ulima.unil.ch>
for fixing some function headers to make them compile with gcc 3.x
@@ -1130,6 +1131,12 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for adding support for handling DVB-T2 transponders
for suggesting to add member functions Adapter() and Frontend() to cDvbDevice
for improving handling subtitles of BBC channels
+ for fixing handling subtitle color palettes on channels where subtitles appear
+ "word by word"
+ for reporting a problem with color palettes in subtitles
+ for adding some typecasts to silence gcc compiler warnings
+ for reporting a bug in handling OSD color button texts in case a menu item has
+ texts of its own
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark
@@ -2077,6 +2084,7 @@ Alexander Rieger <Alexander.Rieger@inka.de>
for making the list of tracks given in cStatus::SetAudioTrack() NULL terminated
for fixing handling kLeft in the calls to cStatus::MsgOsdTextItem()
for fixing a possible integer overflow in GetAbsTime()
+ for suggesting to add several cTimer::Set...() functions
Philip Prindeville <philipp_subx@redfish-solutions.com>
for updates to 'sources.conf'
@@ -2372,6 +2380,8 @@ Anssi Hannula <anssi.hannula@gmail.com>
for fixing stopping subtitle display when switching the primary device
for fixing plugin arguments corruption with glibc 2.11 on x86_64
for setting the audio type of language descriptors to 0x00 in the PAT/PMT generator
+ for adding support for automatically selecting subtitles when playing old PES
+ recordings made with the subtitles plugin
Antti Hartikainen <ami+vdr@ah.fi>
for updating 'S13E' in 'sources.conf'
@@ -2397,6 +2407,8 @@ Frank Schmirler <vdr@schmirler.de>
recordings of the same broadcast made by different instances of VDR
for fixing EntriesOnSameFileSystem() to avoid using f_fsid, which may be 0
for fixing the German translation of "Folder name must not contain '%c'!"
+ for suggestions used in revising priority handling to allow receivers with a priority
+ that is lower than that of live viewing
Jrn Reder <joern@zyn.de>
for reporting that a recording may unnecessarily block a device with a CAM, while
diff --git a/HISTORY b/HISTORY
index 3ecb8c6..9c4e7e3 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6888,3 +6888,74 @@ Video Disk Recorder Revision History
- Fixed a possible deadlock in time shift mode.
- Fixed switching into time shift mode when pausing live video (thanks to Reinhard
Nissl for helping to debug this one).
+
+2012-03-03: Version 1.7.25
+
+- The fps value for channels where it differs from the default is now set correctly
+ when pausing live video.
+- Increased the average character estimate for calculating tab positions in skins,
+ to better suit wide fonts (reported by Rudi Hofer).
+- Fixed getting the subsystem ids of DVB devices in case they have been rearranged
+ via udev rules.
+- Added several cTimer::Set...() functions (suggested by Alexander Rieger).
+- Changed the return value of cTimer::SetFile() to 'void'.
+- Revoked "Fixed a possible deadlock in time shift mode" because it caused trouble with
+ output on vdr-xine and dxr3, and also short glitches when replaying on any output
+ device.
+- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
+- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
+- Fixed handling subtitle color palettes on channels where subtitles appear
+ "word by word" (thanks to Rolf Ahrenberg).
+- Fixed upscaling cBitmaps with anti-aliasing (thanks to Rolf Ahrenberg for reporting
+ a problem with color palettes in subtitles).
+- Fixed getting the video aspect ratio for scaling subtitles.
+- Removed the "PrimaryLimit". Old "full featured" DVB cards can be run with the
+ --outputonly option to avoid problems with recording high bandwidth channels.
+ Besides, with HDTV becoming ever more popular those cards are pretty much obsolete
+ by now (the TT S2-6400 has no problems recording and replaying high bandwidth
+ channels simultaneously). And, last but not least, people using software players
+ won't notice this change, anyway.
+- Since cReceivers can have priorities between -99 and 99, the priority
+ for an unused device has been changed from -1 to -100.
+- If the first event in a schedule has a table id of 0x00, any incoming EIT data for
+ that schedule from the DVB stream will be completely ignored. This way an external
+ EPG source can fill the schedules with EPG data that will not be messed up with
+ that from the DVB data stream. Note, though, that this means VDR can not do VPS
+ controlled recordings with such events!
+- Added some typecasts to silence gcc compiler warnings (thanks to Rolf Ahrenberg).
+- Fixed handling overlapping timers in case a VPS timer with higher priority needs
+ to interrupt a timer with lower priority.
+- The code for the RCU remote control unit has been moved into a separate plugin
+ named "rcu".
+ The REMOTE=RCU option in the 'make' call for VDR is now obsolete.
+ The command line option --rcu is now obsolete. Use -Prcu instead. If you have
+ used --rcu with a device path, use -P"rcu -d<device>".
+- Added support for automatically selecting subtitles when playing old PES
+ recordings made with the subtitles plugin (thanks to Anssi Hannula).
+- Revised priority handling to allow receivers with a priority that is lower than
+ that of live viewing (with suggestions from Frank Schmirler):
+ + An idle device (one that is not used for live viewing and has no receiver
+ attached to it) now has priority IDLEPRIORITY (-100).
+ + An unused CAM slot now has priority IDLEPRIORITY.
+ + The default priority of a cReceiver is now MINPRIORITY (-99).
+ + A device that is used only for live viewing (no matter whether it's in Transfer
+ Mode or real live mode) now has priority TRANSFERPRIORITY (-1).
+ + The function cDevice::Receiving() now returns true if there is any receiver
+ attached to the device. Its boolean parameter has no meaning any more.
+ + The default value for the Priority parameter of the function cDevice::ProvidesChannel()
+ has been changed to IDLEPRIORITY.
+- Added a Query parameter to cDevice::GetDevice(), so that devices can be queried
+ without side effects when zapping.
+- Replaced min(max()) calls with the new function constrain().
+- Fixed handling OSD color button texts in case a menu item has texts of its own
+ (reported by Rolf Ahrenberg). If a plugin creates derived cMenuEditItems that set
+ color button texts, these should not set the texts directly by calling
+ cSkinDisplay::Current()->SetButtons(), but rather call the new member function
+ cMenuEditItem::SetHelp().
+- Moved the call to cStatus::MsgChannelSwitch(this, 0) to the beginning of
+ cDevice::SetChannel(), so that any receivers that have been attached to the
+ device by plugins may be detached before the final call to GetDevice().
+ This actually reverts "Only calling cStatus::MsgChannelSwitch() if a channel
+ is actually going to be switched or has actually been switched successfully"
+ which was made in version 1.1.10, so please report if this has any unwanted
+ side effects.
diff --git a/INSTALL b/INSTALL
index 3e7bde8..1096a31 100644
--- a/INSTALL
+++ b/INSTALL
@@ -47,15 +47,12 @@ If you have an infrared remote control unit you can define the REMOTE macro
to one of the following values in the 'make' call to make the respective control
the default:
- REMOTE=RCU control via the "Remote Control Unit" receiver
- (see http://www.tvdr.de/remote.htm)
REMOTE=LIRC control via the "Linux Infrared Remote Control"
(see http://www.lirc.org)
-Alternatively you can use the '--rcu' or '--lirc' options at runtime.
-These options accept an optional path to the remote control device,
-the defaults of which can be set via the RCU_DEVICE and LIRC_DEVICE macros,
-respectively.
+Alternatively you can use the '--lirc' option at runtime.
+This option accepts an optional path to the remote control device,
+the default of which can be set via the LIRC_DEVICE macro.
If your video directory will be on a VFAT partition, you can call VDR with
the command line option '--vfat'.
diff --git a/MANUAL b/MANUAL
index e743149..5240628 100644
--- a/MANUAL
+++ b/MANUAL
@@ -763,15 +763,6 @@ Version 1.6
These margins are added automatically to timers that
are created from the EPG data.
- Primary limit = 0 The minimum priority a timer must have to be allowed to
- use the primary DVB interface, or to force another timer
- with higher priority to use the primary DVB interface.
- This is mainly useful for recordings that should take
- place only when there is nothing else to do, but should
- never keep the user from viewing stuff on the primary
- interface. On systems with only one DVB card, timers
- with a priority below PrimaryLimit will never execute.
-
Default priority = 50 The default Priority and Lifetime values used when
Default lifetime = 99 creating a new timer event. A Lifetime value of 99
means that this recording will never be deleted
diff --git a/Make.config.template b/Make.config.template
index f128c5b..9b92621 100644
--- a/Make.config.template
+++ b/Make.config.template
@@ -6,7 +6,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
-# $Id: Make.config.template 2.5 2012/01/18 12:20:51 kls Exp $
+# $Id: Make.config.template 2.6 2012/02/27 10:56:28 kls Exp $
### The C compiler and options:
@@ -37,7 +37,6 @@ CONFDIR ?= $(VIDEODIR)
### The remote control:
LIRC_DEVICE ?= /var/run/lirc/lircd
-RCU_DEVICE ?= /dev/ttyS1
## Define if you want vdr to not run as root
#VDR_USER ?= vdr
diff --git a/Makefile b/Makefile
index 93a5112..a5ff9c5 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
-# $Id: Makefile 2.24 2012/01/18 12:19:37 kls Exp $
+# $Id: Makefile 2.25 2012/02/27 10:54:38 kls Exp $
.DELETE_ON_ERROR:
@@ -42,7 +42,7 @@ SILIB = $(LSIDIR)/libsi.a
OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o\
dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o\
- lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\
+ lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o\
receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o\
skinclassic.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
timers.o tools.o transfer.o vdr.o videodir.o
@@ -63,9 +63,8 @@ LIBS += $(shell pkg-config --libs fribidi)
endif
LIRC_DEVICE ?= /var/run/lirc/lircd
-RCU_DEVICE ?= /dev/ttyS1
-DEFINES += -DLIRC_DEVICE=\"$(LIRC_DEVICE)\" -DRCU_DEVICE=\"$(RCU_DEVICE)\"
+DEFINES += -DLIRC_DEVICE=\"$(LIRC_DEVICE)\"
DEFINES += -D_GNU_SOURCE
diff --git a/PLUGINS.html b/PLUGINS.html
index 5ab0fd0..804d055 100644
--- a/PLUGINS.html
+++ b/PLUGINS.html
@@ -555,6 +555,8 @@ as the <a href="#Getting started"><tt>Start()</tt></a> functions were called.
<hr><h2><a name="Logging">Logging</a></h2>
+<div class="blurb">Traces in the sand...</div><p>
+
<p>
If the plugin should print log messages, you can use <tt>dsyslog()</tt>, <tt>isyslog()</tt> or <tt>esyslog()</tt>.<br>
<ul>
@@ -1507,7 +1509,10 @@ member functions of <tt>cReceiver</tt>.
The above example sets up a receiver that wants to receive data from only one
PID (for example the Teletext PID). In order to not interfere with other recording
operations, it sets its priority to <tt>-1</tt> (any negative value will allow
-a <tt>cReceiver</tt> to be detached from its <tt>cDevice</tt> at any time.
+a <tt>cReceiver</tt> to be detached from its <tt>cDevice</tt> at any time
+<div class="modified">
+in favor of a timer recording or live viewing).
+</div modified>
<p>
Once a <tt>cReceiver</tt> has been created, it needs to be <i>attached</i> to
a <tt>cDevice</tt>:
diff --git a/PLUGINS/src/dvbhddevice/dvbhdffdevice.c b/PLUGINS/src/dvbhddevice/dvbhdffdevice.c
index 160d9c3..6fd09c3 100644
--- a/PLUGINS/src/dvbhddevice/dvbhdffdevice.c
+++ b/PLUGINS/src/dvbhddevice/dvbhdffdevice.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbhdffdevice.c 1.39 2012/02/15 13:14:49 kls Exp $
+ * $Id: dvbhdffdevice.c 1.40 2012/02/28 09:18:56 kls Exp $
*/
#include <stdint.h>
@@ -48,6 +48,25 @@ cDvbHdFfDevice::cDvbHdFfDevice(int Adapter, int Frontend)
devHdffOffset = adapter;
isHdffPrimary = true;
mHdffCmdIf = new HDFF::cHdffCmdIf(fd_osd);
+
+ /* reset some stuff in case the VDR was killed before and had no chance
+ to clean up. */
+ mHdffCmdIf->CmdOsdReset();
+
+ mHdffCmdIf->CmdAvSetVideoSpeed(0, 100);
+ mHdffCmdIf->CmdAvSetAudioSpeed(0, 100);
+
+ mHdffCmdIf->CmdAvEnableVideoAfterStop(0, false);
+ mHdffCmdIf->CmdAvSetPcrPid(0, 0);
+ mHdffCmdIf->CmdAvSetVideoPid(0, 0, HDFF_VIDEO_STREAM_MPEG1);
+ mHdffCmdIf->CmdAvSetAudioPid(0, 0, HDFF_AUDIO_STREAM_MPEG1);
+
+ ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_DEMUX);
+ mHdffCmdIf->CmdAvSetDecoderInput(0, 0);
+ mHdffCmdIf->CmdAvEnableSync(0, true);
+ mHdffCmdIf->CmdAvSetPlayMode(0, true);
+ /* reset done */
+
mHdffCmdIf->CmdAvSetAudioDelay(gHdffSetup.AudioDelay);
mHdffCmdIf->CmdAvSetAudioDownmix((HdffAudioDownmixMode_t) gHdffSetup.AudioDownmix);
mHdffCmdIf->CmdMuxSetVideoOut((HdffVideoOut_t) gHdffSetup.AnalogueVideo);
diff --git a/PLUGINS/src/dvbhddevice/hdffcmd.c b/PLUGINS/src/dvbhddevice/hdffcmd.c
index cb06b8c..78e8a89 100644
--- a/PLUGINS/src/dvbhddevice/hdffcmd.c
+++ b/PLUGINS/src/dvbhddevice/hdffcmd.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: hdffcmd.c 1.23 2012/02/06 11:08:48 kls Exp $
+ * $Id: hdffcmd.c 1.24 2012/02/28 09:19:09 kls Exp $
*/
#include <stdint.h>
@@ -188,6 +188,7 @@ uint32_t cHdffCmdIf::CmdOsdCreateDisplay(uint32_t Width, uint32_t Height, HdffCo
if (HdffCmdOsdCreateDisplay(mOsdDev, Width, Height, ColorType, &newDisplay) == 0)
return newDisplay;
+ LOG_ERROR_STR("Error creating display");
return HDFF_INVALID_HANDLE;
}
@@ -217,7 +218,7 @@ void cHdffCmdIf::CmdOsdSetDisplayClippingArea(uint32_t hDisplay, bool Enable, ui
void cHdffCmdIf::CmdOsdRenderDisplay(uint32_t hDisplay)
{
- //printf("Render\n");
+ //printf("Render %08X\n", hDisplay);
HdffCmdOsdRenderDisplay(mOsdDev, hDisplay);
}
@@ -231,6 +232,7 @@ uint32_t cHdffCmdIf::CmdOsdCreatePalette(HdffColorType_t ColorType, HdffColorFor
pColors, &newPalette);
if (err == 0)
return newPalette;
+ LOG_ERROR_STR("Error creating palette");
return HDFF_INVALID_HANDLE;
}
@@ -260,6 +262,7 @@ uint32_t cHdffCmdIf::CmdOsdCreateFontFace(const uint8_t * pFontData, uint32_t Da
err = HdffCmdOsdCreateFontFace(mOsdDev, pFontData, DataSize, &newFontFace);
if (err == 0)
return newFontFace;
+ LOG_ERROR_STR("Error creating font face");
return HDFF_INVALID_HANDLE;
}
@@ -278,6 +281,7 @@ uint32_t cHdffCmdIf::CmdOsdCreateFont(uint32_t hFontFace, uint32_t Size)
err = HdffCmdOsdCreateFont(mOsdDev, hFontFace, Size, &newFont);
if (err == 0)
return newFont;
+ LOG_ERROR_STR("Error creating font");
return HDFF_INVALID_HANDLE;
}
@@ -316,7 +320,7 @@ void cHdffCmdIf::CmdOsdDrawBitmap(uint32_t hDisplay, int X, int Y, const uint8_t
int BmpWidth, int BmpHeight, int BmpSize,
HdffColorType_t ColorType, uint32_t hPalette)
{
- //printf("Bitmap (%d,%d) %d x %d\n", X, Y, BmpWidth, BmpHeight);
+ //printf("Bitmap %08X (%d,%d) %d x %d, %08X\n", hDisplay, X, Y, BmpWidth, BmpHeight, hPalette);
HdffCmdOsdDrawBitmap(mOsdDev, hDisplay, X, Y, pBitmap, BmpWidth, BmpHeight,
BmpSize, ColorType, hPalette);
}
diff --git a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c
index a80051f..dfe2759 100644
--- a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c
+++ b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c
@@ -103,10 +103,15 @@ int HdffCmdOsdCreateDisplay(int OsdDevice, uint16_t Width, uint16_t Height,
{
if (osd_cmd.result_len > 0)
{
- *NewDisplay = (resultData[6] << 24)
- | (resultData[7] << 16)
- | (resultData[8] << 8)
- | resultData[9];
+ if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
+ {
+ *NewDisplay = (resultData[6] << 24)
+ | (resultData[7] << 16)
+ | (resultData[8] << 8)
+ | resultData[9];
+ }
+ else
+ err = -1;
}
}
return err;
@@ -295,10 +300,15 @@ int HdffCmdOsdCreatePalette(int OsdDevice, HdffColorType_t ColorType,
{
if (osd_cmd.result_len > 0)
{
- *NewPalette = (resultData[6] << 24)
- | (resultData[7] << 16)
- | (resultData[8] << 8)
- | resultData[9];
+ if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
+ {
+ *NewPalette = (resultData[6] << 24)
+ | (resultData[7] << 16)
+ | (resultData[8] << 8)
+ | resultData[9];
+ }
+ else
+ err = -1;
}
}
return err;
@@ -400,10 +410,15 @@ int HdffCmdOsdCreateFontFace(int OsdDevice, const uint8_t * FontData,
{
if (osd_cmd.result_len > 0)
{
- *NewFontFace = (resultData[6] << 24)
- | (resultData[7] << 16)
- | (resultData[8] << 8)
- | resultData[9];
+ if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
+ {
+ *NewFontFace = (resultData[6] << 24)
+ | (resultData[7] << 16)
+ | (resultData[8] << 8)
+ | resultData[9];
+ }
+ else
+ err = -1;
}
}
return err;
@@ -451,10 +466,15 @@ int HdffCmdOsdCreateFont(int OsdDevice, uint32_t FontFace, uint32_t Size,
{
if (osd_cmd.result_len > 0)
{
- *NewFont = (resultData[6] << 24)
- | (resultData[7] << 16)
- | (resultData[8] << 8)
- | resultData[9];
+ if (resultData[2] == HDFF_MSG_TYPE_ANSWER)
+ {
+ *NewFont = (resultData[6] << 24)
+ | (resultData[7] << 16)
+ | (resultData[8] << 8)
+ | resultData[9];
+ }
+ else
+ err = -1;
}
}
return err;
diff --git a/PLUGINS/src/pictures/HISTORY b/PLUGINS/src/pictures/HISTORY
index c85c1a2..e0826ee 100644
--- a/PLUGINS/src/pictures/HISTORY
+++ b/PLUGINS/src/pictures/HISTORY
@@ -67,3 +67,7 @@ VDR Plugin 'pictures' Revision History
2012-02-17:
- cReadDir::Next() now skips directory entries "." and "..".
+
+2012-02-27: Version 0.1.2
+
+- Removed an obsolete command line option.
diff --git a/PLUGINS/src/pictures/pictures.c b/PLUGINS/src/pictures/pictures.c
index 77fb421..27febdf 100644
--- a/PLUGINS/src/pictures/pictures.c
+++ b/PLUGINS/src/pictures/pictures.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: pictures.c 2.4 2012/02/17 14:00:48 kls Exp $
+ * $Id: pictures.c 2.5 2012/02/27 11:40:15 kls Exp $
*/
#include <getopt.h>
@@ -11,7 +11,7 @@
#include "menu.h"
#include "player.h"
-static const char *VERSION = "0.1.1";
+static const char *VERSION = "0.1.2";
static const char *DESCRIPTION = trNOOP("A simple picture viewer");
static const char *MAINMENUENTRY = trNOOP("Pictures");
@@ -86,7 +86,7 @@ bool cPluginPictures::ProcessArgs(int argc, char *argv[])
};
int c;
- while ((c = getopt_long(argc, argv, "d:s:", long_options, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "d:", long_options, NULL)) != -1) {
switch (c) {
case 'd': strn0cpy(PictureDirectory, optarg, sizeof(PictureDirectory));
break;
diff --git a/PLUGINS/src/rcu/COPYING b/PLUGINS/src/rcu/COPYING
new file mode 100644
index 0000000..f90922e
--- /dev/null
+++ b/PLUGINS/src/rcu/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/PLUGINS/src/rcu/HISTORY b/PLUGINS/src/rcu/HISTORY
new file mode 100644
index 0000000..692f620
--- /dev/null
+++ b/PLUGINS/src/rcu/HISTORY
@@ -0,0 +1,6 @@
+VDR Plugin 'rcu' Revision History
+---------------------------------
+
+2012-02-27: Version 0.0.1
+
+- Initial revision.
diff --git a/PLUGINS/src/rcu/Makefile b/PLUGINS/src/rcu/Makefile
new file mode 100644
index 0000000..60bcf90
--- /dev/null
+++ b/PLUGINS/src/rcu/Makefile
@@ -0,0 +1,114 @@
+#
+# Makefile for a Video Disk Recorder plugin
+#
+# $Id: Makefile 1.1 2012/02/27 10:46:08 kls Exp $
+
+# The official name of this plugin.
+# This name will be used in the '-P...' option of VDR to load the plugin.
+# By default the main source file also carries this name.
+# IMPORTANT: the presence of this macro is important for the Make.config
+# file. So it must be defined, even if it is not used here!
+#
+PLUGIN = rcu
+
+### The version number of this plugin (taken from the main source file):
+
+VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
+
+### The C++ compiler and options:
+
+CXX ?= g++
+CXXFLAGS ?= -g -O3 -Wall -Woverloaded-virtual -Wno-parentheses
+
+### The directory environment:
+
+VDRDIR ?= ../../..
+LIBDIR ?= ../../lib
+TMPDIR ?= /tmp
+
+### Make sure that necessary options are included:
+
+include $(VDRDIR)/Make.global
+
+### Allow user defined options to overwrite defaults:
+
+-include $(VDRDIR)/Make.config
+
+### The version number of VDR's plugin API (taken from VDR's "config.h"):
+
+APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
+
+### The name of the distribution archive:
+
+ARCHIVE = $(PLUGIN)-$(VERSION)
+PACKAGE = vdr-$(ARCHIVE)
+
+### Includes and Defines (add further entries here):
+
+INCLUDES += -I$(VDRDIR)/include
+
+DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
+
+### The object files (add further files here):
+
+OBJS = $(PLUGIN).o
+
+### The main target:
+
+all: libvdr-$(PLUGIN).so i18n
+
+### Implicit rules:
+
+%.o: %.c
+ $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
+
+### Dependencies:
+
+MAKEDEP = $(CXX) -MM -MG
+DEPFILE = .dependencies
+$(DEPFILE): Makefile
+ @$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
+
+-include $(DEPFILE)
+
+### Internationalization (I18N):
+
+PODIR = po
+LOCALEDIR = $(VDRDIR)/locale
+I18Npo = $(wildcard $(PODIR)/*.po)
+I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
+I18Npot = $(PODIR)/$(PLUGIN).pot
+
+%.mo: %.po
+ msgfmt -c -o $@ $<
+
+$(I18Npot): $(wildcard *.c)
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ $^
+
+%.po: $(I18Npot)
+ msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
+ @touch $@
+
+$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
+ @mkdir -p $(dir $@)
+ cp $< $@
+
+.PHONY: i18n
+i18n: $(I18Nmsgs) $(I18Npot)
+
+### Targets:
+
+libvdr-$(PLUGIN).so: $(OBJS)
+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
+ @cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
+
+dist: $(I18Npo) clean
+ @-rm -rf $(TMPDIR)/$(ARCHIVE)
+ @mkdir $(TMPDIR)/$(ARCHIVE)
+ @cp -a * $(TMPDIR)/$(ARCHIVE)
+ @tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE)
+ @-rm -rf $(TMPDIR)/$(ARCHIVE)
+ @echo Distribution package created as $(PACKAGE).tgz
+
+clean:
+ @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot
diff --git a/PLUGINS/src/rcu/README b/PLUGINS/src/rcu/README
new file mode 100644
index 0000000..d66729e
--- /dev/null
+++ b/PLUGINS/src/rcu/README
@@ -0,0 +1,19 @@
+This is a "plugin" for the Video Disk Recorder (VDR).
+
+Written by: Klaus Schmidinger <Klaus.Schmidinger@tvdr.de>
+
+Project's homepage: http://www.tvdr.de/remote.htm
+
+Latest version available at: http://www.tvdr.de
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+See the file COPYING for more information.
+
+Description:
+============
+
+The "Remote Control Unit" used to be part of the core VDR source
+code, and has been moved into a separate plugin in version 1.7.25.
diff --git a/PLUGINS/src/rcu/rcu.c b/PLUGINS/src/rcu/rcu.c
new file mode 100644
index 0000000..f0abedd
--- /dev/null
+++ b/PLUGINS/src/rcu/rcu.c
@@ -0,0 +1,420 @@
+/*
+ * rcu.c: A plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id: rcu.c 1.1 2012/02/27 11:49:51 kls Exp $
+ */
+
+#include <getopt.h>
+#include <netinet/in.h>
+#include <termios.h>
+#include <unistd.h>
+#include <vdr/plugin.h>
+#include <vdr/remote.h>
+#include <vdr/status.h>
+#include <vdr/thread.h>
+#include <vdr/tools.h>
+
+static const char *VERSION = "0.0.1";
+static const char *DESCRIPTION = "Remote Control Unit";
+
+#define REPEATLIMIT 150 // ms
+#define REPEATDELAY 350 // ms
+#define HANDSHAKETIMEOUT 20 // ms
+#define DEFAULTDEVICE "/dev/ttyS1"
+
+class cRcuRemote : public cRemote, private cThread, private cStatus {
+private:
+ enum { modeH = 'h', modeB = 'b', modeS = 's' };
+ int f;
+ unsigned char dp, code, mode;
+ int number;
+ unsigned int data;
+ bool receivedCommand;
+ bool SendCommand(unsigned char Cmd);
+ int ReceiveByte(int TimeoutMs = 0);
+ bool SendByteHandshake(unsigned char c);
+ bool SendByte(unsigned char c);
+ bool SendData(unsigned int n);
+ void SetCode(unsigned char Code);
+ void SetMode(unsigned char Mode);
+ void SetNumber(int n, bool Hex = false);
+ void SetPoints(unsigned char Dp, bool On);
+ void SetString(const char *s);
+ bool DetectCode(unsigned char *Code);
+ virtual void Action(void);
+ virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber);
+ virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On);
+public:
+ cRcuRemote(const char *DeviceName);
+ virtual ~cRcuRemote();
+ virtual bool Ready(void);
+ virtual bool Initialize(void);
+ };
+
+cRcuRemote::cRcuRemote(const char *DeviceName)
+:cRemote("RCU")
+,cThread("RCU remote control")
+{
+ dp = 0;
+ mode = modeB;
+ code = 0;
+ number = 0;
+ data = 0;
+ receivedCommand = false;
+ if ((f = open(DeviceName, O_RDWR | O_NONBLOCK)) >= 0) {
+ struct termios t;
+ if (tcgetattr(f, &t) == 0) {
+ cfsetspeed(&t, B9600);
+ cfmakeraw(&t);
+ if (tcsetattr(f, TCSAFLUSH, &t) == 0) {
+ SetNumber(8888);
+ const char *Setup = GetSetup();
+ if (Setup) {
+ code = *Setup;
+ SetCode(code);
+ isyslog("connecting to %s remote control using code %c", Name(), code);
+ }
+ Start();
+ return;
+ }
+ }
+ LOG_ERROR_STR(DeviceName);
+ close(f);
+ }
+ else
+ LOG_ERROR_STR(DeviceName);
+ f = -1;
+}
+
+cRcuRemote::~cRcuRemote()
+{
+ Cancel();
+}
+
+bool cRcuRemote::Ready(void)
+{
+ return f >= 0;
+}
+
+bool cRcuRemote::Initialize(void)
+{
+ if (f >= 0) {
+ unsigned char Code = '0';
+ isyslog("trying codes for %s remote control...", Name());
+ for (;;) {
+ if (DetectCode(&Code)) {
+ code = Code;
+ break;
+ }
+ }
+ isyslog("established connection to %s remote control using code %c", Name(), code);
+ char buffer[16];
+ snprintf(buffer, sizeof(buffer), "%c", code);
+ PutSetup(buffer);
+ return true;
+ }
+ return false;
+}
+
+void cRcuRemote::Action(void)
+{
+#pragma pack(1)
+ union {
+ struct {
+ unsigned short address;
+ unsigned int command;
+ } data;
+ unsigned char raw[6];
+ } buffer;
+#pragma pack()
+
+ time_t LastCodeRefresh = 0;
+ cTimeMs FirstTime;
+ unsigned char LastCode = 0, LastMode = 0;
+ uint64_t LastCommand = ~0; // 0x00 might be a valid command
+ unsigned int LastData = 0;
+ bool repeat = false;
+
+ while (Running() && f >= 0) {
+ if (ReceiveByte(REPEATLIMIT) == 'X') {
+ for (int i = 0; i < 6; i++) {
+ int b = ReceiveByte();
+ if (b >= 0) {
+ buffer.raw[i] = b;
+ if (i == 5) {
+ unsigned short Address = ntohs(buffer.data.address); // the PIC sends bytes in "network order"
+ uint64_t Command = ntohl(buffer.data.command);
+ if (code == 'B' && Address == 0x0000 && Command == 0x00004000)
+ // Well, well, if it isn't the "d-box"...
+ // This remote control sends the above command before and after
+ // each keypress - let's just drop this:
+ break;
+ Command |= uint64_t(Address) << 32;
+ if (Command != LastCommand) {
+ LastCommand = Command;
+ repeat = false;
+ FirstTime.Set();
+ }
+ else {
+ if (FirstTime.Elapsed() < REPEATDELAY)
+ break; // repeat function kicks in after a short delay
+ repeat = true;
+ }
+ Put(Command, repeat);
+ receivedCommand = true;
+ }
+ }
+ else
+ break;
+ }
+ }
+ else if (repeat) { // the last one was a repeat, so let's generate a release
+ Put(LastCommand, false, true);
+ repeat = false;
+ LastCommand = ~0;
+ }
+ else {
+ unsigned int d = data;
+ if (d != LastData) {
+ SendData(d);
+ LastData = d;
+ }
+ unsigned char c = code;
+ if (c != LastCode) {
+ SendCommand(c);
+ LastCode = c;
+ }
+ unsigned char m = mode;
+ if (m != LastMode) {
+ SendCommand(m);
+ LastMode = m;
+ }
+ LastCommand = ~0;
+ }
+ if (!repeat && code && time(NULL) - LastCodeRefresh > 60) {
+ SendCommand(code); // in case the PIC listens to the wrong code
+ LastCodeRefresh = time(NULL);
+ }
+ }
+}
+
+int cRcuRemote::ReceiveByte(int TimeoutMs)
+{
+ // Returns the byte if one was received within a timeout, -1 otherwise
+ if (cFile::FileReady(f, TimeoutMs)) {
+ unsigned char b;
+ if (safe_read(f, &b, 1) == 1)
+ return b;
+ else
+ LOG_ERROR;
+ }
+ return -1;
+}
+
+bool cRcuRemote::SendByteHandshake(unsigned char c)
+{
+ if (f >= 0) {
+ int w = write(f, &c, 1);
+ if (w == 1) {
+ for (int reply = ReceiveByte(HANDSHAKETIMEOUT); reply >= 0;) {
+ if (reply == c)
+ return true;
+ else if (reply == 'X') {
+ // skip any incoming RC code - it will come again
+ for (int i = 6; i--;) {
+ if (ReceiveByte() < 0)
+ return false;
+ }
+ }
+ else
+ return false;
+ }
+ }
+ LOG_ERROR;
+ }
+ return false;
+}
+
+bool cRcuRemote::SendByte(unsigned char c)
+{
+ for (int retry = 5; retry--;) {
+ if (SendByteHandshake(c))
+ return true;
+ }
+ return false;
+}
+
+bool cRcuRemote::SendData(unsigned int n)
+{
+ for (int i = 0; i < 4; i++) {
+ if (!SendByte(n & 0x7F))
+ return false;
+ n >>= 8;
+ }
+ return SendCommand(mode);
+}
+
+void cRcuRemote::SetCode(unsigned char Code)
+{
+ code = Code;
+}
+
+void cRcuRemote::SetMode(unsigned char Mode)
+{
+ mode = Mode;
+}
+
+bool cRcuRemote::SendCommand(unsigned char Cmd)
+{
+ return SendByte(Cmd | 0x80);
+}
+
+void cRcuRemote::SetNumber(int n, bool Hex)
+{
+ number = n;
+ if (!Hex) {
+ char buf[8];
+ sprintf(buf, "%4d", n & 0xFFFF);
+ n = 0;
+ for (char *d = buf; *d; d++) {
+ if (*d == ' ')
+ *d = 0xF;
+ n = (n << 4) | ((*d - '0') & 0x0F);
+ }
+ }
+ unsigned int m = 0;
+ for (int i = 0; i < 4; i++) {
+ m <<= 8;
+ m |= ((i & 0x03) << 5) | (n & 0x0F) | (((dp >> i) & 0x01) << 4);
+ n >>= 4;
+ }
+ data = m;
+}
+
+void cRcuRemote::SetString(const char *s)
+{
+ const char *chars = mode == modeH ? "0123456789ABCDEF" : "0123456789-EHLP ";
+ int n = 0;
+
+ for (int i = 0; *s && i < 4; s++, i++) {
+ n <<= 4;
+ for (const char *c = chars; *c; c++) {
+ if (*c == *s) {
+ n |= c - chars;
+ break;
+ }
+ }
+ }
+ SetNumber(n, true);
+}
+
+void cRcuRemote::SetPoints(unsigned char Dp, bool On)
+{
+ if (On)
+ dp |= Dp;
+ else
+ dp &= ~Dp;
+ SetNumber(number);
+}
+
+bool cRcuRemote::DetectCode(unsigned char *Code)
+{
+ // Caller should initialize 'Code' to 0 and call DetectCode()
+ // until it returns true. Whenever DetectCode() returns false
+ // and 'Code' is not 0, the caller can use 'Code' to display
+ // a message like "Trying code '%c'". If false is returned and
+ // 'Code' is 0, all possible codes have been tried and the caller
+ // can either stop calling DetectCode() (and give some error
+ // message), or start all over again.
+ if (*Code < 'A' || *Code > 'D') {
+ *Code = 'A';
+ return false;
+ }
+ if (*Code <= 'D') {
+ SetMode(modeH);
+ char buf[5];
+ sprintf(buf, "C0D%c", *Code);
+ SetString(buf);
+ SetCode(*Code);
+ cCondWait::SleepMs(2 * REPEATDELAY);
+ if (receivedCommand) {
+ SetMode(modeB);
+ SetString("----");
+ return true;
+ }
+ if (*Code < 'D') {
+ (*Code)++;
+ return false;
+ }
+ }
+ *Code = 0;
+ return false;
+}
+
+void cRcuRemote::ChannelSwitch(const cDevice *Device, int ChannelNumber)
+{
+ if (ChannelNumber && Device->IsPrimaryDevice())
+ SetNumber(cDevice::CurrentChannel());
+}
+
+void cRcuRemote::Recording(const cDevice *Device, const char *Name, const char *FileName, bool On)
+{
+ SetPoints(1 << Device->DeviceNumber(), Device->Receiving());
+}
+
+class cPluginRcu : public cPlugin {
+private:
+ // Add any member variables or functions you may need here.
+ const char *device;
+public:
+ cPluginRcu(void);
+ virtual const char *Version(void) { return VERSION; }
+ virtual const char *Description(void) { return DESCRIPTION; }
+ virtual const char *CommandLineHelp(void);
+ virtual bool ProcessArgs(int argc, char *argv[]);
+ virtual bool Start(void);
+ };
+
+cPluginRcu::cPluginRcu(void)
+{
+ // Initialize any member variables here.
+ // DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
+ // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT!
+ device = DEFAULTDEVICE;
+}
+
+const char *cPluginRcu::CommandLineHelp(void)
+{
+ // Return a string that describes all known command line options.
+ return " -d DEV, --device=DEV set the device to use (default is " DEFAULTDEVICE ")\n";
+}
+
+bool cPluginRcu::ProcessArgs(int argc, char *argv[])
+{
+ // Implement command line argument processing here if applicable.
+ static struct option long_options[] = {
+ { "dev", required_argument, NULL, 'd' },
+ { NULL, no_argument, NULL, 0 }
+ };
+
+ int c;
+ while ((c = getopt_long(argc, argv, "d:", long_options, NULL)) != -1) {
+ switch (c) {
+ case 'd': device = optarg;
+ break;
+ default: return false;
+ }
+ }
+ return true;
+}
+
+bool cPluginRcu::Start(void)
+{
+ // Start any background activities the plugin shall perform.
+ new cRcuRemote(device);
+ return true;
+}
+
+VDRPLUGINCREATOR(cPluginRcu); // Don't touch this!
diff --git a/ci.c b/ci.c
index 59d62ef..0135d07 100644
--- a/ci.c
+++ b/ci.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ci.c 2.7 2011/05/21 15:21:33 kls Exp $
+ * $Id: ci.c 2.8 2012/02/29 10:24:41 kls Exp $
*/
#include "ci.h"
@@ -1841,7 +1841,7 @@ const int *cCamSlot::GetCaSystemIds(void)
int cCamSlot::Priority(void)
{
cDevice *d = Device();
- return d ? d->Priority() : -1;
+ return d ? d->Priority() : IDLEPRIORITY;
}
bool cCamSlot::ProvidesCa(const int *CaSystemIds)
diff --git a/ci.h b/ci.h
index 71bbdf9..74e0270 100644
--- a/ci.h
+++ b/ci.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ci.h 2.1 2011/12/04 13:38:17 kls Exp $
+ * $Id: ci.h 2.2 2012/02/29 10:24:27 kls Exp $
*/
#ifndef __CI_H
@@ -192,7 +192,7 @@ public:
///< Gets a pending enquiry, or NULL if there is no enquiry.
int Priority(void);
///< Returns the priority if the device this slot is currently assigned
- ///< to, or -1 if it is not assigned to any device.
+ ///< to, or IDLEPRIORITY if it is not assigned to any device.
bool ProvidesCa(const int *CaSystemIds);
///< Returns true if the CAM in this slot provides one of the given
///< CaSystemIds. This doesn't necessarily mean that it will be
diff --git a/config.c b/config.c
index 9015a53..302a45b 100644
--- a/config.c
+++ b/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.18 2012/01/14 13:04:59 kls Exp $
+ * $Id: config.c 2.20 2012/02/29 10:15:54 kls Exp $
*/
#include "config.h"
@@ -406,9 +406,8 @@ cSetup::cSetup(void)
SVDRPTimeout = 300;
ZapTimeout = 3;
ChannelEntryTimeout = 1000;
- PrimaryLimit = 0;
DefaultPriority = 50;
- DefaultLifetime = 99;
+ DefaultLifetime = MAXLIFETIME;
PauseKeyHandling = 2;
PausePriority = 10;
PauseLifetime = 1;
@@ -601,7 +600,6 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "SVDRPTimeout")) SVDRPTimeout = atoi(Value);
else if (!strcasecmp(Name, "ZapTimeout")) ZapTimeout = atoi(Value);
else if (!strcasecmp(Name, "ChannelEntryTimeout")) ChannelEntryTimeout= atoi(Value);
- else if (!strcasecmp(Name, "PrimaryLimit")) PrimaryLimit = atoi(Value);
else if (!strcasecmp(Name, "DefaultPriority")) DefaultPriority = atoi(Value);
else if (!strcasecmp(Name, "DefaultLifetime")) DefaultLifetime = atoi(Value);
else if (!strcasecmp(Name, "PauseKeyHandling")) PauseKeyHandling = atoi(Value);
@@ -699,7 +697,6 @@ bool cSetup::Save(void)
Store("SVDRPTimeout", SVDRPTimeout);
Store("ZapTimeout", ZapTimeout);
Store("ChannelEntryTimeout",ChannelEntryTimeout);
- Store("PrimaryLimit", PrimaryLimit);
Store("DefaultPriority", DefaultPriority);
Store("DefaultLifetime", DefaultLifetime);
Store("PauseKeyHandling", PauseKeyHandling);
diff --git a/config.h b/config.h
index 18d551f..7719968 100644
--- a/config.h
+++ b/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.40 2012/01/16 09:50:03 kls Exp $
+ * $Id: config.h 2.43 2012/02/29 12:28:01 kls Exp $
*/
#ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number:
-#define VDRVERSION "1.7.24"
-#define VDRVERSNUM 10724 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.7.25"
+#define VDRVERSNUM 10725 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
-#define APIVERSION "1.7.24"
-#define APIVERSNUM 10724 // Version * 10000 + Major * 100 + Minor
+#define APIVERSION "1.7.25"
+#define APIVERSNUM 10725 // 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
@@ -36,8 +36,12 @@
// plugins to work with newer versions of the core VDR as long as no
// VDR header files have changed.
-#define MAXPRIORITY 99
-#define MAXLIFETIME 99
+#define MAXPRIORITY 99
+#define MINPRIORITY (-MAXPRIORITY)
+#define LIVEPRIORITY 0 // priority used when selecting a device for live viewing
+#define TRANSFERPRIORITY (LIVEPRIORITY - 1) // priority used for actual local Transfer Mode
+#define IDLEPRIORITY (MINPRIORITY - 1) // priority of an idle device
+#define MAXLIFETIME 99
#define MINOSDWIDTH 480
#define MAXOSDWIDTH 1920
@@ -264,7 +268,6 @@ public:
int SVDRPTimeout;
int ZapTimeout;
int ChannelEntryTimeout;
- int PrimaryLimit;
int DefaultPriority, DefaultLifetime;
int PausePriority, PauseLifetime;
int PauseKeyHandling;
diff --git a/device.c b/device.c
index 526f867..663f91a 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 2.49 2012/02/15 13:15:19 kls Exp $
+ * $Id: device.c 2.55 2012/03/03 11:43:05 kls Exp $
*/
#include "device.h"
@@ -59,9 +59,6 @@ bool cDeviceHook::DeviceProvidesTransponder(const cDevice *Device, const cChanne
// --- cDevice ---------------------------------------------------------------
-// The default priority for non-primary devices:
-#define DEFAULTPRIORITY -1
-
// The minimum number of unknown PS1 packets to consider this a "pre 1.3.19 private stream":
#define MIN_PRE_1_3_19_PRIVATESTREAM 10
@@ -229,7 +226,7 @@ static int GetClippedNumProvidedSystems(int AvailableBits, cDevice *Device)
return NumProvidedSystems;
}
-cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView)
+cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView, bool Query)
{
cDevice *AvoidDevice = avoidDevice;
avoidDevice = NULL;
@@ -269,7 +266,7 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView
if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true))
continue; // CAM slot can't be used with this device
bool ndr;
- if (device[i]->ProvidesChannel(Channel, (LiveView && device[i]->IsPrimaryDevice()) ? Setup.PrimaryLimit : Priority, &ndr)) { // this device is basicly able to do the job
+ if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job
if (NumUsableSlots && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j))
ndr = true; // using a different CAM slot requires detaching receivers
// Put together an integer number that reflects the "impact" using
@@ -284,8 +281,8 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView
imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving
imp <<= 4; imp |= GetClippedNumProvidedSystems(4, device[i]) - 1; // avoid cards which support multiple delivery systems
imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device
- imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
- imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
+ imp <<= 8; imp |= device[i]->Priority() - IDLEPRIORITY; // use the device with the lowest priority (- IDLEPRIORITY to assure that values -100..99 can be used)
+ imp <<= 8; imp |= (NumUsableSlots ? SlotPriority[j] : IDLEPRIORITY) - IDLEPRIORITY; // use the CAM slot with the lowest priority (- IDLEPRIORITY to assure that values -100..99 can be used)
imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers
imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels
imp <<= 1; imp |= device[i]->AvoidRecording(); // avoid SD full featured cards
@@ -304,7 +301,7 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView
if (!NumUsableSlots)
break; // no CAM necessary, so just one loop over the devices
}
- if (d) {
+ if (d && !Query) {
if (NeedsDetachReceivers)
d->DetachAllReceivers();
if (s) {
@@ -655,7 +652,7 @@ bool cDevice::IsTunedToTransponder(const cChannel *Channel) const
bool cDevice::MaySwitchTransponder(const cChannel *Channel) const
{
- return time(NULL) > occupiedTimeout && !Receiving(true) && !(pidHandles[ptAudio].pid || pidHandles[ptVideo].pid || pidHandles[ptDolby].pid);
+ return time(NULL) > occupiedTimeout && !Receiving() && !(pidHandles[ptAudio].pid || pidHandles[ptVideo].pid || pidHandles[ptDolby].pid);
}
bool cDevice::SwitchChannel(const cChannel *Channel, bool LiveView)
@@ -690,7 +687,7 @@ bool cDevice::SwitchChannel(int Direction)
cChannel *channel;
while ((channel = Channels.GetByNumber(n, Direction)) != NULL) {
// try only channels which are currently available
- if (GetDevice(channel, 0, true))
+ if (GetDevice(channel, LIVEPRIORITY, true, true))
break;
n = channel->Number() + Direction;
}
@@ -711,13 +708,15 @@ bool cDevice::SwitchChannel(int Direction)
eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
{
+ cStatus::MsgChannelSwitch(this, 0);
+
if (LiveView) {
StopReplay();
DELETENULL(liveSubtitle);
DELETENULL(dvbSubtitleConverter);
}
- cDevice *Device = (LiveView && IsPrimaryDevice()) ? GetDevice(Channel, 0, LiveView) : this;
+ cDevice *Device = (LiveView && IsPrimaryDevice()) ? GetDevice(Channel, LIVEPRIORITY, true) : this;
bool NeedsTransferMode = Device != this;
@@ -728,7 +727,6 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
if (NeedsTransferMode) {
if (Device && CanReplay()) {
- cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel
if (Device->SetChannel(Channel, false) == scrOk) // calling SetChannel() directly, not SwitchChannel()!
cControl::Launch(new cTransferControl(Device, Channel));
else
@@ -739,7 +737,6 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
}
else {
Channels.Lock(false);
- cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel
// Stop section handling:
if (sectionHandler) {
sectionHandler->SetStatus(false);
@@ -880,7 +877,7 @@ void cDevice::SetAudioChannel(int AudioChannel)
void cDevice::SetVolume(int Volume, bool Absolute)
{
int OldVolume = volume;
- volume = min(max(Absolute ? Volume : volume + Volume, 0), MAXVOLUME);
+ volume = constrain(Absolute ? Volume : volume + Volume, 0, MAXVOLUME);
SetVolumeDevice(volume);
Absolute |= mute;
cStatus::MsgSetVolume(Absolute ? volume : volume - OldVolume, Absolute);
@@ -1049,7 +1046,8 @@ void cDevice::EnsureSubtitleTrack(void)
int LanguagePreference = INT_MAX; // higher than the maximum possible value
for (int i = ttSubtitleFirst; i <= ttSubtitleLast; i++) {
const tTrackId *TrackId = GetTrack(eTrackType(i));
- if (TrackId && TrackId->id && I18nIsPreferredLanguage(Setup.SubtitleLanguages, TrackId->language, LanguagePreference))
+ if (TrackId && TrackId->id && (I18nIsPreferredLanguage(Setup.SubtitleLanguages, TrackId->language, LanguagePreference) ||
+ (i == ttSubtitleFirst + 8 && !*TrackId->language && LanguagePreference == INT_MAX))) // compatibility mode for old subtitles plugin
PreferredTrack = eTrackType(i);
}
// Make sure we're set to an available subtitle track:
@@ -1495,7 +1493,9 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
int cDevice::Priority(void) const
{
- int priority = IsPrimaryDevice() ? Setup.PrimaryLimit - 1 : DEFAULTPRIORITY;
+ int priority = IDLEPRIORITY;
+ if (IsPrimaryDevice() && !Replaying() && ActualDevice() == PrimaryDevice())
+ priority = TRANSFERPRIORITY; // we use the same value here, no matter whether it's actual Transfer Mode or real live viewing
cMutexLock MutexLock(&mutexReceiver);
for (int i = 0; i < MAXRECEIVERS; i++) {
if (receiver[i])
@@ -1509,11 +1509,11 @@ bool cDevice::Ready(void)
return true;
}
-bool cDevice::Receiving(bool CheckAny) const
+bool cDevice::Receiving(bool Dummy) const
{
cMutexLock MutexLock(&mutexReceiver);
for (int i = 0; i < MAXRECEIVERS; i++) {
- if (receiver[i] && (CheckAny || receiver[i]->priority >= 0)) // cReceiver with priority < 0 doesn't count
+ if (receiver[i])
return true;
}
return false;
diff --git a/device.h b/device.h
index 9a45934..23aea97 100644
--- a/device.h
+++ b/device.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.h 2.33 2012/02/14 14:42:42 kls Exp $
+ * $Id: device.h 2.36 2012/03/02 10:23:13 kls Exp $
*/
#ifndef __DEVICE_H
@@ -139,7 +139,7 @@ public:
///< Gets the device with the given Index.
///< \param Index must be in the range 0..numDevices-1.
///< \return A pointer to the device, or NULL if the Index was invalid.
- static cDevice *GetDevice(const cChannel *Channel, int Priority, bool LiveView);
+ static cDevice *GetDevice(const cChannel *Channel, int Priority, bool LiveView, bool Query = false);
///< Returns a device that is able to receive the given Channel at the
///< given Priority, with the least impact on active recordings and
///< live viewing. The LiveView parameter tells whether the device will
@@ -153,6 +153,10 @@ public:
///< after detaching any receivers because the channel can't be decrypted,
///< this device/CAM combination will be skipped in the next call to
///< GetDevice().
+ ///< If Query is true, no actual CAM assignments or receiver detachments will
+ ///< be done, so that this function can be called without any side effects
+ ///< in order to just determine whether a device is available for the given
+ ///< Channel.
///< See also ProvidesChannel().
static void SetAvoidDevice(cDevice *Device) { avoidDevice = Device; }
///< Sets the given Device to be temporarily avoided in the next call to
@@ -235,12 +239,11 @@ public:
virtual bool ProvidesTransponderExclusively(const cChannel *Channel) const;
///< Returns true if this is the only device that is able to provide
///< the given channel's transponder.
- virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
+ virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const;
///< Returns true if this device can provide the given channel.
- ///< In case the device has cReceivers attached to it or it is the primary
- ///< device, Priority is used to decide whether the caller's request can
- ///< be honored.
- ///< The special Priority value -1 will tell the caller whether this device
+ ///< In case the device has cReceivers attached to it, Priority is used to
+ ///< decide whether the caller's request can be honored.
+ ///< The special Priority value IDLEPRIORITY will tell the caller whether this device
///< is principally able to provide the given Channel, regardless of any
///< attached cReceivers.
///< If NeedsDetachReceivers is given, the resulting value in it will tell the
@@ -719,9 +722,8 @@ private:
cReceiver *receiver[MAXRECEIVERS];
public:
int Priority(void) const;
- ///< Returns the priority of the current receiving session (0..MAXPRIORITY),
- ///< or -1 if no receiver is currently active. The primary device will
- ///< always return at least Setup.PrimaryLimit-1.
+ ///< Returns the priority of the current receiving session (-MAXPRIORITY..MAXPRIORITY),
+ ///< or IDLEPRIORITY if no receiver is currently active.
protected:
virtual bool OpenDvr(void);
///< Opens the DVR of this device and prepares it to deliver a Transport
@@ -736,8 +738,8 @@ protected:
///< false in case of a non recoverable error, otherwise it returns true,
///< even if Data is NULL.
public:
- bool Receiving(bool CheckAny = false) const;
- ///< Returns true if we are currently receiving.
+ bool Receiving(bool Dummy = false) const;
+ ///< Returns true if we are currently receiving. The parameter has no meaning (for backwards compatibility only).
bool AttachReceiver(cReceiver *Receiver);
///< Attaches the given receiver to this device.
void Detach(cReceiver *Receiver);
diff --git a/dvbdevice.c b/dvbdevice.c
index c2503ed..1987223 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 2.62 2012/02/17 12:20:34 kls Exp $
+ * $Id: dvbdevice.c 2.65 2012/02/29 12:23:43 kls Exp $
*/
#include "dvbdevice.h"
@@ -420,7 +420,7 @@ bool cDvbTuner::BondingOk(const cChannel *Channel, bool ConsiderOccupied) const
if (cDvbTuner *t = bondedTuner) {
cString BondingParams = GetBondingParams(Channel);
do {
- if (t->device->Receiving() || t->tunerStatus != tsIdle && (t->device == cDevice::ActualDevice() || ConsiderOccupied && t->device->Occupied())) {
+ if (t->device->Receiving() || ConsiderOccupied && t->device->Occupied()) {
if (strcmp(BondingParams, t->GetBondingParams()) != 0)
return false;
}
@@ -1437,14 +1437,14 @@ bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const
{
bool result = false;
- bool hasPriority = Priority < 0 || Priority > this->Priority();
+ bool hasPriority = Priority == IDLEPRIORITY || Priority > this->Priority();
bool needsDetachReceivers = false;
needsDetachBondedReceivers = false;
if (dvbTuner && ProvidesTransponder(Channel)) {
result = hasPriority;
if (Priority >= 0) {
- if (Receiving(true)) {
+ if (Receiving()) {
if (dvbTuner->IsTunedTo(Channel)) {
if (Channel->Vpid() && !HasPid(Channel->Vpid()) || Channel->Apid(0) && !HasPid(Channel->Apid(0))) {
if (CamSlot() && Channel->Ca() >= CA_ENCRYPTED_MIN) {
@@ -1453,16 +1453,14 @@ bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Ne
else
needsDetachReceivers = true;
}
- else if (!IsPrimaryDevice())
- result = true;
else
- result = Priority >= Setup.PrimaryLimit;
+ result = true;
}
else
- result = !IsPrimaryDevice() || Priority >= Setup.PrimaryLimit;
+ result = true;
}
else
- needsDetachReceivers = Receiving(true);
+ needsDetachReceivers = Receiving();
}
if (result) {
if (!BondingOk(Channel)) {
@@ -1474,7 +1472,7 @@ bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Ne
}
}
needsDetachBondedReceivers = true;
- needsDetachReceivers = Receiving(true);
+ needsDetachReceivers = Receiving();
}
}
}
@@ -1591,21 +1589,43 @@ cDvbDeviceProbe::~cDvbDeviceProbe()
uint32_t cDvbDeviceProbe::GetSubsystemId(int Adapter, int Frontend)
{
- cString FileName;
- cReadLine ReadLine;
- FILE *f = NULL;
uint32_t SubsystemId = 0;
- FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_vendor", Adapter, Frontend);
- if ((f = fopen(FileName, "r")) != NULL) {
- if (char *s = ReadLine.Read(f))
- SubsystemId = strtoul(s, NULL, 0) << 16;
- fclose(f);
- }
- FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_device", Adapter, Frontend);
- if ((f = fopen(FileName, "r")) != NULL) {
- if (char *s = ReadLine.Read(f))
- SubsystemId |= strtoul(s, NULL, 0);
- fclose(f);
+ cString FileName = cString::sprintf("/dev/dvb/adapter%d/frontend%d", Adapter, Frontend);
+ struct stat st;
+ if (stat(FileName, &st) == 0) {
+ cReadDir d("/sys/class/dvb");
+ if (d.Ok()) {
+ struct dirent *e;
+ while ((e = d.Next()) != NULL) {
+ if (strstr(e->d_name, "frontend")) {
+ FileName = cString::sprintf("/sys/class/dvb/%s/dev", e->d_name);
+ if (FILE *f = fopen(FileName, "r")) {
+ cReadLine ReadLine;
+ char *s = ReadLine.Read(f);
+ fclose(f);
+ unsigned Major;
+ unsigned Minor;
+ if (s && 2 == sscanf(s, "%u:%u", &Major, &Minor)) {
+ if (((Major << 8) | Minor) == st.st_rdev) {
+ FileName = cString::sprintf("/sys/class/dvb/%s/device/subsystem_vendor", e->d_name);
+ if ((f = fopen(FileName, "r")) != NULL) {
+ if (char *s = ReadLine.Read(f))
+ SubsystemId = strtoul(s, NULL, 0) << 16;
+ fclose(f);
+ }
+ FileName = cString::sprintf("/sys/class/dvb/%s/device/subsystem_device", e->d_name);
+ if ((f = fopen(FileName, "r")) != NULL) {
+ if (char *s = ReadLine.Read(f))
+ SubsystemId |= strtoul(s, NULL, 0);
+ fclose(f);
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
}
return SubsystemId;
}
diff --git a/dvbdevice.h b/dvbdevice.h
index e072bb3..85b0d9c 100644
--- a/dvbdevice.h
+++ b/dvbdevice.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.h 2.23 2012/02/17 11:18:55 kls Exp $
+ * $Id: dvbdevice.h 2.24 2012/02/29 12:20:51 kls Exp $
*/
#ifndef __DVBDEVICE_H
@@ -179,7 +179,7 @@ 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;
+ virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const;
virtual bool ProvidesEIT(void) const;
virtual int NumProvidedSystems(void) const;
virtual int SignalStrength(void) const;
diff --git a/dvbplayer.c b/dvbplayer.c
index b0adac4..4fd0685 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbplayer.c 2.23 2012/02/19 10:48:02 kls Exp $
+ * $Id: dvbplayer.c 2.25 2012/02/21 11:34:04 kls Exp $
*/
#include "dvbplayer.h"
@@ -87,7 +87,6 @@ class cNonBlockingFileReader : public cThread {
private:
cUnbufferedFile *f;
uchar *buffer;
- uchar *result;
int wanted;
int length;
cCondWait newSet;
@@ -101,7 +100,7 @@ public:
void Clear(void);
void Request(cUnbufferedFile *File, int Length);
int Result(uchar **Buffer);
- bool Reading(void) { return result; }
+ bool Reading(void) { return buffer; }
bool WaitForDataMs(int msToWait);
};
@@ -110,7 +109,6 @@ cNonBlockingFileReader::cNonBlockingFileReader(void)
{
f = NULL;
buffer = NULL;
- result = NULL;
wanted = length = 0;
Start();
}
@@ -120,7 +118,6 @@ cNonBlockingFileReader::~cNonBlockingFileReader()
newSet.Signal();
Cancel(3);
free(buffer);
- free(result);
}
void cNonBlockingFileReader::Clear(void)
@@ -129,8 +126,6 @@ void cNonBlockingFileReader::Clear(void)
f = NULL;
free(buffer);
buffer = NULL;
- free(result);
- result = NULL;
wanted = length = 0;
Unlock();
}
@@ -142,18 +137,18 @@ void cNonBlockingFileReader::Request(cUnbufferedFile *File, int Length)
wanted = Length;
buffer = MALLOC(uchar, wanted);
f = File;
- newSet.Signal();
Unlock();
+ newSet.Signal();
}
int cNonBlockingFileReader::Result(uchar **Buffer)
{
LOCK_THREAD;
- if (result && length == wanted) {
- *Buffer = result;
- result = NULL;
+ if (buffer && length == wanted) {
+ *Buffer = buffer;
+ buffer = NULL;
return wanted;
- }
+ }
errno = EAGAIN;
return -1;
}
@@ -177,8 +172,6 @@ void cNonBlockingFileReader::Action(void)
length = wanted = r; // this will forward the error status to the caller
}
if (length == wanted) {
- result = buffer;
- buffer = NULL;
cMutexLock NewDataLock(&newDataMutex);
newDataCond.Broadcast();
}
@@ -190,9 +183,9 @@ void cNonBlockingFileReader::Action(void)
bool cNonBlockingFileReader::WaitForDataMs(int msToWait)
{
- if (result && length == wanted)
- return true;
cMutexLock NewDataLock(&newDataMutex);
+ if (buffer && length == wanted)
+ return true;
return newDataCond.TimedWait(newDataMutex, msToWait);
}
@@ -291,6 +284,8 @@ cDvbPlayer::cDvbPlayer(const char *FileName, bool PauseLive)
delete index;
index = NULL;
}
+ else if (PauseLive)
+ framesPerSecond = cRecording(FileName).FramesPerSecond(); // the fps rate might have changed from the default
}
cDvbPlayer::~cDvbPlayer()
@@ -413,13 +408,13 @@ void cDvbPlayer::Action(void)
Goto(0, true);
while (Running()) {
if (WaitingForData)
- nonBlockingFileReader->WaitForDataMs(10); // this keeps the CPU load low, but reacts immediately on new data
+ nonBlockingFileReader->WaitForDataMs(3); // this keeps the CPU load low, but reacts immediately on new data
else if (Sleep) {
cPoller Poller;
DevicePoll(Poller, 10);
Sleep = false;
if (playMode == pmStill || playMode == pmPause)
- cCondWait::SleepMs(10);
+ cCondWait::SleepMs(3);
}
{
LOCK_THREAD;
@@ -481,15 +476,7 @@ void cDvbPlayer::Action(void)
}
if (!eof) {
uchar *b = NULL;
- int Retries = 5;
- int r;
- while (true) {
- r = nonBlockingFileReader->Result(&b);
- if (r == -1 && errno == EAGAIN && --Retries)
- nonBlockingFileReader->WaitForDataMs(10);
- else
- break;
- }
+ int r = nonBlockingFileReader->Result(&b);
if (r > 0) {
WaitingForData = false;
uint32_t Pts = 0;
diff --git a/dvbsubtitle.c b/dvbsubtitle.c
index aa17a7a..300cd7c 100644
--- a/dvbsubtitle.c
+++ b/dvbsubtitle.c
@@ -7,7 +7,7 @@
* Original author: Marco Schller <marco@lordzodiac.de>
* With some input from the "subtitle plugin" by Pekka Virtanen <pekka.virtanen@sci.fi>
*
- * $Id: dvbsubtitle.c 2.22 2012/02/13 09:48:18 kls Exp $
+ * $Id: dvbsubtitle.c 2.27 2012/03/02 10:47:25 kls Exp $
*/
@@ -541,7 +541,6 @@ public:
void SetPts(int64_t Pts) { pts = Pts; }
void SetState(int State);
void SetTimeout(int Timeout) { timeout = Timeout; }
- void UpdateRegionPalette(cSubtitleClut *Clut);
};
cDvbSubtitlePage::cDvbSubtitlePage(int PageId)
@@ -635,14 +634,6 @@ void cDvbSubtitlePage::SetState(int State)
}
}
-void cDvbSubtitlePage::UpdateRegionPalette(cSubtitleClut *Clut)
-{
- for (cSubtitleRegion *sr = regions.First(); sr; sr = regions.Next(sr)) {
- if (sr->ClutId() == Clut->ClutId())
- sr->Replace(*Clut->GetPalette(sr->Bpp()));
- }
-}
-
// --- cDvbSubtitleAssembler -------------------------------------------------
class cDvbSubtitleAssembler {
@@ -806,7 +797,6 @@ cDvbSubtitleConverter::cDvbSubtitleConverter(void)
displayHeight = windowHeight = 576;
windowHorizontalOffset = 0;
windowVerticalOffset = 0;
- SetOsdData();
pages = new cList<cDvbSubtitlePage>;
bitmaps = new cList<cDvbSubtitleBitmaps>;
Start();
@@ -840,7 +830,6 @@ void cDvbSubtitleConverter::Reset(void)
displayHeight = windowHeight = 576;
windowHorizontalOffset = 0;
windowVerticalOffset = 0;
- SetOsdData();
Unlock();
}
@@ -980,9 +969,9 @@ tColor cDvbSubtitleConverter::yuv2rgb(int Y, int Cb, int Cr)
Epb = (Cb - 128);
Epr = (Cr - 128);
/* ITU-R 709 */
- Er = max(min(((298 * Ey + 460 * Epr) / 256), 255), 0);
- Eg = max(min(((298 * Ey - 55 * Epb - 137 * Epr) / 256), 255), 0);
- Eb = max(min(((298 * Ey + 543 * Epb ) / 256), 255), 0);
+ Er = constrain((298 * Ey + 460 * Epr) / 256, 0, 255);
+ Eg = constrain((298 * Ey - 55 * Epb - 137 * Epr) / 256, 0, 255);
+ Eb = constrain((298 * Ey + 543 * Epb ) / 256, 0, 255);
return (Er << 16) | (Eg << 8) | Eb;
}
@@ -995,7 +984,7 @@ void cDvbSubtitleConverter::SetOsdData(void)
double VideoAspect;
cDevice::PrimaryDevice()->GetOsdSize(OsdWidth, OsdHeight, OsdAspect);
cDevice::PrimaryDevice()->GetVideoSize(VideoWidth, VideoHeight, VideoAspect);
- if (OsdWidth == displayWidth && OsdHeight == displayHeight || DoubleEqual(VideoAspect, 1.0)) {
+ if (OsdWidth == displayWidth && OsdHeight == displayHeight) {
osdFactorX = osdFactorY = 1.0;
osdDeltaX = osdDeltaY = 0;
}
@@ -1010,7 +999,11 @@ void cDvbSubtitleConverter::SetOsdData(void)
bool cDvbSubtitleConverter::AssertOsd(void)
{
LOCK_THREAD;
- return osd || (osd = cOsdProvider::NewOsd(int(round(osdFactorX * windowHorizontalOffset + osdDeltaX)), int(round(osdFactorY * windowVerticalOffset + osdDeltaY)) + Setup.SubtitleOffset, OSD_LEVEL_SUBTITLES));
+ if (!osd) {
+ SetOsdData();
+ osd = cOsdProvider::NewOsd(int(round(osdFactorX * windowHorizontalOffset + osdDeltaX)), int(round(osdFactorY * windowVerticalOffset + osdDeltaY)) + Setup.SubtitleOffset, OSD_LEVEL_SUBTITLES);
+ }
+ return osd != NULL;
}
int cDvbSubtitleConverter::ExtractSegment(const uchar *Data, int Length, int64_t Pts)
@@ -1035,7 +1028,7 @@ int cDvbSubtitleConverter::ExtractSegment(const uchar *Data, int Length, int64_t
if (!page) {
page = new cDvbSubtitlePage(pageId);
pages->Add(page);
- dbgpages("Create SubtitlePage %d (total pages = %d)\n", pageId, pages->Count());
+ dbgpages("Create SubtitlePage %d (total pages = %d)\n", pageId, pages->Count());
}
if (Pts)
page->SetPts(Pts);
@@ -1112,7 +1105,7 @@ int cDvbSubtitleConverter::ExtractSegment(const uchar *Data, int Length, int64_t
}
case CLUT_DEFINITION_SEGMENT: {
dbgsegments("CLUT_DEFINITION_SEGMENT\n");
- cSubtitleClut *clut = page->GetClutById(bs.GetBits(8), true);
+ cSubtitleClut *clut = page->GetClutById(bs.GetBits(8), true);
int clutVersion = bs.GetBits(4);
if (clutVersion == clut->Version())
break; // no update
@@ -1155,7 +1148,6 @@ int cDvbSubtitleConverter::ExtractSegment(const uchar *Data, int Length, int64_t
clut->SetColor(8, clutEntryId, value);
}
dbgcluts("\n");
- page->UpdateRegionPalette(clut);
break;
}
case OBJECT_DATA_SEGMENT: {
@@ -1310,7 +1302,11 @@ void cDvbSubtitleConverter::FinishPage(cDvbSubtitlePage *Page)
cDvbSubtitleBitmaps *Bitmaps = new cDvbSubtitleBitmaps(Page->Pts(), Page->Timeout(), Areas, NumAreas, osdFactorX, osdFactorY);
bitmaps->Add(Bitmaps);
for (cSubtitleRegion *sr = Page->regions.First(); sr; sr = Page->regions.Next(sr)) {
- sr->UpdateTextData(Page->GetClutById(sr->ClutId()));
+ cSubtitleClut *clut = Page->GetClutById(sr->ClutId());
+ if (!clut)
+ continue;
+ sr->Replace(*clut->GetPalette(sr->Bpp()));
+ sr->UpdateTextData(clut);
int posX = sr->HorizontalAddress();
int posY = sr->VerticalAddress();
if (sr->Width() > 0 && sr->Height() > 0) {
diff --git a/eit.c b/eit.c
index ed16163..cc10003 100644
--- a/eit.c
+++ b/eit.c
@@ -8,7 +8,7 @@
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
*
- * $Id: eit.c 2.12 2010/05/14 14:08:35 kls Exp $
+ * $Id: eit.c 2.13 2012/02/25 15:25:51 kls Exp $
*/
#include "eit.h"
@@ -38,6 +38,14 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
return; // only collect data for known channels
cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true);
+ if (pSchedule) {
+ if (cEvent *Event = pSchedule->Events()->First()) {
+ if (Event->TableID() == 0x00)
+ return; // never touch schedules with events from external sources
+ }
+ }
+ else
+ return;
bool Empty = true;
bool Modified = false;
diff --git a/epg.h b/epg.h
index 9d6b605..580cbe6 100644
--- a/epg.h
+++ b/epg.h
@@ -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.h 2.6 2012/02/11 12:29:55 kls Exp $
+ * $Id: epg.h 2.7 2012/02/26 13:58:26 kls Exp $
*/
#ifndef __EPG_H
@@ -100,7 +100,7 @@ public:
const char *ShortText(void) const { return shortText; }
const char *Description(void) const { return description; }
const cComponents *Components(void) const { return components; }
- uchar Contents(int i = 0) const { return (0 <= i && i < MaxEventContents) ? contents[i] : 0; }
+ uchar Contents(int i = 0) const { return (0 <= i && i < MaxEventContents) ? contents[i] : uchar(0); }
int ParentalRating(void) const { return parentalRating; }
time_t StartTime(void) const { return startTime; }
time_t EndTime(void) const { return startTime + duration; }
diff --git a/font.c b/font.c
index b391345..706a017 100644
--- a/font.c
+++ b/font.c
@@ -6,7 +6,7 @@
*
* BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya.
*
- * $Id: font.c 2.9 2012/01/13 09:43:22 kls Exp $
+ * $Id: font.c 2.10 2012/03/02 10:47:45 kls Exp $
*/
#include "font.h"
@@ -396,7 +396,7 @@ cFont *cFont::fonts[eDvbFontSize] = { NULL };
void cFont::SetFont(eDvbFont Font, const char *Name, int CharHeight)
{
- cFont *f = CreateFont(Name, min(max(CharHeight, MINFONTSIZE), MAXFONTSIZE));
+ cFont *f = CreateFont(Name, constrain(CharHeight, MINFONTSIZE, MAXFONTSIZE));
if (!f || !f->Height())
f = new cDummyFont;
delete fonts[Font];
diff --git a/libsi/section.h b/libsi/section.h
index d8b5244..5b70a22 100644
--- a/libsi/section.h
+++ b/libsi/section.h
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: section.h 2.0 2006/04/14 10:53:44 kls Exp $
+ * $Id: section.h 2.1 2012/02/26 13:58:26 kls Exp $
* *
***************************************************************************/
@@ -29,7 +29,7 @@ public:
int getServiceId() const;
int getPid() const;
bool isNITPid() const { return getServiceId()==0; }
- virtual int getLength() { return sizeof(pat_prog); }
+ virtual int getLength() { return int(sizeof(pat_prog)); }
protected:
virtual void Parse();
private:
@@ -61,7 +61,7 @@ public:
int getPid() const;
int getStreamType() const;
DescriptorLoop streamDescriptors;
- virtual int getLength() { return sizeof(pmt_info)+streamDescriptors.getLength(); }
+ virtual int getLength() { return int(sizeof(pmt_info)+streamDescriptors.getLength()); }
protected:
virtual void Parse();
private:
@@ -96,7 +96,7 @@ public:
public:
int getTransportStreamId() const;
int getOriginalNetworkId() const;
- virtual int getLength() { return sizeof(ni_ts)+transportStreamDescriptors.getLength(); }
+ virtual int getLength() { return int(sizeof(ni_ts)+transportStreamDescriptors.getLength()); }
DescriptorLoop transportStreamDescriptors;
protected:
virtual void Parse();
@@ -131,7 +131,7 @@ public:
int getEITpresentFollowingFlag() const;
RunningStatus getRunningStatus() const;
int getFreeCaMode() const;
- virtual int getLength() { return sizeof(sdt_descr)+serviceDescriptors.getLength(); }
+ virtual int getLength() { return int(sizeof(sdt_descr)+serviceDescriptors.getLength()); }
DescriptorLoop serviceDescriptors;
protected:
virtual void Parse();
@@ -168,7 +168,7 @@ public:
int getFreeCaMode() const;
DescriptorLoop eventDescriptors;
- virtual int getLength() { return sizeof(eit_event)+eventDescriptors.getLength(); }
+ virtual int getLength() { return int(sizeof(eit_event)+eventDescriptors.getLength()); }
protected:
virtual void Parse();
private:
@@ -225,7 +225,7 @@ public:
int getServiceId() const;
int getEventId() const;
RunningStatus getRunningStatus() const;
- virtual int getLength() { return sizeof(rst_info); }
+ virtual int getLength() { return int(sizeof(rst_info)); }
protected:
virtual void Parse();
private:
@@ -242,7 +242,7 @@ public:
AIT() {}
class Application : public LoopElement {
public:
- virtual int getLength() { return sizeof(ait_app)+applicationDescriptors.getLength(); }
+ virtual int getLength() { return int(sizeof(ait_app)+applicationDescriptors.getLength()); }
long getOrganisationId() const;
int getApplicationId() const;
int getControlCode() const;
diff --git a/libsi/util.h b/libsi/util.h
index e9134cd..a7f5d60 100644
--- a/libsi/util.h
+++ b/libsi/util.h
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: util.h 2.2 2010/11/01 15:24:32 kls Exp $
+ * $Id: util.h 2.3 2012/02/26 13:58:26 kls Exp $
* *
***************************************************************************/
@@ -54,10 +54,10 @@ public:
template <typename T> const T* getData(int offset) const { return (T*)(data_->data+offset+off); }
//sets p to point to data+offset, increments offset
template <typename T> void setPointerAndOffset(const T* &p, int &offset) const { p=(T*)getData(offset); offset+=sizeof(T); }
- unsigned char operator[](const int index) const { return data_->data ? data_->data[off+index] : 0; }
+ unsigned char operator[](const int index) const { return data_->data ? data_->data[off+index] : (unsigned char)0; }
int getLength() const { return data_->size; }
- u_int16_t TwoBytes(const int index) const { return data_->data ? data_->TwoBytes(off+index) : 0; }
- u_int32_t FourBytes(const int index) const { return data_->data ? data_->FourBytes(off+index) : 0; }
+ u_int16_t TwoBytes(const int index) const { return data_->data ? data_->TwoBytes(off+index) : u_int16_t(0); }
+ u_int32_t FourBytes(const int index) const { return data_->data ? data_->FourBytes(off+index) : u_int32_t(0); }
bool isValid() const { return data_->valid; }
bool checkSize(int offset) { return (data_->valid && (data_->valid=(offset>=0 && off+offset < data_->size))); }
@@ -73,9 +73,9 @@ private:
virtual void Delete() = 0;
u_int16_t TwoBytes(const int index) const
- { return (data[index] << 8) | data[index+1]; }
+ { return u_int16_t((data[index] << 8) | data[index+1]); }
u_int32_t FourBytes(const int index) const
- { return (data[index] << 24) | (data[index+1] << 16) | (data[index+2] << 8) | data[index+3]; }
+ { return u_int32_t((data[index] << 24) | (data[index+1] << 16) | (data[index+2] << 8) | data[index+3]); }
/*#ifdef CHARARRAY_THREADSAFE
void Lock();
void Unlock();
@@ -140,7 +140,7 @@ private:
namespace DVBTime {
time_t getTime(unsigned char date_hi, unsigned char date_lo, unsigned char timehr, unsigned char timemi, unsigned char timese);
time_t getDuration(unsigned char timehr, unsigned char timemi, unsigned char timese);
-inline unsigned char bcdToDec(unsigned char b) { return ((b >> 4) & 0x0F) * 10 + (b & 0x0F); }
+inline unsigned char bcdToDec(unsigned char b) { return (unsigned char)(((b >> 4) & 0x0F) * 10 + (b & 0x0F)); }
}
//taken and adapted from libdtv, (c) Rolf Hakenes
diff --git a/menu.c b/menu.c
index 61dcdfc..7866bc3 100644
--- a/menu.c
+++ b/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.37 2012/02/19 11:37:55 kls Exp $
+ * $Id: menu.c 2.39 2012/03/02 10:33:17 kls Exp $
*/
#include "menu.h"
@@ -3093,7 +3093,6 @@ cMenuSetupRecord::cMenuSetupRecord(void)
SetSection(tr("Recording"));
Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at start (min)"), &data.MarginStart));
Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at stop (min)"), &data.MarginStop));
- Add(new cMenuEditIntItem( tr("Setup.Recording$Primary limit"), &data.PrimaryLimit, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Default priority"), &data.DefaultPriority, 0, MAXPRIORITY));
Add(new cMenuEditIntItem( tr("Setup.Recording$Default lifetime (d)"), &data.DefaultLifetime, 0, MAXLIFETIME));
Add(new cMenuEditStraItem(tr("Setup.Recording$Pause key handling"), &data.PauseKeyHandling, 3, pauseKeyHandlingTexts));
@@ -3654,7 +3653,7 @@ cChannel *cDisplayChannel::NextAvailableChannel(cChannel *Channel, int Direction
Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
if (!Channel && Setup.ChannelsWrap)
Channel = Direction > 0 ? Channels.First() : Channels.Last();
- if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, 0, true))
+ if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, LIVEPRIORITY, true, true))
return Channel;
}
}
@@ -4294,7 +4293,7 @@ bool cRecordControls::Start(cTimer *Timer, bool Pause)
}
}
}
- else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending())) {
+ else if (!Timer || !Timer->Pending()) {
isyslog("no free DVB device to record channel %d!", ch);
Skins.Message(mtError, tr("No free DVB device to record!"));
}
diff --git a/menuitems.c b/menuitems.c
index e7797d6..dc3ea71 100644
--- a/menuitems.c
+++ b/menuitems.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menuitems.c 2.10 2011/08/12 13:19:40 kls Exp $
+ * $Id: menuitems.c 2.11 2012/03/02 15:49:57 kls Exp $
*/
#include "menuitems.h"
@@ -26,6 +26,7 @@ const char *FileNameChars = trNOOP("FileNameChars$ abcdefghijklmnopqrstuvwxyz012
cMenuEditItem::cMenuEditItem(const char *Name)
{
name = strdup(Name ? Name : "???");
+ SetHelp(NULL);
}
cMenuEditItem::~cMenuEditItem()
@@ -40,6 +41,27 @@ void cMenuEditItem::SetValue(const char *Value)
cStatus::MsgOsdCurrentItem(buffer);
}
+void cMenuEditItem::SetHelp(const char *Red, const char *Green, const char *Yellow, const char *Blue)
+{
+ // strings are NOT copied - must be constants!!!
+ helpRed = Red;
+ helpGreen = Green;
+ helpYellow = Yellow;
+ helpBlue = Blue;
+ helpDisplayed = false;
+}
+
+bool cMenuEditItem::DisplayHelp(void)
+{
+ bool HasHelp = helpRed || helpGreen || helpYellow || helpBlue;
+ if (HasHelp && !helpDisplayed) {
+ cSkinDisplay::Current()->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
+ cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
+ helpDisplayed = true;
+ }
+ return HasHelp;
+}
+
// --- cMenuEditIntItem ------------------------------------------------------
cMenuEditIntItem::cMenuEditIntItem(const char *Name, int *Value, int Min, int Max, const char *MinString, const char *MaxString)
@@ -382,9 +404,9 @@ void cMenuEditStrItem::LeaveEditMode(bool SaveValue)
void cMenuEditStrItem::SetHelpKeys(void)
{
if (InEditMode())
- cSkinDisplay::Current()->SetButtons(tr("Button$ABC/abc"), insert ? tr("Button$Overwrite") : tr("Button$Insert"), tr("Button$Delete"));
+ SetHelp(tr("Button$ABC/abc"), insert ? tr("Button$Overwrite") : tr("Button$Insert"), tr("Button$Delete"));
else
- cSkinDisplay::Current()->SetButtons(NULL);
+ SetHelp(NULL);
}
uint *cMenuEditStrItem::IsAllowed(uint c)
diff --git a/menuitems.h b/menuitems.h
index a6f2743..db31bda 100644
--- a/menuitems.h
+++ b/menuitems.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menuitems.h 2.5 2011/06/13 13:46:03 kls Exp $
+ * $Id: menuitems.h 2.6 2012/03/02 15:49:57 kls Exp $
*/
#ifndef __MENUITEMS_H
@@ -19,10 +19,15 @@ extern const char *FileNameChars;
class cMenuEditItem : public cOsdItem {
private:
char *name;
+ const char *helpRed, *helpGreen, *helpYellow, *helpBlue;
+ bool helpDisplayed;
+protected:
+ void SetHelp(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);
public:
cMenuEditItem(const char *Name);
~cMenuEditItem();
void SetValue(const char *Value);
+ bool DisplayHelp(void);
};
class cMenuEditIntItem : public cMenuEditItem {
diff --git a/osd.c b/osd.c
index ab24e17..f9a7642 100644
--- a/osd.c
+++ b/osd.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osd.c 2.23 2011/08/15 09:27:39 kls Exp $
+ * $Id: osd.c 2.25 2012/03/02 10:48:19 kls Exp $
*/
#include "osd.h"
@@ -812,11 +812,11 @@ cBitmap *cBitmap::Scaled(double FactorX, double FactorY, bool AntiAlias)
// Fixed point scaling code based on www.inversereality.org/files/bitmapscaling.pdf
// by deltener@mindtremors.com
cBitmap *b = new cBitmap(int(round(Width() * FactorX)), int(round(Height() * FactorY)), Bpp(), X0(), Y0());
- b->Replace(*this); // copy palette
int RatioX = (Width() << 16) / b->Width();
int RatioY = (Height() << 16) / b->Height();
if (!AntiAlias || FactorX <= 1.0 && FactorY <= 1.0) {
// Downscaling - no anti-aliasing:
+ b->Replace(*this); // copy palette
tIndex *DestRow = b->bitmap;
int SourceY = 0;
for (int y = 0; y < b->Height(); y++) {
@@ -834,6 +834,7 @@ cBitmap *cBitmap::Scaled(double FactorX, double FactorY, bool AntiAlias)
else {
// Upscaling - anti-aliasing:
b->SetBpp(8);
+ b->Replace(*this); // copy palette (must be done *after* SetBpp()!)
int SourceY = 0;
for (int y = 0; y < b->Height() - 1; y++) {
int SourceX = 0;
@@ -1007,7 +1008,7 @@ void cPixmap::SetLayer(int Layer)
void cPixmap::SetAlpha(int Alpha)
{
Lock();
- Alpha = min(max(Alpha, ALPHA_TRANSPARENT), ALPHA_OPAQUE);
+ Alpha = constrain(Alpha, ALPHA_TRANSPARENT, ALPHA_OPAQUE);
if (Alpha != alpha) {
MarkViewPortDirty(viewPort);
alpha = Alpha;
@@ -1647,8 +1648,8 @@ void cOsd::SetOsdPosition(int Left, int Top, int Width, int Height)
{
osdLeft = Left;
osdTop = Top;
- osdWidth = min(max(Width, MINOSDWIDTH), MAXOSDWIDTH);
- osdHeight = min(max(Height, MINOSDHEIGHT), MAXOSDHEIGHT);
+ osdWidth = constrain(Width, MINOSDWIDTH, MAXOSDWIDTH);
+ osdHeight = constrain(Height, MINOSDHEIGHT, MAXOSDHEIGHT);
}
void cOsd::SetAntiAliasGranularity(uint FixedColors, uint BlendColors)
diff --git a/osdbase.c b/osdbase.c
index b0df4de..0a4dc32 100644
--- a/osdbase.c
+++ b/osdbase.c
@@ -4,13 +4,14 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.c 2.3 2010/12/12 13:41:28 kls Exp $
+ * $Id: osdbase.c 2.4 2012/03/02 15:49:57 kls Exp $
*/
#include "osdbase.h"
#include <string.h>
#include "device.h"
#include "i18n.h"
+#include "menuitems.h"
#include "remote.h"
#include "status.h"
@@ -85,6 +86,7 @@ cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4)
current = marked = -1;
subMenu = NULL;
helpRed = helpGreen = helpYellow = helpBlue = NULL;
+ helpDisplayed = false;
status = NULL;
if (!displayMenuCount++)
SetDisplayMenu();
@@ -154,6 +156,15 @@ void cOsdMenu::SetTitle(const char *Title)
title = strdup(Title);
}
+void cOsdMenu::DisplayHelp(bool Force)
+{
+ if (!helpDisplayed || Force) {
+ displayMenu->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
+ cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
+ helpDisplayed = true;
+ }
+}
+
void cOsdMenu::SetHelp(const char *Red, const char *Green, const char *Yellow, const char *Blue)
{
// strings are NOT copied - must be constants!!!
@@ -161,8 +172,7 @@ void cOsdMenu::SetHelp(const char *Red, const char *Green, const char *Yellow, c
helpGreen = Green;
helpYellow = Yellow;
helpBlue = Blue;
- displayMenu->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
- cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
+ DisplayHelp(true);
}
void cOsdMenu::Del(int Index)
@@ -205,8 +215,7 @@ void cOsdMenu::Display(void)
displayMenu->SetTabs(cols[0], cols[1], cols[2], cols[3], cols[4]);//XXX
displayMenu->SetTitle(title);
cStatus::MsgOsdTitle(title);
- displayMenu->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
- cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
+ DisplayHelp(true);
int count = Count();
if (count > 0) {
int ni = 0;
@@ -263,6 +272,12 @@ void cOsdMenu::DisplayCurrent(bool Current)
cStatus::MsgOsdCurrentItem(item->Text());
if (!Current)
item->SetFresh(true); // leaving the current item resets 'fresh'
+ if (cMenuEditItem *MenuEditItem = dynamic_cast<cMenuEditItem *>(item)) {
+ if (!MenuEditItem->DisplayHelp())
+ DisplayHelp();
+ else
+ helpDisplayed = false;
+ }
}
}
diff --git a/osdbase.h b/osdbase.h
index 91c5ff7..b9d22ae 100644
--- a/osdbase.h
+++ b/osdbase.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.h 2.1 2010/01/16 14:25:31 kls Exp $
+ * $Id: osdbase.h 2.2 2012/03/02 15:49:57 kls Exp $
*/
#ifndef __OSDBASE_H
@@ -92,9 +92,11 @@ private:
int first, current, marked;
cOsdMenu *subMenu;
const char *helpRed, *helpGreen, *helpYellow, *helpBlue;
+ bool helpDisplayed;
char *status;
int digit;
bool hasHotkeys;
+ void DisplayHelp(bool Force = false);
protected:
void SetDisplayMenu(void);
cSkinDisplayMenu *DisplayMenu(void) { return displayMenu; }
diff --git a/pat.c b/pat.c
index b7493ec..d9b93f6 100644
--- a/pat.c
+++ b/pat.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: pat.c 2.16 2011/04/17 13:45:25 kls Exp $
+ * $Id: pat.c 2.17 2012/03/02 10:56:45 kls Exp $
*/
#include "pat.h"
@@ -360,7 +360,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
break;
case 3: // STREAMTYPE_11172_AUDIO
case 4: // STREAMTYPE_13818_AUDIO
- case 0x0F: // ISO/IEC 13818-7 Audio with ADTS transport sytax
+ case 0x0F: // ISO/IEC 13818-7 Audio with ADTS transport syntax
case 0x11: // ISO/IEC 14496-3 Audio with LATM transport syntax
{
if (NumApids < MAXAPIDS) {
diff --git a/po/ar.po b/po/ar.po
index f8a1016..f01718d 100644
--- a/po/ar.po
+++ b/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: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1053,9 +1053,6 @@ msgstr ""
msgid "Setup.Recording$Margin at stop (min)"
msgstr ""
-msgid "Setup.Recording$Primary limit"
-msgstr "الحدود الابتدائية"
-
msgid "Setup.Recording$Default priority"
msgstr "الاولويات الافتراضية"
@@ -1367,60 +1364,3 @@ msgstr "اضغط اى زر لالغاء اعادة التشغيل"
#, c-format
msgid "VDR will shut down in %s minutes"
msgstr "البرنامج سيقوم بالاغلاق بعد%s دقيقة "
-
-#~ msgid "Path"
-#~ msgstr "المسار"
-
-#~ msgid "Timer commands"
-#~ msgstr "اوامر الموءقت"
-
-#~ msgid "Rename recording"
-#~ msgstr "اعادة تسمية التسجيل"
-
-#~ msgid "Date"
-#~ msgstr "التاريخ"
-
-#~ msgid "Length"
-#~ msgstr "الطول"
-
-#~ msgid "Size"
-#~ msgstr "الحجم"
-
-#~ msgid "Delete marks information?"
-#~ msgstr "حذف معلومات العلامة"
-
-#~ msgid "Delete resume information?"
-#~ msgstr "حذف معلومات المواصلة"
-
-#~ msgid "Setup.OSD$Main menu command position"
-#~ msgstr "موضع اوامر القائمة الرئسية"
-
-#~ msgid "Setup.EPG$Show progress bar"
-#~ msgstr "اضهار شريط التقدم"
-
-#~ msgid "Setup.Recording$Max. recording size (GB)"
-#~ msgstr "اقصى حجم للتسجيل م ب"
-
-#~ msgid "Setup.Recording$Hard Link Cutter"
-#~ msgstr "قاطع وصلات الاختصرات"
-
-#~ msgid "Setup.Recording$Show date"
-#~ msgstr "اظهر التاريخ"
-
-#~ msgid "Setup.Recording$Show time"
-#~ msgstr "اظهر تاريخ التعديل"
-
-#~ msgid "Setup.Recording$Show length"
-#~ msgstr "اظهر VPS"
-
-#~ msgid "Rename$Up"
-#~ msgstr "اعلى"
-
-#~ msgid "Rename$Down"
-#~ msgstr "اسفل"
-
-#~ msgid "Rename$Previous"
-#~ msgstr "السابق"
-
-#~ msgid "Rename$Next"
-#~ msgstr "التالى"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 58e570e..3e23df9 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1032,9 +1032,6 @@ msgstr "Marge d'inici de gravaci (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Marge de fi de gravaci (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Lmit primari"
-
msgid "Setup.Recording$Default priority"
msgstr "Prioritat per defecte"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index cdf725a..b37ea0b 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1031,9 +1031,6 @@ msgstr "Nahrávat před začátkem (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Nahrávat po konci (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Primární limit"
-
msgid "Setup.Recording$Default priority"
msgstr "Výchozí priorita"
diff --git a/po/da_DK.po b/po/da_DK.po
index 7fa4cd9..84eff60 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1029,9 +1029,6 @@ msgstr "Margin ved start (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Margin ved stop (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Primr grnse"
-
msgid "Setup.Recording$Default priority"
msgstr "Standard prioritet"
diff --git a/po/de_DE.po b/po/de_DE.po
index 4c36994..5b185e9 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1029,9 +1029,6 @@ msgstr "Vorlauf zum Timer-Beginn (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Nachlauf am Timer-Ende (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Primr-Limit"
-
msgid "Setup.Recording$Default priority"
msgstr "Default-Prioritt"
diff --git a/po/el_GR.po b/po/el_GR.po
index a4fd80c..4c4ff12 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1029,9 +1029,6 @@ msgstr " ()"
msgid "Setup.Recording$Margin at stop (min)"
msgstr " ()"
-msgid "Setup.Recording$Primary limit"
-msgstr " "
-
msgid "Setup.Recording$Default priority"
msgstr " "
diff --git a/po/es_ES.po b/po/es_ES.po
index 3e4cad0..ffcc1b8 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1030,9 +1030,6 @@ msgstr "Comenzar grabacin antes (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Acabar grabacin despus (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Lmite primario"
-
msgid "Setup.Recording$Default priority"
msgstr "Prioridad por defecto"
diff --git a/po/et_EE.po b/po/et_EE.po
index 6d9c088..e4a9e19 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,26 +7,26 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
"Language: et\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-13\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "*** Invalid Channel ***"
msgstr "*** Vigane kanal ***"
msgid "Channel not available!"
-msgstr "Kanal ei ole kttesaadav!"
+msgstr "Kanal ei ole kättesaadav!"
msgid "Can't start Transfer Mode!"
-msgstr "lekandemooduse start nurjus!"
+msgstr "Siirderežiimi start nurjus!"
msgid "off"
-msgstr "vljas"
+msgstr "väljas"
msgid "on"
msgstr "sees"
@@ -41,10 +41,10 @@ msgid "Polarization"
msgstr "Polarisatsioon"
msgid "System"
-msgstr "Ssteem"
+msgstr "Süsteem"
msgid "Srate"
-msgstr "Smbolikiirus"
+msgstr "Sümbolikiirus"
msgid "Inversion"
msgstr "Inversioon"
@@ -74,10 +74,10 @@ msgid "Rolloff"
msgstr "Rolloff"
msgid "PlpId"
-msgstr ""
+msgstr "PLP-tunnus"
msgid "Starting EPG scan"
-msgstr "EPG skaneerimine kivitatud"
+msgstr "EPG skaneerimine käivitatud"
msgid "Content$Movie/Drama"
msgstr "Film/draama"
@@ -86,28 +86,28 @@ msgid "Content$Detective/Thriller"
msgstr "Krimi/triller"
msgid "Content$Adventure/Western/War"
-msgstr "Seiklus/western/sda"
+msgstr "Seiklus/western/sõda"
msgid "Content$Science Fiction/Fantasy/Horror"
-msgstr "Scifi/fantaasia/udus"
+msgstr "Scifi/fantaasia/õudus"
msgid "Content$Comedy"
-msgstr "Komdia"
+msgstr "Komöödia"
msgid "Content$Soap/Melodrama/Folkloric"
-msgstr "Sari/Melodraama/primuslik"
+msgstr "Sari/Melodraama/pärimuslik"
msgid "Content$Romance"
msgstr "Romanss"
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
-msgstr "Tsine/klassikaline/religioosne/ajaloofilm/draama"
+msgstr "Tõsine/klassikaline/religioosne/ajaloofilm/draama"
msgid "Content$Adult Movie/Drama"
-msgstr "Tiskasvanutele/draama"
+msgstr "Täiskasvanutele/draama"
msgid "Content$News/Current Affairs"
-msgstr "Uudised/pevakajaline"
+msgstr "Uudised/päevakajaline"
msgid "Content$News/Weather Report"
msgstr "Uudised/ilmateade"
@@ -125,7 +125,7 @@ msgid "Content$Show/Game Show"
msgstr "Meelelahutus"
msgid "Content$Game Show/Quiz/Contest"
-msgstr "Sumng/mlumng/vistlus"
+msgstr "Sõumäng/mälumäng/võistlus"
msgid "Content$Variety Show"
msgstr "Varietee"
@@ -137,7 +137,7 @@ msgid "Content$Sports"
msgstr "Sport"
msgid "Content$Special Event"
-msgstr "Erisndmus"
+msgstr "Erisündmus"
msgid "Content$Sport Magazine"
msgstr "Spordiajakiri"
@@ -152,7 +152,7 @@ msgid "Content$Team Sports"
msgstr "Meeskonnasport"
msgid "Content$Athletics"
-msgstr "Kergejustik"
+msgstr "Kergejõustik"
msgid "Content$Motor Sport"
msgstr "Autosport"
@@ -167,7 +167,7 @@ msgid "Content$Equestrian"
msgstr "Ratsutamine"
msgid "Content$Martial Sports"
-msgstr "Vitluskunst"
+msgstr "Võitluskunst"
msgid "Content$Children's/Youth Programme"
msgstr "Laste- ja noortesaade"
@@ -182,7 +182,7 @@ msgid "Content$Entertainment Programme for 10 to 16"
msgstr "Meelelahutus 10-16 aastastele"
msgid "Content$Informational/Educational/School Programme"
-msgstr "ppe- ja haridussaade"
+msgstr "Õppe- ja haridussaade"
msgid "Content$Cartoons/Puppets"
msgstr "Joonisfilm/Nukufilm"
@@ -245,16 +245,16 @@ msgid "Content$Fashion"
msgstr "Mood"
msgid "Content$Social/Political/Economics"
-msgstr "hiskond/poliitika/majandus"
+msgstr "Ühiskond/poliitika/majandus"
msgid "Content$Magazine/Report/Documentary"
-msgstr "Ajakiri/reportaa/dokumentaal"
+msgstr "Ajakiri/reportaaž/dokumentaal"
msgid "Content$Economics/Social Advisory"
-msgstr "Majandus/majandusnuanne"
+msgstr "Majandus/majandusnõuanne"
msgid "Content$Remarkable People"
-msgstr "Thelepanuvrsed isikud"
+msgstr "Tähelepanuväärsed isikud"
msgid "Content$Education/Science/Factual"
msgstr "Haridus/teadus/faktid"
@@ -266,16 +266,16 @@ msgid "Content$Technology/Natural Sciences"
msgstr "Tehnoloogia/loodusteadus"
msgid "Content$Medicine/Physiology/Psychology"
-msgstr "Meditsiin/fsioloogia/pshholoogia"
+msgstr "Meditsiin/füsioloogia/psühholoogia"
msgid "Content$Foreign Countries/Expeditions"
-msgstr "Vlisriigid/ekspeditsioon"
+msgstr "Välisriigid/ekspeditsioon"
msgid "Content$Social/Spiritual Sciences"
-msgstr "hiskondlik/Hingeteadus"
+msgstr "Ühiskondlik/Hingeteadus"
msgid "Content$Further Education"
-msgstr "Tiendpe"
+msgstr "Täiendõpe"
msgid "Content$Languages"
msgstr "Keeled"
@@ -287,7 +287,7 @@ msgid "Content$Tourism/Travel"
msgstr "Turism/reisimine"
msgid "Content$Handicraft"
-msgstr "Ksit"
+msgstr "Käsitöö"
msgid "Content$Motoring"
msgstr "Autondus"
@@ -314,7 +314,7 @@ msgid "Content$Unpublished"
msgstr "Avaldamata"
msgid "Content$Live Broadcast"
-msgstr "Otselekanne"
+msgstr "Otseülekanne"
#, c-format
msgid "ParentalRating$from %d"
@@ -332,56 +332,56 @@ msgid "LanguageCode$eng"
msgstr "est"
msgid "Phase 1: Detecting RC code type"
-msgstr "Samm 1: Kodeerimisssteemi tuvastamine"
+msgstr "Samm 1: Kodeerimissüsteemi tuvastamine"
msgid "Press any key on the RC unit"
msgstr "Vajuta puldil suvalist klahvi"
msgid "RC code detected!"
-msgstr "Kodeerimisssteem tuvastatud!"
+msgstr "Kodeerimissüsteem tuvastatud!"
msgid "Do not press any key..."
-msgstr "ra vajuta puldil htki klahvi..."
+msgstr "Ära vajuta puldil ühtki klahvi..."
msgid "Phase 2: Learning specific key codes"
-msgstr "Samm 2: Klahvide petamine"
+msgstr "Samm 2: Klahvide õpetamine"
#, c-format
msgid "Press key for '%s'"
msgstr "Vajuta klahvile '%s'"
msgid "Press 'Up' to confirm"
-msgstr "Kinnitamiseks vajuta 'les'"
+msgstr "Kinnitamiseks vajuta 'Üles'"
msgid "Press 'Down' to continue"
-msgstr "Jtkamiseks vajuta 'Alla'"
+msgstr "Jätkamiseks vajuta 'Alla'"
msgid "(press 'Up' to go back)"
-msgstr "(tagasiminekuks vajuta 'les')"
+msgstr "(tagasiminekuks vajuta 'Üles')"
msgid "(press 'Down' to end key definition)"
-msgstr "(lpetamiseks vajuta 'Alla')"
+msgstr "(lõpetamiseks vajuta 'Alla')"
msgid "(press 'Menu' to skip this key)"
-msgstr "(selle klahvi vahelejtmiseks vajuta 'Men')"
+msgstr "(selle klahvi vahelejätmiseks vajuta 'Menüü')"
msgid "Learning Remote Control Keys"
-msgstr "Kaugjuhtimispuldi petamine"
+msgstr "Kaugjuhtimispuldi õpetamine"
msgid "Phase 3: Saving key codes"
msgstr "Samm 3: Klavhikoodide salvestamine"
msgid "Press 'Up' to save, 'Down' to cancel"
-msgstr "Salvestamiseks vajuta 'les' ja katkestamiseks 'Alla'"
+msgstr "Salvestamiseks vajuta 'Üles' ja katkestamiseks 'Alla'"
msgid "Key$Up"
-msgstr "les"
+msgstr "Üles"
msgid "Key$Down"
msgstr "Alla"
msgid "Key$Menu"
-msgstr "Men"
+msgstr "Menüü"
msgid "Key$Ok"
msgstr "Ok"
@@ -429,7 +429,7 @@ msgid "Key$FastRew"
msgstr "Tagasikerimine"
msgid "Key$Next"
-msgstr "Jrgmine"
+msgstr "Järgmine"
msgid "Key$Prev"
msgstr "Eelmine"
@@ -453,7 +453,7 @@ msgid "Key$Volume-"
msgstr "Helitugevus-"
msgid "Key$Mute"
-msgstr "Hletu"
+msgstr "Hääletu"
msgid "Key$Audio"
msgstr "Audio"
@@ -474,10 +474,10 @@ msgid "Key$Recordings"
msgstr "Salvestused"
msgid "Key$Setup"
-msgstr "Stted"
+msgstr "Sätted"
msgid "Key$Commands"
-msgstr "Ksud"
+msgstr "Käsud"
msgid "Key$User0"
msgstr "Lisaklahv0"
@@ -519,7 +519,7 @@ msgid "Free To Air"
msgstr "FTA"
msgid "encrypted"
-msgstr "krptitud"
+msgstr "krüptitud"
msgid "Edit channel"
msgstr "Kanali muutmine"
@@ -582,7 +582,7 @@ msgid "Button$Delete"
msgstr "Kustutada"
msgid "Button$Mark"
-msgstr "Mrkimine"
+msgstr "Märkimine"
msgid "Channel is being used by a timer!"
msgstr "Kanal on taimeri kasutuses!"
@@ -604,13 +604,13 @@ msgstr "Sellenimeline kaust juba olemas!"
#, c-format
msgid "Folder name must not contain '%c'!"
-msgstr "Kausta nimi ei saa sisaldada '%c' smbolit!"
+msgstr "Kausta nimi ei saa sisaldada '%c' sümbolit!"
msgid "Button$Select"
msgstr "Vali"
msgid "Delete folder and all sub folders?"
-msgstr "Kustutada kaust ja kik alamkaustad?"
+msgstr "Kustutada kaust ja kõik alamkaustad?"
msgid "Delete folder?"
msgstr "Kustutada kaust?"
@@ -625,7 +625,7 @@ msgid "Channel"
msgstr "Kanal"
msgid "Day"
-msgstr "Pev"
+msgstr "Päev"
msgid "Start"
msgstr "Start"
@@ -649,7 +649,7 @@ msgid "Button$Folder"
msgstr "Kaust"
msgid "First day"
-msgstr "Esimene pev"
+msgstr "Esimene päev"
msgid "Select folder"
msgstr "Kausta valik"
@@ -667,7 +667,7 @@ msgid "Delete timer?"
msgstr "Kustutada taimer?"
msgid "Timer still recording - really delete?"
-msgstr "Salvestus aktiivne - kustutada?"
+msgstr "Salvestus aktiivne - kas kustutada?"
msgid "Event"
msgstr "Saade"
@@ -685,7 +685,7 @@ msgid "What's on now?"
msgstr "Hetkel eetris"
msgid "What's on next?"
-msgstr "Jrgmisena eetris"
+msgstr "Järgmisena eetris"
msgid "Button$Next"
msgstr "Tulekul"
@@ -697,7 +697,7 @@ msgid "Button$Schedule"
msgstr "Ajakava"
msgid "Can't switch channel!"
-msgstr "Kanali vahetus ei ole vimalik!"
+msgstr "Kanali vahetus ei ole võimalik!"
#, c-format
msgid "Schedule - %s"
@@ -708,10 +708,10 @@ msgid "This event - %s"
msgstr "Sama saade - %s"
msgid "This event - all channels"
-msgstr "Sama saade - kik kanalid"
+msgstr "Sama saade - kõik kanalid"
msgid "All events - all channels"
-msgstr "Kik saated - kik kanalid"
+msgstr "Kõik saated - kõik kanalid"
#, c-format
msgid "Please enter %d digits!"
@@ -736,7 +736,7 @@ msgid "Button$Open"
msgstr "Avada"
msgid "Commands"
-msgstr "Ksud"
+msgstr "Käsud"
msgid "Error while accessing recording!"
msgstr "Salvestuse taasesitus nurjus!"
@@ -745,25 +745,25 @@ msgid "Delete recording?"
msgstr "Kustutada salvestus?"
msgid "Recording is being edited - really delete?"
-msgstr ""
+msgstr "Salvestust on muudetud - kas kustutada?"
msgid "Error while deleting recording!"
msgstr "Salvestuse kustutamine nurjus!"
msgid "Recording commands"
-msgstr "Salvestuse ksud"
+msgstr "Salvestuse käsud"
msgid "never"
msgstr "ei"
msgid "skin dependent"
-msgstr "kestast sltuv"
+msgstr "kestast sõltuv"
msgid "always"
msgstr "alati"
msgid "OSD"
-msgstr "Ekraanimen"
+msgstr "Ekraanimenüü"
msgid "Setup.OSD$Language"
msgstr "Keel"
@@ -784,13 +784,13 @@ msgid "Setup.OSD$Width (%)"
msgstr "Laius (%)"
msgid "Setup.OSD$Height (%)"
-msgstr "Krgus (%)"
+msgstr "Kõrgus (%)"
msgid "Setup.OSD$Message time (s)"
msgstr "Teate kuvamisaeg (s)"
msgid "Setup.OSD$Use small font"
-msgstr "Vikese fondi kasutus"
+msgstr "Väikese fondi kasutus"
msgid "Setup.OSD$Anti-alias"
msgstr "Fondi silumine"
@@ -799,7 +799,7 @@ msgid "Setup.OSD$Default font"
msgstr "Vaikefont"
msgid "Setup.OSD$Small font"
-msgstr "Vike font"
+msgstr "Väike font"
msgid "Setup.OSD$Fixed font"
msgstr "Fikseeritud font"
@@ -808,7 +808,7 @@ msgid "Setup.OSD$Default font size (%)"
msgstr "Vaikefondi suurus (%)"
msgid "Setup.OSD$Small font size (%)"
-msgstr "Vikese fondi suurus (%)"
+msgstr "Väikese fondi suurus (%)"
msgid "Setup.OSD$Fixed font size (%)"
msgstr "Fiks. fondi suurus (%)"
@@ -820,7 +820,7 @@ msgid "bottom"
msgstr "all"
msgid "top"
-msgstr "leval"
+msgstr "üleval"
msgid "Setup.OSD$Channel info time (s)"
msgstr "Kanaliinfo kuvamisaeg (s)"
@@ -832,19 +832,19 @@ msgid "Setup.OSD$Timeout requested channel info"
msgstr "Kanaliinfo ajapiirang"
msgid "Setup.OSD$Scroll pages"
-msgstr "Leheklje kerimine"
+msgstr "Lehekülje kerimine"
msgid "Setup.OSD$Scroll wraps"
msgstr "Ridade ringkerimine"
msgid "Setup.OSD$Menu key closes"
-msgstr "Sulgemine Men klahviga"
+msgstr "Sulgemine Menüü klahviga"
msgid "Setup.OSD$Recording directories"
msgstr "Kausta nime salvestamine"
msgid "Setup.OSD$Folders in timer menu"
-msgstr "Kaustad taimeri mens"
+msgstr "Kaustad taimeri menüüs"
msgid "Setup.OSD$Number keys for characters"
msgstr "Teksti sisestamine numbriklahvidega"
@@ -865,10 +865,10 @@ msgid "Setup.EPG$EPG linger time (min)"
msgstr "Vana EPG viide (min)"
msgid "Setup.EPG$Set system time"
-msgstr "Kella snkroniseerimine"
+msgstr "Kella sünkroniseerimine"
msgid "Setup.EPG$Use time from transponder"
-msgstr "Snkroniseerimise transponder"
+msgstr "Sünkroniseerimise transponder"
#. TRANSLATORS: note the plural!
msgid "Setup.EPG$Preferred languages"
@@ -918,7 +918,7 @@ msgid "Setup.DVB$Primary DVB interface"
msgstr "Esmane DVB seade"
msgid "Setup.DVB$Video format"
-msgstr "TV klgsuhe"
+msgstr "TV külgsuhe"
msgid "Setup.DVB$Video display format"
msgstr "Video kuvamise formaat"
@@ -930,7 +930,7 @@ msgid "Setup.DVB$Update channels"
msgstr "Kanalite uuendamine"
msgid "Setup.DVB$Audio languages"
-msgstr "Audio keeled"
+msgstr "Audio keeli"
msgid "Setup.DVB$Audio language"
msgstr "Audio keel"
@@ -939,7 +939,7 @@ msgid "Setup.DVB$Display subtitles"
msgstr "Subtiitrite kuvamine"
msgid "Setup.DVB$Subtitle languages"
-msgstr "Subtiitrite keeled"
+msgstr "Subtiitrite keeli"
msgid "Setup.DVB$Subtitle language"
msgstr "Subtiitri keel"
@@ -948,10 +948,10 @@ msgid "Setup.DVB$Subtitle offset"
msgstr "Subtiitrite nihe"
msgid "Setup.DVB$Subtitle foreground transparency"
-msgstr "Subtiitri lbipaistvus"
+msgstr "Subtiitri läbipaistvus"
msgid "Setup.DVB$Subtitle background transparency"
-msgstr "Subtiitri tausta lbipaistvus"
+msgstr "Subtiitri tausta läbipaistvus"
msgid "LNB"
msgstr "LNB"
@@ -970,40 +970,40 @@ msgstr "HI LNB sagedus (MHz)"
#, c-format
msgid "Setup.LNB$Device %d connected to sat cable"
-msgstr ""
+msgstr "DVB seade %d ühendatud SAT-kaabliga"
msgid "Setup.LNB$own"
-msgstr ""
+msgstr "oma"
msgid "CAM reset"
-msgstr "CAM taaskivitamine"
+msgstr "CAM taaskäivitamine"
msgid "CAM present"
msgstr "CAM esitletud"
msgid "CAM ready"
-msgstr "CAM tvalmis"
+msgstr "CAM töövalmis"
msgid "CAM"
msgstr "CAM"
msgid "Button$Menu"
-msgstr "Men"
+msgstr "Menüü"
msgid "Button$Reset"
msgstr "Reset"
msgid "Opening CAM menu..."
-msgstr "CAM-men avamine..."
+msgstr "CAM-menüü avamine..."
msgid "Can't open CAM menu!"
-msgstr "Ei saa avada CAM mend!"
+msgstr "Ei saa avada CAM menüüd!"
msgid "CAM is in use - really reset?"
-msgstr "CAM on kasutuses - taaskivitada?"
+msgstr "CAM on kasutuses - taaskäivitada?"
msgid "Can't reset CAM!"
-msgstr "CAM mooduli taaskivitus nurjus!"
+msgstr "CAM mooduli taaskäivitus nurjus!"
msgid "do not pause live video"
msgstr "mitte peatada"
@@ -1027,25 +1027,22 @@ msgid "Setup.Recording$Margin at start (min)"
msgstr "Salvestamise algusvaru (min)"
msgid "Setup.Recording$Margin at stop (min)"
-msgstr "Salvestamise lpuvaru (min)"
-
-msgid "Setup.Recording$Primary limit"
-msgstr "Esmane prioriteet"
+msgstr "Salvestamise lõpuvaru (min)"
msgid "Setup.Recording$Default priority"
msgstr "Vaikimisi prioriteet"
msgid "Setup.Recording$Default lifetime (d)"
-msgstr "Salvestuse eluiga (pevi)"
+msgstr "Salvestuse eluiga (päevi)"
msgid "Setup.Recording$Pause key handling"
-msgstr "Pausi klahvi ksitsemine"
+msgstr "Pausi klahvi käsitsemine"
msgid "Setup.Recording$Pause priority"
msgstr "Pausi prioriteet"
msgid "Setup.Recording$Pause lifetime (d)"
-msgstr "Pausi eluiga (pevi)"
+msgstr "Pausi eluiga (päevi)"
msgid "Setup.Recording$Use episode name"
msgstr "Episoodinime kasutamine"
@@ -1057,7 +1054,7 @@ msgid "Setup.Recording$VPS margin (s)"
msgstr "VPS-i algusvaru (s)"
msgid "Setup.Recording$Mark instant recording"
-msgstr "Kiirsalvestuse mrgistamine"
+msgstr "Kiirsalvestuse märgistamine"
msgid "Setup.Recording$Name instant recording"
msgstr "Kiirsalvestuse nimi"
@@ -1078,22 +1075,22 @@ msgid "Replay"
msgstr "Taasesitus"
msgid "Setup.Replay$Multi speed mode"
-msgstr "Mitmekiiruse moodus"
+msgstr "Mitme kiiruse režiim"
msgid "Setup.Replay$Show replay mode"
-msgstr "Korduse moodus"
+msgstr "Korduse režiimi kuvamine"
msgid "Setup.Replay$Show remaining time"
-msgstr ""
+msgstr "Järelejäänud aja kuvamine"
msgid "Setup.Replay$Resume ID"
-msgstr "Jtkamise ID"
+msgstr "Jätkamise ID"
msgid "Miscellaneous"
-msgstr "Muud stted"
+msgstr "Muud sätted"
msgid "Setup.Miscellaneous$Min. event timeout (min)"
-msgstr "Min. saate taimaut (min)"
+msgstr "Min. aeg saateni (min)"
msgid "Setup.Miscellaneous$Min. user inactivity (min)"
msgstr "Min. kasutaja tegevusetus (min)"
@@ -1108,19 +1105,19 @@ msgid "Setup.Miscellaneous$Channel entry timeout (ms)"
msgstr "Kanali sisestamise ajalimiit (ms)"
msgid "Setup.Miscellaneous$Initial channel"
-msgstr "Kanal kivitamisel"
+msgstr "Kanal käivitamisel"
msgid "Setup.Miscellaneous$as before"
msgstr "endine"
msgid "Setup.Miscellaneous$Initial volume"
-msgstr "Helitugevus kivitamisel"
+msgstr "Helitugevus käivitamisel"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Kanalite ringkerimine"
msgid "Setup.Miscellaneous$Emergency exit"
-msgstr "Hdavljumine"
+msgstr "Hädaväljumine"
msgid "Plugins"
msgstr "Laiendusmoodulid"
@@ -1129,7 +1126,7 @@ msgid "This plugin has no setup parameters!"
msgstr "Sellel laienudusmoodulil ei ole seadeid!"
msgid "Setup"
-msgstr "Stted"
+msgstr "Sätted"
msgid "Restart"
msgstr "Restart"
@@ -1139,7 +1136,7 @@ msgstr "Restart?"
#. TRANSLATORS: note the leading and trailing blanks!
msgid " Stop recording "
-msgstr " Lpetada salvestamine "
+msgstr " Lõpetada salvestamine "
msgid "Schedule"
msgstr "Kava"
@@ -1149,7 +1146,7 @@ msgstr "VDR"
#. TRANSLATORS: note the leading blank!
msgid " Stop replaying"
-msgstr " Lpetada taasesitamine"
+msgstr " Lõpetada taasesitamine"
msgid "Button$Pause"
msgstr "Paus"
@@ -1158,23 +1155,23 @@ msgid "Button$Stop"
msgstr "Stopp"
msgid "Button$Resume"
-msgstr "Jtkata"
+msgstr "Jätkata"
#. TRANSLATORS: note the leading blank!
msgid " Cancel editing"
msgstr " Katkestada redigeerimine"
msgid "Stop recording?"
-msgstr "Lpetada salvestamine?"
+msgstr "Lõpetada salvestamine?"
msgid "Cancel editing?"
-msgstr "Thistada redigeermine?"
+msgstr "Tühistada redigeermine?"
msgid "No audio available!"
-msgstr "Audio kttesaamatu!"
+msgstr "Audio kättesaamatu!"
msgid "No subtitles"
-msgstr "Subtiitrid vljas"
+msgstr "Subtiitrid väljas"
msgid "No subtitles available!"
msgstr "Subtiitrid puuduvad"
@@ -1186,14 +1183,14 @@ msgid "No free DVB device to record!"
msgstr "Puudub vaba DVB seade salvestamiseks!"
msgid "Pausing live video..."
-msgstr "Otselekande peatamine..."
+msgstr "Otseülekande peatamine..."
msgid "Delete timeshift recording?"
msgstr "Kustutada ajanihke salvestus?"
#. TRANSLATORS: note the trailing blank!
msgid "Jump: "
-msgstr "Hpe: "
+msgstr "Hüpe: "
msgid "No editing marks defined!"
msgstr "Redigeerimise markerid puuduvad!"
@@ -1202,16 +1199,16 @@ msgid "Can't start editing process!"
msgstr "Redigeerimise start nurjus!"
msgid "Editing process started"
-msgstr "Redigeerimine kivitatud"
+msgstr "Redigeerimine käivitatud"
msgid "Editing process already active!"
msgstr "Redigeerimine juba aktiivne!"
msgid "FileNameChars$ abcdefghijklmnopqrstuvwxyz0123456789-.,#~\\^$[]|()*+?{}/:%@&"
-msgstr " abcdefghijklmnopqrsztuvwxy0123456789-.,#~\\^$[]|()*+?{}/:%@&"
+msgstr " abcdefghijklmnopqrsšzžtuvwõäöüxy0123456789-.,#~\\^$[]|()*+?{}/:%@&"
msgid "CharMap$ 0\t-.,1#~\\^$[]|()*+?{}/:%@&\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9"
-msgstr " 0\t-.,1#~\\^$[]|()*+?{}/:%@&\tabc2\tdef3\tghi4\tjkl5\tmno6\tpqrs7\ttuv8\twxyz9"
+msgstr " 0\t-.,1#~\\^$[]|()*+?{}/:%@&\tabcä2\tdef3\tghi4\tjkl5\tmnoõö6\tpqrsš7\ttuvü8\twxyzž9"
msgid "Button$ABC/abc"
msgstr "ABC/abc"
@@ -1226,39 +1223,39 @@ msgid "Plugin"
msgstr "Laiendusmoodul"
msgid "Up/Dn for new location - OK to move"
-msgstr "'les/Alla' uus asukoht - 'OK' kinnitus"
+msgstr "'Üles/Alla' uus asukoht - 'OK' kinnitus"
msgid "Channel locked (recording)!"
msgstr "Kanal lukus (salvestamine aktiivne)!"
msgid "Low disk space!"
-msgstr "Kvaketas tis!"
+msgstr "Kõvaketas täis!"
msgid "Regenerating index file"
msgstr "Indeksfaili regenereerimine"
msgid "Index file regeneration complete"
-msgstr "Indeksfaili regenereerimine lpetatud"
+msgstr "Indeksfaili regenereerimine lõpetatud"
msgid "Can't shutdown - option '-s' not given!"
-msgstr "Vljallitamine nurjus - '-s' parameeter puudub!"
+msgstr "Väljalülitamine nurjus - '-s' parameeter puudub!"
msgid "Editing - shut down anyway?"
-msgstr "Redigeerimine aktiive - llitada vlja?"
+msgstr "Redigeerimine aktiive - lülitada välja?"
msgid "Recording - shut down anyway?"
-msgstr "Salvestamine aktiivne - llitada vlja?"
+msgstr "Salvestamine aktiivne - lülitada välja?"
#, c-format
msgid "Recording in %ld minutes, shut down anyway?"
-msgstr "Salvestamine algab %ld minuti prast - llitada vlja?"
+msgstr "Salvestamine algab %ld minuti pärast - lülitada välja?"
msgid "shut down anyway?"
-msgstr "llitada vlja?"
+msgstr "lülitada välja?"
#, c-format
msgid "Plugin %s wakes up in %ld min, continue?"
-msgstr "Laiendusmoodul %s rkab %ld minuti prast, jtkata?"
+msgstr "Laiendusmoodul %s ärkab %ld minuti pärast, jätkata?"
msgid "Editing - restart anyway?"
msgstr "Redigeerimine aktiivne - restart?"
@@ -1288,53 +1285,53 @@ msgid "MonTueWedThuFriSatSun"
msgstr " E T K N R L P "
msgid "Monday"
-msgstr "Esmaspev"
+msgstr "Esmaspäev"
msgid "Tuesday"
-msgstr "Teisipev"
+msgstr "Teisipäev"
msgid "Wednesday"
-msgstr "Kolmapev"
+msgstr "Kolmapäev"
msgid "Thursday"
-msgstr "Neljapev"
+msgstr "Neljapäev"
msgid "Friday"
msgstr "Reede"
msgid "Saturday"
-msgstr "Laupev"
+msgstr "Laupäev"
msgid "Sunday"
-msgstr "Phapev"
+msgstr "Pühapäev"
msgid "Upcoming recording!"
msgstr "Salvestamine tulekul!"
msgid "Pause live video?"
-msgstr "Peatada otselekanne?"
+msgstr "Peatada otseülekanne?"
msgid "Recording started"
-msgstr "Salvestamine kivitatud"
+msgstr "Salvestamine käivitatud"
msgid "VDR will shut down later - press Power to force"
-msgstr "VDR llitub vlja hiljem - vajuta Power kiirendamiseks"
+msgstr "VDR lülitub välja hiljem - vajuta Power kiirendamiseks"
msgid "Press any key to cancel shutdown"
-msgstr "Vajuta suvalist klahvi vljallitamise thistamiseks"
+msgstr "Vajuta suvalist klahvi väljalülitamise tühistamiseks"
msgid "Switching primary DVB..."
-msgstr "Esmase DVB seadme mberllitus..."
+msgstr "Esmase DVB seadme ümberlülitus..."
msgid "Editing process failed!"
msgstr "Redigeerimine nurjus"
msgid "Editing process finished"
-msgstr "Redigeerimine lpetatud"
+msgstr "Redigeerimine lõpetatud"
msgid "Press any key to cancel restart"
msgstr "Restardi katkestamiseks vajuta suvalist klahvi"
#, c-format
msgid "VDR will shut down in %s minutes"
-msgstr "VDR llitub vlja %s minuti prast"
+msgstr "VDR lülitub välja %s minuti pärast"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 740f48f..365862d 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -321,7 +321,7 @@ msgstr "Suoralähetys"
#, c-format
msgid "ParentalRating$from %d"
-msgstr "K-%d"
+msgstr "%d"
msgid "No title"
msgstr "Ei esitystä"
@@ -748,7 +748,7 @@ msgid "Delete recording?"
msgstr "Poistetaanko tallenne?"
msgid "Recording is being edited - really delete?"
-msgstr ""
+msgstr "Tallennetta muokataan - poistetaanko silti?"
msgid "Error while deleting recording!"
msgstr "Tallenteen poistaminen epäonnistui!"
@@ -1032,9 +1032,6 @@ msgstr "Aloitusmarginaali (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Lopetusmarginaali (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Ensisijaisen sovittimen prioriteettiraja"
-
msgid "Setup.Recording$Default priority"
msgstr "Tallenteen oletusprioriteetti"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 32e23f5..e8577be 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1035,9 +1035,6 @@ msgstr "Marge antrieure (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Marge postrieure (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Limite primaire"
-
msgid "Setup.Recording$Default priority"
msgstr "Priorit par dfaut"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index f2c2795..86d9349 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1031,9 +1031,6 @@ msgstr "Rezerva na poetku snimanja (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Rezerva na kraju (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Standardno ogranienje"
-
msgid "Setup.Recording$Default priority"
msgstr "Zadani prioritet"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index a457e26..cfd20bd 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.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: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+0100\n"
"PO-Revision-Date: 2012-01-02 11:54+0200\n"
"Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
@@ -1033,9 +1033,6 @@ msgstr "Ideltols a kezdsnl (perc)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Ideltols a befejezsnl (perc)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Als priorits hatr"
-
msgid "Setup.Recording$Default priority"
msgstr "Alaprtelmezett priorits"
diff --git a/po/it_IT.po b/po/it_IT.po
index e7f9f92..3cbd2c0 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+0100\n"
"PO-Revision-Date: 2012-01-15 19:11+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
@@ -1036,9 +1036,6 @@ msgstr "Margine iniziale (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Margine finale (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Limite primario"
-
msgid "Setup.Recording$Default priority"
msgstr "Priorità predefinita"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index ab7b406..c7e2bb7 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1029,9 +1029,6 @@ msgstr "Įrašo pradžios užlaikymo laikas (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Įrašo pabaigos užlaikymo laikas (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Pagrindinio įvesties įrenginio suderinimo prioritetas"
-
msgid "Setup.Recording$Default priority"
msgstr "Numatytas laikmačio prioritetas"
diff --git a/po/mk_MK.po b/po/mk_MK.po
index 5fbd7b6..f8ac586 100644
--- a/po/mk_MK.po
+++ b/po/mk_MK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR-1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1030,9 +1030,6 @@ msgstr "Резерва на почеток на снимање (мин)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Резерва на крајот на снимање (мин)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Стандардно огранучување"
-
msgid "Setup.Recording$Default priority"
msgstr "Зададен приоритет"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 5b9f400..d96ff11 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1033,9 +1033,6 @@ msgstr "Tijd marge begin (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Tijd marge eind (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Eerste grens"
-
msgid "Setup.Recording$Default priority"
msgstr "Standaard prioriteit"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 1e5bc9c..6364395 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1030,9 +1030,6 @@ msgstr "Opptaksmargin start (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Opptaksmargin slutt (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Prioritetsgrense HovedDVB"
-
msgid "Setup.Recording$Default priority"
msgstr "Normal prioritet (Timer)"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 6b3195e..40ef301 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1030,9 +1030,6 @@ msgstr "Margines na pocztku (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Margines na kocu (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Podstawowy limit"
-
msgid "Setup.Recording$Default priority"
msgstr "Domylny priorytet"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index f17ab90..b65937c 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.15\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1030,9 +1030,6 @@ msgstr "Margem de incio (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Margem do fim (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Limite primrio"
-
msgid "Setup.Recording$Default priority"
msgstr "PPrioridade padro"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 7e0046a..5ee348c 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1032,9 +1032,6 @@ msgstr "Marj la pornire (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Marj la oprire (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Limit primar"
-
msgid "Setup.Recording$Default priority"
msgstr "Prioritate implicit"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 2ead796..94e1a17 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1030,9 +1030,6 @@ msgstr " ()"
msgid "Setup.Recording$Margin at stop (min)"
msgstr " ()"
-msgid "Setup.Recording$Primary limit"
-msgstr ". . "
-
msgid "Setup.Recording$Default priority"
msgstr " "
diff --git a/po/sk_SK.po b/po/sk_SK.po
index e6140e4..7677895 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1029,9 +1029,6 @@ msgstr "Nahrva pred zaiatkom (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Nahrva po konci (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Hlavn limit"
-
msgid "Setup.Recording$Default priority"
msgstr "Predvolen priorita"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index e0b7e02..97b41e3 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1030,9 +1030,6 @@ msgstr "Premik zaetka snemanja (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Zamik konca snemanja (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Primarna meja"
-
msgid "Setup.Recording$Default priority"
msgstr "Privzeta prioriteta"
diff --git a/po/sr_SR.po b/po/sr_SR.po
index 9b58e1e..f86250f 100644
--- a/po/sr_SR.po
+++ b/po/sr_SR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.1\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1051,9 +1051,6 @@ msgstr "Rezerva na poetku snimanja (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Rezerva na kraju (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Standardno ogranienje"
-
msgid "Setup.Recording$Default priority"
msgstr "Zadani prioritet"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index e79633e..fedf8d8 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1032,9 +1032,6 @@ msgstr "Marginal fr start (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Marginal fr stopp (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Primr grns"
-
msgid "Setup.Recording$Default priority"
msgstr "Normal prioritet"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 3a86e79..8275596 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+0100\n"
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
@@ -1029,9 +1029,6 @@ msgstr "Banda tolerans (dak)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Sonunda tolerans (dak)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Primer limit"
-
msgid "Setup.Recording$Default priority"
msgstr "Olaan priorite"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 6eebe92..1e10ad7 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1029,9 +1029,6 @@ msgstr "Випередження початку запису (хв)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "Запізнення зупинки запису (хв)"
-msgid "Setup.Recording$Primary limit"
-msgstr "Мін. пріоритет захоплення осн. пристрою"
-
msgid "Setup.Recording$Default priority"
msgstr "Пріоритет таймера по замовчуванню"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 05c9337..6504baf 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-02-16 13:18+0100\n"
+"POT-Creation-Date: 2012-02-25 14:32+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"
@@ -1032,9 +1032,6 @@ msgstr "时间正在开始 (min)"
msgid "Setup.Recording$Margin at stop (min)"
msgstr "时间正在停止 (min)"
-msgid "Setup.Recording$Primary limit"
-msgstr "主要限制"
-
msgid "Setup.Recording$Default priority"
msgstr "默认优先"
diff --git a/receiver.c b/receiver.c
index 6a9ba04..372cb2c 100644
--- a/receiver.c
+++ b/receiver.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: receiver.c 2.4 2010/12/12 23:16:25 kls Exp $
+ * $Id: receiver.c 2.5 2012/02/29 11:49:36 kls Exp $
*/
#include "receiver.h"
@@ -16,7 +16,7 @@ cReceiver::cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pid
{
device = NULL;
channelID = ChannelID;
- priority = Priority;
+ priority = constrain(Priority, MINPRIORITY, MAXPRIORITY);
numPids = 0;
AddPid(Pid);
AddPids(Pids1);
@@ -28,7 +28,7 @@ cReceiver::cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pid
cReceiver::cReceiver(const cChannel *Channel, int Priority)
{
device = NULL;
- priority = Priority;
+ priority = constrain(Priority, MINPRIORITY, MAXPRIORITY);
numPids = 0;
SetPids(Channel);
}
diff --git a/receiver.h b/receiver.h
index a5223ab..ec9d802 100644
--- a/receiver.h
+++ b/receiver.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: receiver.h 2.2 2011/12/04 13:38:17 kls Exp $
+ * $Id: receiver.h 2.5 2012/03/01 09:50:24 kls Exp $
*/
#ifndef __RECEIVER_H
@@ -43,15 +43,15 @@ public:
#ifdef LEGACY_CRECEIVER
cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pids1 = NULL, const int *Pids2 = NULL, const int *Pids3 = NULL);
#endif
- cReceiver(const cChannel *Channel = NULL, int Priority = -1);
+ cReceiver(const cChannel *Channel = NULL, int Priority = MINPRIORITY);
///< Creates a new receiver for the given Channel with the given Priority.
- ///< If Channel is not NULL, its pids set by a call to SetPids().
+ ///< If Channel is not NULL, its pids are set by a call to SetPids().
///< Otherwise pids can be added to the receiver by separate calls to the AddPid[s]
///< functions.
///< The total number of PIDs added to a receiver must not exceed MAXRECEIVEPIDS.
- ///< Priority may be any value in the range -99..99. Negative values indicate
- ///< that this cReceiver may be detached at any time (without blocking the
- ///< cDevice it is attached to).
+ ///< Priority may be any value in the range MINPRIORITY...MAXPRIORITY. Negative values indicate
+ ///< that this cReceiver may be detached at any time in favor of a timer recording
+ ///< or live viewing (without blocking the cDevice it is attached to).
virtual ~cReceiver();
bool AddPid(int Pid);
///< Adds the given Pid to the list of PIDs of this receiver.
diff --git a/recording.c b/recording.c
index 7617d73..47a9881 100644
--- a/recording.c
+++ b/recording.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.c 2.50 2012/02/19 10:44:45 kls Exp $
+ * $Id: recording.c 2.51 2012/02/26 13:58:26 kls Exp $
*/
#include "recording.h"
@@ -1571,7 +1571,7 @@ cIndexFile::cIndexFile(const char *FileName, bool Record, bool IsPesRecording, b
if (!Record && PauseLive) {
// Wait until the index file contains at least two frames:
time_t tmax = time(NULL) + MAXWAITFORINDEXFILE;
- while (time(NULL) < tmax && FileSize(fileName) < 2 * sizeof(tIndexTs))
+ while (time(NULL) < tmax && FileSize(fileName) < off_t(2 * sizeof(tIndexTs)))
cCondWait::SleepMs(INDEXFILETESTINTERVAL);
}
int delta = 0;
diff --git a/remux.c b/remux.c
index ff4d49b..bd06e7c 100644
--- a/remux.c
+++ b/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.63 2012/01/12 12:07:58 kls Exp $
+ * $Id: remux.c 2.64 2012/03/02 10:56:49 kls Exp $
*/
#include "remux.h"
@@ -514,7 +514,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
break;
case 0x03: // STREAMTYPE_11172_AUDIO
case 0x04: // STREAMTYPE_13818_AUDIO
- case 0x0F: // ISO/IEC 13818-7 Audio with ADTS transport sytax
+ case 0x0F: // ISO/IEC 13818-7 Audio with ADTS transport syntax
case 0x11: // ISO/IEC 14496-3 Audio with LATM transport syntax
{
if (NumApids < MAXAPIDS) {
diff --git a/skins.c b/skins.c
index 427e422..ccf8c09 100644
--- a/skins.c
+++ b/skins.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: skins.c 2.3 2011/08/21 11:21:19 kls Exp $
+ * $Id: skins.c 2.4 2012/02/20 11:47:15 kls Exp $
*/
#include "skins.h"
@@ -78,7 +78,7 @@ void cSkinDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5)
tabs[3] = Tab3 ? tabs[2] + Tab3 : 0;
tabs[4] = Tab4 ? tabs[3] + Tab4 : 0;
tabs[5] = Tab5 ? tabs[4] + Tab5 : 0;
- int AvgCharWidth = Setup.FontOsdSize * 3 / 5; // just an estimate
+ int AvgCharWidth = Setup.FontOsdSize * 4 / 6; // just an estimate
for (int i = 1; i < MaxTabs; i++)
tabs[i] *= AvgCharWidth;
}
diff --git a/timers.c b/timers.c
index 54ed1ba..a988011 100644
--- a/timers.c
+++ b/timers.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.c 2.5 2011/08/06 13:13:54 kls Exp $
+ * $Id: timers.c 2.8 2012/02/27 09:38:41 kls Exp $
*/
#include "timers.h"
@@ -384,13 +384,14 @@ time_t cTimer::SetTime(time_t t, int SecondsFromMidnight)
return mktime(&tm);
}
-char *cTimer::SetFile(const char *File)
+void cTimer::SetFile(const char *File)
{
if (!isempty(File))
Utf8Strn0Cpy(file, File, sizeof(file));
- return file;
}
+#define EITPRESENTFOLLOWINGRATE 10 // max. seconds between two occurrences of the "EIT present/following table for the actual multiplex" (2s by the standard, using some more for safety)
+
bool cTimer::Matches(time_t t, bool Directly, int Margin) const
{
startTime = stopTime = 0;
@@ -434,8 +435,12 @@ bool cTimer::Matches(time_t t, bool Directly, int Margin) const
if (Margin || !Directly) {
startTime = event->StartTime();
stopTime = event->EndTime();
- if (!Margin)
- return event->IsRunning(true);
+ if (!Margin) { // this is an actual check
+ if (event->Schedule()->PresentSeenWithin(EITPRESENTFOLLOWINGRATE)) // VPS control can only work with up-to-date events...
+ return event->IsRunning(true);
+ else
+ return startTime <= t && t < stopTime; // ...otherwise we fall back to normal timer handling
+ }
}
}
return startTime <= t + Margin && t < stopTime; // must stop *before* stopTime to allow adjacent timers
@@ -591,11 +596,42 @@ void cTimer::SetInVpsMargin(bool InVpsMargin)
inVpsMargin = InVpsMargin;
}
+void cTimer::SetDay(time_t Day)
+{
+ day = Day;
+}
+
+void cTimer::SetWeekDays(int WeekDays)
+{
+ weekdays = WeekDays;
+}
+
+void cTimer::SetStart(int Start)
+{
+ start = Start;
+}
+
+void cTimer::SetStop(int Stop)
+{
+ stop = Stop;
+}
+
void cTimer::SetPriority(int Priority)
{
priority = Priority;
}
+void cTimer::SetLifetime(int Lifetime)
+{
+ lifetime = Lifetime;
+}
+
+void cTimer::SetAux(const char *Aux)
+{
+ free(aux);
+ aux = strdup(Aux);
+}
+
void cTimer::SetDeferred(int Seconds)
{
deferred = time(NULL) + Seconds;
diff --git a/timers.h b/timers.h
index 1d733ee..aa746b1 100644
--- a/timers.h
+++ b/timers.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.h 2.1 2011/08/06 12:59:32 kls Exp $
+ * $Id: timers.h 2.3 2012/02/20 15:52:57 kls Exp $
*/
#ifndef __TIMERS_H
@@ -75,7 +75,7 @@ public:
bool DayMatches(time_t t) const;
static time_t IncDay(time_t t, int Days);
static time_t SetTime(time_t t, int SecondsFromMidnight);
- char *SetFile(const char *File);
+ void SetFile(const char *File);
bool Matches(time_t t = 0, bool Directly = false, int Margin = 0) const;
int Matches(const cEvent *Event, int *Overlap = NULL) const;
bool Expired(void) const;
@@ -86,7 +86,13 @@ public:
void SetRecording(bool Recording);
void SetPending(bool Pending);
void SetInVpsMargin(bool InVpsMargin);
+ void SetDay(time_t Day);
+ void SetWeekDays(int WeekDays);
+ void SetStart(int Start);
+ void SetStop(int Stop);
void SetPriority(int Priority);
+ void SetLifetime(int Lifetime);
+ void SetAux(const char *Aux);
void SetDeferred(int Seconds);
void SetFlags(uint Flags);
void ClrFlags(uint Flags);
diff --git a/tools.h b/tools.h
index 52bf8a7..4998141 100644
--- a/tools.h
+++ b/tools.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.h 2.15 2012/02/18 15:29:50 kls Exp $
+ * $Id: tools.h 2.16 2012/02/29 10:41:00 kls Exp $
*/
#ifndef __TOOLS_H
@@ -57,6 +57,8 @@ template<class T> inline int sgn(T a) { return a < 0 ? -1 : a > 0 ? 1 : 0; }
template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; }
#endif
+template<class T> inline T constrain(T v, T l, T h) { return v < l ? l : v > h ? h : v; }
+
void syslog_with_tid(int priority, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
#define BCDCHARTOINT(x) (10 * ((x & 0xF0) >> 4) + (x & 0xF))
diff --git a/transfer.c b/transfer.c
index 096fda3..2a92a82 100644
--- a/transfer.c
+++ b/transfer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: transfer.c 2.5 2010/01/30 11:10:25 kls Exp $
+ * $Id: transfer.c 2.6 2012/02/29 14:16:23 kls Exp $
*/
#include "transfer.h"
@@ -12,7 +12,7 @@
// --- cTransfer -------------------------------------------------------------
cTransfer::cTransfer(const cChannel *Channel)
-:cReceiver(Channel)
+:cReceiver(Channel, TRANSFERPRIORITY)
{
patPmtGenerator.SetChannel(Channel);
}
diff --git a/vdr.1 b/vdr.1
index d8322e1..b900b4e 100644
--- a/vdr.1
+++ b/vdr.1
@@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
-.\" $Id: vdr.1 2.7 2011/12/04 14:41:00 kls Exp $
+.\" $Id: vdr.1 2.8 2012/02/27 11:01:17 kls Exp $
.\"
.TH vdr 1 "10 Feb 2008" "1.6" "Video Disk Recorder"
.SH NAME
@@ -33,8 +33,7 @@ to be a "full featured" card, which means it must contain an MPEG decoder
and provide audio and video signal outputs.
\fBvdr\fR uses the On Screen Display of the DVB card to display its menus.
-It can be controlled by the PC keyboard, a home built "Remote Control Unit"
-(RCU) or the "Linux Infrared Remote Control" (LIRC).
+It can be controlled by the PC keyboard or the "Linux Infrared Remote Control" (LIRC).
Remote access is possible via the "Simple Video Disk Recorder Protocol" (SVDRP),
which can be accessed on port 6419, for instance by \fBtelnet\fR.
@@ -154,10 +153,6 @@ particular options) you can use
(note the quotes around the asterisk to prevent wildcard expansion).
.TP
-.BI \-\-rcu[= path ]
-Use a serial port remote control device.
-If \fIpath\fR is omitted, vdr uses \fI/dev/ttyS1\fR.
-.TP
.BI \-r\ cmd ,\ \-\-record= cmd
Call \fIcmd\fR before and after a recording. See the file \fIINSTALL\fR for
more information.
diff --git a/vdr.5 b/vdr.5
index 198c953..8463550 100644
--- a/vdr.5
+++ b/vdr.5
@@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
-.\" $Id: vdr.5 2.27 2012/01/11 13:16:57 kls Exp $
+.\" $Id: vdr.5 2.28 2012/02/27 11:05:15 kls Exp $
.\"
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
.SH NAME
@@ -541,7 +541,7 @@ units. Each line consists of one key assignment in the following format:
\fBname.key code\fR
where \fBname\fR is the name of the remote control (for instance KBD for the
-PC keyboard, RCU for the home-built "Remote Control Unit", or LIRC for the
+PC keyboard, or LIRC for the
"Linux Infrared Remote Control"), \fBkey\fR is the name of the key that is
defined (like Up, Down, Menu etc.), and \fBcode\fR is a character string that
this remote control delivers when the given key is pressed.
diff --git a/vdr.c b/vdr.c
index 417ee19..f01239a 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.tvdr.de
*
- * $Id: vdr.c 2.29 2012/02/19 11:37:35 kls Exp $
+ * $Id: vdr.c 2.30 2012/02/27 10:59:55 kls Exp $
*/
#include <getopt.h>
@@ -53,7 +53,6 @@
#include "menu.h"
#include "osdbase.h"
#include "plugin.h"
-#include "rcu.h"
#include "recording.h"
#include "shutdown.h"
#include "skinclassic.h"
@@ -201,14 +200,11 @@ int main(int argc, char *argv[])
bool UseKbd = true;
const char *LircDevice = NULL;
- const char *RcuDevice = NULL;
#if !defined(REMOTE_KBD)
UseKbd = false;
#endif
#if defined(REMOTE_LIRC)
LircDevice = LIRC_DEVICE;
-#elif defined(REMOTE_RCU)
- RcuDevice = RCU_DEVICE;
#endif
#if defined(VDR_USER)
VdrUser = VDR_USER;
@@ -236,7 +232,6 @@ int main(int argc, char *argv[])
{ "no-kbd", no_argument, NULL, 'n' | 0x100 },
{ "plugin", required_argument, NULL, 'P' },
{ "port", required_argument, NULL, 'p' },
- { "rcu", optional_argument, NULL, 'r' | 0x100 },
{ "record", required_argument, NULL, 'r' },
{ "shutdown", required_argument, NULL, 's' },
{ "split", no_argument, NULL, 's' | 0x100 },
@@ -350,9 +345,6 @@ int main(int argc, char *argv[])
break;
case 'P': PluginManager.AddPlugin(optarg);
break;
- case 'r' | 0x100:
- RcuDevice = optarg ? : RCU_DEVICE;
- break;
case 'r': cRecordingUserCommand::SetCommand(optarg);
break;
case 's': ShutdownHandler.SetShutdownCommand(optarg);
@@ -455,8 +447,6 @@ int main(int argc, char *argv[])
" -p PORT, --port=PORT use PORT for SVDRP (default: %d)\n"
" 0 turns off SVDRP\n"
" -P OPT, --plugin=OPT load a plugin defined by the given options\n"
- " --rcu[=PATH] use a remote control device, attached to PATH\n"
- " (default: %s)\n"
" -r CMD, --record=CMD call CMD before and after a recording\n"
" -s CMD, --shutdown=CMD call CMD to shutdown the computer\n"
" --split split edited files at the editing marks (only\n"
@@ -479,7 +469,6 @@ int main(int argc, char *argv[])
LIRC_DEVICE,
LOCDIR,
DEFAULTSVDRPPORT,
- RCU_DEVICE,
VideoDirectory,
DEFAULTWATCHDOG
);
@@ -707,8 +696,6 @@ int main(int argc, char *argv[])
}
// Remote Controls:
- if (RcuDevice)
- new cRcuRemote(RcuDevice);
if (LircDevice)
new cLircRemote(LircDevice);
if (!DaemonMode && HasStdin && UseKbd)