summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS29
-rw-r--r--HISTORY43
-rw-r--r--MANUAL4
-rw-r--r--Makefile4
-rw-r--r--PLUGINS/src/dvbhddevice/HISTORY31
-rw-r--r--PLUGINS/src/dvbhddevice/Makefile4
-rw-r--r--PLUGINS/src/dvbhddevice/dvbhddevice.c4
-rw-r--r--PLUGINS/src/dvbhddevice/dvbhdffdevice.c28
-rw-r--r--PLUGINS/src/dvbhddevice/hdffcmd.c21
-rw-r--r--PLUGINS/src/dvbhddevice/hdffosd.c26
-rw-r--r--PLUGINS/src/dvbhddevice/po/de_DE.po89
-rw-r--r--PLUGINS/src/dvbhddevice/setup.c165
-rw-r--r--PLUGINS/src/dvbsddevice/Makefile4
-rw-r--r--PLUGINS/src/dvbsddevice/dvbsdffdevice.c24
-rw-r--r--PLUGINS/src/dvbsddevice/dvbsdffdevice.h3
-rw-r--r--PLUGINS/src/hello/Makefile4
-rw-r--r--PLUGINS/src/hello/po/ca_ES.po4
-rw-r--r--PLUGINS/src/hello/po/cs_CZ.po4
-rw-r--r--PLUGINS/src/hello/po/da_DK.po4
-rw-r--r--PLUGINS/src/hello/po/de_DE.po4
-rw-r--r--PLUGINS/src/hello/po/el_GR.po4
-rw-r--r--PLUGINS/src/hello/po/es_ES.po4
-rw-r--r--PLUGINS/src/hello/po/et_EE.po4
-rw-r--r--PLUGINS/src/hello/po/fi_FI.po4
-rw-r--r--PLUGINS/src/hello/po/fr_FR.po4
-rw-r--r--PLUGINS/src/hello/po/hr_HR.po4
-rw-r--r--PLUGINS/src/hello/po/hu_HU.po4
-rw-r--r--PLUGINS/src/hello/po/it_IT.po4
-rw-r--r--PLUGINS/src/hello/po/lt_LT.po4
-rw-r--r--PLUGINS/src/hello/po/nl_NL.po4
-rw-r--r--PLUGINS/src/hello/po/nn_NO.po4
-rw-r--r--PLUGINS/src/hello/po/pl_PL.po4
-rw-r--r--PLUGINS/src/hello/po/pt_PT.po4
-rw-r--r--PLUGINS/src/hello/po/ro_RO.po4
-rw-r--r--PLUGINS/src/hello/po/ru_RU.po4
-rw-r--r--PLUGINS/src/hello/po/sk_SK.po4
-rw-r--r--PLUGINS/src/hello/po/sl_SI.po4
-rw-r--r--PLUGINS/src/hello/po/sv_SE.po4
-rw-r--r--PLUGINS/src/hello/po/tr_TR.po4
-rw-r--r--PLUGINS/src/hello/po/zh_CN.po4
-rw-r--r--PLUGINS/src/pictures/Makefile4
-rw-r--r--PLUGINS/src/pictures/po/de_DE.po4
-rw-r--r--PLUGINS/src/pictures/po/fi_FI.po4
-rw-r--r--PLUGINS/src/pictures/po/fr_FR.po4
-rw-r--r--PLUGINS/src/pictures/po/it_IT.po4
-rw-r--r--PLUGINS/src/pictures/po/lt_LT.po4
-rw-r--r--PLUGINS/src/pictures/po/ru_RU.po4
-rw-r--r--PLUGINS/src/pictures/po/sk_SK.po4
-rw-r--r--PLUGINS/src/skincurses/HISTORY4
-rw-r--r--PLUGINS/src/skincurses/Makefile4
-rw-r--r--PLUGINS/src/skincurses/po/de_DE.po4
-rw-r--r--PLUGINS/src/skincurses/po/fi_FI.po4
-rw-r--r--PLUGINS/src/skincurses/po/it_IT.po4
-rw-r--r--PLUGINS/src/skincurses/po/lt_LT.po4
-rw-r--r--PLUGINS/src/skincurses/po/ru_RU.po4
-rw-r--r--PLUGINS/src/skincurses/po/sk_SK.po4
-rw-r--r--PLUGINS/src/skincurses/skincurses.c6
-rw-r--r--ci.c16
-rw-r--r--config.c7
-rw-r--r--config.h12
-rw-r--r--device.c16
-rw-r--r--device.h15
-rw-r--r--diseqc.c31
-rw-r--r--diseqc.h16
-rw-r--r--dvbdevice.c189
-rw-r--r--dvbdevice.h5
-rw-r--r--libsi/descriptor.c29
-rw-r--r--libsi/descriptor.h27
-rw-r--r--libsi/headers.h20
-rw-r--r--libsi/si.c10
-rw-r--r--menuitems.c16
-rw-r--r--menuitems.h5
-rw-r--r--osd.c5
-rw-r--r--po/ar.po4
-rw-r--r--po/ca_ES.po4
-rw-r--r--po/cs_CZ.po4
-rw-r--r--po/da_DK.po4
-rw-r--r--po/de_DE.po4
-rw-r--r--po/el_GR.po4
-rw-r--r--po/es_ES.po4
-rw-r--r--po/et_EE.po4
-rw-r--r--po/fi_FI.po4
-rw-r--r--po/fr_FR.po4
-rw-r--r--po/hr_HR.po4
-rw-r--r--po/hu_HU.po4
-rw-r--r--po/it_IT.po4
-rw-r--r--po/lt_LT.po4
-rw-r--r--po/mk_MK.po4
-rw-r--r--po/nl_NL.po4
-rw-r--r--po/nn_NO.po4
-rw-r--r--po/pl_PL.po4
-rw-r--r--po/pt_PT.po4
-rw-r--r--po/ro_RO.po4
-rw-r--r--po/ru_RU.po4
-rw-r--r--po/sk_SK.po4
-rw-r--r--po/sl_SI.po4
-rw-r--r--po/sr_SR.po4
-rw-r--r--po/sv_SE.po4
-rw-r--r--po/tr_TR.po4
-rw-r--r--po/uk_UA.po4
-rw-r--r--po/zh_CN.po4
-rw-r--r--recorder.c14
-rw-r--r--recording.c15
-rw-r--r--remux.c69
-rw-r--r--remux.h26
-rw-r--r--skinsttng.c47
-rw-r--r--tools.c4
-rw-r--r--vdr.c10
108 files changed, 968 insertions, 397 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index f6ba82c..b9cc382 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1028,6 +1028,8 @@ Marc Rovira Vall <tm05462@salleURL.edu>, Ramon Roca <ramon.roca@xcombo.com> and
Lars Blser <LBlaeser@hofheim.de>
for reporting a bug in EPG bugfix statistics which made log entries for undefined
channels
+ for reporting a problem with the initial channel in case channels are reordered or
+ deleted
Niko Tarnanen <niko.tarnanen@hut.fi>
for translating OSD texts to the Finnish language
@@ -1104,6 +1106,7 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for adding support for "registration descriptor" to 'libsi' and using it in pat.c
for adding an include of VDR's 'Make.global' to libsi's Makefile
for adding handling of "ANSI/SCTE 57" descriptors
+ for some input on how to use BER and UNC values to generate a "quality" value
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark
@@ -1269,6 +1272,7 @@ Reinhard Nissl <rnissl@gmx.de>
for fixing a buffer overflow in cFont::Bidi()
for avoiding an unecessary call to Recordings.ResetResume()
for debugging a problem in handling the bitmap color depth for scaled subtitles
+ for making subtitle PIDs be decrypted
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the
@@ -2141,6 +2145,8 @@ Philippe Gramoull <philippe@gramoulle.com>
Andr Weidemann <Andre.Weidemann@web.de>
for suggesting to only write Dolby Digital tracks into the 'info.vdr' file of a
recording if Setup.UseDolbyDigital is true
+ for suggesting that the primary device should only be avoided for recording if
+ it is an old SD full featured card
Jrgen Schilling <juergen_schilling@web.de>
for reporting that color buttons were displayed in the recording info menu if it
@@ -2257,6 +2263,7 @@ Tobias Grimm <tobias.grimm@e-tobi.net>
for reporting unneeded include files <linux/dvb/dmx.h> and <time.h> in remux.h
for a patch that added a workaround for the broken linux-dvb driver header files
for reporting a faulty "frame duration" instead of "frame rate" in vdr.5
+ for avoiding a gcc 4.6 compiler error in the skincurses plugin.
Helge Lenz <h.lenz@gmx.de>
for reporting a bug in setting the 'Delta' parameter when calling the shutdown
@@ -2567,6 +2574,11 @@ Derek Kelly (user.vdr@gmail.com)
for reporting a problem where the frame rate was not detected correctly
for testing the implementation of FE_CAN_TURBO_FEC
for reporting unjustified log entries about changed channel pids
+ for reporting a problem with the frame detector in case it gets MaxPtsValues values
+ and stops analyzing even though the incoming data is still garbage
+ for reporting a problem with the fps value in the info file of a recording being
+ overwritten in case a recording was interrupted and resumed, and the fps value
+ could not be determined after resuming recording
Marcel Unbehaun <frostworks@gmx.de>
for adding cRecordingInfo::GetEvent()
@@ -2697,3 +2709,20 @@ Sergiu Dotenco <sergiu.dotenco@googlemail.com>
Mika Laitio <lamikr@pilppa.org>
for reporting a case where cRecordingInfo::Read(FILE *f) was called with a NULL pointer
+
+Dirk Leber <dirk.leber@reel-multimedia.com>
+ for fixing cString's operator=(const char *String) in case the given string is the
+ same as the existing one
+ for reporting that TsGetPayload() gets called without checking whether there actually
+ is a payload in the given TS packet
+
+Marco Gbenich <mg@needful.de>
+ for reporting a problem with executing diseqc commands from different threads
+
+Johan Andersson <jna@jna.pp.se>
+ for reporting a bug in detecting frames in case the Picture Start Code or Access Unit
+ Delimiter extends over TS packet boundaries
+
+Dave Pickles <dave@pickles.me.uk>
+ for adding support for "content identifier descriptor" and "default authority
+ descriptor" to 'libsi'
diff --git a/HISTORY b/HISTORY
index c4e22fd..015a101 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6606,3 +6606,46 @@ Video Disk Recorder Revision History
- Added handling of "ANSI/SCTE 57" descriptors (thanks too Rolf Ahrenberg).
- Avoiding an unecessary call to Recordings.ResetResume() (thanks to Reinhard
Nissl).
+
+2011-06-19: Version 1.7.19
+
+- Fixed cString's operator=(const char *String) in case the given string is the
+ same as the existing one (thanks to Dirk Leber).
+- Avoiding a gcc 4.6 compiler error in the skincurses plugin (thanks to Tobias Grimm).
+- TsGetPayload() now checks if there actually is a payload in the given TS packet
+ (reported by Dirk Leber).
+- Now sorting the source file names in the call to xgettext, to make sure the results
+ are not dependent on the sequence of the files.
+ Plugin authors may want to change the line containing the xgettext call in their
+ Makefile accordingly by changing "$^" to "`ls $^`".
+- The primary device is now only avoided for recording if it is an old SD full
+ featured card. This is done through the new function cDevice::AvoidRecording().
+- Subtitle PIDs are now also decrypted (thanks to Reinhard Nissl).
+- Fixed a possible race condition in cDiseqc::Execute() (reported by Marco Gbenich).
+ The return value of cDiseqcs::Get() is now const, so plugin authors may need to
+ adjust their code if they use this function.
+- The new functions cDevice::SignalStrength() and cDevice::SignalQuality() can be
+ used to determine the signal strength and quality of a given device (thanks to
+ Rolf Ahrenberg for some input on how to use BER and UNC values to generate a
+ "quality" value).
+- The 'sttng' skin now displays two colored bars at the bottom of the channel display,
+ indicating the strength (upper bar) and quality (lower bar) of the received signal.
+ The number to the left of these bars indicates the actual device the current
+ channel is being received with.
+- Fixed detecting frames in case the Picture Start Code or Access Unit Delimiter
+ extends over TS packet boundaries (reported by Johan Andersson).
+ In order to fix this, the semantics of cFrameDetector had to be changed a little.
+ See cRecorder::Action() and cIndexFileGenerator::Action() on how to use the new
+ cFrameDetector::NewPayload() function.
+- The frame detector now only starts collecting PTS values after it has seen the
+ first I-frame, otherwise it might get MaxPtsValues values and stop analyzing
+ even though the incoming data is still garbage (reported by Derek Kelly).
+- The info file of a recording is now only overwritten with a new fps value if
+ that new value is not the default value (thanks to Derek Kelly for reporting a
+ problem with the fps value being overwritten in case a recording was interrupted
+ and resumed, and the fps value could not be determined after resuming recording).
+- The initial channel is now stored by the channel ID in the setup.conf file, in
+ order to avoid problems in case channels are reordered or deleted (reported by
+ Lars Blser).
+- Added support for "content identifier descriptor" and "default authority descriptor"
+ to 'libsi' (thanks to Dave Pickles).
diff --git a/MANUAL b/MANUAL
index 7fae53b..352cc10 100644
--- a/MANUAL
+++ b/MANUAL
@@ -885,8 +885,8 @@ Version 1.6
key. Note that the total maximum is also limited by
the "OSD/Channel info time" parameter.
- Initial channel = 0 The number of the channel that shall be tuned to when
- VDR starts. Default is 0, which means that it will
+ Initial channel = The channel ID of the channel that shall be tuned to when
+ VDR starts. Default is empty, which means that it will
tune to the channel that was on before VDR was stopped.
Initial volume = -1 The volume that shall be set when VDR starts. Default
diff --git a/Makefile b/Makefile
index 9317839..18d7eb9 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.17 2011/04/17 13:35:53 kls Exp $
+# $Id: Makefile 2.18 2011/05/21 12:21:40 kls Exp $
.DELETE_ON_ERROR:
@@ -115,7 +115,7 @@ I18Npot = $(PODIR)/vdr.pot
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
diff --git a/PLUGINS/src/dvbhddevice/HISTORY b/PLUGINS/src/dvbhddevice/HISTORY
index aa788fd..280e0ad 100644
--- a/PLUGINS/src/dvbhddevice/HISTORY
+++ b/PLUGINS/src/dvbhddevice/HISTORY
@@ -13,4 +13,33 @@ VDR Plugin 'dvbhddevice' Revision History
2011-04-17: Version 0.0.3
-- Added support for TrueColor OSD.
+- Improved trickmodes
+- No transfer mode needed for dolby digital
+- Clear audio and video PID when Clear() ist called to stop audio decoding when jumping to cutting marks
+- Support still frames in H264 format
+- Remote control setup
+- Added analogue video setting, support volume control.
+- Support setting of audio delay.
+- Support setting of audio channel (Stereo, Left, Right)
+- Support setting of audio downmix mode.
+- Playback of PES data is working now.
+- Fall back to MPEG2 stream type when no PMT is available.
+- Added support for PES PCM playback
+- Support HDMI-CEC. (One-Touch Play)
+- Added low level OSD implementation.
+- Added option to select between high level and low level OSD.
+- high level OSD: Implement SaveRegion and RestoreRegion.
+- Fix not working video playback when PCR PID is different from video PID.
+- Fix not working pause when playing H.264 video
+- Improvements in transfer mode, fix audio dropouts or no audio at all
+- Add implementation of CanHandleAreas method to support VDR 1.7.17
+- in cHdffOsdRaw::Flush fix reusing of loop variable i in subloop that lead to OSD update problems
+- Specify container format when starting audio decoding to support PES-DVD containers
+- Added support for True Color OSD
+- Allow to disable true color OSD support via setup option
+
+2011-04-xx: Version 0.0.4
+- locally define DVB OSD API extensions to support compiling with original DVB headers
+- Return correct pixel aspect ratio in GetOsdSize
+- Adapt Makefile to changes introduced in recent VDR versions
+
diff --git a/PLUGINS/src/dvbhddevice/Makefile b/PLUGINS/src/dvbhddevice/Makefile
index ea1b9d1..91fdfce 100644
--- a/PLUGINS/src/dvbhddevice/Makefile
+++ b/PLUGINS/src/dvbhddevice/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile 1.7 2011/04/17 11:40:55 kls Exp $
+# $Id: Makefile 1.8 2011/05/21 12:25:33 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
@@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ $^
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
diff --git a/PLUGINS/src/dvbhddevice/dvbhddevice.c b/PLUGINS/src/dvbhddevice/dvbhddevice.c
index d639922..4745c37 100644
--- a/PLUGINS/src/dvbhddevice/dvbhddevice.c
+++ b/PLUGINS/src/dvbhddevice/dvbhddevice.c
@@ -3,14 +3,14 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbhddevice.c 1.12 2011/04/17 11:20:22 kls Exp $
+ * $Id: dvbhddevice.c 1.13 2011/04/24 09:31:21 kls Exp $
*/
#include <vdr/plugin.h>
#include "dvbhdffdevice.h"
#include "setup.h"
-static const char *VERSION = "0.0.3";
+static const char *VERSION = "0.0.4";
static const char *DESCRIPTION = "HD Full Featured DVB device";
class cPluginDvbhddevice : public cPlugin {
diff --git a/PLUGINS/src/dvbhddevice/dvbhdffdevice.c b/PLUGINS/src/dvbhddevice/dvbhdffdevice.c
index 9263009..714769e 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.29 2011/04/17 11:20:22 kls Exp $
+ * $Id: dvbhdffdevice.c 1.32 2011/05/22 15:19:59 kls Exp $
*/
#include "dvbhdffdevice.h"
@@ -110,7 +110,7 @@ void cDvbHdFfDevice::SetVideoFormat(bool VideoFormat16_9)
{
HDFF::tVideoFormat videoFormat;
videoFormat.AutomaticEnabled = true;
- videoFormat.AfdEnabled = true;
+ videoFormat.AfdEnabled = false;
videoFormat.TvFormat = (HDFF::eTvFormat) gHdffSetup.TvFormat;
videoFormat.VideoConversion = (HDFF::eVideoConversion) gHdffSetup.VideoConversion;
mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat);
@@ -364,7 +364,7 @@ bool cDvbHdFfDevice::SetPlayMode(ePlayMode PlayMode)
if (playMode == pmNone)
TurnOffLiveMode(true);
- mHdffCmdIf->CmdAvSetPlayMode(1, Transferring());
+ mHdffCmdIf->CmdAvSetPlayMode(1, Transferring() || (cTransferControl::ReceiverDevice() == this));
mHdffCmdIf->CmdAvSetStc(0, 100000);
mHdffCmdIf->CmdAvEnableSync(0, true);
mHdffCmdIf->CmdAvEnableVideoAfterStop(0, true);
@@ -725,28 +725,14 @@ HDFF::cHdffCmdIf *cDvbHdFfDevice::GetHdffCmdHandler(void)
bool cDvbHdFfDeviceProbe::Probe(int Adapter, int Frontend)
{
static uint32_t SubsystemIds[] = {
- 0x13C23009, // Technotrend S2-6400 HDFF
+ 0x13C23009, // Technotrend S2-6400 HDFF development samples
+ 0x13C2300A, // Technotrend S2-6400 HDFF production version
0x00000000
};
- 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);
- }
+ uint32_t SubsystemId = GetSubsystemId(Adapter, Frontend);
for (uint32_t *sid = SubsystemIds; *sid; sid++) {
if (*sid == SubsystemId) {
- FileName = cString::sprintf("/dev/dvb/adapter%d/osd0", Adapter);
+ cString FileName = cString::sprintf("/dev/dvb/adapter%d/osd0", Adapter);
int fd = open(FileName, O_RDWR);
if (fd != -1) { //TODO treat the second path of the S2-6400 as a budget device
close(fd);
diff --git a/PLUGINS/src/dvbhddevice/hdffcmd.c b/PLUGINS/src/dvbhddevice/hdffcmd.c
index ecd26ed..82869df 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.19 2011/04/17 11:20:22 kls Exp $
+ * $Id: hdffcmd.c 1.20 2011/04/24 09:31:59 kls Exp $
*/
#include "hdffcmd.h"
@@ -13,6 +13,25 @@
#include <sys/ioctl.h>
#include <vdr/tools.h>
+#if !defined OSD_RAW_CMD
+typedef struct osd_raw_cmd_s {
+ const void *cmd_data;
+ int cmd_len;
+ void *result_data;
+ int result_len;
+} osd_raw_cmd_t;
+
+typedef struct osd_raw_data_s {
+ const void *data_buffer;
+ int data_length;
+ int data_handle;
+} osd_raw_data_t;
+
+#define OSD_RAW_CMD _IOWR('o', 162, osd_raw_cmd_t)
+#define OSD_RAW_DATA _IOWR('o', 163, osd_raw_data_t)
+#endif
+
+
namespace HDFF
{
diff --git a/PLUGINS/src/dvbhddevice/hdffosd.c b/PLUGINS/src/dvbhddevice/hdffosd.c
index 254f2af..90d6897 100644
--- a/PLUGINS/src/dvbhddevice/hdffosd.c
+++ b/PLUGINS/src/dvbhddevice/hdffosd.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: hdffosd.c 1.9 2011/04/17 11:20:22 kls Exp $
+ * $Id: hdffosd.c 1.10 2011/05/15 14:47:29 kls Exp $
*/
#include "hdffosd.h"
@@ -154,8 +154,12 @@ eOsdError cHdffOsd::SetAreas(const tArea *Areas, int NumAreas)
{
//printf("SetAreas %d: %d %d %d %d %d\n", i, Areas[i].x1, Areas[i].y1, Areas[i].x2, Areas[i].y2, Areas[i].bpp);
}
- mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
- mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
+ if (shown)
+ {
+ mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
+ mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
+ shown = false;
+ }
return cOsd::SetAreas(Areas, NumAreas);
}
@@ -166,9 +170,13 @@ void cHdffOsd::SetActive(bool On)
cOsd::SetActive(On);
if (On)
{
+ if (GetBitmap(0)) // only flush here if there are already bitmaps
+ Flush();
}
else if (shown)
{
+ mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
+ mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
shown = false;
}
}
@@ -594,9 +602,13 @@ void cHdffOsdRaw::SetActive(bool On)
cOsd::SetActive(On);
if (On)
{
+ if (GetBitmap(0)) // only flush here if there are already bitmaps
+ Flush();
}
else if (shown)
{
+ mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
+ mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
shown = false;
}
}
@@ -623,8 +635,12 @@ eOsdError cHdffOsdRaw::SetAreas(const tArea *Areas, int NumAreas)
{
//printf("SetAreas %d: %d %d %d %d %d\n", i, Areas[i].x1, Areas[i].y1, Areas[i].x2, Areas[i].y2, Areas[i].bpp);
}
- mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
- mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
+ if (shown)
+ {
+ mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0);
+ mHdffCmdIf->CmdOsdRenderDisplay(mDisplay);
+ shown = false;
+ }
return cOsd::SetAreas(Areas, NumAreas);
}
diff --git a/PLUGINS/src/dvbhddevice/po/de_DE.po b/PLUGINS/src/dvbhddevice/po/de_DE.po
new file mode 100644
index 0000000..907f243
--- /dev/null
+++ b/PLUGINS/src/dvbhddevice/po/de_DE.po
@@ -0,0 +1,89 @@
+# VDR plugin language source file
+# Copyright (C) 2011 Andreas Regel
+# This file is distributed under the same license as the dvbhddevice package.
+# Christoph Haubrich, 2011
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: VDR \n"
+"Report-Msgid-Bugs-To: <see README>\n"
+"POT-Creation-Date: 2011-05-05 20:34+0200\n"
+"PO-Revision-Date: 2011-04-25 21:44+0200\n"
+"Last-Translator: Christoph Haubrich\n"
+"Language-Team: <see README>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Automatic"
+msgstr "automatisch"
+
+msgid "Letterbox 16/9"
+msgstr "Letterbox 16:9"
+
+msgid "Letterbox 14/9"
+msgstr "Letterbox 14:9"
+
+msgid "Pillarbox"
+msgstr "Pillarbox"
+
+msgid "CentreCutOut"
+msgstr "CentreCutOut"
+
+msgid "Always 16/9"
+msgstr "immer 16:9"
+
+msgid "Disabled"
+msgstr "abgeschaltet"
+
+msgid "Analogue only"
+msgstr "nur Analoge Ausgänge"
+
+msgid "Always"
+msgstr "immer"
+
+msgid "HDMI only"
+msgstr "nur HDMI"
+
+msgid "Follow resolution"
+msgstr "folge Auflösung"
+
+msgid "none"
+msgstr "keins"
+
+msgid "Resolution"
+msgstr "Auflösung"
+
+msgid "TV format"
+msgstr "TV-Format"
+
+msgid "Video Conversion"
+msgstr "Videokonvertierung"
+
+msgid "Analogue Video"
+msgstr "Analoges Video"
+
+msgid "Audio Delay (ms)"
+msgstr "Audio Verzögerung (ms)"
+
+msgid "Audio Downmix"
+msgstr "Audio Downmix"
+
+msgid "OSD Size"
+msgstr "OSD Größe"
+
+msgid "HDMI CEC"
+msgstr "HDMI CEC"
+
+msgid "Remote Control Protocol"
+msgstr "Fernbedienungsprotokoll"
+
+msgid "Remote Control Address"
+msgstr "Fernbedienungsadresse"
+
+msgid "High Level OSD"
+msgstr "High Level OSD"
+
+msgid "Allow True Color OSD"
+msgstr "Erlaube True Color OSD"
diff --git a/PLUGINS/src/dvbhddevice/setup.c b/PLUGINS/src/dvbhddevice/setup.c
index 3cb69b1..30365e0 100644
--- a/PLUGINS/src/dvbhddevice/setup.c
+++ b/PLUGINS/src/dvbhddevice/setup.c
@@ -3,88 +3,17 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: setup.c 1.11 2011/04/17 11:45:17 kls Exp $
+ * $Id: setup.c 1.12 2011/05/15 14:47:45 kls Exp $
*/
#include "setup.h"
#include "hdffcmd.h"
-const int kResolutions = 4;
-const int kTvFormats = 2;
-const int kVideoConversions = 6;
-const int kAnalogueVideos = 4;
-const int kAudioDownmixes = 5;
-const int kOsdSizes = 5;
-const int kRemoteProtocols = 3;
-
const int kResolution1080i = 0;
const int kResolution720p = 1;
const int kResolution576p = 2;
const int kResolution576i = 3;
-static const char * ResolutionItems[] =
-{
- "1080i",
- "720p",
- "576p",
- "576i",
- NULL
-};
-
-static const char * TvFormatItems[] =
-{
- "4/3",
- "16/9",
- NULL
-};
-
-static const char * VideoConversionItems[] =
-{
- "Automatic",
- "Letterbox 16/9",
- "Letterbox 14/9",
- "Pillarbox",
- "CentreCutOut",
- "Always 16/9",
- NULL
-};
-
-static const char * AnalogueVideoItems[] =
-{
- "Disabled",
- "RGB",
- "CVBS + YUV",
- "YC (S-Video)",
- NULL
-};
-
-static const char * AudioDownmixItems[] =
-{
- "Disabled",
- "Analogue only",
- "Always",
- "Automatic",
- "HDMI only",
- NULL
-};
-
-static const char * OsdSizeItems[] =
-{
- "Follow resolution",
- "1920x1080",
- "1280x720",
- "1024x576",
- "720x576",
- NULL
-};
-
-static const char * RemoteProtocolItems[] =
-{
- "none",
- "RC5",
- "RC6",
- NULL
-};
cHdffSetup gHdffSetup;
@@ -162,7 +91,7 @@ void cHdffSetup::GetOsdSize(int &Width, int &Height, double &PixelAspect)
Height = 576;
PixelAspect = 4.0 / 3.0;
}
- PixelAspect /= double(Width) / Height;
+ PixelAspect /= double(Width) / Height;
}
HDFF::eHdmiVideoMode cHdffSetup::GetVideoMode(void)
@@ -183,21 +112,87 @@ HDFF::eHdmiVideoMode cHdffSetup::GetVideoMode(void)
cHdffSetupPage::cHdffSetupPage(HDFF::cHdffCmdIf * pHdffCmdIf)
{
+ const int kResolutions = 4;
+ const int kTvFormats = 2;
+ const int kVideoConversions = 6;
+ const int kAnalogueVideos = 4;
+ const int kAudioDownmixes = 5;
+ const int kOsdSizes = 5;
+ const int kRemoteProtocols = 3;
+
+ static const char * ResolutionItems[kResolutions] =
+ {
+ "1080i",
+ "720p",
+ "576p",
+ "576i",
+ };
+
+ static const char * TvFormatItems[kTvFormats] =
+ {
+ "4/3",
+ "16/9",
+ };
+
+ static const char * VideoConversionItems[kVideoConversions] =
+ {
+ tr("Automatic"),
+ tr("Letterbox 16/9"),
+ tr("Letterbox 14/9"),
+ tr("Pillarbox"),
+ tr("CentreCutOut"),
+ tr("Always 16/9"),
+ };
+
+
+ static const char * AnalogueVideoItems[kAnalogueVideos] =
+ {
+ tr("Disabled"),
+ "RGB",
+ "CVBS + YUV",
+ "YC (S-Video)",
+ };
+
+ static const char * AudioDownmixItems[kAudioDownmixes] =
+ {
+ tr("Disabled"),
+ tr("Analogue only"),
+ tr("Always"),
+ tr("Automatic"),
+ tr("HDMI only"),
+ };
+
+ static const char * OsdSizeItems[kOsdSizes] =
+ {
+ tr("Follow resolution"),
+ "1920x1080",
+ "1280x720",
+ "1024x576",
+ "720x576",
+ };
+
+ static const char * RemoteProtocolItems[] =
+ {
+ tr("none"),
+ "RC5",
+ "RC6",
+ };
+
mHdffCmdIf = pHdffCmdIf;
mNewHdffSetup = gHdffSetup;
- Add(new cMenuEditStraItem("Resolution", &mNewHdffSetup.Resolution, kResolutions, ResolutionItems));
- Add(new cMenuEditStraItem("TV format", &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems));
- Add(new cMenuEditStraItem("Video Conversion", &mNewHdffSetup.VideoConversion, kVideoConversions, VideoConversionItems));
- Add(new cMenuEditStraItem("Analogue Video", &mNewHdffSetup.AnalogueVideo, kAnalogueVideos, AnalogueVideoItems));
- Add(new cMenuEditIntItem("Audio Delay (ms)", &mNewHdffSetup.AudioDelay, 0, 500));
- Add(new cMenuEditStraItem("Audio Downmix", &mNewHdffSetup.AudioDownmix, kAudioDownmixes, AudioDownmixItems));
- Add(new cMenuEditStraItem("Osd Size", &mNewHdffSetup.OsdSize, kOsdSizes, OsdSizeItems));
- Add(new cMenuEditBoolItem("HDMI CEC", &mNewHdffSetup.CecEnabled));
- Add(new cMenuEditStraItem("Remote Control Protocol", &mNewHdffSetup.RemoteProtocol, kRemoteProtocols, RemoteProtocolItems));
- Add(new cMenuEditIntItem("Remote Control Address", &mNewHdffSetup.RemoteAddress, -1, 31));
- Add(new cMenuEditBoolItem("High Level OSD", &mNewHdffSetup.HighLevelOsd));
- Add(new cMenuEditBoolItem("Allow True Color OSD", &mNewHdffSetup.TrueColorOsd));
+ Add(new cMenuEditStraItem(tr("Resolution"), &mNewHdffSetup.Resolution, kResolutions, ResolutionItems));
+ Add(new cMenuEditStraItem(tr("TV format"), &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems));
+ Add(new cMenuEditStraItem(tr("Video Conversion"), &mNewHdffSetup.VideoConversion, kVideoConversions, VideoConversionItems));
+ Add(new cMenuEditStraItem(tr("Analogue Video"), &mNewHdffSetup.AnalogueVideo, kAnalogueVideos, AnalogueVideoItems));
+ Add(new cMenuEditIntItem(tr("Audio Delay (ms)"), &mNewHdffSetup.AudioDelay, 0, 500));
+ Add(new cMenuEditStraItem(tr("Audio Downmix"), &mNewHdffSetup.AudioDownmix, kAudioDownmixes, AudioDownmixItems));
+ Add(new cMenuEditStraItem(tr("OSD Size"), &mNewHdffSetup.OsdSize, kOsdSizes, OsdSizeItems));
+ Add(new cMenuEditBoolItem(tr("HDMI CEC"), &mNewHdffSetup.CecEnabled));
+ Add(new cMenuEditStraItem(tr("Remote Control Protocol"), &mNewHdffSetup.RemoteProtocol, kRemoteProtocols, RemoteProtocolItems));
+ Add(new cMenuEditIntItem(tr("Remote Control Address"), &mNewHdffSetup.RemoteAddress, -1, 31));
+ Add(new cMenuEditBoolItem(tr("High Level OSD"), &mNewHdffSetup.HighLevelOsd));
+ Add(new cMenuEditBoolItem(tr("Allow True Color OSD"), &mNewHdffSetup.TrueColorOsd));
}
cHdffSetupPage::~cHdffSetupPage(void)
diff --git a/PLUGINS/src/dvbsddevice/Makefile b/PLUGINS/src/dvbsddevice/Makefile
index aa89feb..5529976 100644
--- a/PLUGINS/src/dvbsddevice/Makefile
+++ b/PLUGINS/src/dvbsddevice/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile 1.6 2011/02/27 10:04:54 kls Exp $
+# $Id: Makefile 1.7 2011/05/21 12:25:37 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
@@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ $^
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
diff --git a/PLUGINS/src/dvbsddevice/dvbsdffdevice.c b/PLUGINS/src/dvbsddevice/dvbsdffdevice.c
index 8671b1e..73e55ba 100644
--- a/PLUGINS/src/dvbsddevice/dvbsdffdevice.c
+++ b/PLUGINS/src/dvbsddevice/dvbsdffdevice.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbsdffdevice.c 2.27 2010/09/19 12:43:33 kls Exp $
+ * $Id: dvbsdffdevice.c 2.29 2011/05/22 15:22:14 kls Exp $
*/
#include "dvbsdffdevice.h"
@@ -90,6 +90,11 @@ bool cDvbSdFfDevice::HasDecoder(void) const
return true;
}
+bool cDvbSdFfDevice::AvoidRecording(void) const
+{
+ return true;
+}
+
cSpuDecoder *cDvbSdFfDevice::GetSpuDecoder(void)
{
if (!spuDecoder && IsPrimaryDevice())
@@ -772,22 +777,7 @@ bool cDvbSdFfDeviceProbe::Probe(int Adapter, int Frontend)
0x13C21002, // Technotrend/Hauppauge WinTV DVB-S rev1.3 SE
0x00000000
};
- 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);
- }
+ uint32_t SubsystemId = GetSubsystemId(Adapter, Frontend);
for (uint32_t *sid = SubsystemIds; *sid; sid++) {
if (*sid == SubsystemId) {
dsyslog("creating cDvbSdFfDevice");
diff --git a/PLUGINS/src/dvbsddevice/dvbsdffdevice.h b/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
index b382bf6..afe4727 100644
--- a/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
+++ b/PLUGINS/src/dvbsddevice/dvbsdffdevice.h
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbsdffdevice.h 2.11 2010/01/04 11:01:14 kls Exp $
+ * $Id: dvbsdffdevice.h 2.12 2011/05/21 12:56:49 kls Exp $
*/
#ifndef __DVBSDFFDEVICE_H
@@ -23,6 +23,7 @@ public:
cDvbSdFfDevice(int Adapter, int Frontend);
virtual ~cDvbSdFfDevice();
virtual bool HasDecoder(void) const;
+ virtual bool AvoidRecording(void) const;
// SPU facilities
diff --git a/PLUGINS/src/hello/Makefile b/PLUGINS/src/hello/Makefile
index e9f0603..b59d08a 100644
--- a/PLUGINS/src/hello/Makefile
+++ b/PLUGINS/src/hello/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile 2.6 2011/02/27 10:04:58 kls Exp $
+# $Id: Makefile 2.7 2011/05/21 12:25:41 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
@@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
diff --git a/PLUGINS/src/hello/po/ca_ES.po b/PLUGINS/src/hello/po/ca_ES.po
index f126a54..24e09ef 100644
--- a/PLUGINS/src/hello/po/ca_ES.po
+++ b/PLUGINS/src/hello/po/ca_ES.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Jordi Vil <jvila@tinet.org>\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n"
+"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ca\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/cs_CZ.po b/PLUGINS/src/hello/po/cs_CZ.po
index f153652..af184b3 100644
--- a/PLUGINS/src/hello/po/cs_CZ.po
+++ b/PLUGINS/src/hello/po/cs_CZ.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Vladimr Brta <vladimir.barta@k2atmitec.cz>\n"
"Language-Team: Czech <vdr@linuxtv.org>\n"
+"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: cs\n"
msgid "A friendly greeting"
msgstr "Ptelsk pozdrav"
diff --git a/PLUGINS/src/hello/po/da_DK.po b/PLUGINS/src/hello/po/da_DK.po
index deef349..6c1647e 100644
--- a/PLUGINS/src/hello/po/da_DK.po
+++ b/PLUGINS/src/hello/po/da_DK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish <vdr@linuxtv.org>\n"
+"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: da\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/de_DE.po b/PLUGINS/src/hello/po/de_DE.po
index f46e6f5..1536f1b 100644
--- a/PLUGINS/src/hello/po/de_DE.po
+++ b/PLUGINS/src/hello/po/de_DE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
msgid "A friendly greeting"
msgstr "Ein freundlicher Gru"
diff --git a/PLUGINS/src/hello/po/el_GR.po b/PLUGINS/src/hello/po/el_GR.po
index 6ee9a3d..ce921ee 100644
--- a/PLUGINS/src/hello/po/el_GR.po
+++ b/PLUGINS/src/hello/po/el_GR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek <vdr@linuxtv.org>\n"
+"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-7\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: el\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/es_ES.po b/PLUGINS/src/hello/po/es_ES.po
index e1997a8..292f652 100644
--- a/PLUGINS/src/hello/po/es_ES.po
+++ b/PLUGINS/src/hello/po/es_ES.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Ruben Nunez Francisco <ruben.nunez@tang-it.com>\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n"
+"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: es\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/et_EE.po b/PLUGINS/src/hello/po/et_EE.po
index d762ebc..3cf2247 100644
--- a/PLUGINS/src/hello/po/et_EE.po
+++ b/PLUGINS/src/hello/po/et_EE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Arthur Konovalov <kasjas@hot.ee>\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-Transfer-Encoding: 8bit\n"
-"Language: et\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/fi_FI.po b/PLUGINS/src/hello/po/fi_FI.po
index 1be796c..a106a8b 100644
--- a/PLUGINS/src/hello/po/fi_FI.po
+++ b/PLUGINS/src/hello/po/fi_FI.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
+"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: fi\n"
msgid "A friendly greeting"
msgstr "Ystävällisin terveisin"
diff --git a/PLUGINS/src/hello/po/fr_FR.po b/PLUGINS/src/hello/po/fr_FR.po
index db70037..335df75 100644
--- a/PLUGINS/src/hello/po/fr_FR.po
+++ b/PLUGINS/src/hello/po/fr_FR.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Nicolas Huillard <nhuillard@e-dition.fr>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
+"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: fr\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/hr_HR.po b/PLUGINS/src/hello/po/hr_HR.po
index 6ebf6e8..c88e832 100644
--- a/PLUGINS/src/hello/po/hr_HR.po
+++ b/PLUGINS/src/hello/po/hr_HR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-03-17 19:52+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n"
+"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: hr\n"
msgid "A friendly greeting"
msgstr "Prijateljska dobrodolica"
diff --git a/PLUGINS/src/hello/po/hu_HU.po b/PLUGINS/src/hello/po/hu_HU.po
index 66dbc30..5b9f207 100644
--- a/PLUGINS/src/hello/po/hu_HU.po
+++ b/PLUGINS/src/hello/po/hu_HU.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Istvan Koenigsberger <istvnko@hotmail.com>, Guido Josten <guido.josten@t-online.de>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
+"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: hu\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/it_IT.po b/PLUGINS/src/hello/po/it_IT.po
index 7ff552f..7ef310a 100644
--- a/PLUGINS/src/hello/po/it_IT.po
+++ b/PLUGINS/src/hello/po/it_IT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-01-27 20:11+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
+"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: it\n"
msgid "A friendly greeting"
msgstr "Un saluto cordiale"
diff --git a/PLUGINS/src/hello/po/lt_LT.po b/PLUGINS/src/hello/po/lt_LT.po
index d1ddf81..0ade0bd 100644
--- a/PLUGINS/src/hello/po/lt_LT.po
+++ b/PLUGINS/src/hello/po/lt_LT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.10\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2009-12-08 12:18+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
+"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: lt\n"
msgid "A friendly greeting"
msgstr "Draugiškas labas"
diff --git a/PLUGINS/src/hello/po/nl_NL.po b/PLUGINS/src/hello/po/nl_NL.po
index b749cc3..4dff540 100644
--- a/PLUGINS/src/hello/po/nl_NL.po
+++ b/PLUGINS/src/hello/po/nl_NL.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Maarten Wisse <Maarten.Wisse@urz.uni-hd.de>\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n"
+"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: nl\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/nn_NO.po b/PLUGINS/src/hello/po/nn_NO.po
index b5f508b..c566f53 100644
--- a/PLUGINS/src/hello/po/nn_NO.po
+++ b/PLUGINS/src/hello/po/nn_NO.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
+"Language: nn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: nn\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/pl_PL.po b/PLUGINS/src/hello/po/pl_PL.po
index dfa80de..e7aedf2 100644
--- a/PLUGINS/src/hello/po/pl_PL.po
+++ b/PLUGINS/src/hello/po/pl_PL.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
+"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: pl\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/pt_PT.po b/PLUGINS/src/hello/po/pt_PT.po
index 429377c..dd0be17 100644
--- a/PLUGINS/src/hello/po/pt_PT.po
+++ b/PLUGINS/src/hello/po/pt_PT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Paulo Lopes <pmml@netvita.pt>\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
+"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: pt\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/ro_RO.po b/PLUGINS/src/hello/po/ro_RO.po
index d964223..a5eb16a 100644
--- a/PLUGINS/src/hello/po/ro_RO.po
+++ b/PLUGINS/src/hello/po/ro_RO.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n"
+"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ro\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/ru_RU.po b/PLUGINS/src/hello/po/ru_RU.po
index 59d8ad1..ee94c92 100644
--- a/PLUGINS/src/hello/po/ru_RU.po
+++ b/PLUGINS/src/hello/po/ru_RU.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
+"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ru\n"
msgid "A friendly greeting"
msgstr " "
diff --git a/PLUGINS/src/hello/po/sk_SK.po b/PLUGINS/src/hello/po/sk_SK.po
index f7347fd..b8ba775 100644
--- a/PLUGINS/src/hello/po/sk_SK.po
+++ b/PLUGINS/src/hello/po/sk_SK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2009-09-30 09:48+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
+"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sk\n"
msgid "A friendly greeting"
msgstr "Priatesk pozdrav"
diff --git a/PLUGINS/src/hello/po/sl_SI.po b/PLUGINS/src/hello/po/sl_SI.po
index 20f0019..bbcf6b9 100644
--- a/PLUGINS/src/hello/po/sl_SI.po
+++ b/PLUGINS/src/hello/po/sl_SI.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
+"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sl\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/sv_SE.po b/PLUGINS/src/hello/po/sv_SE.po
index c51e559..4b4909f 100644
--- a/PLUGINS/src/hello/po/sv_SE.po
+++ b/PLUGINS/src/hello/po/sv_SE.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Tomas Prybil <tomas@prybil.se>\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n"
+"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sv\n"
msgid "A friendly greeting"
msgstr ""
diff --git a/PLUGINS/src/hello/po/tr_TR.po b/PLUGINS/src/hello/po/tr_TR.po
index 269dbd9..a8705da 100644
--- a/PLUGINS/src/hello/po/tr_TR.po
+++ b/PLUGINS/src/hello/po/tr_TR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-05-12 22:34:4800\n"
"Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
+"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-9\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: tr\n"
msgid "A friendly greeting"
msgstr "Dosta selam"
diff --git a/PLUGINS/src/hello/po/zh_CN.po b/PLUGINS/src/hello/po/zh_CN.po
index beafc4a..7793ed2 100644
--- a/PLUGINS/src/hello/po/zh_CN.po
+++ b/PLUGINS/src/hello/po/zh_CN.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2009-01-23 09:48+0800\n"
"Last-Translator: senin\n"
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
+"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: zh_CN\n"
msgid "A friendly greeting"
msgstr "友好的问候"
diff --git a/PLUGINS/src/pictures/Makefile b/PLUGINS/src/pictures/Makefile
index afdcc61..456207b 100644
--- a/PLUGINS/src/pictures/Makefile
+++ b/PLUGINS/src/pictures/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile 2.6 2011/02/27 10:05:02 kls Exp $
+# $Id: Makefile 2.7 2011/05/21 12:25:45 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
@@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
diff --git a/PLUGINS/src/pictures/po/de_DE.po b/PLUGINS/src/pictures/po/de_DE.po
index 6e47101..f31fa07 100644
--- a/PLUGINS/src/pictures/po/de_DE.po
+++ b/PLUGINS/src/pictures/po/de_DE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-01-12 17:41+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Pictures"
diff --git a/PLUGINS/src/pictures/po/fi_FI.po b/PLUGINS/src/pictures/po/fi_FI.po
index 2d589f0..0a17596 100644
--- a/PLUGINS/src/pictures/po/fi_FI.po
+++ b/PLUGINS/src/pictures/po/fi_FI.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-01-12 17:41+0100\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
+"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: fi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Pictures"
diff --git a/PLUGINS/src/pictures/po/fr_FR.po b/PLUGINS/src/pictures/po/fr_FR.po
index 5450431..c6289d1 100644
--- a/PLUGINS/src/pictures/po/fr_FR.po
+++ b/PLUGINS/src/pictures/po/fr_FR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-01-12 17:41+0100\n"
"Last-Translator: Patrice Staudt <ipatrice.staudt@laposte.net>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
+"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Pictures"
diff --git a/PLUGINS/src/pictures/po/it_IT.po b/PLUGINS/src/pictures/po/it_IT.po
index a3ede6b..f3858db 100644
--- a/PLUGINS/src/pictures/po/it_IT.po
+++ b/PLUGINS/src/pictures/po/it_IT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-01-27 20:22+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
+"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Pictures"
diff --git a/PLUGINS/src/pictures/po/lt_LT.po b/PLUGINS/src/pictures/po/lt_LT.po
index a063417..9d877ac 100644
--- a/PLUGINS/src/pictures/po/lt_LT.po
+++ b/PLUGINS/src/pictures/po/lt_LT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.10\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2009-12-08 12:41+0100\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>, 2009\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
+"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: lt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Pictures"
diff --git a/PLUGINS/src/pictures/po/ru_RU.po b/PLUGINS/src/pictures/po/ru_RU.po
index dc1ba12..6d38639 100644
--- a/PLUGINS/src/pictures/po/ru_RU.po
+++ b/PLUGINS/src/pictures/po/ru_RU.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2008-03-14 00:45+0100\n"
"Last-Translator: Alexander Gross <Bikalexander@gmail.com>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
+"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ru\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: KBabel 1.11.4\n"
diff --git a/PLUGINS/src/pictures/po/sk_SK.po b/PLUGINS/src/pictures/po/sk_SK.po
index a56c0d6..340aad1 100644
--- a/PLUGINS/src/pictures/po/sk_SK.po
+++ b/PLUGINS/src/pictures/po/sk_SK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-15 15:08+0200\n"
"PO-Revision-Date: 2009-09-30 12:54+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
+"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sk\n"
msgid "Pictures"
msgstr "Obrzky"
diff --git a/PLUGINS/src/skincurses/HISTORY b/PLUGINS/src/skincurses/HISTORY
index 9e3377f..90dfbb7 100644
--- a/PLUGINS/src/skincurses/HISTORY
+++ b/PLUGINS/src/skincurses/HISTORY
@@ -88,3 +88,7 @@ VDR Plugin 'skincurses' Revision History
2010-02-28: Version 0.1.9
- Added Lithuanian language translations (thanks to Valdemaras Pipiras).
+
+2011-05-15: Version 0.1.10
+
+- Avoiding a gcc 4.6 compiler error (thanks to Tobias Grimm).
diff --git a/PLUGINS/src/skincurses/Makefile b/PLUGINS/src/skincurses/Makefile
index a7ba1cf..a765b65 100644
--- a/PLUGINS/src/skincurses/Makefile
+++ b/PLUGINS/src/skincurses/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile 2.6 2011/02/27 10:05:05 kls Exp $
+# $Id: Makefile 2.7 2011/05/21 12:25:49 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
@@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
+ xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
diff --git a/PLUGINS/src/skincurses/po/de_DE.po b/PLUGINS/src/skincurses/po/de_DE.po
index 82edffc..bff2411 100644
--- a/PLUGINS/src/skincurses/po/de_DE.po
+++ b/PLUGINS/src/skincurses/po/de_DE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-21 14:36+0200\n"
"PO-Revision-Date: 2007-08-15 16:07+0200\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
msgid "A text only skin"
msgstr "Eine reine Text-Oberflche"
diff --git a/PLUGINS/src/skincurses/po/fi_FI.po b/PLUGINS/src/skincurses/po/fi_FI.po
index 0cefeef..c123a0b 100644
--- a/PLUGINS/src/skincurses/po/fi_FI.po
+++ b/PLUGINS/src/skincurses/po/fi_FI.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-21 14:36+0200\n"
"PO-Revision-Date: 2007-08-14 20:48+0300\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
+"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: fi\n"
msgid "A text only skin"
msgstr "Tekstipohjainen ulkoasu"
diff --git a/PLUGINS/src/skincurses/po/it_IT.po b/PLUGINS/src/skincurses/po/it_IT.po
index d720771..5cecb65 100644
--- a/PLUGINS/src/skincurses/po/it_IT.po
+++ b/PLUGINS/src/skincurses/po/it_IT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-21 14:36+0200\n"
"PO-Revision-Date: 2008-01-27 20:35+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
+"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: it\n"
msgid "A text only skin"
msgstr "Una interfaccia solo testo"
diff --git a/PLUGINS/src/skincurses/po/lt_LT.po b/PLUGINS/src/skincurses/po/lt_LT.po
index bb09d81..16d2698 100644
--- a/PLUGINS/src/skincurses/po/lt_LT.po
+++ b/PLUGINS/src/skincurses/po/lt_LT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-21 14:36+0200\n"
"PO-Revision-Date: 2010-02-22 18:18+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
+"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: lt\n"
msgid "A text only skin"
msgstr "Tekstinis apvalkalas"
diff --git a/PLUGINS/src/skincurses/po/ru_RU.po b/PLUGINS/src/skincurses/po/ru_RU.po
index fae8a62..b550f29 100644
--- a/PLUGINS/src/skincurses/po/ru_RU.po
+++ b/PLUGINS/src/skincurses/po/ru_RU.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-21 14:36+0200\n"
"PO-Revision-Date: 2008-03-14 00:21+0100\n"
"Last-Translator: Alexander Gross <Bikalexander@gmail.com>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
+"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ru\n"
"X-Generator: KBabel 1.11.4\n"
msgid "A text only skin"
diff --git a/PLUGINS/src/skincurses/po/sk_SK.po b/PLUGINS/src/skincurses/po/sk_SK.po
index aad3e44..e362f8e 100644
--- a/PLUGINS/src/skincurses/po/sk_SK.po
+++ b/PLUGINS/src/skincurses/po/sk_SK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:43+0200\n"
+"POT-Creation-Date: 2011-05-21 14:36+0200\n"
"PO-Revision-Date: 2009-09-30 12:52+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
+"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sk\n"
msgid "A text only skin"
msgstr "Iba text vzhadu"
diff --git a/PLUGINS/src/skincurses/skincurses.c b/PLUGINS/src/skincurses/skincurses.c
index 84076cd..11fead5 100644
--- a/PLUGINS/src/skincurses/skincurses.c
+++ b/PLUGINS/src/skincurses/skincurses.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: skincurses.c 2.5 2011/01/04 08:52:03 kls Exp $
+ * $Id: skincurses.c 2.6 2011/05/15 21:41:47 kls Exp $
*/
#include <ncurses.h>
@@ -11,7 +11,7 @@
#include <vdr/plugin.h>
#include <vdr/skins.h>
-static const char *VERSION = "0.1.9";
+static const char *VERSION = "0.1.10";
static const char *DESCRIPTION = trNOOP("A text only skin");
static const char *MAINMENUENTRY = NULL;
@@ -26,7 +26,7 @@ public:
virtual void DrawText(cPixmap *Pixmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {}
};
-static const cCursesFont Font;
+static const cCursesFont Font = cCursesFont(); // w/o the '= cCursesFont()' gcc 4.6 complains - can anybody explain why this is necessary?
// --- cCursesOsd ------------------------------------------------------------
diff --git a/ci.c b/ci.c
index 6c7b031..59d62ef 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.6 2010/01/02 10:39:50 kls Exp $
+ * $Id: ci.c 2.7 2011/05/21 15:21:33 kls Exp $
*/
#include "ci.h"
@@ -1894,9 +1894,9 @@ void cCamSlot::SetPid(int Pid, bool Active)
}
// see ISO/IEC 13818-1
-#define STREAM_TYPE_VIDEO 0x02
-#define STREAM_TYPE_AUDIO 0x04
-#define STREAM_TYPE_DOLBY 0x06
+#define STREAM_TYPE_VIDEO 0x02
+#define STREAM_TYPE_AUDIO 0x04
+#define STREAM_TYPE_PRIVATE 0x06
void cCamSlot::AddChannel(const cChannel *Channel)
{
@@ -1910,7 +1910,9 @@ void cCamSlot::AddChannel(const cChannel *Channel)
for (const int *Apid = Channel->Apids(); *Apid; Apid++)
AddPid(Channel->Sid(), *Apid, STREAM_TYPE_AUDIO);
for (const int *Dpid = Channel->Dpids(); *Dpid; Dpid++)
- AddPid(Channel->Sid(), *Dpid, STREAM_TYPE_DOLBY);
+ AddPid(Channel->Sid(), *Dpid, STREAM_TYPE_PRIVATE);
+ for (const int *Spid = Channel->Spids(); *Spid; Spid++)
+ AddPid(Channel->Sid(), *Spid, STREAM_TYPE_PRIVATE);
}
}
@@ -1931,7 +1933,9 @@ bool cCamSlot::CanDecrypt(const cChannel *Channel)
for (const int *Apid = Channel->Apids(); *Apid; Apid++)
CaPmt.AddPid(*Apid, STREAM_TYPE_AUDIO);
for (const int *Dpid = Channel->Dpids(); *Dpid; Dpid++)
- CaPmt.AddPid(*Dpid, STREAM_TYPE_DOLBY);
+ CaPmt.AddPid(*Dpid, STREAM_TYPE_PRIVATE);
+ for (const int *Spid = Channel->Spids(); *Spid; Spid++)
+ CaPmt.AddPid(*Spid, STREAM_TYPE_PRIVATE);
cas->SendPMT(&CaPmt);
cTimeMs Timeout(QUERY_REPLY_TIMEOUT);
do {
diff --git a/config.c b/config.c
index 73b11b1..6767b5c 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.13 2010/06/06 10:06:43 kls Exp $
+ * $Id: config.c 2.14 2011/06/13 14:41:01 kls Exp $
*/
#include "config.h"
@@ -395,7 +395,7 @@ cSetup::cSetup(void)
CurrentChannel = -1;
CurrentVolume = MAXVOLUME;
CurrentDolby = 0;
- InitialChannel = 0;
+ // InitialChannel is initialized by constructor
InitialVolume = -1;
ChannelsWrap = 0;
EmergencyExit = 1;
@@ -404,6 +404,7 @@ cSetup::cSetup(void)
cSetup& cSetup::operator= (const cSetup &s)
{
memcpy(&__BeginData__, &s.__BeginData__, (char *)&s.__EndData__ - (char *)&s.__BeginData__);
+ InitialChannel = s.InitialChannel;
return *this;
}
@@ -586,7 +587,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
else if (!strcasecmp(Name, "CurrentDolby")) CurrentDolby = atoi(Value);
- else if (!strcasecmp(Name, "InitialChannel")) InitialChannel = atoi(Value);
+ else if (!strcasecmp(Name, "InitialChannel")) InitialChannel = Value;
else if (!strcasecmp(Name, "InitialVolume")) InitialVolume = atoi(Value);
else if (!strcasecmp(Name, "ChannelsWrap")) ChannelsWrap = atoi(Value);
else if (!strcasecmp(Name, "EmergencyExit")) EmergencyExit = atoi(Value);
diff --git a/config.h b/config.h
index e4ac2f2..f3421f7 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.30 2011/03/13 12:02:31 kls Exp $
+ * $Id: config.h 2.32 2011/06/13 14:24:40 kls Exp $
*/
#ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number:
-#define VDRVERSION "1.7.18"
-#define VDRVERSNUM 10718 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.7.19"
+#define VDRVERSNUM 10719 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
-#define APIVERSION "1.7.18"
-#define APIVERSNUM 10718 // Version * 10000 + Major * 100 + Minor
+#define APIVERSION "1.7.19"
+#define APIVERSNUM 10719 // 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
@@ -287,11 +287,11 @@ public:
int CurrentChannel;
int CurrentVolume;
int CurrentDolby;
- int InitialChannel;
int InitialVolume;
int ChannelsWrap;
int EmergencyExit;
int __EndData__;
+ cString InitialChannel;
cSetup(void);
cSetup& operator= (const cSetup &s);
bool Load(const char *FileName);
diff --git a/device.c b/device.c
index 60340c0..0759993 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.38 2011/02/25 15:12:03 kls Exp $
+ * $Id: device.c 2.41 2011/06/02 13:14:16 kls Exp $
*/
#include "device.h"
@@ -286,10 +286,10 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView
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 <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers
- imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device
imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels
- imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards
+ imp <<= 1; imp |= device[i]->AvoidRecording(); // avoid SD full featured cards
imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel
+ imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device
if (imp < Impact) {
// This device has less impact than any previous one, so we take it.
Impact = imp;
@@ -618,6 +618,16 @@ int cDevice::NumProvidedSystems(void) const
return 0;
}
+int cDevice::SignalStrength(void) const
+{
+ return -1;
+}
+
+int cDevice::SignalQuality(void) const
+{
+ return -1;
+}
+
const cChannel *cDevice::GetCurrentlyTunedTransponder(void) const
{
return NULL;
diff --git a/device.h b/device.h
index a383dac..d937e5f 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.24 2011/03/21 17:58:41 kls Exp $
+ * $Id: device.h 2.26 2011/06/02 13:15:31 kls Exp $
*/
#ifndef __DEVICE_H
@@ -197,6 +197,9 @@ public:
///< Returns the number of this device (0 ... numDevices).
virtual bool HasDecoder(void) const;
///< Tells whether this device has an MPEG decoder.
+ virtual bool AvoidRecording(void) const { return false; }
+ ///< Returns true if this device should only be used for recording
+ ///< if no other device is available.
// Device hooks
@@ -250,6 +253,16 @@ public:
///< actually provide channels must implement this function.
///< The result of this function is used when selecting a device, in order
///< to avoid devices that provide more than one system.
+ virtual int SignalStrength(void) const;
+ ///< Returns the "strength" of the currently received signal.
+ ///< This is a value in the range 0 (no signal at all) through
+ ///< 100 (best possible signal). A value of -1 indicates that this
+ ///< device has no concept of a "signal strength".
+ virtual int SignalQuality(void) const;
+ ///< Returns the "quality" of the currently received signal.
+ ///< This is a value in the range 0 (worst quality) through
+ ///< 100 (best possible quality). A value of -1 indicates that this
+ ///< device has no concept of a "signal quality".
virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
///< Returns a pointer to the currently tuned transponder.
///< This is not one of the channels in the global cChannels list, but rather
diff --git a/diseqc.c b/diseqc.c
index 205444c..b65d82c 100644
--- a/diseqc.c
+++ b/diseqc.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: diseqc.c 2.2 2010/02/06 15:43:31 kls Exp $
+ * $Id: diseqc.c 2.4 2011/05/22 10:36:12 kls Exp $
*/
#include "diseqc.h"
@@ -59,7 +59,7 @@ bool cDiseqc::Parse(const char *s)
polarization = char(toupper(polarization));
if (polarization == 'V' || polarization == 'H' || polarization == 'L' || polarization == 'R') {
parsing = true;
- char *CurrentAction = NULL;
+ const char *CurrentAction = NULL;
while (Execute(&CurrentAction) != daNone)
;
parsing = false;
@@ -75,7 +75,7 @@ bool cDiseqc::Parse(const char *s)
return result;
}
-char *cDiseqc::Wait(char *s)
+const char *cDiseqc::Wait(const char *s) const
{
char *p = NULL;
errno = 0;
@@ -89,19 +89,22 @@ char *cDiseqc::Wait(char *s)
return NULL;
}
-char *cDiseqc::Codes(char *s)
+const char *cDiseqc::Codes(const char *s) const
{
- char *e = strchr(s, ']');
+ const char *e = strchr(s, ']');
if (e) {
- numCodes = 0;
- char *t = s;
- char *p = s;
+ int NumCodes = 0;
+ const char *t = s;
+ char *p;
while (t < e) {
- if (numCodes < MaxDiseqcCodes) {
+ if (NumCodes < MaxDiseqcCodes) {
errno = 0;
int n = strtol(t, &p, 16);
if (!errno && p != t && 0 <= n && n <= 255) {
- codes[numCodes++] = uchar(n);
+ if (parsing) {
+ codes[NumCodes++] = uchar(n);
+ numCodes = NumCodes;
+ }
t = skipspace(p);
}
else {
@@ -121,7 +124,7 @@ char *cDiseqc::Codes(char *s)
return NULL;
}
-cDiseqc::eDiseqcActions cDiseqc::Execute(char **CurrentAction)
+cDiseqc::eDiseqcActions cDiseqc::Execute(const char **CurrentAction) const
{
if (!*CurrentAction)
*CurrentAction = commands;
@@ -146,10 +149,10 @@ cDiseqc::eDiseqcActions cDiseqc::Execute(char **CurrentAction)
cDiseqcs Diseqcs;
-cDiseqc *cDiseqcs::Get(int Device, int Source, int Frequency, char Polarization)
+const cDiseqc *cDiseqcs::Get(int Device, int Source, int Frequency, char Polarization) const
{
int Devices = 0;
- for (cDiseqc *p = First(); p; p = Next(p)) {
+ for (const cDiseqc *p = First(); p; p = Next(p)) {
if (p->Devices()) {
Devices = p->Devices();
continue;
@@ -157,7 +160,7 @@ cDiseqc *cDiseqcs::Get(int Device, int Source, int Frequency, char Polarization)
if (Devices && !(Devices & (1 << Device - 1)))
continue;
if (p->Source() == Source && p->Slof() > Frequency && p->Polarization() == toupper(Polarization))
- return p;
+ return p;
}
return NULL;
}
diff --git a/diseqc.h b/diseqc.h
index 1b9a41d..413ed4d 100644
--- a/diseqc.h
+++ b/diseqc.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: diseqc.h 2.1 2010/02/06 15:14:42 kls Exp $
+ * $Id: diseqc.h 2.2 2011/05/22 10:35:38 kls Exp $
*/
#ifndef __DISEQC_H
@@ -33,15 +33,15 @@ private:
int lof;
char *commands;
bool parsing;
- uchar codes[MaxDiseqcCodes];
- int numCodes;
- char *Wait(char *s);
- char *Codes(char *s);
+ mutable uchar codes[MaxDiseqcCodes];
+ mutable int numCodes;
+ const char *Wait(const char *s) const;
+ const char *Codes(const char *s) const;
public:
cDiseqc(void);
~cDiseqc();
bool Parse(const char *s);
- eDiseqcActions Execute(char **CurrentAction);
+ eDiseqcActions Execute(const char **CurrentAction) const;
// Parses the DiSEqC commands and returns the appropriate action code
// with every call. CurrentAction must be the address of a character pointer,
// which is initialized to NULL. This pointer is used internally while parsing
@@ -55,12 +55,12 @@ public:
char Polarization(void) const { return polarization; }
int Lof(void) const { return lof; }
const char *Commands(void) const { return commands; }
- uchar *Codes(int &NumCodes) { NumCodes = numCodes; return numCodes ? codes : NULL; }
+ const uchar *Codes(int &NumCodes) const { NumCodes = numCodes; return numCodes ? codes : NULL; }
};
class cDiseqcs : public cConfig<cDiseqc> {
public:
- cDiseqc *Get(int Device, int Source, int Frequency, char Polarization);
+ const cDiseqc *Get(int Device, int Source, int Frequency, char Polarization) const;
};
extern cDiseqcs Diseqcs;
diff --git a/dvbdevice.c b/dvbdevice.c
index f32b350..b0750dd 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.38 2010/05/01 09:47:13 kls Exp $
+ * $Id: dvbdevice.c 2.42 2011/06/11 14:34:24 kls Exp $
*/
#include "dvbdevice.h"
@@ -253,12 +253,15 @@ bool cDvbTransponderParameters::Parse(const char *s)
// --- cDvbTuner -------------------------------------------------------------
+#define TUNER_POLL_TIMEOUT 10 // ms
+
class cDvbTuner : public cThread {
private:
enum eTunerStatus { tsIdle, tsSet, tsTuned, tsLocked };
int device;
int fd_frontend;
int adapter, frontend;
+ uint32_t subsystemId;
int tuneTimeout;
int lockTimeout;
time_t lastTimeoutReport;
@@ -269,16 +272,20 @@ private:
cMutex mutex;
cCondVar locked;
cCondVar newSet;
- bool GetFrontendStatus(fe_status_t &Status, int TimeoutMs = 0);
+ void ClearEventQueue(void) const;
+ bool GetFrontendStatus(fe_status_t &Status) const;
bool SetFrontend(void);
virtual void Action(void);
public:
cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType);
virtual ~cDvbTuner();
const cChannel *GetTransponder(void) const { return &channel; }
+ uint32_t SubsystemId(void) const { return subsystemId; }
bool IsTunedTo(const cChannel *Channel) const;
void Set(const cChannel *Channel);
bool Locked(int TimeoutMs = 0);
+ int GetSignalStrength(void) const;
+ int GetSignalQuality(void) const;
};
cDvbTuner::cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType)
@@ -288,6 +295,7 @@ cDvbTuner::cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_
adapter = Adapter;
frontend = Frontend;
frontendType = FrontendType;
+ subsystemId = cDvbDeviceProbe::GetSubsystemId(adapter, frontend);
tuneTimeout = 0;
lockTimeout = 0;
lastTimeoutReport = 0;
@@ -339,16 +347,19 @@ bool cDvbTuner::Locked(int TimeoutMs)
return tunerStatus >= tsLocked;
}
-bool cDvbTuner::GetFrontendStatus(fe_status_t &Status, int TimeoutMs)
+void cDvbTuner::ClearEventQueue(void) const
{
- if (TimeoutMs) {
- cPoller Poller(fd_frontend);
- if (Poller.Poll(TimeoutMs)) {
- dvb_frontend_event Event;
- while (ioctl(fd_frontend, FE_GET_EVENT, &Event) == 0)
- ; // just to clear the event queue - we'll read the actual status below
- }
+ cPoller Poller(fd_frontend);
+ if (Poller.Poll(TUNER_POLL_TIMEOUT)) {
+ dvb_frontend_event Event;
+ while (ioctl(fd_frontend, FE_GET_EVENT, &Event) == 0)
+ ; // just to clear the event queue - we'll read the actual status below
}
+}
+
+bool cDvbTuner::GetFrontendStatus(fe_status_t &Status) const
+{
+ ClearEventQueue();
while (1) {
if (ioctl(fd_frontend, FE_READ_STATUS, &Status) != -1)
return true;
@@ -358,6 +369,112 @@ bool cDvbTuner::GetFrontendStatus(fe_status_t &Status, int TimeoutMs)
return false;
}
+//#define DEBUG_SIGNALSTRENGTH
+//#define DEBUG_SIGNALQUALITY
+
+int cDvbTuner::GetSignalStrength(void) const
+{
+ ClearEventQueue();
+ uint16_t Signal;
+ while (1) {
+ if (ioctl(fd_frontend, FE_READ_SIGNAL_STRENGTH, &Signal) != -1)
+ break;
+ if (errno != EINTR)
+ return -1;
+ }
+ uint16_t MaxSignal = 0xFFFF; // Let's assume the default is using the entire range.
+ // Use the subsystemId to identify individual devices in case they need
+ // special treatment to map their Signal value into the range 0...0xFFFF.
+ switch (subsystemId) {
+ case 0x13C21019: MaxSignal = 670; break; // TT-budget S2-3200 (DVB-S/DVB-S2)
+ }
+ int s = int(Signal) * 100 / MaxSignal;
+ if (s > 100)
+ s = 100;
+#ifdef DEBUG_SIGNALSTRENGTH
+ fprintf(stderr, "FE %d/%d: %08X S = %04X %04X %3d%%\n", adapter, frontend, subsystemId, MaxSignal, Signal, s);
+#endif
+ return s;
+}
+
+#define LOCK_THRESHOLD 5 // indicates that all 5 FE_HAS_* flags are set
+
+int cDvbTuner::GetSignalQuality(void) const
+{
+ fe_status_t Status;
+ if (GetFrontendStatus(Status)) {
+ // Actually one would expect these checks to be done from FE_HAS_SIGNAL to FE_HAS_LOCK, but some drivers (like the stb0899) are broken, so FE_HAS_LOCK is the only one that (hopefully) is generally reliable...
+ if ((Status & FE_HAS_LOCK) == 0) {
+ if ((Status & FE_HAS_SIGNAL) == 0)
+ return 0;
+ if ((Status & FE_HAS_CARRIER) == 0)
+ return 1;
+ if ((Status & FE_HAS_VITERBI) == 0)
+ return 2;
+ if ((Status & FE_HAS_SYNC) == 0)
+ return 3;
+ return 4;
+ }
+ bool HasSnr = true;
+ uint16_t Snr;
+ while (1) {
+ if (ioctl(fd_frontend, FE_READ_SNR, &Snr) != -1)
+ break;
+ if (errno == EOPNOTSUPP) {
+ Snr = 0xFFFF;
+ HasSnr = false;
+ break;
+ }
+ if (errno != EINTR)
+ return -1;
+ }
+ bool HasBer = true;
+ uint32_t Ber;
+ while (1) {
+ if (ioctl(fd_frontend, FE_READ_BER, &Ber) != -1)
+ break;
+ if (errno == EOPNOTSUPP) {
+ Ber = 0;
+ HasBer = false;
+ break;
+ }
+ if (errno != EINTR)
+ return -1;
+ }
+ bool HasUnc = true;
+ uint32_t Unc;
+ while (1) {
+ if (ioctl(fd_frontend, FE_READ_UNCORRECTED_BLOCKS, &Unc) != -1)
+ break;
+ if (errno == EOPNOTSUPP) {
+ Unc = 0;
+ HasUnc = false;
+ break;
+ }
+ if (errno != EINTR)
+ return -1;
+ }
+ uint16_t MaxSnr = 0xFFFF; // Let's assume the default is using the entire range.
+ // Use the subsystemId to identify individual devices in case they need
+ // special treatment to map their Snr value into the range 0...0xFFFF.
+ switch (subsystemId) {
+ case 0x13C21019: MaxSnr = 200; break; // TT-budget S2-3200 (DVB-S/DVB-S2)
+ }
+ int a = int(Snr) * 100 / MaxSnr;
+ int b = 100 - (Unc * 10 + (Ber / 256) * 5);
+ if (b < 0)
+ b = 0;
+ int q = LOCK_THRESHOLD + a * b * (100 - LOCK_THRESHOLD) / 100 / 100;
+ if (q > 100)
+ q = 100;
+#ifdef DEBUG_SIGNALQUALITY
+ fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q);
+#endif
+ return q;
+ }
+ return -1;
+}
+
static unsigned int FrequencyToHz(unsigned int f)
{
while (f && f < 1000000)
@@ -392,11 +509,11 @@ bool cDvbTuner::SetFrontend(void)
if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) {
unsigned int frequency = channel.Frequency();
if (Setup.DiSEqC) {
- cDiseqc *diseqc = Diseqcs.Get(device, channel.Source(), channel.Frequency(), dtp.Polarization());
+ const cDiseqc *diseqc = Diseqcs.Get(device, channel.Source(), channel.Frequency(), dtp.Polarization());
if (diseqc) {
if (diseqc->Commands() && (!diseqcCommands || strcmp(diseqcCommands, diseqc->Commands()) != 0)) {
cDiseqc::eDiseqcActions da;
- for (char *CurrentAction = NULL; (da = diseqc->Execute(&CurrentAction)) != cDiseqc::daNone; ) {
+ for (const char *CurrentAction = NULL; (da = diseqc->Execute(&CurrentAction)) != cDiseqc::daNone; ) {
switch (da) {
case cDiseqc::daNone: break;
case cDiseqc::daToneOff: CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF)); break;
@@ -407,7 +524,7 @@ bool cDvbTuner::SetFrontend(void)
case cDiseqc::daMiniB: CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_BURST, SEC_MINI_B)); break;
case cDiseqc::daCodes: {
int n = 0;
- uchar *codes = diseqc->Codes(n);
+ const uchar *codes = diseqc->Codes(n);
if (codes) {
struct dvb_diseqc_master_cmd cmd;
cmd.msg_len = min(n, int(sizeof(cmd.msg)));
@@ -504,9 +621,9 @@ bool cDvbTuner::SetFrontend(void)
SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
SETCMD(DTV_INVERSION, dtp.Inversion());
SETCMD(DTV_MODULATION, dtp.Modulation());
-
+
tuneTimeout = ATSC_TUNE_TIMEOUT;
- lockTimeout = ATSC_LOCK_TIMEOUT;
+ lockTimeout = ATSC_LOCK_TIMEOUT;
}
else {
esyslog("ERROR: attempt to set channel with unknown DVB frontend type");
@@ -527,7 +644,7 @@ void cDvbTuner::Action(void)
fe_status_t Status = (fe_status_t)0;
while (Running()) {
fe_status_t NewStatus;
- if (GetFrontendStatus(NewStatus, 10))
+ if (GetFrontendStatus(NewStatus))
Status = NewStatus;
cMutexLock MutexLock(&mutex);
switch (tunerStatus) {
@@ -936,7 +1053,7 @@ bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Ne
bool hasPriority = Priority < 0 || Priority > this->Priority();
bool needsDetachReceivers = false;
- if (ProvidesTransponder(Channel)) {
+ if (dvbTuner && ProvidesTransponder(Channel)) {
result = hasPriority;
if (Priority >= 0 && Receiving(true)) {
if (dvbTuner->IsTunedTo(Channel)) {
@@ -969,19 +1086,30 @@ int cDvbDevice::NumProvidedSystems(void) const
return numProvidedSystems;
}
+int cDvbDevice::SignalStrength(void) const
+{
+ return dvbTuner ? dvbTuner->GetSignalStrength() : -1;
+}
+
+int cDvbDevice::SignalQuality(void) const
+{
+ return dvbTuner ? dvbTuner->GetSignalQuality() : -1;
+}
+
const cChannel *cDvbDevice::GetCurrentlyTunedTransponder(void) const
{
- return dvbTuner->GetTransponder();
+ return dvbTuner ? dvbTuner->GetTransponder() : NULL;
}
bool cDvbDevice::IsTunedToTransponder(const cChannel *Channel)
{
- return dvbTuner->IsTunedTo(Channel);
+ return dvbTuner ? dvbTuner->IsTunedTo(Channel) : false;
}
bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
{
- dvbTuner->Set(Channel);
+ if (dvbTuner)
+ dvbTuner->Set(Channel);
return true;
}
@@ -1036,3 +1164,24 @@ cDvbDeviceProbe::~cDvbDeviceProbe()
{
DvbDeviceProbes.Del(this, false);
}
+
+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);
+ }
+ return SubsystemId;
+}
diff --git a/dvbdevice.h b/dvbdevice.h
index ff606fd..0962548 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.14 2010/04/11 10:29:37 kls Exp $
+ * $Id: dvbdevice.h 2.15 2011/06/02 13:20:05 kls Exp $
*/
#ifndef __DVBDEVICE_H
@@ -141,6 +141,8 @@ public:
virtual bool ProvidesTransponder(const cChannel *Channel) const;
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
virtual int NumProvidedSystems(void) const;
+ virtual int SignalStrength(void) const;
+ virtual int SignalQuality(void) const;
virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
virtual bool IsTunedToTransponder(const cChannel *Channel);
protected:
@@ -196,6 +198,7 @@ class cDvbDeviceProbe : public cListObject {
public:
cDvbDeviceProbe(void);
virtual ~cDvbDeviceProbe();
+ static uint32_t GetSubsystemId(int Adapter, int Frontend);
virtual bool Probe(int Adapter, int Frontend) = 0;
///< Probes for a DVB device at the given Adapter and creates the appropriate
///< object derived from cDvbDevice if applicable.
diff --git a/libsi/descriptor.c b/libsi/descriptor.c
index 59f636a..06a58c0 100644
--- a/libsi/descriptor.c
+++ b/libsi/descriptor.c
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: descriptor.c 2.1 2010/11/01 15:24:31 kls Exp $
+ * $Id: descriptor.c 2.2 2011/06/15 21:26:00 kls Exp $
* *
***************************************************************************/
@@ -643,6 +643,33 @@ void ServiceIdentifierDescriptor::Parse() {
textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier));
}
+void ContentIdentifierDescriptor::Parse() {
+ identifierLoop.setData(data+sizeof(descr_content_identifier), getLength()-sizeof(descr_content_identifier));
+}
+
+void ContentIdentifierDescriptor::Identifier::Parse() {
+ int offset=0;
+ data.setPointerAndOffset<const content_identifier_entry>(s, offset);
+ if (s->crid_location == 0) {
+ identifier.setData(data+(offset-1), s->crid_length);
+ }
+ else {
+ identifier.setData(data+(offset-1), 2);
+ }
+}
+
+int ContentIdentifierDescriptor::Identifier::getCridType() const {
+ return s->crid_type;
+}
+
+int ContentIdentifierDescriptor::Identifier::getCridLocation() const {
+ return s->crid_location;
+}
+
+void DefaultAuthorityDescriptor::Parse() {
+ DefaultAuthority.setData(data+sizeof(descr_default_authority), getLength()-sizeof(descr_default_authority));
+}
+
void MultilingualNameDescriptor::Parse() {
nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name));
}
diff --git a/libsi/descriptor.h b/libsi/descriptor.h
index 4f2e41b..f105f7a 100644
--- a/libsi/descriptor.h
+++ b/libsi/descriptor.h
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: descriptor.h 2.1 2010/11/01 15:24:32 kls Exp $
+ * $Id: descriptor.h 2.2 2011/06/15 21:26:00 kls Exp $
* *
***************************************************************************/
@@ -361,6 +361,31 @@ protected:
virtual void Parse();
};
+class ContentIdentifierDescriptor : public Descriptor {
+public:
+ class Identifier : public LoopElement {
+ public:
+ String identifier;
+ int getCridType() const;
+ int getCridLocation() const;
+ virtual int getLength() { return sizeof(content_identifier_entry)+identifier.getLength(); }
+ protected:
+ virtual void Parse();
+ private:
+ const content_identifier_entry *s;
+ };
+ StructureLoop<Identifier> identifierLoop;
+protected:
+ virtual void Parse();
+};
+
+class DefaultAuthorityDescriptor : public Descriptor {
+public:
+ String DefaultAuthority; //ID
+protected:
+ virtual void Parse();
+};
+
//abstract base class
class MultilingualNameDescriptor : public Descriptor {
public:
diff --git a/libsi/headers.h b/libsi/headers.h
index 3ec35de..6867d2c 100644
--- a/libsi/headers.h
+++ b/libsi/headers.h
@@ -10,7 +10,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: headers.h 2.1 2010/11/01 15:24:32 kls Exp $
+ * $Id: headers.h 2.2 2011/06/15 21:26:00 kls Exp $
* *
***************************************************************************/
@@ -1680,6 +1680,24 @@ struct descr_content_identifier {
u_char descriptor_length :8;
};
+struct content_identifier_entry {
+#if BYTE_ORDER == BIG_ENDIAN
+ u_char crid_type :6;
+ u_char crid_location :2;
+#else
+ u_char crid_location :2;
+ u_char crid_type :6;
+#endif
+ union {
+ u_char crid_length :8;
+ u_char crid_ref_hi :8;
+ };
+ union {
+ u_char crid_byte :8;
+ u_char crid_ref_lo :8;
+ };
+};
+
/* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */
struct descr_time_slice_fec_identifier {
diff --git a/libsi/si.c b/libsi/si.c
index 3991178..840b3a1 100644
--- a/libsi/si.c
+++ b/libsi/si.c
@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: si.c 2.3 2010/11/01 15:24:32 kls Exp $
+ * $Id: si.c 2.4 2011/06/15 21:26:00 kls Exp $
* *
***************************************************************************/
@@ -609,6 +609,12 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
case RegistrationDescriptorTag:
d=new RegistrationDescriptor();
break;
+ case ContentIdentifierDescriptorTag:
+ d=new ContentIdentifierDescriptor();
+ break;
+ case DefaultAuthorityDescriptorTag:
+ d=new DefaultAuthorityDescriptor();
+ break;
//note that it is no problem to implement one
//of the unimplemented descriptors.
@@ -650,10 +656,8 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
case TransportStreamDescriptorTag:
//defined in ETSI EN 300 468 v 1.7.1
- case DefaultAuthorityDescriptorTag:
case RelatedContentDescriptorTag:
case TVAIdDescriptorTag:
- case ContentIdentifierDescriptorTag:
case TimeSliceFecIdentifierDescriptorTag:
case ECMRepetitionRateDescriptorTag:
case EnhancedAC3DescriptorTag:
diff --git a/menuitems.c b/menuitems.c
index 3a5a086..bc04e72 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.8 2010/12/12 13:41:09 kls Exp $
+ * $Id: menuitems.c 2.9 2011/06/13 14:48:41 kls Exp $
*/
#include "menuitems.h"
@@ -713,7 +713,19 @@ void cMenuEditStraItem::Set(void)
cMenuEditChanItem::cMenuEditChanItem(const char *Name, int *Value, const char *NoneString)
:cMenuEditIntItem(Name, Value, NoneString ? 0 : 1, Channels.MaxNumber())
{
+ channelID = NULL;
noneString = NoneString;
+ dummyValue = 0;
+ Set();
+}
+
+cMenuEditChanItem::cMenuEditChanItem(const char *Name, cString *ChannelID, const char *NoneString)
+:cMenuEditIntItem(Name, &dummyValue, NoneString ? 0 : 1, Channels.MaxNumber())
+{
+ channelID = ChannelID;
+ noneString = NoneString;
+ cChannel *channel = Channels.GetByChannelID(tChannelID::FromString(*ChannelID));
+ dummyValue = channel ? channel->Number() : 0;
Set();
}
@@ -744,6 +756,8 @@ eOSState cMenuEditChanItem::ProcessKey(eKeys Key)
*value = channel->Number();
else if (delta < 0 && noneString)
*value = 0;
+ if (channelID)
+ *channelID = channel ? channel->GetChannelID().ToString() : "";
Set();
}
break;
diff --git a/menuitems.h b/menuitems.h
index 6e8f108..a6f2743 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.4 2010/06/06 10:32:38 kls Exp $
+ * $Id: menuitems.h 2.5 2011/06/13 13:46:03 kls Exp $
*/
#ifndef __MENUITEMS_H
@@ -133,9 +133,12 @@ public:
class cMenuEditChanItem : public cMenuEditIntItem {
protected:
const char *noneString;
+ int dummyValue;
+ cString *channelID;
virtual void Set(void);
public:
cMenuEditChanItem(const char *Name, int *Value, const char *NoneString = NULL);
+ cMenuEditChanItem(const char *Name, cString *ChannelID, const char *NoneString = NULL);
virtual eOSState ProcessKey(eKeys Key);
};
diff --git a/osd.c b/osd.c
index d4e095a..49b655a 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.21 2011/04/17 14:25:07 kls Exp $
+ * $Id: osd.c 2.22 2011/06/02 12:00:17 kls Exp $
*/
#include "osd.h"
@@ -594,9 +594,10 @@ void cBitmap::DrawRectangle(int x1, int y1, int x2, int y2, tColor Color)
x2 = min(x2, width - 1);
y2 = min(y2, height - 1);
tIndex c = Index(Color);
- for (int y = y1; y <= y2; y++)
+ for (int y = y1; y <= y2; y++) {
for (int x = x1; x <= x2; x++)
SetIndex(x, y, c);
+ }
}
}
diff --git a/po/ar.po b/po/ar.po
index c779c99..3c31613 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-12-24 12:35+0100\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ar\n"
"X-Poedit-Bookmarks: -1,-1,-1,-1,-1,-1,-1,-1,1249,-1\n"
"X-Poedit-Language: Arabic\n"
"X-Poedit-Country: LIBYA\n"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index f5117f0..835f93d 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ca\n"
msgid "*** Invalid Channel ***"
msgstr "*** Canal incorrecte ***"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 664d3c2..e6ebdfd 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: cs\n"
msgid "*** Invalid Channel ***"
msgstr "*** Neplatný kanál ***"
diff --git a/po/da_DK.po b/po/da_DK.po
index ce6c57f..c837986 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: da\n"
msgid "*** Invalid Channel ***"
msgstr "*** Ugyldig kanal! ***"
diff --git a/po/de_DE.po b/po/de_DE.po
index d2d1a86..75dc3a6 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
msgid "*** Invalid Channel ***"
msgstr "*** Ungltiger Kanal ***"
diff --git a/po/el_GR.po b/po/el_GR.po
index c079e9f..a35fa3b 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-7\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: el\n"
msgid "*** Invalid Channel ***"
msgstr "*** ***"
diff --git a/po/es_ES.po b/po/es_ES.po
index cd0426a..88b693e 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: es\n"
msgid "*** Invalid Channel ***"
msgstr "*** Canal no vlido ***"
diff --git a/po/et_EE.po b/po/et_EE.po
index ff459c8..8c8ad1f 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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-Transfer-Encoding: 8bit\n"
-"Language: et\n"
msgid "*** Invalid Channel ***"
msgstr "*** Vigane kanal ***"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 7df0082..1b06c3f 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: fi\n"
msgid "*** Invalid Channel ***"
msgstr "*** Virheellinen kanavavalinta ***"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 02bad4e..68a581c 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -13,14 +13,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: fr\n"
msgid "*** Invalid Channel ***"
msgstr "*** Chane invalide ! ***"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 66e95dd..69104b4 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: hr\n"
msgid "*** Invalid Channel ***"
msgstr "*** Neispravan Program ***"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index e9b5025..b7cf1a7 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\n"
"PO-Revision-Date: 2007-12-01 21:42+0200\n"
"Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
+"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: hu\n"
msgid "*** Invalid Channel ***"
msgstr "*** rvnytelen csatorna ***"
diff --git a/po/it_IT.po b/po/it_IT.po
index a17e7a3..24e5412 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -11,14 +11,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\n"
"PO-Revision-Date: 2010-06-13 00:30+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
+"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: it\n"
"X-Poedit-Language: Italian\n"
"X-Poedit-Country: ITALY\n"
"X-Poedit-SourceCharset: utf-8\n"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index 310f29a..a8dfcb9 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-06-06 12:52+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: lt\n"
msgid "*** Invalid Channel ***"
msgstr "*** Blogi kanalo nustatymai ***"
diff --git a/po/mk_MK.po b/po/mk_MK.po
index 8e54f15..c9d3481 100644
--- a/po/mk_MK.po
+++ b/po/mk_MK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR-1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: mk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: mk\n"
"X-Generator: KBabel 1.11.4\n"
msgid "*** Invalid Channel ***"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 220ff78..66febc5 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -11,14 +11,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: nl\n"
msgid "*** Invalid Channel ***"
msgstr "*** Ongeldig kanaal ***"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 7c60d29..a49ab6b 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: nn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: nn\n"
msgid "*** Invalid Channel ***"
msgstr "*** Ugyldig Kanal! ***"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 1d4af93..e56f3bf 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: pl\n"
msgid "*** Invalid Channel ***"
msgstr "*** Niepoprawny kana ***"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index ee806ce..2eae063 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.15\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: pt\n"
msgid "*** Invalid Channel ***"
msgstr "*** Canal invlido ***"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index c55239c..cd1a4d0 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ro\n"
"X-Poedit-Language: Romanian\n"
"X-Poedit-Country: ROMANIA\n"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 2115008..57210f0 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ru\n"
msgid "*** Invalid Channel ***"
msgstr "*** ***"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index d5335c2..a8faa76 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-06-06 12:52+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sk\n"
msgid "*** Invalid Channel ***"
msgstr "*** Neplatn kanl ***"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 90cf058..2e6667d 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sl\n"
msgid "*** Invalid Channel ***"
msgstr "*** Neznan kanal ***"
diff --git a/po/sr_SR.po b/po/sr_SR.po
index 9a20687..c57dc2b 100644
--- a/po/sr_SR.po
+++ b/po/sr_SR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.1\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2011-02-20 19:02+0100\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sr\n"
msgid "*** Invalid Channel ***"
msgstr "*** Neispravan Kanal ***"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index db251ab..41b6592 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: sv\n"
msgid "*** Invalid Channel ***"
msgstr "*** Felaktig kanal ***"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 2f44ecd..b0ad00f 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-9\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: tr\n"
msgid "*** Invalid Channel ***"
msgstr "*** Geersiz kanal ***"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 515174a..f316e29 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: uk\n"
msgid "*** Invalid Channel ***"
msgstr "*** Неправильний канал ***"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 0ea0026..11ccd84 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2010-10-24 16:26+0200\n"
+"POT-Creation-Date: 2011-05-21 14:26+0200\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"
+"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: zh_CN\n"
"X-Poedit-Language: Chinese\n"
"X-Poedit-Country: CHINA\n"
"X-Poedit-SourceCharset: utf-8\n"
diff --git a/recorder.c b/recorder.c
index f7c3fb0..2738c97 100644
--- a/recorder.c
+++ b/recorder.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recorder.c 2.9 2010/12/27 11:35:46 kls Exp $
+ * $Id: recorder.c 2.11 2011/06/12 14:16:45 kls Exp $
*/
#include "recorder.h"
@@ -31,7 +31,7 @@ cRecorder::cRecorder(const char *FileName, const cChannel *Channel, int Priority
SpinUpDisk(FileName);
- ringBuffer = new cRingBufferLinear(RECORDERBUFSIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE, true, "Recorder");
+ ringBuffer = new cRingBufferLinear(RECORDERBUFSIZE, TS_SIZE, true, "Recorder");
ringBuffer->SetTimeouts(0, 100);
int Pid = Channel->Vpid();
@@ -119,6 +119,8 @@ void cRecorder::Action(void)
time_t t = time(NULL);
bool InfoWritten = false;
bool FirstIframeSeen = false;
+ int FileNumber = 0;
+ off_t FrameOffset = -1;
while (Running()) {
int r;
uchar *b = ringBuffer->Get(r);
@@ -131,7 +133,7 @@ void cRecorder::Action(void)
if (!InfoWritten) {
cRecordingInfo RecordingInfo(recordingName);
if (RecordingInfo.Read()) {
- if (frameDetector->FramesPerSecond() > 0 && !DoubleEqual(RecordingInfo.FramesPerSecond(), frameDetector->FramesPerSecond())) {
+ if (frameDetector->FramesPerSecond() > 0 && DoubleEqual(RecordingInfo.FramesPerSecond(), DEFAULTFRAMESPERSECOND) && !DoubleEqual(RecordingInfo.FramesPerSecond(), frameDetector->FramesPerSecond())) {
RecordingInfo.SetFramesPerSecond(frameDetector->FramesPerSecond());
RecordingInfo.Write();
Recordings.UpdateByName(recordingName);
@@ -139,12 +141,16 @@ void cRecorder::Action(void)
}
InfoWritten = true;
}
+ if (frameDetector->NewPayload()) {
+ FileNumber = fileName->Number();
+ FrameOffset = fileSize;
+ }
if (FirstIframeSeen || frameDetector->IndependentFrame()) {
FirstIframeSeen = true; // start recording with the first I-frame
if (!NextFile())
break;
if (index && frameDetector->NewFrame())
- index->Write(frameDetector->IndependentFrame(), fileName->Number(), fileSize);
+ index->Write(frameDetector->IndependentFrame(), FileNumber, FrameOffset);
if (frameDetector->IndependentFrame()) {
recordFile->Write(patPmtGenerator.GetPat(), TS_SIZE);
fileSize += TS_SIZE;
diff --git a/recording.c b/recording.c
index d4cf9c3..a8b40f2 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.30 2011/04/17 13:53:11 kls Exp $
+ * $Id: recording.c 2.31 2011/06/12 13:04:28 kls Exp $
*/
#include "recording.h"
@@ -1403,11 +1403,12 @@ void cIndexFileGenerator::Action(void)
bool Rewind = false;
cFileName FileName(recordingName, false);
cUnbufferedFile *ReplayFile = FileName.Open();
- cRingBufferLinear Buffer(IFG_BUFFER_SIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE);
+ cRingBufferLinear Buffer(IFG_BUFFER_SIZE, TS_SIZE);
cPatPmtParser PatPmtParser;
cFrameDetector FrameDetector;
cIndexFile IndexFile(recordingName, true);
int BufferChunks = KILOBYTE(1); // no need to read a lot at the beginning when parsing PAT/PMT
+ int FileNumber = 0;
off_t FileSize = 0;
off_t FrameOffset = -1;
Skins.QueueMessage(mtInfo, tr("Regenerating index file"));
@@ -1424,12 +1425,18 @@ void cIndexFileGenerator::Action(void)
if (Data) {
if (FrameDetector.Synced()) {
// Step 3 - generate the index:
- if (TsPid(Data) == PATPID)
+ if (FrameOffset < 0 && TsPid(Data) == PATPID) {
+ FileNumber = FileName.Number();
FrameOffset = FileSize; // the PAT/PMT is at the beginning of an I-frame
+ }
int Processed = FrameDetector.Analyze(Data, Length);
if (Processed > 0) {
+ if (FrameDetector.NewPayload() && FrameOffset < 0) {
+ FileNumber = FileName.Number();
+ FrameOffset = FileSize;
+ }
if (FrameDetector.NewFrame()) {
- IndexFile.Write(FrameDetector.IndependentFrame(), FileName.Number(), FrameOffset >= 0 ? FrameOffset : FileSize);
+ IndexFile.Write(FrameDetector.IndependentFrame(), FileNumber, FrameOffset);
FrameOffset = -1;
}
FileSize += Processed;
diff --git a/remux.c b/remux.c
index f7ef87a..c3f07fb 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.53 2011/03/20 10:21:14 kls Exp $
+ * $Id: remux.c 2.57 2011/06/12 14:24:09 kls Exp $
*/
#include "remux.h"
@@ -12,6 +12,7 @@
#include "libsi/si.h"
#include "libsi/section.h"
#include "libsi/descriptor.h"
+#include "recording.h"
#include "shutdown.h"
#include "tools.h"
@@ -781,7 +782,8 @@ cFrameDetector::cFrameDetector(int Pid, int Type)
{
SetPid(Pid, Type);
synced = false;
- newFrame = independentFrame = false;
+ newPayload = newFrame = independentFrame = false;
+ frameTypeOffset = -1;
numPtsValues = 0;
numFrames = 0;
numIFrames = 0;
@@ -808,7 +810,8 @@ void cFrameDetector::SetPid(int Pid, int Type)
void cFrameDetector::Reset(void)
{
- newFrame = independentFrame = false;
+ newPayload = newFrame = independentFrame = false;
+ frameTypeOffset = -1;
payloadUnitOfFrame = 0;
scanning = false;
scanner = EMPTY_SCANNER;
@@ -816,9 +819,8 @@ void cFrameDetector::Reset(void)
int cFrameDetector::Analyze(const uchar *Data, int Length)
{
- int SeenPayloadStart = false;
int Processed = 0;
- newFrame = independentFrame = false;
+ newPayload = newFrame = independentFrame = false;
while (Length >= TS_SIZE) {
if (Data[0] != TS_SYNC_BYTE) {
int Skipped = 1;
@@ -831,16 +833,13 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
int Pid = TsPid(Data);
if (Pid == pid) {
if (TsPayloadStart(Data)) {
- SeenPayloadStart = true;
if (synced && Processed)
- return Processed;
- if (Length < MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE)
- return Processed; // need more data, in case the frame type is not stored in the first TS packet
+ return Processed; // flush everything before this new payload
if (framesPerSecond <= 0.0) {
// frame rate unknown, so collect a sequence of PTS values:
if (numPtsValues < MaxPtsValues && numIFrames < 2) { // collect a sequence containing at least two I-frames
const uchar *Pes = Data + TsPayloadOffset(Data);
- if (PesHasPts(Pes)) {
+ if (numIFrames && PesHasPts(Pes)) {
ptsValues[numPtsValues] = PesGetPts(Pes);
// check for rollover:
if (numPtsValues && ptsValues[numPtsValues - 1] > 0xF0000000 && ptsValues[numPtsValues] < 0x10000000) {
@@ -885,8 +884,8 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
else
framesPerSecond = 60.0 / 1.001;
else {
- framesPerSecond = 25.0;
- dsyslog("unknown frame delta (%d), assuming 25 fps", Delta);
+ framesPerSecond = DEFAULTFRAMESPERSECOND;
+ dsyslog("unknown frame delta (%d), assuming %5.2f fps", Delta, DEFAULTFRAMESPERSECOND);
}
}
else // audio
@@ -900,6 +899,10 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
if (scanning) {
int PayloadOffset = TsPayloadOffset(Data);
if (TsPayloadStart(Data)) {
+ if (synced && Processed)
+ return Processed; // flush everything before this new payload
+ newPayload = true;
+ scanner = EMPTY_SCANNER;
PayloadOffset += PesPayloadOffset(Data + PayloadOffset);
if (!framesPerPayloadUnit)
framesPerPayloadUnit = framesInPayloadUnit;
@@ -907,17 +910,30 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
dbgframes("/");
}
for (int i = PayloadOffset; scanning && i < TS_SIZE; i++) {
- scanner <<= 8;
- scanner |= Data[i];
+ if (frameTypeOffset < 0) {
+ scanner <<= 8;
+ scanner |= Data[i];
+ }
+ else
+ frameTypeOffset += PayloadOffset;
switch (type) {
case 0x01: // MPEG 1 video
case 0x02: // MPEG 2 video
if (scanner == 0x00000100) { // Picture Start Code
+ if (frameTypeOffset < 0) {
+ frameTypeOffset = i + 2;
+ if (frameTypeOffset >= TS_SIZE) { // the byte to check is in the next TS packet
+ frameTypeOffset -= TS_SIZE;
+ if (!synced)
+ dbgframes("%d>", frameTypeOffset);
+ break;
+ }
+ }
scanner = EMPTY_SCANNER;
- if (synced && !SeenPayloadStart && Processed)
- return Processed; // flush everything before this new frame
newFrame = true;
- independentFrame = ((Data[i + 2] >> 3) & 0x07) == 1; // I-Frame
+ uchar FrameType = (Data[frameTypeOffset] >> 3) & 0x07;
+ frameTypeOffset = -1;
+ independentFrame = FrameType == 1; // I-Frame
if (synced) {
if (framesPerPayloadUnit <= 1)
scanning = false;
@@ -928,7 +944,7 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
numIFrames++;
if (numIFrames == 1)
numFrames++;
- dbgframes("%d ", (Data[i + 2] >> 3) & 0x07);
+ dbgframes("%u ", FrameType);
}
if (synced)
return Processed + TS_SIZE; // flag this new frame
@@ -936,11 +952,20 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
break;
case 0x1B: // MPEG 4 video
if (scanner == 0x00000109) { // Access Unit Delimiter
+ if (frameTypeOffset < 0) {
+ frameTypeOffset = i + 1;
+ if (frameTypeOffset >= TS_SIZE) { // the byte to check is in the next TS packet
+ frameTypeOffset -= TS_SIZE;
+ if (!synced)
+ dbgframes("%d>", frameTypeOffset);
+ break;
+ }
+ }
scanner = EMPTY_SCANNER;
- if (synced && !SeenPayloadStart && Processed)
- return Processed; // flush everything before this new frame
newFrame = true;
- independentFrame = Data[i + 1] == 0x10;
+ uchar FrameType = Data[frameTypeOffset];
+ frameTypeOffset = -1;
+ independentFrame = FrameType == 0x10;
if (synced) {
if (framesPerPayloadUnit < 0) {
payloadUnitOfFrame = (payloadUnitOfFrame + 1) % -framesPerPayloadUnit;
@@ -958,7 +983,7 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
numIFrames++;
if (numIFrames == 1)
numFrames++;
- dbgframes("%02X ", Data[i + 1]);
+ dbgframes("%02X ", FrameType);
}
if (synced)
return Processed + TS_SIZE; // flag this new frame
diff --git a/remux.h b/remux.h
index 60a9a57..3204bb4 100644
--- a/remux.h
+++ b/remux.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remux.h 2.28 2011/03/19 16:52:46 kls Exp $
+ * $Id: remux.h 2.30 2011/06/12 12:49:17 kls Exp $
*/
#ifndef __REMUX_H
@@ -84,15 +84,18 @@ inline bool TsIsScrambled(const uchar *p)
inline int TsPayloadOffset(const uchar *p)
{
- int o = (p[3] & TS_ADAPT_FIELD_EXISTS) ? p[4] + 5 : 4;
+ int o = TsHasAdaptationField(p) ? p[4] + 5 : 4;
return o <= TS_SIZE ? o : TS_SIZE;
}
inline int TsGetPayload(const uchar **p)
{
- int o = TsPayloadOffset(*p);
- *p += o;
- return TS_SIZE - o;
+ if (TsHasPayload(*p)) {
+ int o = TsPayloadOffset(*p);
+ *p += o;
+ return TS_SIZE - o;
+ }
+ return 0;
}
inline int TsContinuityCounter(const uchar *p)
@@ -294,7 +297,7 @@ public:
~cTsToPes();
void PutTs(const uchar *Data, int Length);
///< Puts the payload data of the single TS packet at Data into the converter.
- ///< Length is always 188.
+ ///< Length is always TS_SIZE.
///< If the given TS packet starts a new PES payload packet, the converter
///< will be automatically reset. Any packets before the first one that starts
///< a new PES payload packet will be ignored.
@@ -333,16 +336,16 @@ void PesDump(const char *Name, const u_char *Data, int Length);
// Frame detector:
-#define MIN_TS_PACKETS_FOR_FRAME_DETECTOR 2
-
class cFrameDetector {
private:
enum { MaxPtsValues = 150 };
int pid;
int type;
bool synced;
+ bool newPayload;
bool newFrame;
bool independentFrame;
+ int frameTypeOffset;
uint32_t ptsValues[MaxPtsValues]; // 32 bit is enough - we only need the delta
int numPtsValues;
int numFrames;
@@ -368,12 +371,17 @@ public:
///< the frame detector for actual work.
int Analyze(const uchar *Data, int Length);
///< Analyzes the TS packets pointed to by Data. Length is the number of
- ///< bytes Data points to, and must be a multiple of 188.
+ ///< bytes Data points to, and must be a multiple of TS_SIZE.
///< Returns the number of bytes that have been analyzed.
///< If the return value is 0, the data was not sufficient for analyzing and
///< Analyze() needs to be called again with more actual data.
bool Synced(void) { return synced; }
///< Returns true if the frame detector has synced on the data stream.
+ bool NewPayload(void) { return newPayload; }
+ ///< Returns true if the data given to the last call to Analyze() started a
+ ///< new payload. The caller should remember the current file offset in
+ ///< order to be able to generate an index entry later, when NewFrame()
+ ///< returns true.
bool NewFrame(void) { return newFrame; }
///< Returns true if the data given to the last call to Analyze() started a
///< new frame.
diff --git a/skinsttng.c b/skinsttng.c
index 9bd1b15..169488a 100644
--- a/skinsttng.c
+++ b/skinsttng.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: skinsttng.c 2.7 2011/02/20 13:02:49 kls Exp $
+ * $Id: skinsttng.c 2.10 2011/06/12 15:20:59 kls Exp $
*/
// Star Trek: The Next Generation is a registered trademark of Paramount Pictures
@@ -92,6 +92,8 @@ THEME_CLR(Theme, clrChannelEpgTitle, clrCyan);
THEME_CLR(Theme, clrChannelEpgShortText, clrYellow);
THEME_CLR(Theme, clrChannelTimebarSeen, clrYellow);
THEME_CLR(Theme, clrChannelTimebarRest, clrGray50);
+THEME_CLR(Theme, clrChannelSignalValue, clrGreen);
+THEME_CLR(Theme, clrChannelSignalRest, clrRed);
THEME_CLR(Theme, clrMenuFrame, clrYellow);
THEME_CLR(Theme, clrMenuTitle, clrBlack);
THEME_CLR(Theme, clrMenuDate, clrBlack);
@@ -134,6 +136,10 @@ private:
const cEvent *present;
cString lastDate;
int lastSeen;
+ int lastDeviceNumber;
+ int lastSignalStrength;
+ int lastSignalQuality;
+ time_t lastSignalDisplay;
tTrackId lastTrackId;
static cBitmap bmTeletext, bmRadio, bmAudio, bmDolbyDigital, bmEncrypted, bmRecording;
public:
@@ -156,6 +162,10 @@ cSkinSTTNGDisplayChannel::cSkinSTTNGDisplayChannel(bool WithInfo)
{
present = NULL;
lastSeen = -1;
+ lastDeviceNumber = -1;
+ lastSignalStrength = -1;
+ lastSignalQuality = -1;
+ lastSignalDisplay = 0;
memset(&lastTrackId, 0, sizeof(lastTrackId));
const cFont *font = cFont::GetFont(fontOsd);
withInfo = WithInfo;
@@ -274,6 +284,7 @@ void cSkinSTTNGDisplayChannel::SetChannel(const cChannel *Channel, int Number)
}
}
osd->DrawText(x3 + TextFrame, y0, ChannelString(Channel, Number), Theme.Color(clrChannelName), frameColor, cFont::GetFont(fontOsd), x - x3 - TextFrame);
+ lastSignalDisplay = time(NULL); // don't get slowed down during heavy zapping
}
void cSkinSTTNGDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Following)
@@ -330,8 +341,40 @@ void cSkinSTTNGDisplayChannel::Flush(void)
osd->DrawText(x3 + TextFrame, y6, Track ? Track->description : "", Theme.Color(clrChannelName), frameColor, font, x4 - x3 - w - 2 * TextFrame);
strn0cpy(lastTrackId.description, Track ? Track->description : "", sizeof(lastTrackId.description));
}
+ if (time(NULL) != lastSignalDisplay) {
+ int DeviceNumber = cDevice::ActualDevice()->DeviceNumber() + 1;
+ int SignalStrength = cDevice::ActualDevice()->SignalStrength();
+ int SignalQuality = cDevice::ActualDevice()->SignalQuality();
+ if (DeviceNumber != lastDeviceNumber || SignalStrength != lastSignalStrength || SignalQuality != lastSignalQuality) {
+ int d = 3;
+ int h = ((y7 - y6 + 1) - 3 * d) / 2;
+ int w = (x4 - x3) / 5;
+ int x = (x3 + x4) / 2 - w / 2;
+ if (SignalStrength >= 0) {
+ int s = SignalStrength * w / 100;
+ osd->DrawRectangle(x, y6 + d, x + s - 1, y6 + d + h - 1, Theme.Color(clrChannelSignalValue));
+ osd->DrawRectangle(x + s, y6 + d, x + w - 1, y6 + d + h - 1, Theme.Color(clrChannelSignalRest));
+ }
+ else if (DeviceNumber != lastDeviceNumber)
+ osd->DrawRectangle(x, y6 + d, x + w - 1, y6 + d + h - 1, Theme.Color(clrChannelFrame));
+ if (SignalQuality >= 0) {
+ int q = SignalQuality * w / 100;
+ osd->DrawRectangle(x, y7 - d - h + 1, x + q - 1, y7 - d, Theme.Color(clrChannelSignalValue));
+ osd->DrawRectangle(x + q, y7 - d - h + 1, x + w - 1, y7 - d, Theme.Color(clrChannelSignalRest));
+ }
+ else if (DeviceNumber != lastDeviceNumber)
+ osd->DrawRectangle(x, y7 - d - h + 1, x + w - 1, y7 - d, Theme.Color(clrChannelFrame));
+ cString dn = cString::sprintf(" %d ", DeviceNumber);
+ const cFont *font = cFont::GetFont(fontSml);
+ int dw = font->Width(dn);
+ osd->DrawText(x - 2 * d - dw, y6, dn, Theme.Color(clrChannelDate), frameColor, font, dw);
+ lastDeviceNumber = DeviceNumber;
+ lastSignalStrength = SignalStrength;
+ lastSignalQuality = SignalQuality;
+ }
+ lastSignalDisplay = time(NULL);
+ }
}
-
int seen = 0;
if (present) {
time_t t = time(NULL);
diff --git a/tools.c b/tools.c
index ab7fe96..6a98bf6 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 2.13 2011/03/20 12:07:18 kls Exp $
+ * $Id: tools.c 2.14 2011/04/29 14:51:14 kls Exp $
*/
#include "tools.h"
@@ -906,6 +906,8 @@ cString &cString::operator=(const cString &String)
cString &cString::operator=(const char *String)
{
+ if (s == String)
+ return *this;
free(s);
s = String ? strdup(String) : NULL;
return *this;
diff --git a/vdr.c b/vdr.c
index 34560e7..ad86f5a 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.20 2010/12/12 13:42:00 kls Exp $
+ * $Id: vdr.c 2.21 2011/06/13 14:40:12 kls Exp $
*/
#include <getopt.h>
@@ -704,8 +704,12 @@ int main(int argc, char *argv[])
if (!cDevice::WaitForAllDevicesReady(DEVICEREADYTIMEOUT))
dsyslog("not all devices ready after %d seconds", DEVICEREADYTIMEOUT);
- if (Setup.InitialChannel > 0)
- Setup.CurrentChannel = Setup.InitialChannel;
+ if (isnumber(Setup.InitialChannel)) { // for compatibility with old setup.conf files
+ if (cChannel *Channel = Channels.GetByNumber(atoi(Setup.InitialChannel)))
+ Setup.InitialChannel = Channel->GetChannelID().ToString();
+ }
+ if (cChannel *Channel = Channels.GetByChannelID(tChannelID::FromString(Setup.InitialChannel)))
+ Setup.CurrentChannel = Channel->Number();
if (Setup.InitialVolume >= 0)
Setup.CurrentVolume = Setup.InitialVolume;
Channels.SwitchTo(Setup.CurrentChannel);