diff options
108 files changed, 968 insertions, 397 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index f6ba82c..b9cc382 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1028,6 +1028,8 @@ Marc Rovira Vall <tm05462@salleURL.edu>, Ramon Roca <ramon.roca@xcombo.com> and Lars Blser <LBlaeser@hofheim.de> for reporting a bug in EPG bugfix statistics which made log entries for undefined channels + for reporting a problem with the initial channel in case channels are reordered or + deleted Niko Tarnanen <niko.tarnanen@hut.fi> for translating OSD texts to the Finnish language @@ -1104,6 +1106,7 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi> for adding support for "registration descriptor" to 'libsi' and using it in pat.c for adding an include of VDR's 'Make.global' to libsi's Makefile for adding handling of "ANSI/SCTE 57" descriptors + for some input on how to use BER and UNC values to generate a "quality" value Ralf Klueber <ralf.klueber@vodafone.com> for reporting a bug in cutting a recording if there is only a single editing mark @@ -1269,6 +1272,7 @@ Reinhard Nissl <rnissl@gmx.de> for fixing a buffer overflow in cFont::Bidi() for avoiding an unecessary call to Recordings.ResetResume() for debugging a problem in handling the bitmap color depth for scaled subtitles + for making subtitle PIDs be decrypted Richard Robson <richard_robson@beeb.net> for reporting freezing replay if a timer starts while in Transfer Mode from the @@ -2141,6 +2145,8 @@ Philippe Gramoull <philippe@gramoulle.com> Andr Weidemann <Andre.Weidemann@web.de> for suggesting to only write Dolby Digital tracks into the 'info.vdr' file of a recording if Setup.UseDolbyDigital is true + for suggesting that the primary device should only be avoided for recording if + it is an old SD full featured card Jrgen Schilling <juergen_schilling@web.de> for reporting that color buttons were displayed in the recording info menu if it @@ -2257,6 +2263,7 @@ Tobias Grimm <tobias.grimm@e-tobi.net> for reporting unneeded include files <linux/dvb/dmx.h> and <time.h> in remux.h for a patch that added a workaround for the broken linux-dvb driver header files for reporting a faulty "frame duration" instead of "frame rate" in vdr.5 + for avoiding a gcc 4.6 compiler error in the skincurses plugin. Helge Lenz <h.lenz@gmx.de> for reporting a bug in setting the 'Delta' parameter when calling the shutdown @@ -2567,6 +2574,11 @@ Derek Kelly (user.vdr@gmail.com) for reporting a problem where the frame rate was not detected correctly for testing the implementation of FE_CAN_TURBO_FEC for reporting unjustified log entries about changed channel pids + for reporting a problem with the frame detector in case it gets MaxPtsValues values + and stops analyzing even though the incoming data is still garbage + for reporting a problem with the fps value in the info file of a recording being + overwritten in case a recording was interrupted and resumed, and the fps value + could not be determined after resuming recording Marcel Unbehaun <frostworks@gmx.de> for adding cRecordingInfo::GetEvent() @@ -2697,3 +2709,20 @@ Sergiu Dotenco <sergiu.dotenco@googlemail.com> Mika Laitio <lamikr@pilppa.org> for reporting a case where cRecordingInfo::Read(FILE *f) was called with a NULL pointer + +Dirk Leber <dirk.leber@reel-multimedia.com> + for fixing cString's operator=(const char *String) in case the given string is the + same as the existing one + for reporting that TsGetPayload() gets called without checking whether there actually + is a payload in the given TS packet + +Marco Gbenich <mg@needful.de> + for reporting a problem with executing diseqc commands from different threads + +Johan Andersson <jna@jna.pp.se> + for reporting a bug in detecting frames in case the Picture Start Code or Access Unit + Delimiter extends over TS packet boundaries + +Dave Pickles <dave@pickles.me.uk> + for adding support for "content identifier descriptor" and "default authority + descriptor" to 'libsi' @@ -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). @@ -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 @@ -4,7 +4,7 @@ # See the main source file 'vdr.c' for copyright information and # how to reach the author. # -# $Id: Makefile 2.17 2011/04/17 13:35:53 kls Exp $ +# $Id: Makefile 2.18 2011/05/21 12:21:40 kls Exp $ .DELETE_ON_ERROR: @@ -115,7 +115,7 @@ I18Npot = $(PODIR)/vdr.pot msgfmt -c -o $@ $< $(I18Npot): $(wildcard *.c) - xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^` %.po: $(I18Npot) msgmerge -U --no-wrap --no-location --backup=none -q $@ $< diff --git a/PLUGINS/src/dvbhddevice/HISTORY b/PLUGINS/src/dvbhddevice/HISTORY index aa788fd..280e0ad 100644 --- a/PLUGINS/src/dvbhddevice/HISTORY +++ b/PLUGINS/src/dvbhddevice/HISTORY @@ -13,4 +13,33 @@ VDR Plugin 'dvbhddevice' Revision History 2011-04-17: Version 0.0.3 -- Added support for TrueColor OSD. +- Improved trickmodes +- No transfer mode needed for dolby digital +- Clear audio and video PID when Clear() ist called to stop audio decoding when jumping to cutting marks +- Support still frames in H264 format +- Remote control setup +- Added analogue video setting, support volume control. +- Support setting of audio delay. +- Support setting of audio channel (Stereo, Left, Right) +- Support setting of audio downmix mode. +- Playback of PES data is working now. +- Fall back to MPEG2 stream type when no PMT is available. +- Added support for PES PCM playback +- Support HDMI-CEC. (One-Touch Play) +- Added low level OSD implementation. +- Added option to select between high level and low level OSD. +- high level OSD: Implement SaveRegion and RestoreRegion. +- Fix not working video playback when PCR PID is different from video PID. +- Fix not working pause when playing H.264 video +- Improvements in transfer mode, fix audio dropouts or no audio at all +- Add implementation of CanHandleAreas method to support VDR 1.7.17 +- in cHdffOsdRaw::Flush fix reusing of loop variable i in subloop that lead to OSD update problems +- Specify container format when starting audio decoding to support PES-DVD containers +- Added support for True Color OSD +- Allow to disable true color OSD support via setup option + +2011-04-xx: Version 0.0.4 +- locally define DVB OSD API extensions to support compiling with original DVB headers +- Return correct pixel aspect ratio in GetOsdSize +- Adapt Makefile to changes introduced in recent VDR versions + diff --git a/PLUGINS/src/dvbhddevice/Makefile b/PLUGINS/src/dvbhddevice/Makefile index ea1b9d1..91fdfce 100644 --- a/PLUGINS/src/dvbhddevice/Makefile +++ b/PLUGINS/src/dvbhddevice/Makefile @@ -1,7 +1,7 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile 1.7 2011/04/17 11:40:55 kls Exp $ +# $Id: Makefile 1.8 2011/05/21 12:25:33 kls Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. @@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot msgfmt -c -o $@ $< $(I18Npot): $(wildcard *.c) - xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^` %.po: $(I18Npot) msgmerge -U --no-wrap --no-location --backup=none -q $@ $< diff --git a/PLUGINS/src/dvbhddevice/dvbhddevice.c b/PLUGINS/src/dvbhddevice/dvbhddevice.c index d639922..4745c37 100644 --- a/PLUGINS/src/dvbhddevice/dvbhddevice.c +++ b/PLUGINS/src/dvbhddevice/dvbhddevice.c @@ -3,14 +3,14 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: dvbhddevice.c 1.12 2011/04/17 11:20:22 kls Exp $ + * $Id: dvbhddevice.c 1.13 2011/04/24 09:31:21 kls Exp $ */ #include <vdr/plugin.h> #include "dvbhdffdevice.h" #include "setup.h" -static const char *VERSION = "0.0.3"; +static const char *VERSION = "0.0.4"; static const char *DESCRIPTION = "HD Full Featured DVB device"; class cPluginDvbhddevice : public cPlugin { diff --git a/PLUGINS/src/dvbhddevice/dvbhdffdevice.c b/PLUGINS/src/dvbhddevice/dvbhdffdevice.c index 9263009..714769e 100644 --- a/PLUGINS/src/dvbhddevice/dvbhdffdevice.c +++ b/PLUGINS/src/dvbhddevice/dvbhdffdevice.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: dvbhdffdevice.c 1.29 2011/04/17 11:20:22 kls Exp $ + * $Id: dvbhdffdevice.c 1.32 2011/05/22 15:19:59 kls Exp $ */ #include "dvbhdffdevice.h" @@ -110,7 +110,7 @@ void cDvbHdFfDevice::SetVideoFormat(bool VideoFormat16_9) { HDFF::tVideoFormat videoFormat; videoFormat.AutomaticEnabled = true; - videoFormat.AfdEnabled = true; + videoFormat.AfdEnabled = false; videoFormat.TvFormat = (HDFF::eTvFormat) gHdffSetup.TvFormat; videoFormat.VideoConversion = (HDFF::eVideoConversion) gHdffSetup.VideoConversion; mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat); @@ -364,7 +364,7 @@ bool cDvbHdFfDevice::SetPlayMode(ePlayMode PlayMode) if (playMode == pmNone) TurnOffLiveMode(true); - mHdffCmdIf->CmdAvSetPlayMode(1, Transferring()); + mHdffCmdIf->CmdAvSetPlayMode(1, Transferring() || (cTransferControl::ReceiverDevice() == this)); mHdffCmdIf->CmdAvSetStc(0, 100000); mHdffCmdIf->CmdAvEnableSync(0, true); mHdffCmdIf->CmdAvEnableVideoAfterStop(0, true); @@ -725,28 +725,14 @@ HDFF::cHdffCmdIf *cDvbHdFfDevice::GetHdffCmdHandler(void) bool cDvbHdFfDeviceProbe::Probe(int Adapter, int Frontend) { static uint32_t SubsystemIds[] = { - 0x13C23009, // Technotrend S2-6400 HDFF + 0x13C23009, // Technotrend S2-6400 HDFF development samples + 0x13C2300A, // Technotrend S2-6400 HDFF production version 0x00000000 }; - cString FileName; - cReadLine ReadLine; - FILE *f = NULL; - uint32_t SubsystemId = 0; - FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_vendor", Adapter, Frontend); - if ((f = fopen(FileName, "r")) != NULL) { - if (char *s = ReadLine.Read(f)) - SubsystemId = strtoul(s, NULL, 0) << 16; - fclose(f); - } - FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_device", Adapter, Frontend); - if ((f = fopen(FileName, "r")) != NULL) { - if (char *s = ReadLine.Read(f)) - SubsystemId |= strtoul(s, NULL, 0); - fclose(f); - } + uint32_t SubsystemId = GetSubsystemId(Adapter, Frontend); for (uint32_t *sid = SubsystemIds; *sid; sid++) { if (*sid == SubsystemId) { - FileName = cString::sprintf("/dev/dvb/adapter%d/osd0", Adapter); + cString FileName = cString::sprintf("/dev/dvb/adapter%d/osd0", Adapter); int fd = open(FileName, O_RDWR); if (fd != -1) { //TODO treat the second path of the S2-6400 as a budget device close(fd); diff --git a/PLUGINS/src/dvbhddevice/hdffcmd.c b/PLUGINS/src/dvbhddevice/hdffcmd.c index ecd26ed..82869df 100644 --- a/PLUGINS/src/dvbhddevice/hdffcmd.c +++ b/PLUGINS/src/dvbhddevice/hdffcmd.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: hdffcmd.c 1.19 2011/04/17 11:20:22 kls Exp $ + * $Id: hdffcmd.c 1.20 2011/04/24 09:31:59 kls Exp $ */ #include "hdffcmd.h" @@ -13,6 +13,25 @@ #include <sys/ioctl.h> #include <vdr/tools.h> +#if !defined OSD_RAW_CMD +typedef struct osd_raw_cmd_s { + const void *cmd_data; + int cmd_len; + void *result_data; + int result_len; +} osd_raw_cmd_t; + +typedef struct osd_raw_data_s { + const void *data_buffer; + int data_length; + int data_handle; +} osd_raw_data_t; + +#define OSD_RAW_CMD _IOWR('o', 162, osd_raw_cmd_t) +#define OSD_RAW_DATA _IOWR('o', 163, osd_raw_data_t) +#endif + + namespace HDFF { diff --git a/PLUGINS/src/dvbhddevice/hdffosd.c b/PLUGINS/src/dvbhddevice/hdffosd.c index 254f2af..90d6897 100644 --- a/PLUGINS/src/dvbhddevice/hdffosd.c +++ b/PLUGINS/src/dvbhddevice/hdffosd.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: hdffosd.c 1.9 2011/04/17 11:20:22 kls Exp $ + * $Id: hdffosd.c 1.10 2011/05/15 14:47:29 kls Exp $ */ #include "hdffosd.h" @@ -154,8 +154,12 @@ eOsdError cHdffOsd::SetAreas(const tArea *Areas, int NumAreas) { //printf("SetAreas %d: %d %d %d %d %d\n", i, Areas[i].x1, Areas[i].y1, Areas[i].x2, Areas[i].y2, Areas[i].bpp); } - mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0); - mHdffCmdIf->CmdOsdRenderDisplay(mDisplay); + if (shown) + { + mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0); + mHdffCmdIf->CmdOsdRenderDisplay(mDisplay); + shown = false; + } return cOsd::SetAreas(Areas, NumAreas); } @@ -166,9 +170,13 @@ void cHdffOsd::SetActive(bool On) cOsd::SetActive(On); if (On) { + if (GetBitmap(0)) // only flush here if there are already bitmaps + Flush(); } else if (shown) { + mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0); + mHdffCmdIf->CmdOsdRenderDisplay(mDisplay); shown = false; } } @@ -594,9 +602,13 @@ void cHdffOsdRaw::SetActive(bool On) cOsd::SetActive(On); if (On) { + if (GetBitmap(0)) // only flush here if there are already bitmaps + Flush(); } else if (shown) { + mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0); + mHdffCmdIf->CmdOsdRenderDisplay(mDisplay); shown = false; } } @@ -623,8 +635,12 @@ eOsdError cHdffOsdRaw::SetAreas(const tArea *Areas, int NumAreas) { //printf("SetAreas %d: %d %d %d %d %d\n", i, Areas[i].x1, Areas[i].y1, Areas[i].x2, Areas[i].y2, Areas[i].bpp); } - mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0); - mHdffCmdIf->CmdOsdRenderDisplay(mDisplay); + if (shown) + { + mHdffCmdIf->CmdOsdDrawRectangle(mDisplay, 0, 0, mDispWidth, mDispHeight, 0); + mHdffCmdIf->CmdOsdRenderDisplay(mDisplay); + shown = false; + } return cOsd::SetAreas(Areas, NumAreas); } diff --git a/PLUGINS/src/dvbhddevice/po/de_DE.po b/PLUGINS/src/dvbhddevice/po/de_DE.po new file mode 100644 index 0000000..907f243 --- /dev/null +++ b/PLUGINS/src/dvbhddevice/po/de_DE.po @@ -0,0 +1,89 @@ +# VDR plugin language source file +# Copyright (C) 2011 Andreas Regel +# This file is distributed under the same license as the dvbhddevice package. +# Christoph Haubrich, 2011 +# +msgid "" +msgstr "" +"Project-Id-Version: VDR \n" +"Report-Msgid-Bugs-To: <see README>\n" +"POT-Creation-Date: 2011-05-05 20:34+0200\n" +"PO-Revision-Date: 2011-04-25 21:44+0200\n" +"Last-Translator: Christoph Haubrich\n" +"Language-Team: <see README>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Automatic" +msgstr "automatisch" + +msgid "Letterbox 16/9" +msgstr "Letterbox 16:9" + +msgid "Letterbox 14/9" +msgstr "Letterbox 14:9" + +msgid "Pillarbox" +msgstr "Pillarbox" + +msgid "CentreCutOut" +msgstr "CentreCutOut" + +msgid "Always 16/9" +msgstr "immer 16:9" + +msgid "Disabled" +msgstr "abgeschaltet" + +msgid "Analogue only" +msgstr "nur Analoge Ausgänge" + +msgid "Always" +msgstr "immer" + +msgid "HDMI only" +msgstr "nur HDMI" + +msgid "Follow resolution" +msgstr "folge Auflösung" + +msgid "none" +msgstr "keins" + +msgid "Resolution" +msgstr "Auflösung" + +msgid "TV format" +msgstr "TV-Format" + +msgid "Video Conversion" +msgstr "Videokonvertierung" + +msgid "Analogue Video" +msgstr "Analoges Video" + +msgid "Audio Delay (ms)" +msgstr "Audio Verzögerung (ms)" + +msgid "Audio Downmix" +msgstr "Audio Downmix" + +msgid "OSD Size" +msgstr "OSD Größe" + +msgid "HDMI CEC" +msgstr "HDMI CEC" + +msgid "Remote Control Protocol" +msgstr "Fernbedienungsprotokoll" + +msgid "Remote Control Address" +msgstr "Fernbedienungsadresse" + +msgid "High Level OSD" +msgstr "High Level OSD" + +msgid "Allow True Color OSD" +msgstr "Erlaube True Color OSD" diff --git a/PLUGINS/src/dvbhddevice/setup.c b/PLUGINS/src/dvbhddevice/setup.c index 3cb69b1..30365e0 100644 --- a/PLUGINS/src/dvbhddevice/setup.c +++ b/PLUGINS/src/dvbhddevice/setup.c @@ -3,88 +3,17 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: setup.c 1.11 2011/04/17 11:45:17 kls Exp $ + * $Id: setup.c 1.12 2011/05/15 14:47:45 kls Exp $ */ #include "setup.h" #include "hdffcmd.h" -const int kResolutions = 4; -const int kTvFormats = 2; -const int kVideoConversions = 6; -const int kAnalogueVideos = 4; -const int kAudioDownmixes = 5; -const int kOsdSizes = 5; -const int kRemoteProtocols = 3; - const int kResolution1080i = 0; const int kResolution720p = 1; const int kResolution576p = 2; const int kResolution576i = 3; -static const char * ResolutionItems[] = -{ - "1080i", - "720p", - "576p", - "576i", - NULL -}; - -static const char * TvFormatItems[] = -{ - "4/3", - "16/9", - NULL -}; - -static const char * VideoConversionItems[] = -{ - "Automatic", - "Letterbox 16/9", - "Letterbox 14/9", - "Pillarbox", - "CentreCutOut", - "Always 16/9", - NULL -}; - -static const char * AnalogueVideoItems[] = -{ - "Disabled", - "RGB", - "CVBS + YUV", - "YC (S-Video)", - NULL -}; - -static const char * AudioDownmixItems[] = -{ - "Disabled", - "Analogue only", - "Always", - "Automatic", - "HDMI only", - NULL -}; - -static const char * OsdSizeItems[] = -{ - "Follow resolution", - "1920x1080", - "1280x720", - "1024x576", - "720x576", - NULL -}; - -static const char * RemoteProtocolItems[] = -{ - "none", - "RC5", - "RC6", - NULL -}; cHdffSetup gHdffSetup; @@ -162,7 +91,7 @@ void cHdffSetup::GetOsdSize(int &Width, int &Height, double &PixelAspect) Height = 576; PixelAspect = 4.0 / 3.0; } - PixelAspect /= double(Width) / Height; + PixelAspect /= double(Width) / Height; } HDFF::eHdmiVideoMode cHdffSetup::GetVideoMode(void) @@ -183,21 +112,87 @@ HDFF::eHdmiVideoMode cHdffSetup::GetVideoMode(void) cHdffSetupPage::cHdffSetupPage(HDFF::cHdffCmdIf * pHdffCmdIf) { + const int kResolutions = 4; + const int kTvFormats = 2; + const int kVideoConversions = 6; + const int kAnalogueVideos = 4; + const int kAudioDownmixes = 5; + const int kOsdSizes = 5; + const int kRemoteProtocols = 3; + + static const char * ResolutionItems[kResolutions] = + { + "1080i", + "720p", + "576p", + "576i", + }; + + static const char * TvFormatItems[kTvFormats] = + { + "4/3", + "16/9", + }; + + static const char * VideoConversionItems[kVideoConversions] = + { + tr("Automatic"), + tr("Letterbox 16/9"), + tr("Letterbox 14/9"), + tr("Pillarbox"), + tr("CentreCutOut"), + tr("Always 16/9"), + }; + + + static const char * AnalogueVideoItems[kAnalogueVideos] = + { + tr("Disabled"), + "RGB", + "CVBS + YUV", + "YC (S-Video)", + }; + + static const char * AudioDownmixItems[kAudioDownmixes] = + { + tr("Disabled"), + tr("Analogue only"), + tr("Always"), + tr("Automatic"), + tr("HDMI only"), + }; + + static const char * OsdSizeItems[kOsdSizes] = + { + tr("Follow resolution"), + "1920x1080", + "1280x720", + "1024x576", + "720x576", + }; + + static const char * RemoteProtocolItems[] = + { + tr("none"), + "RC5", + "RC6", + }; + mHdffCmdIf = pHdffCmdIf; mNewHdffSetup = gHdffSetup; - Add(new cMenuEditStraItem("Resolution", &mNewHdffSetup.Resolution, kResolutions, ResolutionItems)); - Add(new cMenuEditStraItem("TV format", &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems)); - Add(new cMenuEditStraItem("Video Conversion", &mNewHdffSetup.VideoConversion, kVideoConversions, VideoConversionItems)); - Add(new cMenuEditStraItem("Analogue Video", &mNewHdffSetup.AnalogueVideo, kAnalogueVideos, AnalogueVideoItems)); - Add(new cMenuEditIntItem("Audio Delay (ms)", &mNewHdffSetup.AudioDelay, 0, 500)); - Add(new cMenuEditStraItem("Audio Downmix", &mNewHdffSetup.AudioDownmix, kAudioDownmixes, AudioDownmixItems)); - Add(new cMenuEditStraItem("Osd Size", &mNewHdffSetup.OsdSize, kOsdSizes, OsdSizeItems)); - Add(new cMenuEditBoolItem("HDMI CEC", &mNewHdffSetup.CecEnabled)); - Add(new cMenuEditStraItem("Remote Control Protocol", &mNewHdffSetup.RemoteProtocol, kRemoteProtocols, RemoteProtocolItems)); - Add(new cMenuEditIntItem("Remote Control Address", &mNewHdffSetup.RemoteAddress, -1, 31)); - Add(new cMenuEditBoolItem("High Level OSD", &mNewHdffSetup.HighLevelOsd)); - Add(new cMenuEditBoolItem("Allow True Color OSD", &mNewHdffSetup.TrueColorOsd)); + Add(new cMenuEditStraItem(tr("Resolution"), &mNewHdffSetup.Resolution, kResolutions, ResolutionItems)); + Add(new cMenuEditStraItem(tr("TV format"), &mNewHdffSetup.TvFormat, kTvFormats, TvFormatItems)); + Add(new cMenuEditStraItem(tr("Video Conversion"), &mNewHdffSetup.VideoConversion, kVideoConversions, VideoConversionItems)); + Add(new cMenuEditStraItem(tr("Analogue Video"), &mNewHdffSetup.AnalogueVideo, kAnalogueVideos, AnalogueVideoItems)); + Add(new cMenuEditIntItem(tr("Audio Delay (ms)"), &mNewHdffSetup.AudioDelay, 0, 500)); + Add(new cMenuEditStraItem(tr("Audio Downmix"), &mNewHdffSetup.AudioDownmix, kAudioDownmixes, AudioDownmixItems)); + Add(new cMenuEditStraItem(tr("OSD Size"), &mNewHdffSetup.OsdSize, kOsdSizes, OsdSizeItems)); + Add(new cMenuEditBoolItem(tr("HDMI CEC"), &mNewHdffSetup.CecEnabled)); + Add(new cMenuEditStraItem(tr("Remote Control Protocol"), &mNewHdffSetup.RemoteProtocol, kRemoteProtocols, RemoteProtocolItems)); + Add(new cMenuEditIntItem(tr("Remote Control Address"), &mNewHdffSetup.RemoteAddress, -1, 31)); + Add(new cMenuEditBoolItem(tr("High Level OSD"), &mNewHdffSetup.HighLevelOsd)); + Add(new cMenuEditBoolItem(tr("Allow True Color OSD"), &mNewHdffSetup.TrueColorOsd)); } cHdffSetupPage::~cHdffSetupPage(void) diff --git a/PLUGINS/src/dvbsddevice/Makefile b/PLUGINS/src/dvbsddevice/Makefile index aa89feb..5529976 100644 --- a/PLUGINS/src/dvbsddevice/Makefile +++ b/PLUGINS/src/dvbsddevice/Makefile @@ -1,7 +1,7 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile 1.6 2011/02/27 10:04:54 kls Exp $ +# $Id: Makefile 1.7 2011/05/21 12:25:37 kls Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. @@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot msgfmt -c -o $@ $< $(I18Npot): $(wildcard *.c) - xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^` %.po: $(I18Npot) msgmerge -U --no-wrap --no-location --backup=none -q $@ $< diff --git a/PLUGINS/src/dvbsddevice/dvbsdffdevice.c b/PLUGINS/src/dvbsddevice/dvbsdffdevice.c index 8671b1e..73e55ba 100644 --- a/PLUGINS/src/dvbsddevice/dvbsdffdevice.c +++ b/PLUGINS/src/dvbsddevice/dvbsdffdevice.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: dvbsdffdevice.c 2.27 2010/09/19 12:43:33 kls Exp $ + * $Id: dvbsdffdevice.c 2.29 2011/05/22 15:22:14 kls Exp $ */ #include "dvbsdffdevice.h" @@ -90,6 +90,11 @@ bool cDvbSdFfDevice::HasDecoder(void) const return true; } +bool cDvbSdFfDevice::AvoidRecording(void) const +{ + return true; +} + cSpuDecoder *cDvbSdFfDevice::GetSpuDecoder(void) { if (!spuDecoder && IsPrimaryDevice()) @@ -772,22 +777,7 @@ bool cDvbSdFfDeviceProbe::Probe(int Adapter, int Frontend) 0x13C21002, // Technotrend/Hauppauge WinTV DVB-S rev1.3 SE 0x00000000 }; - cString FileName; - cReadLine ReadLine; - FILE *f = NULL; - uint32_t SubsystemId = 0; - FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_vendor", Adapter, Frontend); - if ((f = fopen(FileName, "r")) != NULL) { - if (char *s = ReadLine.Read(f)) - SubsystemId = strtoul(s, NULL, 0) << 16; - fclose(f); - } - FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_device", Adapter, Frontend); - if ((f = fopen(FileName, "r")) != NULL) { - if (char *s = ReadLine.Read(f)) - SubsystemId |= strtoul(s, NULL, 0); - fclose(f); - } + uint32_t SubsystemId = GetSubsystemId(Adapter, Frontend); for (uint32_t *sid = SubsystemIds; *sid; sid++) { if (*sid == SubsystemId) { dsyslog("creating cDvbSdFfDevice"); diff --git a/PLUGINS/src/dvbsddevice/dvbsdffdevice.h b/PLUGINS/src/dvbsddevice/dvbsdffdevice.h index b382bf6..afe4727 100644 --- a/PLUGINS/src/dvbsddevice/dvbsdffdevice.h +++ b/PLUGINS/src/dvbsddevice/dvbsdffdevice.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: dvbsdffdevice.h 2.11 2010/01/04 11:01:14 kls Exp $ + * $Id: dvbsdffdevice.h 2.12 2011/05/21 12:56:49 kls Exp $ */ #ifndef __DVBSDFFDEVICE_H @@ -23,6 +23,7 @@ public: cDvbSdFfDevice(int Adapter, int Frontend); virtual ~cDvbSdFfDevice(); virtual bool HasDecoder(void) const; + virtual bool AvoidRecording(void) const; // SPU facilities diff --git a/PLUGINS/src/hello/Makefile b/PLUGINS/src/hello/Makefile index e9f0603..b59d08a 100644 --- a/PLUGINS/src/hello/Makefile +++ b/PLUGINS/src/hello/Makefile @@ -1,7 +1,7 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile 2.6 2011/02/27 10:04:58 kls Exp $ +# $Id: Makefile 2.7 2011/05/21 12:25:41 kls Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. @@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot msgfmt -c -o $@ $< $(I18Npot): $(wildcard *.c) - xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^` %.po: $(I18Npot) msgmerge -U --no-wrap --no-location --backup=none -q $@ $< diff --git a/PLUGINS/src/hello/po/ca_ES.po b/PLUGINS/src/hello/po/ca_ES.po index f126a54..24e09ef 100644 --- a/PLUGINS/src/hello/po/ca_ES.po +++ b/PLUGINS/src/hello/po/ca_ES.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Jordi Vil <jvila@tinet.org>\n" "Language-Team: Catalan <vdr@linuxtv.org>\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/cs_CZ.po b/PLUGINS/src/hello/po/cs_CZ.po index f153652..af184b3 100644 --- a/PLUGINS/src/hello/po/cs_CZ.po +++ b/PLUGINS/src/hello/po/cs_CZ.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Vladimr Brta <vladimir.barta@k2atmitec.cz>\n" "Language-Team: Czech <vdr@linuxtv.org>\n" +"Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" msgid "A friendly greeting" msgstr "Ptelsk pozdrav" diff --git a/PLUGINS/src/hello/po/da_DK.po b/PLUGINS/src/hello/po/da_DK.po index deef349..6c1647e 100644 --- a/PLUGINS/src/hello/po/da_DK.po +++ b/PLUGINS/src/hello/po/da_DK.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Mogens Elneff <mogens@elneff.dk>\n" "Language-Team: Danish <vdr@linuxtv.org>\n" +"Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: da\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/de_DE.po b/PLUGINS/src/hello/po/de_DE.po index f46e6f5..1536f1b 100644 --- a/PLUGINS/src/hello/po/de_DE.po +++ b/PLUGINS/src/hello/po/de_DE.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n" "Language-Team: German <vdr@linuxtv.org>\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" msgid "A friendly greeting" msgstr "Ein freundlicher Gru" diff --git a/PLUGINS/src/hello/po/el_GR.po b/PLUGINS/src/hello/po/el_GR.po index 6ee9a3d..ce921ee 100644 --- a/PLUGINS/src/hello/po/el_GR.po +++ b/PLUGINS/src/hello/po/el_GR.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n" "Language-Team: Greek <vdr@linuxtv.org>\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-7\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/es_ES.po b/PLUGINS/src/hello/po/es_ES.po index e1997a8..292f652 100644 --- a/PLUGINS/src/hello/po/es_ES.po +++ b/PLUGINS/src/hello/po/es_ES.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Ruben Nunez Francisco <ruben.nunez@tang-it.com>\n" "Language-Team: Spanish <vdr@linuxtv.org>\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/et_EE.po b/PLUGINS/src/hello/po/et_EE.po index d762ebc..3cf2247 100644 --- a/PLUGINS/src/hello/po/et_EE.po +++ b/PLUGINS/src/hello/po/et_EE.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n" "Language-Team: Estonian <vdr@linuxtv.org>\n" +"Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-13\n" "Content-Transfer-Encoding: 8bit\n" -"Language: et\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/fi_FI.po b/PLUGINS/src/hello/po/fi_FI.po index 1be796c..a106a8b 100644 --- a/PLUGINS/src/hello/po/fi_FI.po +++ b/PLUGINS/src/hello/po/fi_FI.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n" "Language-Team: Finnish <vdr@linuxtv.org>\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fi\n" msgid "A friendly greeting" msgstr "Ystävällisin terveisin" diff --git a/PLUGINS/src/hello/po/fr_FR.po b/PLUGINS/src/hello/po/fr_FR.po index db70037..335df75 100644 --- a/PLUGINS/src/hello/po/fr_FR.po +++ b/PLUGINS/src/hello/po/fr_FR.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Nicolas Huillard <nhuillard@e-dition.fr>\n" "Language-Team: French <vdr@linuxtv.org>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/hr_HR.po b/PLUGINS/src/hello/po/hr_HR.po index 6ebf6e8..c88e832 100644 --- a/PLUGINS/src/hello/po/hr_HR.po +++ b/PLUGINS/src/hello/po/hr_HR.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-03-17 19:52+0100\n" "Last-Translator: Adrian Caval <anrxc@sysphere.org>\n" "Language-Team: Croatian <vdr@linuxtv.org>\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: hr\n" msgid "A friendly greeting" msgstr "Prijateljska dobrodolica" diff --git a/PLUGINS/src/hello/po/hu_HU.po b/PLUGINS/src/hello/po/hu_HU.po index 66dbc30..5b9f207 100644 --- a/PLUGINS/src/hello/po/hu_HU.po +++ b/PLUGINS/src/hello/po/hu_HU.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Istvan Koenigsberger <istvnko@hotmail.com>, Guido Josten <guido.josten@t-online.de>\n" "Language-Team: Hungarian <vdr@linuxtv.org>\n" +"Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: hu\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/it_IT.po b/PLUGINS/src/hello/po/it_IT.po index 7ff552f..7ef310a 100644 --- a/PLUGINS/src/hello/po/it_IT.po +++ b/PLUGINS/src/hello/po/it_IT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-01-27 20:11+0100\n" "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" "Language-Team: Italian <vdr@linuxtv.org>\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" msgid "A friendly greeting" msgstr "Un saluto cordiale" diff --git a/PLUGINS/src/hello/po/lt_LT.po b/PLUGINS/src/hello/po/lt_LT.po index d1ddf81..0ade0bd 100644 --- a/PLUGINS/src/hello/po/lt_LT.po +++ b/PLUGINS/src/hello/po/lt_LT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.10\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2009-12-08 12:18+0200\n" "Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n" "Language-Team: Lithuanian <vdr@linuxtv.org>\n" +"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: lt\n" msgid "A friendly greeting" msgstr "Draugiškas labas" diff --git a/PLUGINS/src/hello/po/nl_NL.po b/PLUGINS/src/hello/po/nl_NL.po index b749cc3..4dff540 100644 --- a/PLUGINS/src/hello/po/nl_NL.po +++ b/PLUGINS/src/hello/po/nl_NL.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Maarten Wisse <Maarten.Wisse@urz.uni-hd.de>\n" "Language-Team: Dutch <vdr@linuxtv.org>\n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nl\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/nn_NO.po b/PLUGINS/src/hello/po/nn_NO.po index b5f508b..c566f53 100644 --- a/PLUGINS/src/hello/po/nn_NO.po +++ b/PLUGINS/src/hello/po/nn_NO.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Truls Slevigen <truls@slevigen.no>\n" "Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n" +"Language: nn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nn\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/pl_PL.po b/PLUGINS/src/hello/po/pl_PL.po index dfa80de..e7aedf2 100644 --- a/PLUGINS/src/hello/po/pl_PL.po +++ b/PLUGINS/src/hello/po/pl_PL.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Michael Rakowski <mrak@gmx.de>\n" "Language-Team: Polish <vdr@linuxtv.org>\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/pt_PT.po b/PLUGINS/src/hello/po/pt_PT.po index 429377c..dd0be17 100644 --- a/PLUGINS/src/hello/po/pt_PT.po +++ b/PLUGINS/src/hello/po/pt_PT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Paulo Lopes <pmml@netvita.pt>\n" "Language-Team: Portuguese <vdr@linuxtv.org>\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/ro_RO.po b/PLUGINS/src/hello/po/ro_RO.po index d964223..a5eb16a 100644 --- a/PLUGINS/src/hello/po/ro_RO.po +++ b/PLUGINS/src/hello/po/ro_RO.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n" "Language-Team: Romanian <vdr@linuxtv.org>\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/ru_RU.po b/PLUGINS/src/hello/po/ru_RU.po index 59d8ad1..ee94c92 100644 --- a/PLUGINS/src/hello/po/ru_RU.po +++ b/PLUGINS/src/hello/po/ru_RU.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n" "Language-Team: Russian <vdr@linuxtv.org>\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" msgid "A friendly greeting" msgstr " " diff --git a/PLUGINS/src/hello/po/sk_SK.po b/PLUGINS/src/hello/po/sk_SK.po index f7347fd..b8ba775 100644 --- a/PLUGINS/src/hello/po/sk_SK.po +++ b/PLUGINS/src/hello/po/sk_SK.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2009-09-30 09:48+0100\n" "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" "Language-Team: Slovak <vdr@linuxtv.org>\n" +"Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sk\n" msgid "A friendly greeting" msgstr "Priatesk pozdrav" diff --git a/PLUGINS/src/hello/po/sl_SI.po b/PLUGINS/src/hello/po/sl_SI.po index 20f0019..bbcf6b9 100644 --- a/PLUGINS/src/hello/po/sl_SI.po +++ b/PLUGINS/src/hello/po/sl_SI.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n" "Language-Team: Slovenian <vdr@linuxtv.org>\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sl\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/sv_SE.po b/PLUGINS/src/hello/po/sv_SE.po index c51e559..4b4909f 100644 --- a/PLUGINS/src/hello/po/sv_SE.po +++ b/PLUGINS/src/hello/po/sv_SE.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2007-08-11 12:34+0200\n" "Last-Translator: Tomas Prybil <tomas@prybil.se>\n" "Language-Team: Swedish <vdr@linuxtv.org>\n" +"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sv\n" msgid "A friendly greeting" msgstr "" diff --git a/PLUGINS/src/hello/po/tr_TR.po b/PLUGINS/src/hello/po/tr_TR.po index 269dbd9..a8705da 100644 --- a/PLUGINS/src/hello/po/tr_TR.po +++ b/PLUGINS/src/hello/po/tr_TR.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-05-12 22:34:4800\n" "Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n" "Language-Team: Turkish <vdr@linuxtv.org>\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-9\n" "Content-Transfer-Encoding: 8bit\n" -"Language: tr\n" msgid "A friendly greeting" msgstr "Dosta selam" diff --git a/PLUGINS/src/hello/po/zh_CN.po b/PLUGINS/src/hello/po/zh_CN.po index beafc4a..7793ed2 100644 --- a/PLUGINS/src/hello/po/zh_CN.po +++ b/PLUGINS/src/hello/po/zh_CN.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2009-01-23 09:48+0800\n" "Last-Translator: senin\n" "Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" msgid "A friendly greeting" msgstr "友好的问候" diff --git a/PLUGINS/src/pictures/Makefile b/PLUGINS/src/pictures/Makefile index afdcc61..456207b 100644 --- a/PLUGINS/src/pictures/Makefile +++ b/PLUGINS/src/pictures/Makefile @@ -1,7 +1,7 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile 2.6 2011/02/27 10:05:02 kls Exp $ +# $Id: Makefile 2.7 2011/05/21 12:25:45 kls Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. @@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot msgfmt -c -o $@ $< $(I18Npot): $(wildcard *.c) - xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^` %.po: $(I18Npot) msgmerge -U --no-wrap --no-location --backup=none -q $@ $< diff --git a/PLUGINS/src/pictures/po/de_DE.po b/PLUGINS/src/pictures/po/de_DE.po index 6e47101..f31fa07 100644 --- a/PLUGINS/src/pictures/po/de_DE.po +++ b/PLUGINS/src/pictures/po/de_DE.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-01-12 17:41+0100\n" "Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n" "Language-Team: German <vdr@linuxtv.org>\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Pictures" diff --git a/PLUGINS/src/pictures/po/fi_FI.po b/PLUGINS/src/pictures/po/fi_FI.po index 2d589f0..0a17596 100644 --- a/PLUGINS/src/pictures/po/fi_FI.po +++ b/PLUGINS/src/pictures/po/fi_FI.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-01-12 17:41+0100\n" "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n" "Language-Team: Finnish <vdr@linuxtv.org>\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Pictures" diff --git a/PLUGINS/src/pictures/po/fr_FR.po b/PLUGINS/src/pictures/po/fr_FR.po index 5450431..c6289d1 100644 --- a/PLUGINS/src/pictures/po/fr_FR.po +++ b/PLUGINS/src/pictures/po/fr_FR.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-01-12 17:41+0100\n" "Last-Translator: Patrice Staudt <ipatrice.staudt@laposte.net>\n" "Language-Team: French <vdr@linuxtv.org>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Pictures" diff --git a/PLUGINS/src/pictures/po/it_IT.po b/PLUGINS/src/pictures/po/it_IT.po index a3ede6b..f3858db 100644 --- a/PLUGINS/src/pictures/po/it_IT.po +++ b/PLUGINS/src/pictures/po/it_IT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-01-27 20:22+0100\n" "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" "Language-Team: Italian <vdr@linuxtv.org>\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Pictures" diff --git a/PLUGINS/src/pictures/po/lt_LT.po b/PLUGINS/src/pictures/po/lt_LT.po index a063417..9d877ac 100644 --- a/PLUGINS/src/pictures/po/lt_LT.po +++ b/PLUGINS/src/pictures/po/lt_LT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.10\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2009-12-08 12:41+0100\n" "Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>, 2009\n" "Language-Team: Lithuanian <vdr@linuxtv.org>\n" +"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: lt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Pictures" diff --git a/PLUGINS/src/pictures/po/ru_RU.po b/PLUGINS/src/pictures/po/ru_RU.po index dc1ba12..6d38639 100644 --- a/PLUGINS/src/pictures/po/ru_RU.po +++ b/PLUGINS/src/pictures/po/ru_RU.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2008-03-14 00:45+0100\n" "Last-Translator: Alexander Gross <Bikalexander@gmail.com>\n" "Language-Team: Russian <vdr@linuxtv.org>\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: KBabel 1.11.4\n" diff --git a/PLUGINS/src/pictures/po/sk_SK.po b/PLUGINS/src/pictures/po/sk_SK.po index a56c0d6..340aad1 100644 --- a/PLUGINS/src/pictures/po/sk_SK.po +++ b/PLUGINS/src/pictures/po/sk_SK.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-15 15:08+0200\n" "PO-Revision-Date: 2009-09-30 12:54+0100\n" "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" "Language-Team: Slovak <vdr@linuxtv.org>\n" +"Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sk\n" msgid "Pictures" msgstr "Obrzky" diff --git a/PLUGINS/src/skincurses/HISTORY b/PLUGINS/src/skincurses/HISTORY index 9e3377f..90dfbb7 100644 --- a/PLUGINS/src/skincurses/HISTORY +++ b/PLUGINS/src/skincurses/HISTORY @@ -88,3 +88,7 @@ VDR Plugin 'skincurses' Revision History 2010-02-28: Version 0.1.9 - Added Lithuanian language translations (thanks to Valdemaras Pipiras). + +2011-05-15: Version 0.1.10 + +- Avoiding a gcc 4.6 compiler error (thanks to Tobias Grimm). diff --git a/PLUGINS/src/skincurses/Makefile b/PLUGINS/src/skincurses/Makefile index a7ba1cf..a765b65 100644 --- a/PLUGINS/src/skincurses/Makefile +++ b/PLUGINS/src/skincurses/Makefile @@ -1,7 +1,7 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile 2.6 2011/02/27 10:05:05 kls Exp $ +# $Id: Makefile 2.7 2011/05/21 12:25:49 kls Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. @@ -83,7 +83,7 @@ I18Npot = $(PODIR)/$(PLUGIN).pot msgfmt -c -o $@ $< $(I18Npot): $(wildcard *.c) - xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^` %.po: $(I18Npot) msgmerge -U --no-wrap --no-location --backup=none -q $@ $< diff --git a/PLUGINS/src/skincurses/po/de_DE.po b/PLUGINS/src/skincurses/po/de_DE.po index 82edffc..bff2411 100644 --- a/PLUGINS/src/skincurses/po/de_DE.po +++ b/PLUGINS/src/skincurses/po/de_DE.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-21 14:36+0200\n" "PO-Revision-Date: 2007-08-15 16:07+0200\n" "Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n" "Language-Team: German <vdr@linuxtv.org>\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" msgid "A text only skin" msgstr "Eine reine Text-Oberflche" diff --git a/PLUGINS/src/skincurses/po/fi_FI.po b/PLUGINS/src/skincurses/po/fi_FI.po index 0cefeef..c123a0b 100644 --- a/PLUGINS/src/skincurses/po/fi_FI.po +++ b/PLUGINS/src/skincurses/po/fi_FI.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-21 14:36+0200\n" "PO-Revision-Date: 2007-08-14 20:48+0300\n" "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n" "Language-Team: Finnish <vdr@linuxtv.org>\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fi\n" msgid "A text only skin" msgstr "Tekstipohjainen ulkoasu" diff --git a/PLUGINS/src/skincurses/po/it_IT.po b/PLUGINS/src/skincurses/po/it_IT.po index d720771..5cecb65 100644 --- a/PLUGINS/src/skincurses/po/it_IT.po +++ b/PLUGINS/src/skincurses/po/it_IT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-21 14:36+0200\n" "PO-Revision-Date: 2008-01-27 20:35+0100\n" "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" "Language-Team: Italian <vdr@linuxtv.org>\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" msgid "A text only skin" msgstr "Una interfaccia solo testo" diff --git a/PLUGINS/src/skincurses/po/lt_LT.po b/PLUGINS/src/skincurses/po/lt_LT.po index bb09d81..16d2698 100644 --- a/PLUGINS/src/skincurses/po/lt_LT.po +++ b/PLUGINS/src/skincurses/po/lt_LT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.12\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-21 14:36+0200\n" "PO-Revision-Date: 2010-02-22 18:18+0200\n" "Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n" "Language-Team: Lithuanian <vdr@linuxtv.org>\n" +"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: lt\n" msgid "A text only skin" msgstr "Tekstinis apvalkalas" diff --git a/PLUGINS/src/skincurses/po/ru_RU.po b/PLUGINS/src/skincurses/po/ru_RU.po index fae8a62..b550f29 100644 --- a/PLUGINS/src/skincurses/po/ru_RU.po +++ b/PLUGINS/src/skincurses/po/ru_RU.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-21 14:36+0200\n" "PO-Revision-Date: 2008-03-14 00:21+0100\n" "Last-Translator: Alexander Gross <Bikalexander@gmail.com>\n" "Language-Team: Russian <vdr@linuxtv.org>\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" "X-Generator: KBabel 1.11.4\n" msgid "A text only skin" diff --git a/PLUGINS/src/skincurses/po/sk_SK.po b/PLUGINS/src/skincurses/po/sk_SK.po index aad3e44..e362f8e 100644 --- a/PLUGINS/src/skincurses/po/sk_SK.po +++ b/PLUGINS/src/skincurses/po/sk_SK.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:43+0200\n" +"POT-Creation-Date: 2011-05-21 14:36+0200\n" "PO-Revision-Date: 2009-09-30 12:52+0100\n" "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" "Language-Team: Slovak <vdr@linuxtv.org>\n" +"Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sk\n" msgid "A text only skin" msgstr "Iba text vzhadu" diff --git a/PLUGINS/src/skincurses/skincurses.c b/PLUGINS/src/skincurses/skincurses.c index 84076cd..11fead5 100644 --- a/PLUGINS/src/skincurses/skincurses.c +++ b/PLUGINS/src/skincurses/skincurses.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: skincurses.c 2.5 2011/01/04 08:52:03 kls Exp $ + * $Id: skincurses.c 2.6 2011/05/15 21:41:47 kls Exp $ */ #include <ncurses.h> @@ -11,7 +11,7 @@ #include <vdr/plugin.h> #include <vdr/skins.h> -static const char *VERSION = "0.1.9"; +static const char *VERSION = "0.1.10"; static const char *DESCRIPTION = trNOOP("A text only skin"); static const char *MAINMENUENTRY = NULL; @@ -26,7 +26,7 @@ public: virtual void DrawText(cPixmap *Pixmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {} }; -static const cCursesFont Font; +static const cCursesFont Font = cCursesFont(); // w/o the '= cCursesFont()' gcc 4.6 complains - can anybody explain why this is necessary? // --- cCursesOsd ------------------------------------------------------------ @@ -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 { @@ -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); @@ -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); @@ -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; @@ -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 @@ -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; } @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: diseqc.h 2.1 2010/02/06 15:14:42 kls Exp $ + * $Id: diseqc.h 2.2 2011/05/22 10:35:38 kls Exp $ */ #ifndef __DISEQC_H @@ -33,15 +33,15 @@ private: int lof; char *commands; bool parsing; - uchar codes[MaxDiseqcCodes]; - int numCodes; - char *Wait(char *s); - char *Codes(char *s); + mutable uchar codes[MaxDiseqcCodes]; + mutable int numCodes; + const char *Wait(const char *s) const; + const char *Codes(const char *s) const; public: cDiseqc(void); ~cDiseqc(); bool Parse(const char *s); - eDiseqcActions Execute(char **CurrentAction); + eDiseqcActions Execute(const char **CurrentAction) const; // Parses the DiSEqC commands and returns the appropriate action code // with every call. CurrentAction must be the address of a character pointer, // which is initialized to NULL. This pointer is used internally while parsing @@ -55,12 +55,12 @@ public: char Polarization(void) const { return polarization; } int Lof(void) const { return lof; } const char *Commands(void) const { return commands; } - uchar *Codes(int &NumCodes) { NumCodes = numCodes; return numCodes ? codes : NULL; } + const uchar *Codes(int &NumCodes) const { NumCodes = numCodes; return numCodes ? codes : NULL; } }; class cDiseqcs : public cConfig<cDiseqc> { public: - cDiseqc *Get(int Device, int Source, int Frequency, char Polarization); + const cDiseqc *Get(int Device, int Source, int Frequency, char Polarization) const; }; extern cDiseqcs Diseqcs; diff --git a/dvbdevice.c b/dvbdevice.c index f32b350..b0750dd 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 2.38 2010/05/01 09:47:13 kls Exp $ + * $Id: dvbdevice.c 2.42 2011/06/11 14:34:24 kls Exp $ */ #include "dvbdevice.h" @@ -253,12 +253,15 @@ bool cDvbTransponderParameters::Parse(const char *s) // --- cDvbTuner ------------------------------------------------------------- +#define TUNER_POLL_TIMEOUT 10 // ms + class cDvbTuner : public cThread { private: enum eTunerStatus { tsIdle, tsSet, tsTuned, tsLocked }; int device; int fd_frontend; int adapter, frontend; + uint32_t subsystemId; int tuneTimeout; int lockTimeout; time_t lastTimeoutReport; @@ -269,16 +272,20 @@ private: cMutex mutex; cCondVar locked; cCondVar newSet; - bool GetFrontendStatus(fe_status_t &Status, int TimeoutMs = 0); + void ClearEventQueue(void) const; + bool GetFrontendStatus(fe_status_t &Status) const; bool SetFrontend(void); virtual void Action(void); public: cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType); virtual ~cDvbTuner(); const cChannel *GetTransponder(void) const { return &channel; } + uint32_t SubsystemId(void) const { return subsystemId; } bool IsTunedTo(const cChannel *Channel) const; void Set(const cChannel *Channel); bool Locked(int TimeoutMs = 0); + int GetSignalStrength(void) const; + int GetSignalQuality(void) const; }; cDvbTuner::cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType) @@ -288,6 +295,7 @@ cDvbTuner::cDvbTuner(int Device, int Fd_Frontend, int Adapter, int Frontend, fe_ adapter = Adapter; frontend = Frontend; frontendType = FrontendType; + subsystemId = cDvbDeviceProbe::GetSubsystemId(adapter, frontend); tuneTimeout = 0; lockTimeout = 0; lastTimeoutReport = 0; @@ -339,16 +347,19 @@ bool cDvbTuner::Locked(int TimeoutMs) return tunerStatus >= tsLocked; } -bool cDvbTuner::GetFrontendStatus(fe_status_t &Status, int TimeoutMs) +void cDvbTuner::ClearEventQueue(void) const { - if (TimeoutMs) { - cPoller Poller(fd_frontend); - if (Poller.Poll(TimeoutMs)) { - dvb_frontend_event Event; - while (ioctl(fd_frontend, FE_GET_EVENT, &Event) == 0) - ; // just to clear the event queue - we'll read the actual status below - } + cPoller Poller(fd_frontend); + if (Poller.Poll(TUNER_POLL_TIMEOUT)) { + dvb_frontend_event Event; + while (ioctl(fd_frontend, FE_GET_EVENT, &Event) == 0) + ; // just to clear the event queue - we'll read the actual status below } +} + +bool cDvbTuner::GetFrontendStatus(fe_status_t &Status) const +{ + ClearEventQueue(); while (1) { if (ioctl(fd_frontend, FE_READ_STATUS, &Status) != -1) return true; @@ -358,6 +369,112 @@ bool cDvbTuner::GetFrontendStatus(fe_status_t &Status, int TimeoutMs) return false; } +//#define DEBUG_SIGNALSTRENGTH +//#define DEBUG_SIGNALQUALITY + +int cDvbTuner::GetSignalStrength(void) const +{ + ClearEventQueue(); + uint16_t Signal; + while (1) { + if (ioctl(fd_frontend, FE_READ_SIGNAL_STRENGTH, &Signal) != -1) + break; + if (errno != EINTR) + return -1; + } + uint16_t MaxSignal = 0xFFFF; // Let's assume the default is using the entire range. + // Use the subsystemId to identify individual devices in case they need + // special treatment to map their Signal value into the range 0...0xFFFF. + switch (subsystemId) { + case 0x13C21019: MaxSignal = 670; break; // TT-budget S2-3200 (DVB-S/DVB-S2) + } + int s = int(Signal) * 100 / MaxSignal; + if (s > 100) + s = 100; +#ifdef DEBUG_SIGNALSTRENGTH + fprintf(stderr, "FE %d/%d: %08X S = %04X %04X %3d%%\n", adapter, frontend, subsystemId, MaxSignal, Signal, s); +#endif + return s; +} + +#define LOCK_THRESHOLD 5 // indicates that all 5 FE_HAS_* flags are set + +int cDvbTuner::GetSignalQuality(void) const +{ + fe_status_t Status; + if (GetFrontendStatus(Status)) { + // Actually one would expect these checks to be done from FE_HAS_SIGNAL to FE_HAS_LOCK, but some drivers (like the stb0899) are broken, so FE_HAS_LOCK is the only one that (hopefully) is generally reliable... + if ((Status & FE_HAS_LOCK) == 0) { + if ((Status & FE_HAS_SIGNAL) == 0) + return 0; + if ((Status & FE_HAS_CARRIER) == 0) + return 1; + if ((Status & FE_HAS_VITERBI) == 0) + return 2; + if ((Status & FE_HAS_SYNC) == 0) + return 3; + return 4; + } + bool HasSnr = true; + uint16_t Snr; + while (1) { + if (ioctl(fd_frontend, FE_READ_SNR, &Snr) != -1) + break; + if (errno == EOPNOTSUPP) { + Snr = 0xFFFF; + HasSnr = false; + break; + } + if (errno != EINTR) + return -1; + } + bool HasBer = true; + uint32_t Ber; + while (1) { + if (ioctl(fd_frontend, FE_READ_BER, &Ber) != -1) + break; + if (errno == EOPNOTSUPP) { + Ber = 0; + HasBer = false; + break; + } + if (errno != EINTR) + return -1; + } + bool HasUnc = true; + uint32_t Unc; + while (1) { + if (ioctl(fd_frontend, FE_READ_UNCORRECTED_BLOCKS, &Unc) != -1) + break; + if (errno == EOPNOTSUPP) { + Unc = 0; + HasUnc = false; + break; + } + if (errno != EINTR) + return -1; + } + uint16_t MaxSnr = 0xFFFF; // Let's assume the default is using the entire range. + // Use the subsystemId to identify individual devices in case they need + // special treatment to map their Snr value into the range 0...0xFFFF. + switch (subsystemId) { + case 0x13C21019: MaxSnr = 200; break; // TT-budget S2-3200 (DVB-S/DVB-S2) + } + int a = int(Snr) * 100 / MaxSnr; + int b = 100 - (Unc * 10 + (Ber / 256) * 5); + if (b < 0) + b = 0; + int q = LOCK_THRESHOLD + a * b * (100 - LOCK_THRESHOLD) / 100 / 100; + if (q > 100) + q = 100; +#ifdef DEBUG_SIGNALQUALITY + fprintf(stderr, "FE %d/%d: %08X Q = %04X %04X %5d %5d %3d%%\n", adapter, frontend, subsystemId, MaxSnr, Snr, HasBer ? int(Ber) : -1, HasUnc ? int(Unc) : -1, q); +#endif + return q; + } + return -1; +} + static unsigned int FrequencyToHz(unsigned int f) { while (f && f < 1000000) @@ -392,11 +509,11 @@ bool cDvbTuner::SetFrontend(void) if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) { unsigned int frequency = channel.Frequency(); if (Setup.DiSEqC) { - cDiseqc *diseqc = Diseqcs.Get(device, channel.Source(), channel.Frequency(), dtp.Polarization()); + const cDiseqc *diseqc = Diseqcs.Get(device, channel.Source(), channel.Frequency(), dtp.Polarization()); if (diseqc) { if (diseqc->Commands() && (!diseqcCommands || strcmp(diseqcCommands, diseqc->Commands()) != 0)) { cDiseqc::eDiseqcActions da; - for (char *CurrentAction = NULL; (da = diseqc->Execute(&CurrentAction)) != cDiseqc::daNone; ) { + for (const char *CurrentAction = NULL; (da = diseqc->Execute(&CurrentAction)) != cDiseqc::daNone; ) { switch (da) { case cDiseqc::daNone: break; case cDiseqc::daToneOff: CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF)); break; @@ -407,7 +524,7 @@ bool cDvbTuner::SetFrontend(void) case cDiseqc::daMiniB: CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_BURST, SEC_MINI_B)); break; case cDiseqc::daCodes: { int n = 0; - uchar *codes = diseqc->Codes(n); + const uchar *codes = diseqc->Codes(n); if (codes) { struct dvb_diseqc_master_cmd cmd; cmd.msg_len = min(n, int(sizeof(cmd.msg))); @@ -504,9 +621,9 @@ bool cDvbTuner::SetFrontend(void) SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency())); SETCMD(DTV_INVERSION, dtp.Inversion()); SETCMD(DTV_MODULATION, dtp.Modulation()); - + tuneTimeout = ATSC_TUNE_TIMEOUT; - lockTimeout = ATSC_LOCK_TIMEOUT; + lockTimeout = ATSC_LOCK_TIMEOUT; } else { esyslog("ERROR: attempt to set channel with unknown DVB frontend type"); @@ -527,7 +644,7 @@ void cDvbTuner::Action(void) fe_status_t Status = (fe_status_t)0; while (Running()) { fe_status_t NewStatus; - if (GetFrontendStatus(NewStatus, 10)) + if (GetFrontendStatus(NewStatus)) Status = NewStatus; cMutexLock MutexLock(&mutex); switch (tunerStatus) { @@ -936,7 +1053,7 @@ bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Ne bool hasPriority = Priority < 0 || Priority > this->Priority(); bool needsDetachReceivers = false; - if (ProvidesTransponder(Channel)) { + if (dvbTuner && ProvidesTransponder(Channel)) { result = hasPriority; if (Priority >= 0 && Receiving(true)) { if (dvbTuner->IsTunedTo(Channel)) { @@ -969,19 +1086,30 @@ int cDvbDevice::NumProvidedSystems(void) const return numProvidedSystems; } +int cDvbDevice::SignalStrength(void) const +{ + return dvbTuner ? dvbTuner->GetSignalStrength() : -1; +} + +int cDvbDevice::SignalQuality(void) const +{ + return dvbTuner ? dvbTuner->GetSignalQuality() : -1; +} + const cChannel *cDvbDevice::GetCurrentlyTunedTransponder(void) const { - return dvbTuner->GetTransponder(); + return dvbTuner ? dvbTuner->GetTransponder() : NULL; } bool cDvbDevice::IsTunedToTransponder(const cChannel *Channel) { - return dvbTuner->IsTunedTo(Channel); + return dvbTuner ? dvbTuner->IsTunedTo(Channel) : false; } bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) { - dvbTuner->Set(Channel); + if (dvbTuner) + dvbTuner->Set(Channel); return true; } @@ -1036,3 +1164,24 @@ cDvbDeviceProbe::~cDvbDeviceProbe() { DvbDeviceProbes.Del(this, false); } + +uint32_t cDvbDeviceProbe::GetSubsystemId(int Adapter, int Frontend) +{ + cString FileName; + cReadLine ReadLine; + FILE *f = NULL; + uint32_t SubsystemId = 0; + FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_vendor", Adapter, Frontend); + if ((f = fopen(FileName, "r")) != NULL) { + if (char *s = ReadLine.Read(f)) + SubsystemId = strtoul(s, NULL, 0) << 16; + fclose(f); + } + FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_device", Adapter, Frontend); + if ((f = fopen(FileName, "r")) != NULL) { + if (char *s = ReadLine.Read(f)) + SubsystemId |= strtoul(s, NULL, 0); + fclose(f); + } + return SubsystemId; +} diff --git a/dvbdevice.h b/dvbdevice.h index ff606fd..0962548 100644 --- a/dvbdevice.h +++ b/dvbdevice.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.h 2.14 2010/04/11 10:29:37 kls Exp $ + * $Id: dvbdevice.h 2.15 2011/06/02 13:20:05 kls Exp $ */ #ifndef __DVBDEVICE_H @@ -141,6 +141,8 @@ public: virtual bool ProvidesTransponder(const cChannel *Channel) const; virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const; virtual int NumProvidedSystems(void) const; + virtual int SignalStrength(void) const; + virtual int SignalQuality(void) const; virtual const cChannel *GetCurrentlyTunedTransponder(void) const; virtual bool IsTunedToTransponder(const cChannel *Channel); protected: @@ -196,6 +198,7 @@ class cDvbDeviceProbe : public cListObject { public: cDvbDeviceProbe(void); virtual ~cDvbDeviceProbe(); + static uint32_t GetSubsystemId(int Adapter, int Frontend); virtual bool Probe(int Adapter, int Frontend) = 0; ///< Probes for a DVB device at the given Adapter and creates the appropriate ///< object derived from cDvbDevice if applicable. diff --git a/libsi/descriptor.c b/libsi/descriptor.c index 59f636a..06a58c0 100644 --- a/libsi/descriptor.c +++ b/libsi/descriptor.c @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: descriptor.c 2.1 2010/11/01 15:24:31 kls Exp $ + * $Id: descriptor.c 2.2 2011/06/15 21:26:00 kls Exp $ * * ***************************************************************************/ @@ -643,6 +643,33 @@ void ServiceIdentifierDescriptor::Parse() { textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier)); } +void ContentIdentifierDescriptor::Parse() { + identifierLoop.setData(data+sizeof(descr_content_identifier), getLength()-sizeof(descr_content_identifier)); +} + +void ContentIdentifierDescriptor::Identifier::Parse() { + int offset=0; + data.setPointerAndOffset<const content_identifier_entry>(s, offset); + if (s->crid_location == 0) { + identifier.setData(data+(offset-1), s->crid_length); + } + else { + identifier.setData(data+(offset-1), 2); + } +} + +int ContentIdentifierDescriptor::Identifier::getCridType() const { + return s->crid_type; +} + +int ContentIdentifierDescriptor::Identifier::getCridLocation() const { + return s->crid_location; +} + +void DefaultAuthorityDescriptor::Parse() { + DefaultAuthority.setData(data+sizeof(descr_default_authority), getLength()-sizeof(descr_default_authority)); +} + void MultilingualNameDescriptor::Parse() { nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name)); } diff --git a/libsi/descriptor.h b/libsi/descriptor.h index 4f2e41b..f105f7a 100644 --- a/libsi/descriptor.h +++ b/libsi/descriptor.h @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: descriptor.h 2.1 2010/11/01 15:24:32 kls Exp $ + * $Id: descriptor.h 2.2 2011/06/15 21:26:00 kls Exp $ * * ***************************************************************************/ @@ -361,6 +361,31 @@ protected: virtual void Parse(); }; +class ContentIdentifierDescriptor : public Descriptor { +public: + class Identifier : public LoopElement { + public: + String identifier; + int getCridType() const; + int getCridLocation() const; + virtual int getLength() { return sizeof(content_identifier_entry)+identifier.getLength(); } + protected: + virtual void Parse(); + private: + const content_identifier_entry *s; + }; + StructureLoop<Identifier> identifierLoop; +protected: + virtual void Parse(); +}; + +class DefaultAuthorityDescriptor : public Descriptor { +public: + String DefaultAuthority; //ID +protected: + virtual void Parse(); +}; + //abstract base class class MultilingualNameDescriptor : public Descriptor { public: diff --git a/libsi/headers.h b/libsi/headers.h index 3ec35de..6867d2c 100644 --- a/libsi/headers.h +++ b/libsi/headers.h @@ -10,7 +10,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: headers.h 2.1 2010/11/01 15:24:32 kls Exp $ + * $Id: headers.h 2.2 2011/06/15 21:26:00 kls Exp $ * * ***************************************************************************/ @@ -1680,6 +1680,24 @@ struct descr_content_identifier { u_char descriptor_length :8; }; +struct content_identifier_entry { +#if BYTE_ORDER == BIG_ENDIAN + u_char crid_type :6; + u_char crid_location :2; +#else + u_char crid_location :2; + u_char crid_type :6; +#endif + union { + u_char crid_length :8; + u_char crid_ref_hi :8; + }; + union { + u_char crid_byte :8; + u_char crid_ref_lo :8; + }; +}; + /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */ struct descr_time_slice_fec_identifier { @@ -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); }; @@ -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); + } } } @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-12-24 12:35+0100\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-10-16 11:16-0400\n" "Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n" "Language-Team: Arabic <ar@li.org>\n" +"Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ar\n" "X-Poedit-Bookmarks: -1,-1,-1,-1,-1,-1,-1,-1,1249,-1\n" "X-Poedit-Language: Arabic\n" "X-Poedit-Country: LIBYA\n" diff --git a/po/ca_ES.po b/po/ca_ES.po index f5117f0..835f93d 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-03-02 19:02+0100\n" "Last-Translator: Luca Olivetti <luca@ventoso.org>\n" "Language-Team: Catalan <vdr@linuxtv.org>\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" msgid "*** Invalid Channel ***" msgstr "*** Canal incorrecte ***" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 664d3c2..e6ebdfd 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.14\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2010-05-06 11:00+0200\n" "Last-Translator: Radek Šťastný <dedkus@gmail.com>\n" "Language-Team: Czech <vdr@linuxtv.org>\n" +"Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" msgid "*** Invalid Channel ***" msgstr "*** Neplatný kanál ***" diff --git a/po/da_DK.po b/po/da_DK.po index ce6c57f..c837986 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Mogens Elneff <mogens@elneff.dk>\n" "Language-Team: Danish <vdr@linuxtv.org>\n" +"Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: da\n" msgid "*** Invalid Channel ***" msgstr "*** Ugyldig kanal! ***" diff --git a/po/de_DE.po b/po/de_DE.po index d2d1a86..75dc3a6 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2010-01-16 16:46+0100\n" "Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n" "Language-Team: German <vdr@linuxtv.org>\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" msgid "*** Invalid Channel ***" msgstr "*** Ungltiger Kanal ***" diff --git a/po/el_GR.po b/po/el_GR.po index c079e9f..a35fa3b 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n" "Language-Team: Greek <vdr@linuxtv.org>\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-7\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" msgid "*** Invalid Channel ***" msgstr "*** ***" diff --git a/po/es_ES.po b/po/es_ES.po index cd0426a..88b693e 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-03-02 19:02+0100\n" "Last-Translator: Luca Olivetti <luca@ventoso.org>\n" "Language-Team: Spanish <vdr@linuxtv.org>\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" msgid "*** Invalid Channel ***" msgstr "*** Canal no vlido ***" diff --git a/po/et_EE.po b/po/et_EE.po index ff459c8..8c8ad1f 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Arthur Konovalov <artlov@gmail.com>\n" "Language-Team: Estonian <vdr@linuxtv.org>\n" +"Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-13\n" "Content-Transfer-Encoding: 8bit\n" -"Language: et\n" msgid "*** Invalid Channel ***" msgstr "*** Vigane kanal ***" diff --git a/po/fi_FI.po b/po/fi_FI.po index 7df0082..1b06c3f 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2007-08-15 15:52+0200\n" "Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n" "Language-Team: Finnish <vdr@linuxtv.org>\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fi\n" msgid "*** Invalid Channel ***" msgstr "*** Virheellinen kanavavalinta ***" diff --git a/po/fr_FR.po b/po/fr_FR.po index 02bad4e..68a581c 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -13,14 +13,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-02-27 18:14+0100\n" "Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n" "Language-Team: French <vdr@linuxtv.org>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" msgid "*** Invalid Channel ***" msgstr "*** Chane invalide ! ***" diff --git a/po/hr_HR.po b/po/hr_HR.po index 66e95dd..69104b4 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-03-17 19:00+0100\n" "Last-Translator: Adrian Caval <anrxc@sysphere.org>\n" "Language-Team: Croatian <vdr@linuxtv.org>\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: hr\n" msgid "*** Invalid Channel ***" msgstr "*** Neispravan Program ***" diff --git a/po/hu_HU.po b/po/hu_HU.po index e9b5025..b7cf1a7 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2007-12-01 21:42+0200\n" "Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n" "Language-Team: Hungarian <vdr@linuxtv.org>\n" +"Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: hu\n" msgid "*** Invalid Channel ***" msgstr "*** rvnytelen csatorna ***" diff --git a/po/it_IT.po b/po/it_IT.po index a17e7a3..24e5412 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -11,14 +11,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2010-06-13 00:30+0100\n" "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" "Language-Team: Italian <vdr@linuxtv.org>\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" "X-Poedit-SourceCharset: utf-8\n" diff --git a/po/lt_LT.po b/po/lt_LT.po index 310f29a..a8dfcb9 100644 --- a/po/lt_LT.po +++ b/po/lt_LT.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.16\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-06-06 12:52+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2010-10-30 11:55+0200\n" "Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n" "Language-Team: Lithuanian <vdr@linuxtv.org>\n" +"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: lt\n" msgid "*** Invalid Channel ***" msgstr "*** Blogi kanalo nustatymai ***" diff --git a/po/mk_MK.po b/po/mk_MK.po index 8e54f15..c9d3481 100644 --- a/po/mk_MK.po +++ b/po/mk_MK.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR-1.7.14\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2010-03-11 00:54+0100\n" "Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n" "Language-Team: Macedonian <en@li.org>\n" +"Language: mk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: mk\n" "X-Generator: KBabel 1.11.4\n" msgid "*** Invalid Channel ***" diff --git a/po/nl_NL.po b/po/nl_NL.po index 220ff78..66febc5 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -11,14 +11,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-02-26 17:20+0100\n" "Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n" "Language-Team: Dutch <vdr@linuxtv.org>\n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nl\n" msgid "*** Invalid Channel ***" msgstr "*** Ongeldig kanaal ***" diff --git a/po/nn_NO.po b/po/nn_NO.po index 7c60d29..a49ab6b 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Truls Slevigen <truls@slevigen.no>\n" "Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n" +"Language: nn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nn\n" msgid "*** Invalid Channel ***" msgstr "*** Ugyldig Kanal! ***" diff --git a/po/pl_PL.po b/po/pl_PL.po index 1d4af93..e56f3bf 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-03-09 12:59+0100\n" "Last-Translator: Michael Rakowski <mrak@gmx.de>\n" "Language-Team: Polish <vdr@linuxtv.org>\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" msgid "*** Invalid Channel ***" msgstr "*** Niepoprawny kana ***" diff --git a/po/pt_PT.po b/po/pt_PT.po index ee806ce..2eae063 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.15\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2010-03-28 22:49+0100\n" "Last-Translator: Cris Silva <hudokkow@gmail.com>\n" "Language-Team: Portuguese <vdr@linuxtv.org>\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" msgid "*** Invalid Channel ***" msgstr "*** Canal invlido ***" diff --git a/po/ro_RO.po b/po/ro_RO.po index c55239c..cd1a4d0 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.12\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2011-03-10 23:52+0100\n" "Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n" "Language-Team: Romanian <vdr@linuxtv.org>\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" "X-Poedit-Language: Romanian\n" "X-Poedit-Country: ROMANIA\n" diff --git a/po/ru_RU.po b/po/ru_RU.po index 2115008..57210f0 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-12-15 14:37+0100\n" "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n" "Language-Team: Russian <vdr@linuxtv.org>\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" msgid "*** Invalid Channel ***" msgstr "*** ***" diff --git a/po/sk_SK.po b/po/sk_SK.po index d5335c2..a8faa76 100644 --- a/po/sk_SK.po +++ b/po/sk_SK.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.16\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-06-06 12:52+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2011-02-15 16:29+0100\n" "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" "Language-Team: Slovak <vdr@linuxtv.org>\n" +"Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sk\n" msgid "*** Invalid Channel ***" msgstr "*** Neplatn kanl ***" diff --git a/po/sl_SI.po b/po/sl_SI.po index 90cf058..2e6667d 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-02-28 19:44+0100\n" "Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n" "Language-Team: Slovenian <vdr@linuxtv.org>\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sl\n" msgid "*** Invalid Channel ***" msgstr "*** Neznan kanal ***" diff --git a/po/sr_SR.po b/po/sr_SR.po index 9a20687..c57dc2b 100644 --- a/po/sr_SR.po +++ b/po/sr_SR.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.1\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2011-02-20 19:02+0100\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2011-01-09 15:57+0100\n" "Last-Translator: Milan Cvijanovi <elcom_cvijo@hotmail.com>\n" "Language-Team: Serbian <vdr@linuxtv.org>\n" +"Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sr\n" msgid "*** Invalid Channel ***" msgstr "*** Neispravan Kanal ***" diff --git a/po/sv_SE.po b/po/sv_SE.po index db251ab..41b6592 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-03-12 18:25+0100\n" "Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n" "Language-Team: Swedish <vdr@linuxtv.org>\n" +"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sv\n" msgid "*** Invalid Channel ***" msgstr "*** Felaktig kanal ***" diff --git a/po/tr_TR.po b/po/tr_TR.po index 2f44ecd..b0ad00f 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2008-02-28 00:33+0100\n" "Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n" "Language-Team: Turkish <vdr@linuxtv.org>\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-9\n" "Content-Transfer-Encoding: 8bit\n" -"Language: tr\n" msgid "*** Invalid Channel ***" msgstr "*** Geersiz kanal ***" diff --git a/po/uk_UA.po b/po/uk_UA.po index 515174a..f316e29 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.7\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2010-04-25 16:35+0200\n" "Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n" "Language-Team: Ukrainian <vdr@linuxtv.org>\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: uk\n" msgid "*** Invalid Channel ***" msgstr "*** Неправильний канал ***" diff --git a/po/zh_CN.po b/po/zh_CN.po index 0ea0026..11ccd84 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n" -"POT-Creation-Date: 2010-10-24 16:26+0200\n" +"POT-Creation-Date: 2011-05-21 14:26+0200\n" "PO-Revision-Date: 2009-09-23 23:50+0800\n" "Last-Translator: Nan Feng <nfgx@21cn.com>\n" "Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" "X-Poedit-Language: Chinese\n" "X-Poedit-Country: CHINA\n" "X-Poedit-SourceCharset: utf-8\n" @@ -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; @@ -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 @@ -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); @@ -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; @@ -22,7 +22,7 @@ * * The project's page is at http://www.tvdr.de * - * $Id: vdr.c 2.20 2010/12/12 13:42:00 kls Exp $ + * $Id: vdr.c 2.21 2011/06/13 14:40:12 kls Exp $ */ #include <getopt.h> @@ -704,8 +704,12 @@ int main(int argc, char *argv[]) if (!cDevice::WaitForAllDevicesReady(DEVICEREADYTIMEOUT)) dsyslog("not all devices ready after %d seconds", DEVICEREADYTIMEOUT); - if (Setup.InitialChannel > 0) - Setup.CurrentChannel = Setup.InitialChannel; + if (isnumber(Setup.InitialChannel)) { // for compatibility with old setup.conf files + if (cChannel *Channel = Channels.GetByNumber(atoi(Setup.InitialChannel))) + Setup.InitialChannel = Channel->GetChannelID().ToString(); + } + if (cChannel *Channel = Channels.GetByChannelID(tChannelID::FromString(Setup.InitialChannel))) + Setup.CurrentChannel = Channel->Number(); if (Setup.InitialVolume >= 0) Setup.CurrentVolume = Setup.InitialVolume; Channels.SwitchTo(Setup.CurrentChannel); |