From bd61fee1e9328aec470c319494cccb90e53302c2 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 19 Jun 2011 12:41:00 +0200 Subject: Version 1.7.19 Original announce message: VDR developer version 1.7.19 is now available at MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.19.tar.bz2 A 'diff' against the previous version is available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.18-1.7.19.diff MD5 checksums: 1eb04ecdc2b11ab8641ebfaa2cb93f42 vdr-1.7.19.tar.bz2 db16ce7bb51e0db837ed56ef4744a67e vdr-1.7.18-1.7.19.diff WARNING: ======== This is a developer version. Even though I use it in my productive environment. I strongly recommend that you only use it under controlled conditions and for testing and debugging. This version introduces functions to determine the "signal strength" and "signal quality" through cDevice. If you are using a DVB card that contains an stb0899 frontend chip (like the TT-budget S2-3200) you may want to apply the patches from ftp://ftp.tvdr.de/vdr/Developer/Driver-Patches to the LinuxDVB driver source in order to receive useful results from that frontend. Since apparently the various frontend drivers return different maximum values in their FE_READ_SIGNAL_STRENGTH and FE_READ_SNR functions (some deliver a value in the range 0x0000...0xFFFF, while others return values as "dB/10" or "dBm/10" (the latter with an offset to make the value positive, since the parameter is unsigned), the functions cDvbTuner::GetSignalStrength() and cDvbTuner::GetSignalQuality() use the device's "subsystem ID" to map these values into the range 0...100, which is the normalized return value of these functions. Take a look at these two functions and maybe remove the comment characters from the lines //#define DEBUG_SIGNALSTRENGTH //#define DEBUG_SIGNALQUALITY in dvbdevice.c to get some debug output if your device doesn't return any directly useful values and may have to be added appropriately to the 'switch (subsystemId)' statement. The channel display of the 'sttng' skin uses these values to implement a signal strength/quality display. From the HISTORY file: - 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 Göbenich). 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 Bläser). - Added support for "content identifier descriptor" and "default authority descriptor" to 'libsi' (thanks to Dave Pickles). --- CONTRIBUTORS | 29 +++++ HISTORY | 43 ++++++++ MANUAL | 4 +- Makefile | 4 +- PLUGINS/src/dvbhddevice/HISTORY | 31 +++++- PLUGINS/src/dvbhddevice/Makefile | 4 +- PLUGINS/src/dvbhddevice/dvbhddevice.c | 4 +- PLUGINS/src/dvbhddevice/dvbhdffdevice.c | 28 ++--- PLUGINS/src/dvbhddevice/hdffcmd.c | 21 +++- PLUGINS/src/dvbhddevice/hdffosd.c | 26 ++++- PLUGINS/src/dvbhddevice/po/de_DE.po | 89 +++++++++++++++ PLUGINS/src/dvbhddevice/setup.c | 165 ++++++++++++++-------------- PLUGINS/src/dvbsddevice/Makefile | 4 +- PLUGINS/src/dvbsddevice/dvbsdffdevice.c | 24 ++-- PLUGINS/src/dvbsddevice/dvbsdffdevice.h | 3 +- PLUGINS/src/hello/Makefile | 4 +- PLUGINS/src/hello/po/ca_ES.po | 4 +- PLUGINS/src/hello/po/cs_CZ.po | 4 +- PLUGINS/src/hello/po/da_DK.po | 4 +- PLUGINS/src/hello/po/de_DE.po | 4 +- PLUGINS/src/hello/po/el_GR.po | 4 +- PLUGINS/src/hello/po/es_ES.po | 4 +- PLUGINS/src/hello/po/et_EE.po | 4 +- PLUGINS/src/hello/po/fi_FI.po | 4 +- PLUGINS/src/hello/po/fr_FR.po | 4 +- PLUGINS/src/hello/po/hr_HR.po | 4 +- PLUGINS/src/hello/po/hu_HU.po | 4 +- PLUGINS/src/hello/po/it_IT.po | 4 +- PLUGINS/src/hello/po/lt_LT.po | 4 +- PLUGINS/src/hello/po/nl_NL.po | 4 +- PLUGINS/src/hello/po/nn_NO.po | 4 +- PLUGINS/src/hello/po/pl_PL.po | 4 +- PLUGINS/src/hello/po/pt_PT.po | 4 +- PLUGINS/src/hello/po/ro_RO.po | 4 +- PLUGINS/src/hello/po/ru_RU.po | 4 +- PLUGINS/src/hello/po/sk_SK.po | 4 +- PLUGINS/src/hello/po/sl_SI.po | 4 +- PLUGINS/src/hello/po/sv_SE.po | 4 +- PLUGINS/src/hello/po/tr_TR.po | 4 +- PLUGINS/src/hello/po/zh_CN.po | 4 +- PLUGINS/src/pictures/Makefile | 4 +- PLUGINS/src/pictures/po/de_DE.po | 4 +- PLUGINS/src/pictures/po/fi_FI.po | 4 +- PLUGINS/src/pictures/po/fr_FR.po | 4 +- PLUGINS/src/pictures/po/it_IT.po | 4 +- PLUGINS/src/pictures/po/lt_LT.po | 4 +- PLUGINS/src/pictures/po/ru_RU.po | 4 +- PLUGINS/src/pictures/po/sk_SK.po | 4 +- PLUGINS/src/skincurses/HISTORY | 4 + PLUGINS/src/skincurses/Makefile | 4 +- PLUGINS/src/skincurses/po/de_DE.po | 4 +- PLUGINS/src/skincurses/po/fi_FI.po | 4 +- PLUGINS/src/skincurses/po/it_IT.po | 4 +- PLUGINS/src/skincurses/po/lt_LT.po | 4 +- PLUGINS/src/skincurses/po/ru_RU.po | 4 +- PLUGINS/src/skincurses/po/sk_SK.po | 4 +- PLUGINS/src/skincurses/skincurses.c | 6 +- ci.c | 16 ++- config.c | 7 +- config.h | 12 +- device.c | 16 ++- device.h | 15 ++- diseqc.c | 31 +++--- diseqc.h | 16 +-- dvbdevice.c | 189 ++++++++++++++++++++++++++++---- dvbdevice.h | 5 +- libsi/descriptor.c | 29 ++++- libsi/descriptor.h | 27 ++++- libsi/headers.h | 20 +++- libsi/si.c | 10 +- menuitems.c | 16 ++- menuitems.h | 5 +- osd.c | 5 +- po/ar.po | 4 +- po/ca_ES.po | 4 +- po/cs_CZ.po | 4 +- po/da_DK.po | 4 +- po/de_DE.po | 4 +- po/el_GR.po | 4 +- po/es_ES.po | 4 +- po/et_EE.po | 4 +- po/fi_FI.po | 4 +- po/fr_FR.po | 4 +- po/hr_HR.po | 4 +- po/hu_HU.po | 4 +- po/it_IT.po | 4 +- po/lt_LT.po | 4 +- po/mk_MK.po | 4 +- po/nl_NL.po | 4 +- po/nn_NO.po | 4 +- po/pl_PL.po | 4 +- po/pt_PT.po | 4 +- po/ro_RO.po | 4 +- po/ru_RU.po | 4 +- po/sk_SK.po | 4 +- po/sl_SI.po | 4 +- po/sr_SR.po | 4 +- po/sv_SE.po | 4 +- po/tr_TR.po | 4 +- po/uk_UA.po | 4 +- po/zh_CN.po | 4 +- recorder.c | 14 ++- recording.c | 15 ++- remux.c | 69 ++++++++---- remux.h | 26 +++-- skinsttng.c | 47 +++++++- tools.c | 4 +- vdr.c | 10 +- 108 files changed, 968 insertions(+), 397 deletions(-) create mode 100644 PLUGINS/src/dvbhddevice/po/de_DE.po diff --git a/CONTRIBUTORS b/CONTRIBUTORS index f6ba82c..b9cc382 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1028,6 +1028,8 @@ Marc Rovira Vall , Ramon Roca and Lars Blser 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 for translating OSD texts to the Finnish language @@ -1104,6 +1106,7 @@ Rolf Ahrenberg 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 for reporting a bug in cutting a recording if there is only a single editing mark @@ -1269,6 +1272,7 @@ Reinhard Nissl 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 for reporting freezing replay if a timer starts while in Transfer Mode from the @@ -2141,6 +2145,8 @@ Philippe Gramoull Andr Weidemann 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 for reporting that color buttons were displayed in the recording info menu if it @@ -2257,6 +2263,7 @@ Tobias Grimm for reporting unneeded include files and 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 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 for adding cRecordingInfo::GetEvent() @@ -2697,3 +2709,20 @@ Sergiu Dotenco Mika Laitio for reporting a case where cRecordingInfo::Read(FILE *f) was called with a NULL pointer + +Dirk Leber + 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 + for reporting a problem with executing diseqc commands from different threads + +Johan Andersson + for reporting a bug in detecting frames in case the Picture Start Code or Access Unit + Delimiter extends over TS packet boundaries + +Dave Pickles + 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='' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='' -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='' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='' -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 #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 #include +#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: \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: \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='' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='' -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='' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='' -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: \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 \n" "Language-Team: Catalan \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: \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 \n" "Language-Team: Czech \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: \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 \n" "Language-Team: Danish \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: \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 \n" "Language-Team: German \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: \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 \n" "Language-Team: Greek \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: \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 \n" "Language-Team: Spanish \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: \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 \n" "Language-Team: Estonian \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: \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 \n" "Language-Team: Finnish \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: \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 \n" "Language-Team: French \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: \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 \n" "Language-Team: Croatian \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: \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 , Guido Josten \n" "Language-Team: Hungarian \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: \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 \n" "Language-Team: Italian \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: \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 \n" "Language-Team: Lithuanian \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: \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 \n" "Language-Team: Dutch \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: \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 \n" "Language-Team: Norwegian Nynorsk \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: \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 \n" "Language-Team: Polish \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: \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 \n" "Language-Team: Portuguese \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: \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 \n" "Language-Team: Romanian \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: \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 \n" "Language-Team: Russian \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: \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 \n" "Language-Team: Slovak \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: \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 \n" "Language-Team: Slovenian \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: \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 \n" "Language-Team: Swedish \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: \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 \n" "Language-Team: Turkish \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: \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) \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='' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='' -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: \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 \n" "Language-Team: German \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: \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 \n" "Language-Team: Finnish \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: \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 \n" "Language-Team: French \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: \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 \n" "Language-Team: Italian \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: \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 , 2009\n" "Language-Team: Lithuanian \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: \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 \n" "Language-Team: Russian \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: \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 \n" "Language-Team: Slovak \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='' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='' -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: \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 \n" "Language-Team: German \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: \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 \n" "Language-Team: Finnish \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: \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 \n" "Language-Team: Italian \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: \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 \n" "Language-Team: Lithuanian \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: \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 \n" "Language-Team: Russian \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: \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 \n" "Language-Team: Slovak \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 @@ -11,7 +11,7 @@ #include #include -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 { 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(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 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: \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 \n" "Language-Team: Arabic \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: \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 \n" "Language-Team: Catalan \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: \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ý \n" "Language-Team: Czech \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: \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 \n" "Language-Team: Danish \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: \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 \n" "Language-Team: German \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: \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 \n" "Language-Team: Greek \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: \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 \n" "Language-Team: Spanish \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: \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 \n" "Language-Team: Estonian \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: \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 \n" "Language-Team: Finnish \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: \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 \n" "Language-Team: French \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: \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 \n" "Language-Team: Croatian \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: \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 \n" "Language-Team: Hungarian \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: \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 \n" "Language-Team: Italian \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: \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 \n" "Language-Team: Lithuanian \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: \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 \n" "Language-Team: Macedonian \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: \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 \n" "Language-Team: Dutch \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: \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 \n" "Language-Team: Norwegian Nynorsk \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: \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 \n" "Language-Team: Polish \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: \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 \n" "Language-Team: Portuguese \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: \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 \n" "Language-Team: Romanian \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: \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 \n" "Language-Team: Russian \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: \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 \n" "Language-Team: Slovak \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: \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 \n" "Language-Team: Slovenian \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: \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 \n" "Language-Team: Serbian \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: \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 \n" "Language-Team: Swedish \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: \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 \n" "Language-Team: Turkish \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: \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 \n" "Language-Team: Ukrainian \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: \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 \n" "Language-Team: Chinese (simplified) \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 @@ -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); -- cgit v1.2.3